From a8685b10bed2ea6b014defbddb0dcf35f92ee716 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Wed, 4 Jul 2018 11:48:27 +0100 Subject: [PATCH 001/364] Change some settings to be settable per mesh rather than per extruder. # Conflicts: # resources/definitions/fdmprinter.def.json --- resources/definitions/fdmprinter.def.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index b458316686..1b8f333509 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1287,8 +1287,8 @@ "default_value": 0, "type": "float", "enabled": "travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "wall_min_flow_retract": { @@ -1297,8 +1297,8 @@ "type": "bool", "default_value": false, "enabled": "(travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled) and wall_min_flow > 0", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "fill_perimeter_gaps": { @@ -6464,8 +6464,8 @@ "minimum_value": "0", "default_value": 5, "enabled": "bridge_settings_enabled", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "bridge_skin_support_threshold": { @@ -6501,7 +6501,7 @@ "minimum_value": "0", "maximum_value": "500", "enabled": "bridge_settings_enabled", - "settable_per_mesh": false + "settable_per_mesh": true }, "bridge_wall_speed": { From 404551e30a25109fc84e6b9f2d37cbf464f1ccd7 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Wed, 4 Jul 2018 11:49:08 +0100 Subject: [PATCH 002/364] Remove bridge_wall_max_overhang - no longer required with new overhang settings. # Conflicts: # resources/definitions/fdmprinter.def.json --- resources/definitions/fdmprinter.def.json | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 1b8f333509..be99b2fd39 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6479,18 +6479,6 @@ "enabled": "bridge_settings_enabled", "settable_per_mesh": true }, - "bridge_wall_max_overhang": - { - "label": "Bridge Wall Max Overhang", - "description": "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings.", - "unit": "%", - "default_value": 100, - "type": "float", - "minimum_value": "0", - "maximum_value": "100", - "enabled": "bridge_settings_enabled", - "settable_per_mesh": true - }, "bridge_wall_coast": { "label": "Bridge Wall Coasting", From 41900e33b82cc21036c40a9cc788374cfbe37d7f Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Wed, 4 Jul 2018 11:49:53 +0100 Subject: [PATCH 003/364] Add wall_overhang_angle and wall_overhang_speed_factor settings. # Conflicts: # resources/definitions/fdmprinter.def.json --- resources/definitions/fdmprinter.def.json | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index be99b2fd39..7dc80fa030 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6445,6 +6445,30 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "wall_overhang_angle": + { + "label": "Overhanging Wall Angle", + "description": "Walls that overhang more than this angle will be printed using overhanging wall settings.", + "unit": "°", + "type": "float", + "minimum_value": "0", + "minimum_value_warning": "2", + "maximum_value": "80", + "default_value": 40, + "settable_per_mesh": true + }, + "wall_overhang_speed_factor": + { + "label": "Overhanging Wall Speed", + "description": "Overhanging walls will be printed at this percentage of their normal print speed.", + "unit": "%", + "type": "float", + "default_value": 50, + "minimum_value": "10", + "minimum_value_warning": "25", + "maximum_value": "100", + "settable_per_mesh": true + }, "bridge_settings_enabled": { "label": "Enable Bridge Settings", From 5f23bcf8e90cbf4ab6e8816edac7de93907421aa Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Tue, 19 Jun 2018 15:15:50 +0100 Subject: [PATCH 004/364] Allow wall_overhang_angle to be 90 and add blurb that describes how this disables overhang processing. --- resources/definitions/fdmprinter.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 7dc80fa030..2eb823d8d0 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6448,12 +6448,12 @@ "wall_overhang_angle": { "label": "Overhanging Wall Angle", - "description": "Walls that overhang more than this angle will be printed using overhanging wall settings.", + "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.", "unit": "°", "type": "float", "minimum_value": "0", "minimum_value_warning": "2", - "maximum_value": "80", + "maximum_value": "90", "default_value": 40, "settable_per_mesh": true }, From 9186dc2c89492b727f86760069c02806d5b42b44 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Tue, 19 Jun 2018 22:08:30 +0100 Subject: [PATCH 005/364] Default value for wall_overhang_angle is now 90 so overhang detection is disabled by default. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 2eb823d8d0..5720b8cadb 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6454,7 +6454,7 @@ "minimum_value": "0", "minimum_value_warning": "2", "maximum_value": "90", - "default_value": 40, + "default_value": 90, "settable_per_mesh": true }, "wall_overhang_speed_factor": From 9e0b79469b814242679feab9b3be0c4b6e9648ae Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Wed, 20 Jun 2018 09:49:40 +0100 Subject: [PATCH 006/364] Set default value of wall_overhang_speed_factor to 100, i.e. print overhang at the normal speed. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 5720b8cadb..7d62ef4253 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6463,7 +6463,7 @@ "description": "Overhanging walls will be printed at this percentage of their normal print speed.", "unit": "%", "type": "float", - "default_value": 50, + "default_value": 100, "minimum_value": "10", "minimum_value_warning": "25", "maximum_value": "100", From a7449ade87227584e8b848f0621e5982c7559cbe Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Thu, 19 Jul 2018 11:42:42 +0200 Subject: [PATCH 007/364] When the number of layers is less than 10, the width of the TextField that shows the layer number in the LayerView is too small, so this commit adjusts the size. --- plugins/SimulationView/SimulationSliderLabel.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/SimulationView/SimulationSliderLabel.qml b/plugins/SimulationView/SimulationSliderLabel.qml index 8615a382da..cdefd75f2b 100644 --- a/plugins/SimulationView/SimulationSliderLabel.qml +++ b/plugins/SimulationView/SimulationSliderLabel.qml @@ -53,7 +53,7 @@ UM.PointingRectangle { verticalCenter: parent.verticalCenter } - width: maximumValue.toString().length * 12 * screenScaleFactor + width: (maximumValue.toString().length + 1) * 8 * screenScaleFactor text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array horizontalAlignment: TextInput.AlignRight From 6c6e05bf0608fb6e17541e05cba8d0408fadbcc4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 6 Aug 2018 17:22:04 +0200 Subject: [PATCH 008/364] Don't send JSON file to back-end any more They are no longer using it. The back-end now just takes all settings that come in via setting messages. It doesn't need to set its defaults any more because all settings are set at the beginning. Only when slicing via command line does it need a JSON file. Contributes to issue CURA-4410. --- plugins/CuraEngineBackend/CuraEngineBackend.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 56763a6632..bc0b275bb7 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -178,8 +178,7 @@ class CuraEngineBackend(QObject, Backend): # This is useful for debugging and used to actually start the engine. # \return list of commands and args / parameters. def getEngineCommand(self) -> List[str]: - json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json") - return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] + return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), ""] ## Emitted when we get a message containing print duration and material amount. # This also implies the slicing has finished. From c3504fb223902156c98802abc587361874c22439 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 8 Aug 2018 20:47:22 +0200 Subject: [PATCH 009/364] Add setting for Support Infill Line Direction --- resources/definitions/fdmprinter.def.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 2ea87a890d..b5c6159271 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3873,6 +3873,19 @@ } } }, + "support_infill_angle": + { + "label": "Support Infill Line Direction", + "description": "The minimum angle of overhangs for which support is added. At a value of 0° all overhangs are supported, 90° will not provide any support.", + "unit": "°", + "type": "float", + "minimum_value": "-90", + "maximum_value": "90", + "default_value": 0, + "enabled": "support_enable", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "support_z_distance": { "label": "Support Z Distance", From b9ac5671233532759c0a697c2c7e05ee5e35615a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 9 Aug 2018 09:32:38 +0200 Subject: [PATCH 010/364] Fix description of the setting --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index b5c6159271..be7eecc686 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3876,7 +3876,7 @@ "support_infill_angle": { "label": "Support Infill Line Direction", - "description": "The minimum angle of overhangs for which support is added. At a value of 0° all overhangs are supported, 90° will not provide any support.", + "description": "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane.", "unit": "°", "type": "float", "minimum_value": "-90", From da23eff2a657377575c15c375ebffa0c0e6d6415 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 9 Aug 2018 13:28:08 +0200 Subject: [PATCH 011/364] Codestyle changes --- .../UM3NetworkPrinting/ClusterControlItem.qml | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 5cf550955c..3d7b25d59c 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -41,14 +41,18 @@ Component Rectangle { id: printJobArea + border.width: UM.Theme.getSize("default_lining").width border.color: lineColor - anchors.top: activePrintersLabel.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin:UM.Theme.getSize("default_margin").width + + anchors + { + top: activePrintersLabel.bottom + margins: UM.Theme.getSize("default_margin").width + left: parent.left + right: parent.right + } + radius: cornerRadius height: childrenRect.height @@ -81,12 +85,14 @@ Component Column { id: printJobColumn - anchors.top: printJobTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + + anchors + { + top: printJobTitleBar.bottom + margins: UM.Theme.getSize("default_margin").height + right: parent.right + left: parent.left + } Item { @@ -99,6 +105,7 @@ Component font: UM.Theme.getFont("very_small") } + Label { text: manager.activePrintJobs.length @@ -106,6 +113,7 @@ Component anchors.right: parent.right } } + Item { width: parent.width @@ -116,6 +124,7 @@ Component text: catalog.i18nc("@label", "Queued") font: UM.Theme.getFont("very_small") } + Label { text: manager.queuedPrintJobs.length @@ -124,6 +133,7 @@ Component } } } + OpenPanelButton { anchors.top: printJobColumn.bottom From 86be07b095929bfd70c1870db96df063e7384c9c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 9 Aug 2018 16:22:35 +0200 Subject: [PATCH 012/364] Refactored the config models so they they function are more stand alone units. The seperation of concern got a bit mixed up, as the printer output model was connecting the signals that the config model needed to function together. With these changes it's now also possible to use the config model as a part of a printjob, since printjobs can also have a configuration --- cura/PrinterOutput/ConfigurationModel.py | 8 ++- .../ExtruderConfigurationModel.py | 35 ++++++---- cura/PrinterOutput/ExtruderOutputModel.py | 65 +++++++++---------- cura/PrinterOutput/PrinterOutputModel.py | 16 +++-- 4 files changed, 67 insertions(+), 57 deletions(-) diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index c03d968b9e..a3d6afd01d 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -27,7 +27,13 @@ class ConfigurationModel(QObject): return self._printer_type def setExtruderConfigurations(self, extruder_configurations): - self._extruder_configurations = extruder_configurations + if self._extruder_configurations != extruder_configurations: + self._extruder_configurations = extruder_configurations + + for extruder_configuration in self._extruder_configurations: + extruder_configuration.extruderConfigurationChanged.connect(self.configurationChanged) + + self.configurationChanged.emit() @pyqtProperty("QVariantList", fset = setExtruderConfigurations, notify = configurationChanged) def extruderConfigurations(self): diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index bc7f1a7c07..250237403f 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -1,8 +1,11 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal +from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel + class ExtruderConfigurationModel(QObject): @@ -10,38 +13,42 @@ class ExtruderConfigurationModel(QObject): def __init__(self): super().__init__() - self._position = -1 - self._material = None - self._hotend_id = None + self._position = -1 # type: int + self._material = None # type: Optional[MaterialOutputModel] + self._hotend_id = None # type: Optional[str] - def setPosition(self, position): + def setPosition(self, position: int) -> None: self._position = position @pyqtProperty(int, fset = setPosition, notify = extruderConfigurationChanged) - def position(self): + def position(self) -> int: return self._position - def setMaterial(self, material): - self._material = material + def setMaterial(self, material: Optional[MaterialOutputModel]): + if self._hotend_id != material: + self._material = material + self.extruderConfigurationChanged.emit() @pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged) - def material(self): + def material(self) -> MaterialOutputModel: return self._material - def setHotendID(self, hotend_id): - self._hotend_id = hotend_id + def setHotendID(self, hotend_id: Optional[str]) -> None: + if self._hotend_id != hotend_id: + self._hotend_id = hotend_id + self.extruderConfigurationChanged.emit() @pyqtProperty(str, fset = setHotendID, notify = extruderConfigurationChanged) - def hotendID(self): + def hotendID(self) -> Optional[str]: return self._hotend_id ## This method is intended to indicate whether the configuration is valid or not. # The method checks if the mandatory fields are or not set # At this moment is always valid since we allow to have empty material and variants. - def isValid(self): + def isValid(self) -> bool: return True - def __str__(self): + def __str__(self) -> str: message_chunks = [] message_chunks.append("Position: " + str(self._position)) message_chunks.append("-") @@ -50,7 +57,7 @@ class ExtruderConfigurationModel(QObject): message_chunks.append("HotendID: " + self.hotendID if self.hotendID else "empty") return " ".join(message_chunks) - def __eq__(self, other): + def __eq__(self, other) -> bool: return hash(self) == hash(other) # Calculating a hash function using the position of the extruder, the material GUID and the hotend id to check if is diff --git a/cura/PrinterOutput/ExtruderOutputModel.py b/cura/PrinterOutput/ExtruderOutputModel.py index 0726662c6c..546227123e 100644 --- a/cura/PrinterOutput/ExtruderOutputModel.py +++ b/cura/PrinterOutput/ExtruderOutputModel.py @@ -12,64 +12,61 @@ if TYPE_CHECKING: class ExtruderOutputModel(QObject): - hotendIDChanged = pyqtSignal() targetHotendTemperatureChanged = pyqtSignal() hotendTemperatureChanged = pyqtSignal() - activeMaterialChanged = pyqtSignal() + extruderConfigurationChanged = pyqtSignal() isPreheatingChanged = pyqtSignal() - def __init__(self, printer: "PrinterOutputModel", position, parent=None) -> None: + def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) - self._printer = printer + self._printer = printer # type: PrinterOutputModel self._position = position - self._target_hotend_temperature = 0 # type: float - self._hotend_temperature = 0 # type: float - self._hotend_id = "" - self._active_material = None # type: Optional[MaterialOutputModel] - self._extruder_configuration = ExtruderConfigurationModel() - self._extruder_configuration.position = self._position + self._target_hotend_temperature = 0 # type: float + self._hotend_temperature = 0 # type: float self._is_preheating = False - def getPrinter(self): + # The extruder output model wraps the configuration model. This way we can use the same config model for jobs + # and extruders alike. + self._extruder_configuration = ExtruderConfigurationModel() + self._extruder_configuration.position = self._position + self._extruder_configuration.extruderConfigurationChanged.connect(self.extruderConfigurationChanged) + + def getPrinter(self) -> "PrinterOutputModel": return self._printer - def getPosition(self): + def getPosition(self) -> int: return self._position # Does the printer support pre-heating the bed at all @pyqtProperty(bool, constant=True) - def canPreHeatHotends(self): + def canPreHeatHotends(self) -> bool: if self._printer: return self._printer.canPreHeatHotends return False - @pyqtProperty(QObject, notify = activeMaterialChanged) + @pyqtProperty(QObject, notify = extruderConfigurationChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: - return self._active_material + return self._extruder_configuration.material def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]): - if self._active_material != material: - self._active_material = material - self._extruder_configuration.material = self._active_material - self.activeMaterialChanged.emit() - self.extruderConfigurationChanged.emit() + self._extruder_configuration.setMaterial(material) ## Update the hotend temperature. This only changes it locally. - def updateHotendTemperature(self, temperature: float): + def updateHotendTemperature(self, temperature: float) -> None: if self._hotend_temperature != temperature: self._hotend_temperature = temperature self.hotendTemperatureChanged.emit() - def updateTargetHotendTemperature(self, temperature: float): + def updateTargetHotendTemperature(self, temperature: float) -> None: if self._target_hotend_temperature != temperature: self._target_hotend_temperature = temperature self.targetHotendTemperatureChanged.emit() ## Set the target hotend temperature. This ensures that it's actually sent to the remote. @pyqtSlot(float) - def setTargetHotendTemperature(self, temperature: float): + def setTargetHotendTemperature(self, temperature: float) -> None: self._printer.getController().setTargetHotendTemperature(self._printer, self, temperature) self.updateTargetHotendTemperature(temperature) @@ -81,30 +78,26 @@ class ExtruderOutputModel(QObject): def hotendTemperature(self) -> float: return self._hotend_temperature - @pyqtProperty(str, notify = hotendIDChanged) + @pyqtProperty(str, notify = extruderConfigurationChanged) def hotendID(self) -> str: - return self._hotend_id + return self._extruder_configuration.hotendID - def updateHotendID(self, id: str): - if self._hotend_id != id: - self._hotend_id = id - self._extruder_configuration.hotendID = self._hotend_id - self.hotendIDChanged.emit() - self.extruderConfigurationChanged.emit() + def updateHotendID(self, hotend_id: str) -> None: + self._extruder_configuration.setHotendID(hotend_id) @pyqtProperty(QObject, notify = extruderConfigurationChanged) - def extruderConfiguration(self): + def extruderConfiguration(self) -> Optional[ExtruderConfigurationModel]: if self._extruder_configuration.isValid(): return self._extruder_configuration return None - def updateIsPreheating(self, pre_heating): + def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) - def isPreheating(self): + def isPreheating(self) -> bool: return self._is_preheating ## Pre-heats the extruder before printer. @@ -113,9 +106,9 @@ class ExtruderOutputModel(QObject): # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) - def preheatHotend(self, temperature, duration): + def preheatHotend(self, temperature: float, duration: float) -> None: self._printer._controller.preheatHotend(self, temperature, duration) @pyqtSlot() - def cancelPreheatHotend(self): + def cancelPreheatHotend(self) -> None: self._printer._controller.cancelPreheatHotend(self) \ No newline at end of file diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index f10d6bd75b..a849cb76f2 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -43,9 +43,13 @@ class PrinterOutputModel(QObject): self._is_preheating = False self._printer_type = "" self._buildplate_name = None - # Update the printer configuration every time any of the extruders changes its configuration - for extruder in self._extruders: - extruder.extruderConfigurationChanged.connect(self._updateExtruderConfiguration) + + + self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in + self._extruders] + + #for extruder_configuration in self._printer_configuration.extruderConfigurations: + # extruder_configuration.extruderConfigurationChanged.connect(self.configurationChanged) self._camera = None @@ -284,6 +288,6 @@ class PrinterOutputModel(QObject): return self._printer_configuration return None - def _updateExtruderConfiguration(self): - self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] - self.configurationChanged.emit() + #def _updateExtruderConfiguration(self): + + #self.configurationChanged.emit() From 74f8c82c5e32f147b6e47eb95a6f68b43a7e79f2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 9 Aug 2018 16:38:30 +0200 Subject: [PATCH 013/364] Removed commented out code --- cura/PrinterOutput/PrinterOutputModel.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index a849cb76f2..ba567b7bac 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -44,13 +44,9 @@ class PrinterOutputModel(QObject): self._printer_type = "" self._buildplate_name = None - self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] - #for extruder_configuration in self._printer_configuration.extruderConfigurations: - # extruder_configuration.extruderConfigurationChanged.connect(self.configurationChanged) - self._camera = None @pyqtProperty(str, constant = True) @@ -286,8 +282,4 @@ class PrinterOutputModel(QObject): def printerConfiguration(self): if self._printer_configuration.isValid(): return self._printer_configuration - return None - - #def _updateExtruderConfiguration(self): - - #self.configurationChanged.emit() + return None \ No newline at end of file From 78ebdb13f4bf3ae6521eea0f3518090a2a77da3d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 14 Aug 2018 13:34:05 +0200 Subject: [PATCH 014/364] Cluster monitor page now shows queue instead of added printers CL-894 --- cura/CuraApplication.py | 2 +- .../ExtruderConfigurationModel.py | 4 +- cura/PrinterOutput/ExtruderOutputModel.py | 4 +- cura/PrinterOutput/PrintJobOutputModel.py | 13 ++ .../UM3NetworkPrinting/ClusterControlItem.qml | 15 +- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 30 ++-- .../ClusterUM3OutputDevice.py | 56 ++++--- .../PrintCoreConfiguration.qml | 4 +- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 140 ++++++++++++++++++ 9 files changed, 224 insertions(+), 44 deletions(-) create mode 100644 plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 78986d82ee..df25522be3 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -123,7 +123,7 @@ except ImportError: CuraVersion = "master" # [CodeStyle: Reflecting imported value] CuraBuildType = "" CuraDebugMode = False - CuraSDKVerion = "" + CuraSDKVersion = "" class CuraApplication(QtApplication): diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index 250237403f..2a7844b629 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -30,7 +30,7 @@ class ExtruderConfigurationModel(QObject): self.extruderConfigurationChanged.emit() @pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged) - def material(self) -> MaterialOutputModel: + def activeMaterial(self) -> MaterialOutputModel: return self._material def setHotendID(self, hotend_id: Optional[str]) -> None: @@ -52,7 +52,7 @@ class ExtruderConfigurationModel(QObject): message_chunks = [] message_chunks.append("Position: " + str(self._position)) message_chunks.append("-") - message_chunks.append("Material: " + self.material.type if self.material else "empty") + message_chunks.append("Material: " + self.activeMaterial.type if self.activeMaterial else "empty") message_chunks.append("-") message_chunks.append("HotendID: " + self.hotendID if self.hotendID else "empty") return " ".join(message_chunks) diff --git a/cura/PrinterOutput/ExtruderOutputModel.py b/cura/PrinterOutput/ExtruderOutputModel.py index 546227123e..c7fd58c098 100644 --- a/cura/PrinterOutput/ExtruderOutputModel.py +++ b/cura/PrinterOutput/ExtruderOutputModel.py @@ -48,7 +48,7 @@ class ExtruderOutputModel(QObject): @pyqtProperty(QObject, notify = extruderConfigurationChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: - return self._extruder_configuration.material + return self._extruder_configuration.activeMaterial def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]): self._extruder_configuration.setMaterial(material) @@ -111,4 +111,4 @@ class ExtruderOutputModel(QObject): @pyqtSlot() def cancelPreheatHotend(self) -> None: - self._printer._controller.cancelPreheatHotend(self) \ No newline at end of file + self._printer._controller.cancelPreheatHotend(self) diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index b77600f85c..8057965013 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -7,6 +7,7 @@ from typing import Optional, TYPE_CHECKING if TYPE_CHECKING: from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel + from cura.PrinterOutput.ConfigurationModel import ConfigurationModel class PrintJobOutputModel(QObject): @@ -17,6 +18,7 @@ class PrintJobOutputModel(QObject): keyChanged = pyqtSignal() assignedPrinterChanged = pyqtSignal() ownerChanged = pyqtSignal() + configurationChanged =pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: super().__init__(parent) @@ -29,6 +31,17 @@ class PrintJobOutputModel(QObject): self._assigned_printer = None # type: Optional[PrinterOutputModel] self._owner = "" # Who started/owns the print job? + self._configuration = None # type: Optional[ConfigurationModel] + + @pyqtProperty(QObject, notify=configurationChanged) + def configuration(self) -> Optional["ConfigurationModel"]: + return self._configuration + + def updateConfiguration(self, configuration: Optional["ConfigurationModel"]) -> None: + if self._configuration != configuration: + self._configuration = configuration + self.configurationChanged.emit() + @pyqtProperty(str, notify=ownerChanged) def owner(self): return self._owner diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 3d7b25d59c..5531e99d57 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -27,13 +27,14 @@ Component { id: activePrintersLabel font: UM.Theme.getFont("large") - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.top: parent.top - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right:parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors + { + margins: UM.Theme.getSize("default_margin").width + top: parent.top + left: parent.left + right: parent.right + } + text: Cura.MachineManager.printerOutputDevices[0].name elide: Text.ElideRight } diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 0e86d55de8..51301b7e8d 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -28,7 +28,8 @@ Component id: activePrintersLabel font: UM.Theme.getFont("large") - anchors { + anchors + { top: parent.top topMargin: UM.Theme.getSize("default_margin").height * 2 // a bit more spacing to give it some breathing room horizontalCenter: parent.horizontalCenter @@ -71,25 +72,28 @@ Component ScrollView { - id: printerScrollView - anchors.margins: UM.Theme.getSize("default_margin").width - anchors.top: activePrintersLabel.bottom - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. - anchors.rightMargin: UM.Theme.getSize("default_lining").width - anchors.right: parent.right + id: queuedPrintJobs + + anchors + { + margins: UM.Theme.getSize("default_margin").width + top: activePrintersLabel.bottom + left: parent.left + leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. + rightMargin: UM.Theme.getSize("default_lining").width + right: parent.right + } ListView { anchors.fill: parent spacing: -UM.Theme.getSize("default_lining").height - model: OutputDevice.printers + model: OutputDevice.queuedPrintJobs - delegate: PrinterInfoBlock + delegate: PrintJobInfoBlock { - printer: modelData + printJob: modelData width: Math.min(800 * screenScaleFactor, maximumWidth) height: 125 * screenScaleFactor @@ -102,7 +106,7 @@ Component PrinterVideoStream { visible: OutputDevice.activePrinter != null - anchors.fill:parent + anchors.fill: parent } onVisibleChanged: diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 84e0a66170..d91e7e1d93 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -17,6 +17,8 @@ from UM.Scene.SceneNode import SceneNode #For typing. from UM.Version import Version #To check against firmware versions for support. from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.ConfigurationModel import ConfigurationModel +from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel @@ -478,6 +480,23 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _createPrintJobModel(self, data: Dict[str, Any]) -> PrintJobOutputModel: print_job = PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self), key=data["uuid"], name= data["name"]) + + configuration = ConfigurationModel() + extruders = [] + for index in range(0, self._number_of_extruders): + extruder = ExtruderConfigurationModel() + extruder.setPosition(index) + try: + extruder_data = data["configuration"][index] + except IndexError: + break + + extruder.setHotendID(extruder_data.get("print_core_id", "")) + extruder.setMaterial(self._createMaterialOutputModel(extruder_data.get("material", {}))) + extruders.append(extruder) + configuration.setExtruderConfigurations(extruders) + print_job.updateConfiguration(configuration) + print_job.stateChanged.connect(self._printJobStateChanged) self._print_jobs.append(print_job) return print_job @@ -488,6 +507,24 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): print_job.updateState(data["status"]) print_job.updateOwner(data["owner"]) + def _createMaterialOutputModel(self, material_data) -> MaterialOutputModel: + containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", GUID=material_data["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: + 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 = "Empty" if material_data["material"] == "empty" else "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. @@ -523,24 +560,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): material_data = extruder_data["material"] if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_data["guid"]: - containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", - GUID=material_data["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: - 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 = "Empty" if material_data["material"] == "empty" else "Unknown" - - material = MaterialOutputModel(guid=material_data["guid"], type=material_type, - brand=brand, color=color, name=name) + material = self._createMaterialOutputModel(material_data) extruder.updateActiveMaterial(material) def _removeJob(self, job: PrintJobOutputModel) -> bool: diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 267516091b..6ff5c6327f 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -12,14 +12,16 @@ Item width: Math.round(parent.width / 2) height: childrenRect.height + Label { id: materialLabel - text: printCoreConfiguration.activeMaterial != null ? printCoreConfiguration.activeMaterial.name : "" + text: printCoreConfiguration.activeMaterial != null ? printCoreConfiguration.activeMaterial.name : ":(" elide: Text.ElideRight width: parent.width font: UM.Theme.getFont("very_small") } + Label { id: printCoreLabel diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml new file mode 100644 index 0000000000..f88b917954 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -0,0 +1,140 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.3 as UM + + +Item +{ + property var printJob: null + + function getPrettyTime(time) + { + return OutputDevice.formatDuration(time) + } + + Rectangle + { + id: background + anchors.fill: parent + + Item + { + // Content on the left of the infobox + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.left + right: parent.horizontalCenter + margins: UM.Theme.getSize("default_margin").width + } + + Label + { + id: printJobName + text: "printJobName" + } + + Label + { + id: ownerName + anchors.top: printJobName.bottom + text: "OwnerName" + } + + Label + { + id: totalTimeLabel + + anchors.bottom: parent.bottom + anchors.right: parent.right + + text: printJob != null ? getPrettyTime(printJob.timeTotal) : "3h 12m" + elide: Text.ElideRight + } + } + + Item + { + // Content on the right side of the infobox. + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.horizontalCenter + right: parent.right + margins: UM.Theme.getSize("default_margin").width + } + + Label + { + id: targetPrinterLabel + text: "Waiting for: first available" + } + + Button + { + text: "..." + anchors + { + right: parent.right + top: parent.top + } + } + + // PrintCore && Material config + Row + { + id: extruderInfo + anchors.bottom: parent.bottom + + anchors + { + left: parent.left + right: parent.right + } + height: childrenRect.height + + spacing: UM.Theme.getSize("default_margin").width + + PrintCoreConfiguration + { + id: leftExtruderInfo + width: Math.round((parent.width - extruderSeperator.width) / 2) + printCoreConfiguration: printJob.configuration.extruderConfigurations[0] + } + + Rectangle + { + id: extruderSeperator + width: UM.Theme.getSize("default_lining").width + height: parent.height + color: lineColor + } + + PrintCoreConfiguration + { + id: rightExtruderInfo + width: Math.round((parent.width - extruderSeperator.width) / 2) + printCoreConfiguration: printJob.configuration.extruderConfigurations[1] + } + } + + } + + Rectangle + { + color: "grey" + width: 1 + + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.margins: UM.Theme.getSize("default_margin").height + anchors.horizontalCenter: parent.horizontalCenter + + } + + } +} \ No newline at end of file From 94b978211065c17a5b9ab020f1278f9a7b0c00ee Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 14 Aug 2018 14:54:27 +0200 Subject: [PATCH 015/364] Added preview image to print cluster monitor CL-894 --- cura/CuraApplication.py | 2 ++ cura/PrintJobPreviewImageProvider.py | 27 +++++++++++++++++++ cura/PrinterOutput/PrintJobOutputModel.py | 27 ++++++++++++++++++- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 3 ++- .../ClusterUM3OutputDevice.py | 19 ++++++++++++- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 9 +++++++ 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 cura/PrintJobPreviewImageProvider.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index df25522be3..c29ddf10fd 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -94,6 +94,7 @@ from . import CuraActions from cura.Scene import ZOffsetDecorator from . import CuraSplashScreen from . import CameraImageProvider +from . import PrintJobPreviewImageProvider from . import MachineActionManager from cura.TaskManagement.OnExitCallbackManager import OnExitCallbackManager @@ -523,6 +524,7 @@ class CuraApplication(QtApplication): def _onEngineCreated(self): self._qml_engine.addImageProvider("camera", CameraImageProvider.CameraImageProvider()) + self._qml_engine.addImageProvider("print_job_preview", PrintJobPreviewImageProvider.PrintJobPreviewImageProvider()) @pyqtProperty(bool) def needToShowUserAgreement(self): diff --git a/cura/PrintJobPreviewImageProvider.py b/cura/PrintJobPreviewImageProvider.py new file mode 100644 index 0000000000..d3521bf0af --- /dev/null +++ b/cura/PrintJobPreviewImageProvider.py @@ -0,0 +1,27 @@ +from PyQt5.QtGui import QImage +from PyQt5.QtQuick import QQuickImageProvider +from PyQt5.QtCore import QSize + +from UM.Application import Application + + +class PrintJobPreviewImageProvider(QQuickImageProvider): + def __init__(self): + super().__init__(QQuickImageProvider.Image) + + ## Request a new image. + def requestImage(self, id, size): + # The id will have an uuid and an increment separated by a slash. As we don't care about the value of the + # increment, we need to strip that first. + uuid = id[id.find("/") + 1:] + for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices(): + if not hasattr(output_device, "printJobs"): + continue + + for print_job in output_device.printJobs: + if print_job.key == uuid: + if print_job.getPreviewImage(): + return print_job.getPreviewImage(), QSize(15, 15) + else: + return QImage(), QSize(15, 15) + return QImage(), QSize(15,15) \ No newline at end of file diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index 8057965013..373f816373 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -4,6 +4,9 @@ from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot from typing import Optional, TYPE_CHECKING +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QImage + if TYPE_CHECKING: from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel @@ -18,7 +21,8 @@ class PrintJobOutputModel(QObject): keyChanged = pyqtSignal() assignedPrinterChanged = pyqtSignal() ownerChanged = pyqtSignal() - configurationChanged =pyqtSignal() + configurationChanged = pyqtSignal() + previewImageChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: super().__init__(parent) @@ -33,6 +37,27 @@ class PrintJobOutputModel(QObject): self._configuration = None # type: Optional[ConfigurationModel] + self._preview_image_id = 0 + + self._preview_image = None + + @pyqtProperty(QUrl, notify=previewImageChanged) + def preview_image_url(self): + self._preview_image_id += 1 + # There is an image provider that is called "camera". In order to ensure that the image qml object, that + # requires a QUrl to function, updates correctly we add an increasing number. This causes to see the QUrl + # as new (instead of relying on cached version and thus forces an update. + temp = "image://print_job_preview/" + str(self._preview_image_id) + "/" + self._key + return QUrl(temp, QUrl.TolerantMode) + + def getPreviewImage(self): + return self._preview_image + + def updatePreviewImage(self, preview_image: Optional[QImage]): + if self._preview_image != preview_image: + self._preview_image = preview_image + self.previewImageChanged.emit() + @pyqtProperty(QObject, notify=configurationChanged) def configuration(self) -> Optional["ConfigurationModel"]: return self._configuration diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 51301b7e8d..3bc9fedc9c 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -82,12 +82,13 @@ Component leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. rightMargin: UM.Theme.getSize("default_lining").width right: parent.right + bottom: parent.bottom } ListView { anchors.fill: parent - spacing: -UM.Theme.getSize("default_lining").height + spacing: UM.Theme.getSize("default_margin").height model: OutputDevice.queuedPrintJobs diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index d91e7e1d93..b79ad6b5ce 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -29,7 +29,7 @@ from .ClusterUM3PrinterOutputController import ClusterUM3PrinterOutputController from .SendMaterialJob import SendMaterialJob from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply -from PyQt5.QtGui import QDesktopServices +from PyQt5.QtGui import QDesktopServices, QImage from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject from time import time @@ -394,11 +394,28 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): super().connect() self.sendMaterialProfiles() + def _onGetPreviewImageFinished(self, reply: QNetworkReply) -> None: + reply_url = reply.url().toString() + print(reply_url) + + 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: if not checkValidGetReply(reply): return diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index f88b917954..7ae65dfb9b 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -44,6 +44,15 @@ Item text: "OwnerName" } + Image + { + source: printJob.preview_image_url + anchors.top: ownerName.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: totalTimeLabel.top + width: height + } + Label { id: totalTimeLabel From 8493948ba13315c92db9f0e40c189dc7d99ce410 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 15 Aug 2018 14:06:07 +0200 Subject: [PATCH 016/364] Add a favorite materials model Contributes to CURA-5162 --- cura/CuraApplication.py | 11 +++ .../Machines/Models/FavoriteMaterialsModel.py | 70 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 cura/Machines/Models/FavoriteMaterialsModel.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 23a11a2bb3..9823c0fadf 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -69,6 +69,7 @@ from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfile from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel from cura.Machines.Models.MaterialManagementModel import MaterialManagementModel +from cura.Machines.Models.FavoriteMaterialsModel import FavoriteMaterialsModel from cura.Machines.Models.GenericMaterialsModel import GenericMaterialsModel from cura.Machines.Models.BrandMaterialsModel import BrandMaterialsModel from cura.Machines.Models.QualityManagementModel import QualityManagementModel @@ -501,6 +502,15 @@ class CuraApplication(QtApplication): preferences.addPreference("cura/sidebar_collapsed", False) self._need_to_show_user_agreement = not self.getPreferences().getValue("general/accepted_user_agreement") + favorites = [ + "ultimaker_cpe_green_ultimaker_s5_AA_0.4", + "ultimaker_pla_green_ultimaker_s5_AA_0.4", + "ultimaker_abs_grey_ultimaker_s5_AA_0.4", + "an_incorrect_id" + ] + preferences.addPreference("cura/favorite_materials", favorites) + print("FAVORITES ARE NOW SET") + for key in [ "dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin @@ -931,6 +941,7 @@ class CuraApplication(QtApplication): qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") + qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") qmlRegisterType(BrandMaterialsModel, "Cura", 1, 0, "BrandMaterialsModel") qmlRegisterType(MaterialManagementModel, "Cura", 1, 0, "MaterialManagementModel") diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py new file mode 100644 index 0000000000..f6932a61b8 --- /dev/null +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -0,0 +1,70 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Logger import Logger +from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel + +class FavoriteMaterialsModel(BaseMaterialsModel): + + def __init__(self, parent = None): + super().__init__(parent) + + from cura.CuraApplication import CuraApplication + self._preferences = CuraApplication.getInstance().getPreferences() + self._machine_manager = CuraApplication.getInstance().getMachineManager() + self._extruder_manager = CuraApplication.getInstance().getExtruderManager() + self._material_manager = CuraApplication.getInstance().getMaterialManager() + + self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. + self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. + + 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 + if global_stack is None: + self.setItems([]) + return + extruder_position = str(self._extruder_position) + if extruder_position not in global_stack.extruders: + self.setItems([]) + return + extruder_stack = global_stack.extruders[extruder_position] + + available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) + if available_material_dict is None: + self.setItems([]) + return + + favorite_ids = self._preferences.getValue("cura/favorite_materials") + + item_list = [] + for root_material_id, container_node in available_material_dict.items(): + metadata = container_node.metadata + + # Only add results for favorite materials + if metadata["id"] not in favorite_ids: + continue + + # Do not include the materials from a to-be-removed package + if bool(metadata.get("removed", False)): + continue + + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "name": metadata["name"], + "brand": metadata["brand"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "container_node": container_node + } + item_list.append(item) + + # Sort the item list by material name alphabetically + item_list = sorted(item_list, key = lambda d: d["name"].upper()) + + print("FINAL FAVORITE LIST:", item_list) + self.setItems(item_list) From 57d41216e174fe97093d240f8f7bcac5a51c21d8 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 16 Aug 2018 13:04:17 +0200 Subject: [PATCH 017/364] Remove dummy favorites Contributes to CURA-5162 --- cura/CuraApplication.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 9823c0fadf..3cd49e591f 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -501,16 +501,9 @@ class CuraApplication(QtApplication): preferences.addPreference("view/filter_current_build_plate", False) preferences.addPreference("cura/sidebar_collapsed", False) - self._need_to_show_user_agreement = not self.getPreferences().getValue("general/accepted_user_agreement") - favorites = [ - "ultimaker_cpe_green_ultimaker_s5_AA_0.4", - "ultimaker_pla_green_ultimaker_s5_AA_0.4", - "ultimaker_abs_grey_ultimaker_s5_AA_0.4", - "an_incorrect_id" - ] - preferences.addPreference("cura/favorite_materials", favorites) - print("FAVORITES ARE NOW SET") + preferences.addPreference("cura/favorite_materials", []) + self._need_to_show_user_agreement = not preferences.getValue("general/accepted_user_agreement") for key in [ "dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin From e8cda9002186e03e2c6c74405633a7cdd82906a5 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 16 Aug 2018 13:04:58 +0200 Subject: [PATCH 018/364] Add favorites to materials menu Contributes to CURA-5162 --- .../Machines/Models/FavoriteMaterialsModel.py | 3 +- resources/qml/Menus/MaterialMenu.qml | 158 +++++++++++------- 2 files changed, 95 insertions(+), 66 deletions(-) diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index f6932a61b8..cbe59a1a09 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -45,7 +45,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): metadata = container_node.metadata # Only add results for favorite materials - if metadata["id"] not in favorite_ids: + if root_material_id not in favorite_ids: continue # Do not include the materials from a to-be-removed package @@ -66,5 +66,4 @@ class FavoriteMaterialsModel(BaseMaterialsModel): # Sort the item list by material name alphabetically item_list = sorted(item_list, key = lambda d: d["name"].upper()) - print("FINAL FAVORITE LIST:", item_list) self.setItems(item_list) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 64b3130724..a53bc72a94 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -14,68 +14,10 @@ Menu property int extruderIndex: 0 - Instantiator + Cura.FavoriteMaterialsModel { - model: genericMaterialsModel - MenuItem - { - text: model.name - checkable: true - checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] - exclusiveGroup: group - onTriggered: - { - Cura.MachineManager.setMaterial(extruderIndex, model.container_node); - } - } - onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) - } - MenuSeparator { } - Instantiator - { - model: brandModel - Menu - { - id: brandMenu - title: brandName - property string brandName: model.name - property var brandMaterials: model.materials - - Instantiator - { - model: brandMaterials - Menu - { - id: brandMaterialsMenu - title: materialName - property string materialName: model.name - property var brandMaterialColors: model.colors - - Instantiator - { - model: brandMaterialColors - MenuItem - { - text: model.name - checkable: true - checked: model.id == Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] - exclusiveGroup: group - onTriggered: - { - Cura.MachineManager.setMaterial(extruderIndex, model.container_node); - } - } - onObjectAdded: brandMaterialsMenu.insertItem(index, object) - onObjectRemoved: brandMaterialsMenu.removeItem(object) - } - } - onObjectAdded: brandMenu.insertItem(index, object) - onObjectRemoved: brandMenu.removeItem(object) - } - } - onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) + id: favoriteMaterialsModel + extruderPosition: menu.extruderIndex } Cura.GenericMaterialsModel @@ -90,9 +32,97 @@ Menu extruderPosition: menu.extruderIndex } - ExclusiveGroup { id: group } + Instantiator + { + model: favoriteMaterialsModel + delegate: MenuItem + { + text: model.brand + " " + model.name + checkable: true + checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] + onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) + exclusiveGroup: group + } + onObjectAdded: menu.insertItem(index, object) + onObjectRemoved: menu.removeItem(object) // TODO: This ain't gonna work, removeItem() takes an index, not object + } - MenuSeparator { } + MenuSeparator {} - MenuItem { action: Cura.Actions.manageMaterials } + Menu + { + id: genericMenu + title: "Generic" + + Instantiator + { + model: genericMaterialsModel + delegate: MenuItem + { + text: model.name + checkable: true + checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] + 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 + } + } + + MenuSeparator {} + + Instantiator + { + model: brandModel + Menu + { + id: brandMenu + title: brandName + property string brandName: model.name + property var brandMaterials: model.materials + + Instantiator + { + model: brandMaterials + delegate: Menu + { + id: brandMaterialsMenu + title: materialName + property string materialName: model.name + property var brandMaterialColors: model.colors + + Instantiator + { + model: brandMaterialColors + delegate: MenuItem + { + text: model.name + checkable: true + checked: model.id == Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + exclusiveGroup: group + onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) + } + onObjectAdded: brandMaterialsMenu.insertItem(index, object) + onObjectRemoved: brandMaterialsMenu.removeItem(object) + } + } + onObjectAdded: brandMenu.insertItem(index, object) + onObjectRemoved: brandMenu.removeItem(object) + } + } + onObjectAdded: menu.insertItem(index, object) + onObjectRemoved: menu.removeItem(object) + } + + ExclusiveGroup { + id: group + } + + MenuSeparator {} + + MenuItem + { + action: Cura.Actions.manageMaterials + } } From ef00550df6df4c84413c8f2fe71f67a5dbca811e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 16 Aug 2018 15:04:00 +0200 Subject: [PATCH 019/364] Added send to top context item CL-894 --- .../ClusterUM3OutputDevice.py | 7 +++ .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 60 ++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 3a9bf20789..c4e78403b1 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -366,6 +366,13 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): datetime_completed = datetime.fromtimestamp(current_time + time_remaining) return (datetime_completed.strftime("%a %b ") + "{day}".format(day=datetime_completed.day)).upper() + @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) + def _printJobStateChanged(self) -> None: username = self._getUserName() diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 7ae65dfb9b..086740416d 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -1,7 +1,8 @@ import QtQuick 2.2 -import QtQuick.Controls 1.4 +import QtQuick.Controls 2.0 import QtQuick.Controls.Styles 1.4 + import UM 1.3 as UM @@ -83,16 +84,73 @@ Item text: "Waiting for: first available" } + + function switchPopupState() + { + popup.visible ? popup.close() : popup.open() + } Button { + id: contextButton text: "..." anchors { right: parent.right top: parent.top } + onClicked: parent.switchPopupState() } + + Popup + { + // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property + id: popup + clip: true + closePolicy: Popup.CloseOnPressOutsideParent + x: parent.width - width + y: contextButton.height + //y: configurationSelector.height - UM.Theme.getSize("default_lining").height + //x: configurationSelector.width - width + width: 200 + height: childrenRect.height + visible: false + padding: UM.Theme.getSize("default_lining").width + transformOrigin: Popup.Top + contentItem: Item + { + width: panelWidth - 2 * popup.padding + height: cildrenRect.height + Button + { + text: "Send to top" + onClicked: OutputDevice.sendJobToTop(printJob.key) + width: parent.width + } + } + + background: Rectangle + { + color: UM.Theme.getColor("setting_control") + border.color: UM.Theme.getColor("setting_control_border") + } + + exit: Transition + { + // This applies a default NumberAnimation to any changes a state change makes to x or y properties + NumberAnimation { property: "visible"; duration: 75; } + } + enter: Transition + { + // This applies a default NumberAnimation to any changes a state change makes to x or y properties + NumberAnimation { property: "visible"; duration: 75; } + } + + onClosed: visible = false + onOpened: visible = true + } + + // PrintCore && Material config Row { From af4b7c38c7720184825be2896854e41ac8c3f1c3 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 16 Aug 2018 15:04:52 +0200 Subject: [PATCH 020/364] Removed stray debug print CL-894 --- plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index c4e78403b1..e01021d6c8 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -403,7 +403,6 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _onGetPreviewImageFinished(self, reply: QNetworkReply) -> None: reply_url = reply.url().toString() - print(reply_url) uuid = reply_url[reply_url.find("print_jobs/")+len("print_jobs/"):reply_url.rfind("/preview_image")] From f42dc24d950df902cae9cf76dd817e7f2d13a9a2 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 16 Aug 2018 15:16:30 +0200 Subject: [PATCH 021/364] Do not show gcode.gz as an option in save file dialog CURA-5649 --- cura/CuraApplication.py | 20 -------------------- cura/Settings/GlobalStack.py | 4 ++++ plugins/GCodeGzWriter/__init__.py | 3 ++- resources/qml/SaveButton.qml | 4 +++- 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 23a11a2bb3..dab3de3ab8 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -215,7 +215,6 @@ class CuraApplication(QtApplication): self._message_box_callback = None self._message_box_callback_arguments = [] - self._preferred_mimetype = "" self._i18n_catalog = None self._currently_loading_files = [] @@ -514,9 +513,6 @@ class CuraApplication(QtApplication): self.applicationShuttingDown.connect(self.saveSettings) self.engineCreatedSignal.connect(self._onEngineCreated) - self.globalContainerStackChanged.connect(self._onGlobalContainerChanged) - self._onGlobalContainerChanged() - self.getCuraSceneController().setActiveBuildPlate(0) # Initialize CuraApplication.Created = True @@ -997,30 +993,14 @@ class CuraApplication(QtApplication): self._camera_animation.setTarget(Selection.getSelectedObject(0).getWorldPosition()) self._camera_animation.start() - def _onGlobalContainerChanged(self): - if self._global_container_stack is not None: - machine_file_formats = [file_type.strip() for file_type in self._global_container_stack.getMetaDataEntry("file_formats").split(";")] - new_preferred_mimetype = "" - if machine_file_formats: - new_preferred_mimetype = machine_file_formats[0] - - if new_preferred_mimetype != self._preferred_mimetype: - self._preferred_mimetype = new_preferred_mimetype - self.preferredOutputMimetypeChanged.emit() - requestAddPrinter = pyqtSignal() activityChanged = pyqtSignal() sceneBoundingBoxChanged = pyqtSignal() - preferredOutputMimetypeChanged = pyqtSignal() @pyqtProperty(bool, notify = activityChanged) def platformActivity(self): return self._platform_activity - @pyqtProperty(str, notify=preferredOutputMimetypeChanged) - def preferredOutputMimetype(self): - return self._preferred_mimetype - @pyqtProperty(str, notify = sceneBoundingBoxChanged) def getSceneBoundingBoxString(self): return self._i18n_catalog.i18nc("@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm.", "%(width).1f x %(depth).1f x %(height).1f mm") % {'width' : self._scene_bounding_box.width.item(), 'depth': self._scene_bounding_box.depth.item(), 'height' : self._scene_bounding_box.height.item()} diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index dda21f3719..36084b7d4d 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -61,6 +61,10 @@ class GlobalStack(CuraContainerStack): name = self.variant.getName() return name + @pyqtProperty(str, constant = True) + def preferred_output_file_formats(self) -> str: + return self.getMetaDataEntry("file_formats") + ## Add an extruder to the list of extruders of this stack. # # \param extruder The extruder to add. diff --git a/plugins/GCodeGzWriter/__init__.py b/plugins/GCodeGzWriter/__init__.py index e257bcb011..95949eee74 100644 --- a/plugins/GCodeGzWriter/__init__.py +++ b/plugins/GCodeGzWriter/__init__.py @@ -16,7 +16,8 @@ def getMetaData(): "extension": file_extension, "description": catalog.i18nc("@item:inlistbox", "Compressed G-code File"), "mime_type": "application/gzip", - "mode": GCodeGzWriter.GCodeGzWriter.OutputMode.BinaryMode + "mode": GCodeGzWriter.GCodeGzWriter.OutputMode.BinaryMode, + "hide_in_file_dialog": True, }] } } diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index 0e0eec7277..2a0a523026 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -7,6 +7,7 @@ import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 import UM 1.1 as UM +import Cura 1.0 as Cura Item { id: base; @@ -257,7 +258,8 @@ Item { onClicked: { forceActiveFocus(); - UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, { "filter_by_machine": true, "preferred_mimetype":Printer.preferredOutputMimetype }); + UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, + { "filter_by_machine": true, "preferred_mimetypes": Cura.MachineManager.activeMachine.preferred_output_file_formats }); } style: ButtonStyle { From 0fe0e4ac5415e4d3640bfcfcc8dafaec3e4800c7 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 16 Aug 2018 15:23:16 +0200 Subject: [PATCH 022/364] Ensure that the order of the cluster queue is correctly show in monitor tab CL-894 --- plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index e01021d6c8..befed8d4cf 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -432,12 +432,15 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): print_jobs_seen = [] job_list_changed = False - for print_job_data in result: + 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) @@ -462,6 +465,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): 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: @@ -521,7 +526,6 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): print_job.updateConfiguration(configuration) print_job.stateChanged.connect(self._printJobStateChanged) - self._print_jobs.append(print_job) return print_job def _updatePrintJob(self, print_job: PrintJobOutputModel, data: Dict[str, Any]) -> None: From 5bee561c9ce73996b2ed689562d1570ba741705c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 16 Aug 2018 15:54:35 +0200 Subject: [PATCH 023/364] Removed the static placeholders for monitor info CL-894 --- .../PrintCoreConfiguration.qml | 4 +-- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 34 +++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 6ff5c6327f..d2c88e148b 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -19,7 +19,7 @@ Item text: printCoreConfiguration.activeMaterial != null ? printCoreConfiguration.activeMaterial.name : ":(" elide: Text.ElideRight width: parent.width - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default_bold") } Label @@ -29,7 +29,5 @@ Item anchors.top: materialLabel.bottom elide: Text.ElideRight width: parent.width - font: UM.Theme.getFont("very_small") - opacity: 0.5 } } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 086740416d..a1123d29fc 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -35,14 +35,15 @@ Item Label { id: printJobName - text: "printJobName" + text: printJob.name + font: UM.Theme.getFont("default_bold") } Label { id: ownerName anchors.top: printJobName.bottom - text: "OwnerName" + text: printJob.owner } Image @@ -61,7 +62,7 @@ Item anchors.bottom: parent.bottom anchors.right: parent.right - text: printJob != null ? getPrettyTime(printJob.timeTotal) : "3h 12m" + text: printJob != null ? getPrettyTime(printJob.timeTotal) : "" elide: Text.ElideRight } } @@ -81,7 +82,27 @@ Item Label { id: targetPrinterLabel - text: "Waiting for: first available" + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") + text: + { + if(printJob.assignedPrinter == null) + { + return "Waiting for: first available" + } + else + { + return "Waiting for: " + printJob.assignedPrinter.name + } + + } + + anchors + { + left: parent.left + right: contextButton.left + rightMargin: UM.Theme.getSize("default_margin").width + } } @@ -89,6 +110,7 @@ Item { popup.visible ? popup.close() : popup.open() } + Button { id: contextButton @@ -119,8 +141,8 @@ Item transformOrigin: Popup.Top contentItem: Item { - width: panelWidth - 2 * popup.padding - height: cildrenRect.height + width: popup.width - 2 * popup.padding + height: childrenRect.height Button { text: "Send to top" From 01b9ba03d46fd742e8b274afc2f1da9f24dd116b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 16 Aug 2018 16:24:14 +0200 Subject: [PATCH 024/364] Added extruder icon CL-894 --- .../PrintCoreConfiguration.qml | 25 +++++++++++++++++++ .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 14 +++-------- resources/qml/SidebarHeader.qml | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index d2c88e148b..c71d0d1f79 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -13,6 +13,27 @@ Item width: Math.round(parent.width / 2) height: childrenRect.height + Item + { + id: extruderCircle + width: 30 + height: 30 + Rectangle + { + anchors.fill: parent + radius: Math.round(width / 2) + border.width: 1 + border.color: "black" + } + + Label + { + anchors.centerIn: parent + font: UM.Theme.getFont("default_bold") + text: printCoreConfiguration.position + 1 + } + } + Label { id: materialLabel @@ -20,6 +41,8 @@ Item elide: Text.ElideRight width: parent.width font: UM.Theme.getFont("default_bold") + anchors.left: extruderCircle.right + anchors.leftMargin: UM.Theme.getSize("default_margin").height } Label @@ -29,5 +52,7 @@ Item anchors.top: materialLabel.bottom elide: Text.ElideRight width: parent.width + anchors.left: extruderCircle.right + anchors.leftMargin: UM.Theme.getSize("default_margin").height } } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index a1123d29fc..d581d774b7 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -110,7 +110,7 @@ Item { popup.visible ? popup.close() : popup.open() } - + Button { id: contextButton @@ -191,22 +191,14 @@ Item PrintCoreConfiguration { id: leftExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) + width: Math.round(parent.width / 2) printCoreConfiguration: printJob.configuration.extruderConfigurations[0] } - Rectangle - { - id: extruderSeperator - width: UM.Theme.getSize("default_lining").width - height: parent.height - color: lineColor - } - PrintCoreConfiguration { id: rightExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) + width: Math.round(parent.width / 2) printCoreConfiguration: printJob.configuration.extruderConfigurations[1] } } diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 6ee33dd2f2..3a041ae499 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -274,7 +274,7 @@ Column elide: Text.ElideRight } - // Everthing for the extruder icon + // Everything for the extruder icon Item { id: extruderIconItem From d4aaa739282ba9b3505c02530b4b473793f4169d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 10:34:14 +0200 Subject: [PATCH 025/364] Codestyle fixes CL-894 --- .../ExtruderConfigurationModel.py | 4 ++ .../ClusterUM3OutputDevice.py | 69 ++++++++++--------- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 1 + 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index 2a7844b629..19d53d1271 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -33,6 +33,10 @@ class ExtruderConfigurationModel(QObject): def activeMaterial(self) -> MaterialOutputModel: return self._material + @pyqtProperty(QObject, fset=setMaterial, notify=extruderConfigurationChanged) + def material(self) -> MaterialOutputModel: + return self._material + def setHotendID(self, hotend_id: Optional[str]) -> None: if self._hotend_id != hotend_id: self._hotend_id = hotend_id diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index befed8d4cf..fffab6caec 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -4,17 +4,17 @@ from typing import Any, cast, Optional, Set, Tuple, Union from UM.FileHandler.FileHandler import FileHandler -from UM.FileHandler.FileWriter import FileWriter #To choose based on the output file mode (text vs. binary). -from UM.FileHandler.WriteFileJob import WriteFileJob #To call the file writer asynchronously. +from UM.FileHandler.FileWriter import FileWriter # To choose based on the output file mode (text vs. binary). +from UM.FileHandler.WriteFileJob import WriteFileJob # To call the file writer asynchronously. from UM.Logger import Logger from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog -from UM.Mesh.MeshWriter import MeshWriter # For typing + from UM.Message import Message from UM.Qt.Duration import Duration, DurationFormat -from UM.OutputDevice import OutputDeviceError #To show that something went wrong when writing. -from UM.Scene.SceneNode import SceneNode #For typing. -from UM.Version import Version #To check against firmware versions for support. +from UM.OutputDevice import OutputDeviceError # To show that something went wrong when writing. +from UM.Scene.SceneNode import SceneNode # For typing. +from UM.Version import Version # To check against firmware versions for support. from cura.CuraApplication import CuraApplication from cura.PrinterOutput.ConfigurationModel import ConfigurationModel @@ -34,9 +34,9 @@ from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject from time import time from datetime import datetime -from typing import Optional, Dict, List, Set +from typing import Optional, Dict, List -import io #To create the correct buffers for sending data to the printer. +import io # To create the correct buffers for sending data to the printer. import json import os @@ -67,18 +67,18 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # See comments about this hack with the clusterPrintersChanged signal self.printersChanged.connect(self.clusterPrintersChanged) - self._accepts_commands = True #type: bool + 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._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._printer_selection_dialog = None # type: QObject self.setPriority(3) # Make sure the output device gets selected above local file output self.setName(self._id) @@ -89,32 +89,33 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._printer_uuid_to_unique_name_mapping = {} # type: Dict[str, str] - self._finished_jobs = [] # type: List[PrintJobOutputModel] + self._finished_jobs = [] # type: List[PrintJobOutputModel] - self._cluster_size = int(properties.get(b"cluster_size", 0)) + self._cluster_size = int(properties.get(b"cluster_size", 0)) # type: int - self._latest_reply_handler = None #type: Optional[QNetworkReply] + self._latest_reply_handler = None # type: Optional[QNetworkReply] + self._sending_job = None 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() - #Formats supported by this application (file types that we can actually write). + # Formats supported by this application (file types that we can actually write). if file_handler: file_formats = file_handler.getSupportedFileTypesWrite() else: file_formats = CuraApplication.getInstance().getMeshFileHandler().getSupportedFileTypesWrite() global_stack = CuraApplication.getInstance().getGlobalContainerStack() - #Create a list from the supported file formats string. + # Create a list from the supported file formats string. if not global_stack: Logger.log("e", "Missing global stack!") return 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. + # 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(self.firmwareVersion) >= Version("4.4"): machine_file_formats = ["application/x-ufp"] + machine_file_formats @@ -127,7 +128,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): raise OutputDeviceError.WriteRequestFailedError(i18n_catalog.i18nc("@info:status", "There are no file formats available to write with!")) preferred_format = file_formats[0] - #Just take the first file format available. + #J ust take the first file format available. if file_handler is not None: writer = file_handler.getWriterByMimeType(cast(str, preferred_format["mime_type"])) else: @@ -137,18 +138,18 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): Logger.log("e", "Unexpected error when trying to get the FileWriter") return - #This function pauses with the yield, waiting on instructions on which printer it needs to print with. + # This function pauses with the yield, waiting on instructions on which printer it needs to print with. if not writer: Logger.log("e", "Missing file or mesh writer!") return self._sending_job = self._sendPrintJob(writer, preferred_format, nodes) - self._sending_job.send(None) #Start the generator. + self._sending_job.send(None) # Start the generator. - if len(self._printers) > 1: #We need to ask the user. + 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. + else: # Just immediately continue. + self._sending_job.send("") # No specifically selected printer. is_job_sent = self._sending_job.send(None) def _spawnPrinterSelectionDialog(self): @@ -159,7 +160,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._printer_selection_dialog.show() @pyqtProperty(int, constant=True) - def clusterSize(self): + def clusterSize(self) -> int: return self._cluster_size ## Allows the user to choose a printer to print with from the printer @@ -216,8 +217,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): job.start() - yield True #Return that we had success! - yield #To prevent having to catch the StopIteration exception. + 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: @@ -242,7 +243,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): file_name = CuraApplication.getInstance().getPrintInformation().jobName + "." + preferred_format["extension"] - output = stream.getvalue() #Either str or bytes depending on the output mode. + 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) @@ -281,8 +282,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # 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. + # 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, @@ -412,7 +413,6 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): image.loadFromData(reply.readAll()) print_job.updatePreviewImage(image) - def _update(self) -> None: super()._update() self.get("printers/", on_finished = self._onGetPrintersDataFinished) @@ -615,6 +615,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): 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")) @@ -633,8 +634,8 @@ def checkValidGetReply(reply: QNetworkReply) -> bool: return True -def findByKey(list: List[Union[PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[PrintJobOutputModel]: - for item in list: +def findByKey(lst: List[Union[PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[PrintJobOutputModel]: + for item in lst: if item.key == key: return item return None diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index d581d774b7..72b46339e5 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -148,6 +148,7 @@ Item text: "Send to top" onClicked: OutputDevice.sendJobToTop(printJob.key) width: parent.width + enabled: OutputDevice.printJobs[0].key != printJob.key } } From c968e54750136769ceb80f1f0925e77f1fb8ef4b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 10:38:23 +0200 Subject: [PATCH 026/364] Moved duplicated code to own function CL-894 --- .../NetworkedPrinterOutputDevice.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index b7862251c9..5a9e12ae06 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -188,28 +188,27 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if reply in self._kept_alive_multiparts: del self._kept_alive_multiparts[reply] - def put(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + def _validateManager(self) -> None: if self._manager is None: self._createNetworkManager() assert (self._manager is not None) + + def put(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.put(request, data.encode()) self._registerOnFinishedCallback(reply, on_finished) def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) + self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.get(request) self._registerOnFinishedCallback(reply, on_finished) def post(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) + self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.post(request, data) @@ -218,10 +217,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._registerOnFinishedCallback(reply, on_finished) def postFormWithParts(self, target: str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> QNetworkReply: - - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) + self._validateManager() request = self._createEmptyRequest(target, content_type=None) multi_post_part = QHttpMultiPart(QHttpMultiPart.FormDataType) for part in parts: From db1d90ed9b9940cb57634cc77dd1f47bdd0ebbdd Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 10:38:46 +0200 Subject: [PATCH 027/364] Added delete function This is needed at a later stage to delete print jobs from queue by the cluster CL-894 --- cura/PrinterOutput/NetworkedPrinterOutputDevice.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 5a9e12ae06..b7c0818c72 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -200,6 +200,13 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): reply = self._manager.put(request, data.encode()) self._registerOnFinishedCallback(reply, on_finished) + def delete(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + self._validateManager() + request = self._createEmptyRequest(target) + self._last_request_time = time() + reply = self._manager.delete(request) + self._registerOnFinishedCallback(reply, on_finished) + def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: self._validateManager() request = self._createEmptyRequest(target) From eb7d42a7f8307c68e85021bf264b1bed0bfd47d1 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 10:49:44 +0200 Subject: [PATCH 028/364] Added delete button to cluster queue CL-894 --- cura/PrinterOutput/NetworkedPrinterOutputDevice.py | 2 +- plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py | 6 ++++++ plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 12 +++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index b7c0818c72..36369feabb 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -204,7 +204,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() - reply = self._manager.delete(request) + reply = self._manager.deleteResource(request) self._registerOnFinishedCallback(reply, on_finished) def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index fffab6caec..cbb5f25ee8 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -374,6 +374,12 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): 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) + def _printJobStateChanged(self) -> None: username = self._getUserName() diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 72b46339e5..0c30255b08 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -135,7 +135,7 @@ Item //y: configurationSelector.height - UM.Theme.getSize("default_lining").height //x: configurationSelector.width - width width: 200 - height: childrenRect.height + height: contentItem.height + 2 * padding visible: false padding: UM.Theme.getSize("default_lining").width transformOrigin: Popup.Top @@ -145,17 +145,27 @@ Item height: childrenRect.height Button { + id: sendToTopButton text: "Send to top" onClicked: OutputDevice.sendJobToTop(printJob.key) width: parent.width enabled: OutputDevice.printJobs[0].key != printJob.key } + Button + { + id: deleteButton + text: "Delete" + onClicked: OutputDevice.deleteJobFromQueue(printJob.key) + width: parent.width + anchors.top: sendToTopButton.bottom + } } background: Rectangle { color: UM.Theme.getColor("setting_control") border.color: UM.Theme.getColor("setting_control_border") + height: popup.height } exit: Transition From 1079a9be2c72de8d4c32895701e9842e1521fd09 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 17 Aug 2018 10:53:01 +0200 Subject: [PATCH 029/364] Do not add saved gcodes to recent files list --- plugins/GCodeGzWriter/GCodeGzWriter.py | 4 ++++ plugins/GCodeWriter/GCodeWriter.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/GCodeGzWriter/GCodeGzWriter.py b/plugins/GCodeGzWriter/GCodeGzWriter.py index e191a9c427..cbbfb8f986 100644 --- a/plugins/GCodeGzWriter/GCodeGzWriter.py +++ b/plugins/GCodeGzWriter/GCodeGzWriter.py @@ -17,6 +17,10 @@ catalog = i18nCatalog("cura") # # If you're zipping g-code, you might as well use gzip! class GCodeGzWriter(MeshWriter): + + def __init__(self) -> None: + super().__init__(add_to_recent_files = False) + ## Writes the gzipped g-code to a stream. # # Note that even though the function accepts a collection of nodes, the diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 59e9a29691..5d5e3578cd 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -47,7 +47,7 @@ class GCodeWriter(MeshWriter): _setting_keyword = ";SETTING_" def __init__(self): - super().__init__() + super().__init__(add_to_recent_files = False) self._application = Application.getInstance() From b074d2bdf38071406df0be2151ba38c777923b0b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 13:41:23 +0200 Subject: [PATCH 030/364] Added translations for the strings CL-894 --- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 0c30255b08..daa2aa80bb 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -15,6 +15,12 @@ Item return OutputDevice.formatDuration(time) } + UM.I18nCatalog + { + id: catalog + name: "cura" + } + Rectangle { id: background @@ -88,11 +94,11 @@ Item { if(printJob.assignedPrinter == null) { - return "Waiting for: first available" + return catalog.i18nc("@label", "Waiting for: first available") } else { - return "Waiting for: " + printJob.assignedPrinter.name + return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name } } @@ -146,7 +152,7 @@ Item Button { id: sendToTopButton - text: "Send to top" + text: catalog.i18nc("@label", "Move to top") onClicked: OutputDevice.sendJobToTop(printJob.key) width: parent.width enabled: OutputDevice.printJobs[0].key != printJob.key @@ -154,7 +160,7 @@ Item Button { id: deleteButton - text: "Delete" + text: catalog.i18nc("@label", "Delete") onClicked: OutputDevice.deleteJobFromQueue(printJob.key) width: parent.width anchors.top: sendToTopButton.bottom From 1fa3b60f942610ed0b3e4f066e066dc30be163c7 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 17 Aug 2018 16:10:23 +0200 Subject: [PATCH 031/364] Added rough outline of the redesigned cluster controlItem CL-893 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 357 +++++++++--------- .../ClusterUM3OutputDevice.py | 4 + .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 2 +- 3 files changed, 175 insertions(+), 188 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 5531e99d57..2fb0b36471 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -1,5 +1,6 @@ import QtQuick 2.2 import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.3 import UM 1.3 as UM import Cura 1.0 as Cura @@ -9,11 +10,9 @@ Component Rectangle { id: base - property var manager: Cura.MachineManager.printerOutputDevices[0] property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. - - visible: manager != null + visible: OutputDevice != null anchors.fill: parent color: UM.Theme.getColor("viewport_background") @@ -35,218 +34,202 @@ Component right: parent.right } - text: Cura.MachineManager.printerOutputDevices[0].name + text: OutputDevice.name elide: Text.ElideRight } - Rectangle - { - id: printJobArea - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor + ScrollView + { + id: queuedPrintJobs anchors { top: activePrintersLabel.bottom - margins: UM.Theme.getSize("default_margin").width left: parent.left right: parent.right + margins: UM.Theme.getSize("default_margin").width + bottom: parent.bottom } - - radius: cornerRadius - height: childrenRect.height - - Item + ListView { - id: printJobTitleBar - width: parent.width - height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height + anchors.fill: parent + spacing: UM.Theme.getSize("default_margin").height - Label - { - id: printJobTitleLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - text: catalog.i18nc("@title", "Print jobs") - font: UM.Theme.getFont("default") - opacity: 0.75 - } - Rectangle - { - anchors.bottom: parent.bottom - height: UM.Theme.getSize("default_lining").width - color: lineColor - width: parent.width - } - } - - Column - { - id: printJobColumn - - anchors - { - top: printJobTitleBar.bottom - margins: UM.Theme.getSize("default_margin").height - right: parent.right - left: parent.left - } - - Item + model: OutputDevice.printers + delegate: Rectangle { width: parent.width - height: childrenRect.height - opacity: 0.65 - Label - { - text: catalog.i18nc("@label", "Printing") - font: UM.Theme.getFont("very_small") + height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height - } - - Label - { - text: manager.activePrintJobs.length - font: UM.Theme.getFont("small") - anchors.right: parent.right - } - } - - Item - { - width: parent.width - height: childrenRect.height - opacity: 0.65 - Label - { - text: catalog.i18nc("@label", "Queued") - font: UM.Theme.getFont("very_small") - } - - Label - { - text: manager.queuedPrintJobs.length - font: UM.Theme.getFont("small") - anchors.right: parent.right - } - } - } - - OpenPanelButton - { - anchors.top: printJobColumn.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").height - id: configButton - onClicked: base.manager.openPrintJobControlPanel() - text: catalog.i18nc("@action:button", "View print jobs") - } - - Item - { - // spacer - anchors.top: configButton.bottom - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - } - } - - - Rectangle - { - id: printersArea - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - anchors.top: printJobArea.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin:UM.Theme.getSize("default_margin").width - radius: cornerRadius - height: childrenRect.height - - Item - { - id: printersTitleBar - width: parent.width - height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height - - Label - { - id: printersTitleLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - text: catalog.i18nc("@label:title", "Printers") - font: UM.Theme.getFont("default") - opacity: 0.75 - } - Rectangle - { - anchors.bottom: parent.bottom - height: UM.Theme.getSize("default_lining").width - color: lineColor - width: parent.width - } - } - Column - { - id: printersColumn - anchors.top: printersTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - Repeater - { - model: manager.connectedPrintersTypeCount + id: base + property var collapsed: true Item { - width: parent.width - height: childrenRect.height - opacity: 0.65 - Label + id: printerInfo + height: machineIcon.height + anchors { - text: modelData.machine_type - font: UM.Theme.getFont("very_small") + top: parent.top + left: parent.left + right: parent.right + + margins: UM.Theme.getSize("default_margin").width + } + + MouseArea + { + anchors.fill: parent + onClicked: base.collapsed = !base.collapsed + enabled: modelData.activePrintJob != null + } + + Rectangle + { + id: machineIcon + anchors.top: parent.top + width: 50 + height: 50 + color: "blue" } Label { - text: modelData.count - font: UM.Theme.getFont("small") + id: machineNameLabel + text: modelData.name + anchors.top: machineIcon.top + anchors.left: machineIcon.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: collapseIcon.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + elide: Text.ElideRight + } + + UM.RecolorImage + { + id: collapseIcon + width: 15 + height: 15 + visible: modelData.activePrintJob != null + sourceSize.width: width + sourceSize.height: height + source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") + anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + color: "black" + } + + Label + { + id: activeJobLabel + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" + anchors.top: machineNameLabel.bottom + anchors.left: machineNameLabel.left + anchors.right: collapseIcon.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + elide: Text.ElideRight + } + } + + Item + { + id: detailedInfo + property var printJob: modelData.activePrintJob + visible: !base.collapsed + anchors.top: printerInfo.bottom + width: parent.width + height: visible ? childrenRect.height : 0 + + Rectangle + { + id: topSpacer + color: "grey" + height: 1 + anchors + { + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + top: parent.top + } + } + + Row + { + id: extrudersInfo + anchors.top: topSpacer.bottom + anchors.topMargin : UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + height: childrenRect.height + spacing: UM.Theme.getSize("default_margin").width + + PrintCoreConfiguration + { + id: leftExtruderInfo + width: Math.round(parent.width / 2) + printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[0] + } + + PrintCoreConfiguration + { + id: rightExtruderInfo + width: Math.round(parent.width / 2) + printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[1] + } + } + + Rectangle + { + id: jobSpacer + color: "grey" + height: 1 + anchors + { + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + top: extrudersInfo.bottom + } + } + + Item + { + id: jobInfo + anchors.top: jobSpacer.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").width + height: childrenRect.height + Label + { + id: printJobName + text: modelData.activePrintJob.name + font: UM.Theme.getFont("default_bold") + } + Label + { + id: ownerName + anchors.top: printJobName.bottom + text: modelData.activePrintJob.owner + } + + Image + { + source: modelData.activePrintJob.preview_image_url + anchors.top: ownerName.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: totalTimeLabel.top + width: height + } + } } } } - OpenPanelButton - { - anchors.top: printersColumn.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").height - id: printerConfigButton - onClicked: base.manager.openPrinterControlPanel() - - text: catalog.i18nc("@action:button", "View printers") - } - - Item - { - // spacer - anchors.top: printerConfigButton.bottom - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - } } } } diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index cbb5f25ee8..6f292d4f4b 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -351,6 +351,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): 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 formatDuration(self, seconds: int) -> str: return Duration(seconds).getDisplayString(DurationFormat.Format.Short) diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index daa2aa80bb..290e3d7605 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -193,7 +193,7 @@ Item // PrintCore && Material config Row { - id: extruderInfo + id: extrudersInfo anchors.bottom: parent.bottom anchors From 2410c21839d0b0ebbb74f9c3ba7c0b9c6f602e05 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 20 Aug 2018 17:16:05 +0200 Subject: [PATCH 032/364] Move material list to separate QML file Contributes to CURA-5378 --- resources/qml/Preferences/MaterialsList.qml | 266 ++++++++++++++++++++ resources/qml/Preferences/MaterialsPage.qml | 116 +-------- 2 files changed, 279 insertions(+), 103 deletions(-) create mode 100644 resources/qml/Preferences/MaterialsList.qml diff --git a/resources/qml/Preferences/MaterialsList.qml b/resources/qml/Preferences/MaterialsList.qml new file mode 100644 index 0000000000..db0f5461ec --- /dev/null +++ b/resources/qml/Preferences/MaterialsList.qml @@ -0,0 +1,266 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium 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.Layouts 1.3 +import QtQuick.Dialogs 1.2 +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: materialList + UM.I18nCatalog { id: catalog; name: "cura"; } + Cura.BrandMaterialsModel { id: materialsModel } + Cura.GenericMaterialsModel { id: genericMaterialsModel } + + width: materialScrollView.width - 20 + height: childrenRect.height + + + Column + { + Rectangle + { + height: 23 + width: materialList.width + Label + { + text: "Generic" + } + } + Repeater + { + model: genericMaterialsModel + delegate: Rectangle + { + height: 23 + width: materialList.width + color: "green" + Label + { + text: model.name + } + } + } + Repeater + { + id: brand_list + + model: materialsModel + delegate: Rectangle + { + id: brand_section + property var expanded: true + property var types_model: model.materials + height: childrenRect.height + width: parent.width + Rectangle + { + id: brand_header_background + color: "grey" + anchors.fill: brand_header + } + Row + { + id: brand_header + width: parent.width + Label + { + id: brand_name + text: model.name + height: 24 + width: parent.width - 24 + verticalAlignment: Text.AlignVCenter + leftPadding: 4 + } + Button + { + text: "" + implicitWidth: 24 + implicitHeight: 24 + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: "black" + source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + } + } + MouseArea + { + anchors.fill: brand_header + onPressed: + { + brand_section.expanded = !brand_section.expanded + } + } + Column + { + anchors.top: brand_header.bottom + width: parent.width - leftPadding + anchors.left: parent.left + leftPadding: 8 + height: brand_section.expanded ? childrenRect.height : 0 + visible: brand_section.expanded + Repeater + { + model: types_model + delegate: Rectangle + { + id: material_type_section + property var expanded: true + property var colors_model: model.colors + height: childrenRect.height + width: parent.width + Rectangle + { + id: material_type_header_background + color: "grey" + anchors.bottom: material_type_header.bottom + height: 1 + width: parent.width + } + Row + { + id: material_type_header + width: parent.width + + Label + { + text: model.name + height: 24 + width: parent.width - 24 + id: material_type_name + verticalAlignment: Text.AlignVCenter + } + Button + { + text: "" + implicitWidth: 24 + implicitHeight: 24 + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: 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 + { + anchors.fill: material_type_header + onPressed: + { + material_type_section.expanded = !material_type_section.expanded + } + } + Column + { + height: material_type_section.expanded ? childrenRect.height : 0 + visible: material_type_section.expanded + width: parent.width - leftPadding + anchors.top: material_type_header.bottom + leftPadding: 8 + anchors.left: parent.left + Repeater + { + model: colors_model + delegate: Rectangle + { + height: 24 + width: parent.width +// color: "green" + Row + { + height: parent.height + width: parent.width + Rectangle + { + id: swatch + color: model.color_code + border.width: 1 + border.color: "black" + width: 14 + height: 14 + anchors.verticalCenter: parent.verticalCenter + } + Label + { + text: model.name + verticalAlignment: Text.AlignVCenter + height: 24 + anchors.left: swatch.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: 4 + } + MouseArea + { + anchors.fill: parent + onClicked: + { + print(model.guid) + } + } + Button + { + text: "+" + implicitWidth: 24 + implicitHeight: 24 + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + onClicked: + { + if (model.is_favorite) { + base.materialManager.removeFavorite(model.root_material_id) + model.is_favorite = false + return + } + base.materialManager.addFavorite(model.root_material_id) + model.is_favorite = true + return + } + } + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index e2e3edec2f..07b5da3f4e 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -17,12 +17,19 @@ Item property QtObject materialManager: CuraApplication.getMaterialManager() property var resetEnabled: false // Keep PreferencesDialog happy - UM.I18nCatalog { id: catalog; name: "cura"; } - - Cura.MaterialManagementModel + UM.I18nCatalog + { + id: catalog + name: "cura" + } + Cura.BrandMaterialsModel { id: materialsModel } + Cura.GenericMaterialsModel + { + id: genericMaterialsModel + } Label { @@ -366,104 +373,7 @@ Item width: true ? (parent.width * 0.4) | 0 : parent.width frameVisible: true - ListView - { - id: materialListView - - model: materialsModel - - section.property: "brand" - section.criteria: ViewSection.FullString - section.delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: palette.light - - Label - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section - font.bold: true - color: palette.text - } - } - - delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: ListView.isCurrentItem ? palette.highlight : (model.index % 2) ? palette.base : palette.alternateBase - - Row - { - id: materialRow - spacing: (UM.Theme.getSize("default_margin").width / 2) | 0 - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - - property bool isCurrentItem: parent.ListView.isCurrentItem - - property bool isItemActivated: - { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return model.root_material_id == root_material_id; - } - - Rectangle - { - width: Math.floor(parent.height * 0.8) - height: Math.floor(parent.height * 0.8) - color: model.color_code - border.color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - anchors.verticalCenter: parent.verticalCenter - } - Label - { - width: Math.floor((parent.width * 0.3)) - text: model.material - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - Label - { - text: (model.name != model.material) ? model.name : "" - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - } - - MouseArea - { - anchors.fill: parent - onClicked: - { - parent.ListView.view.currentIndex = model.index; - } - } - } - - function activateDetailsWithIndex(index) - { - var model = materialsModel.getItem(index); - base.currentItem = model; - materialDetailsView.containerId = model.container_id; - materialDetailsView.currentMaterialNode = model.container_node; - - detailsPanel.updateMaterialPropertiesObject(); - } - - onCurrentIndexChanged: - { - forceActiveFocus(); // causes the changed fields to be saved - activateDetailsWithIndex(currentIndex); - } - } + MaterialsList {} } @@ -480,9 +390,9 @@ Item right: parent.right } - function updateMaterialPropertiesObject() + function updateMaterialPropertiesObject( currentItem ) { - var currentItem = materialsModel.getItem(materialListView.currentIndex); +// var currentItem = materialsModel.getItem(materialListView.currentIndex); materialProperties.name = currentItem.name ? currentItem.name : "Unknown"; materialProperties.guid = currentItem.guid; From 68bccd8bf7cf9a6382d988fa538f7fc958ab776b Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 20 Aug 2018 17:16:54 +0200 Subject: [PATCH 033/364] Improve the Favorites, Base, and Brand materials models (WIP) Contribuetes to CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 4 ++ cura/Machines/Models/BrandMaterialsModel.py | 40 +++++++++++++------ .../Machines/Models/FavoriteMaterialsModel.py | 6 ++- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 4759c8b5b0..ceba1f6eeb 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,6 +21,8 @@ class BaseMaterialsModel(ListModel): MaterialRole = Qt.UserRole + 5 ColorRole = Qt.UserRole + 6 ContainerNodeRole = Qt.UserRole + 7 + ColorCodeRole = Qt.UserRole + 8 + GUIDRole = Qt.UserRole + 9 extruderPositionChanged = pyqtSignal() @@ -31,10 +33,12 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.RootMaterialIdRole, "root_material_id") self.addRoleName(self.IdRole, "id") + self.addRoleName(self.GUIDRole, "guid") self.addRoleName(self.NameRole, "name") self.addRoleName(self.BrandRole, "brand") self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.ColorRole, "color_name") + self.addRoleName(self.ColorCodeRole, "color_code") self.addRoleName(self.ContainerNodeRole, "container_node") self._extruder_position = 0 diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index ad48b3ea21..c5edd6e57c 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -50,6 +50,7 @@ class BrandMaterialsModel(ListModel): self._extruder_stack = None from cura.CuraApplication import CuraApplication + self._container_registry = CuraApplication.getInstance().getContainerRegistry() self._machine_manager = CuraApplication.getInstance().getMachineManager() self._extruder_manager = CuraApplication.getInstance().getExtruderManager() self._material_manager = CuraApplication.getInstance().getMaterialManager() @@ -104,30 +105,45 @@ class BrandMaterialsModel(ListModel): brand_group_dict = {} for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata - brand = metadata["brand"] - # Only add results for generic materials - if brand.lower() == "generic": - continue + # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue + # Skip generic materials, and add brands we haven't seen yet to the dict + brand = metadata["brand"] + if brand.lower() == "generic": + continue if brand not in brand_group_dict: brand_group_dict[brand] = {} + # Add material types we haven't seen yet to the dict material_type = metadata["material"] if material_type not in brand_group_dict[brand]: brand_group_dict[brand][material_type] = [] - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } + # Now handle the individual materials + item = { + "root_material_id": root_material_id, + # "root_material_id": container_node.metadata["base_file"] <- as written in material management model + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "guid": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), + "approximate_diameter": metadata["approximate_diameter"], + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": False + } brand_group_dict[brand][material_type].append(item) for brand, material_dict in brand_group_dict.items(): diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index cbe59a1a09..9d05f8cb4a 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -17,7 +17,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. - + self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed self._update() def _update(self): @@ -38,7 +38,9 @@ class FavoriteMaterialsModel(BaseMaterialsModel): self.setItems([]) return - favorite_ids = self._preferences.getValue("cura/favorite_materials") + favorite_ids = self._material_manager.getFavorites() + + print("favorite_ids:", favorite_ids) item_list = [] for root_material_id, container_node in available_material_dict.items(): From 6d1fd8281ca0d5bd267b68c1fdc13922da98bab1 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 20 Aug 2018 17:17:14 +0200 Subject: [PATCH 034/364] Add favorites funcitonality to MaterialManager.py Contributes to CURA-5378 --- cura/Machines/MaterialManager.py | 40 +++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index d5a7d5d089..d59aa07590 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -4,6 +4,7 @@ from collections import defaultdict, OrderedDict import copy import uuid +import json from typing import Dict, Optional, TYPE_CHECKING from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot @@ -38,7 +39,8 @@ if TYPE_CHECKING: # class MaterialManager(QObject): - materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated. + 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) @@ -75,6 +77,8 @@ class MaterialManager(QObject): self._container_registry.containerAdded.connect(self._onContainerMetadataChanged) self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged) + self._favorites = set() + def initialize(self): # Find all materials and put them in a matrix for quick search. material_metadatas = {metadata["id"]: metadata for metadata in @@ -194,6 +198,14 @@ class MaterialManager(QObject): self.materialsUpdated.emit() + favorites = self._application.getPreferences().getValue("cura/favorite_materials") + print(favorites) + for item in favorites: + print(item) + self._favorites.add(item) + print("LOADED FAVES", self._favorites) + self.favoritesUpdated.emit() + def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: material_id = material_metadata["id"] @@ -608,3 +620,29 @@ class MaterialManager(QObject): new_base_id = new_id, new_metadata = new_metadata) return new_id + + @pyqtSlot(str) + def addFavorite(self, root_material_id: str): + print(root_material_id) + self._favorites.add(root_material_id) + self.favoritesUpdated.emit() + print(self._favorites) + print(list(self._favorites)) + + # Ensure all settings are saved. + self._application.getPreferences().setValue("cura/favorite_materials", list(self._favorites)) + self._application.saveSettings() + + @pyqtSlot(str) + def removeFavorite(self, root_material_id: str): + self._favorites.remove(root_material_id) + self.favoritesUpdated.emit() + print(self._favorites) + + # Ensure all settings are saved. + self._application.getPreferences().setValue("cura/favorite_materials", list(self._favorites)) + self._application.saveSettings() + + @pyqtSlot() + def getFavorites(self): + return self._favorites \ No newline at end of file From 03a78331806cc5822e11b780822a9cee42abc2c9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Aug 2018 10:14:12 +0200 Subject: [PATCH 035/364] Fixed qml warnings (reading from undefined properties) CL-893 && CL-894 --- plugins/Toolbox/src/Toolbox.py | 1 + .../UM3NetworkPrinting/ClusterControlItem.qml | 33 +++++++++++++++---- .../PrintCoreConfiguration.qml | 21 ++++++++++-- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index c4205b8ed5..4d04da5de0 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -183,6 +183,7 @@ class Toolbox(QObject, Extension): "materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url=self._api_url)), "materials_generic": QUrl("{base_url}/packages?package_type=material&tags=generic".format(base_url=self._api_url)) } + print("*******", self._request_urls ) # Get the API root for the packages API depending on Cura version settings. def _getCloudAPIRoot(self) -> str: diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2fb0b36471..6b5bb90479 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -203,29 +203,50 @@ Component anchors.left: parent.left anchors.right: parent.right anchors.margins: UM.Theme.getSize("default_margin").width - height: childrenRect.height + height: childrenRect.height + UM.Theme.getSize("default_margin").height Label { id: printJobName - text: modelData.activePrintJob.name + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "" font: UM.Theme.getFont("default_bold") } Label { id: ownerName anchors.top: printJobName.bottom - text: modelData.activePrintJob.owner + text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : "" } Image { - source: modelData.activePrintJob.preview_image_url + id: printJobPreview + source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: totalTimeLabel.top - width: height + //anchors.bottom: totalTimeLabel.top + width: parent.width / 3 + height: width } + Rectangle + { + id: showCameraIcon + width: 30 * screenScaleFactor + height: width + radius: width + anchors.left: parent.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.bottom: printJobPreview.bottom + color: UM.Theme.getColor("setting_control_border_highlight") + Image + { + width: parent.width + height: width + anchors.right: parent.right + anchors.rightMargin: parent.rightMargin + source: "camera-icon.svg" + } + } } } } diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index c71d0d1f79..893f6f7177 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -30,14 +30,22 @@ Item { anchors.centerIn: parent font: UM.Theme.getFont("default_bold") - text: printCoreConfiguration.position + 1 + text: printCoreConfiguration != undefined ? printCoreConfiguration.position + 1 : "" } } Label { id: materialLabel - text: printCoreConfiguration.activeMaterial != null ? printCoreConfiguration.activeMaterial.name : ":(" + text: + + { + if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) + { + return printCoreConfiguration.activeMaterial.name + } + return "" + } elide: Text.ElideRight width: parent.width font: UM.Theme.getFont("default_bold") @@ -48,7 +56,14 @@ Item Label { id: printCoreLabel - text: printCoreConfiguration.hotendID + text: + { + if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) + { + return printCoreConfiguration.hotendID + } + return "" + } anchors.top: materialLabel.bottom elide: Text.ElideRight width: parent.width From ca25638c07d699002980dab7564a9b5743582b50 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 21 Aug 2018 11:01:35 +0200 Subject: [PATCH 036/364] .ufp should also not show up in recent files since it's a gcode format --- .pytest_cache/README.md | 8 +++ .pytest_cache/v/cache/lastfailed | 100 +++++++++++++++++++++++++++++++ .pytest_cache/v/cache/nodeids | 3 + plugins/UFPWriter/UFPWriter.py | 2 +- 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 .pytest_cache/README.md create mode 100644 .pytest_cache/v/cache/lastfailed create mode 100644 .pytest_cache/v/cache/nodeids diff --git a/.pytest_cache/README.md b/.pytest_cache/README.md new file mode 100644 index 0000000000..bb78ba07ee --- /dev/null +++ b/.pytest_cache/README.md @@ -0,0 +1,8 @@ +# pytest cache directory # + +This directory contains data from the pytest's cache plugin, +which provides the `--lf` and `--ff` options, as well as the `cache` fixture. + +**Do not** commit this to version control. + +See [the docs](https://docs.pytest.org/en/latest/cache.html) for more information. diff --git a/.pytest_cache/v/cache/lastfailed b/.pytest_cache/v/cache/lastfailed new file mode 100644 index 0000000000..adb96c8331 --- /dev/null +++ b/.pytest_cache/v/cache/lastfailed @@ -0,0 +1,100 @@ +{ + "tests/Settings/TestCuraContainerRegistry.py::test_addContainerBadSettingVersion": true, + "tests/Settings/TestCuraContainerRegistry.py::test_addContainerExtruderStack": true, + "tests/Settings/TestCuraContainerRegistry.py::test_addContainerGlobalStack": true, + "tests/Settings/TestCuraContainerRegistry.py::test_addContainerGoodSettingVersion": true, + "tests/Settings/TestCuraContainerRegistry.py::test_addContainerNoSettingVersion": true, + "tests/Settings/TestExtruderStack.py::test_addContainer": true, + "tests/Settings/TestExtruderStack.py::test_constrainDefinitionValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainDefinitionValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container2]": true, + "tests/Settings/TestExtruderStack.py::test_constrainMaterialValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainMaterialValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container2]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container2]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainQualityValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container2]": true, + "tests/Settings/TestExtruderStack.py::test_constrainUserChangesValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainUserChangesValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainVariantInvalid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainVariantInvalid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_constrainVariantValid[container0]": true, + "tests/Settings/TestExtruderStack.py::test_constrainVariantValid[container1]": true, + "tests/Settings/TestExtruderStack.py::test_deserializeMoveInstanceContainer": true, + "tests/Settings/TestExtruderStack.py::test_deserializeRemovesWrongContainerClass": true, + "tests/Settings/TestExtruderStack.py::test_deserializeRemovesWrongInstanceContainer": true, + "tests/Settings/TestExtruderStack.py::test_deserializeWrongDefinitionClass": true, + "tests/Settings/TestExtruderStack.py::test_getPropertyFallThrough": true, + "tests/Settings/TestExtruderStack.py::test_insertContainer": true, + "tests/Settings/TestExtruderStack.py::test_removeContainer": true, + "tests/Settings/TestExtruderStack.py::test_setPropertyUser[foo-value-100]": true, + "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-default_value-0.1337]": true, + "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-is_bright_pink-of course]": true, + "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-value-0.1337]": true, + "tests/Settings/TestExtruderStack.py::test_setPropertyUser[support_enabled-value-True]": true, + "tests/Settings/TestGlobalStack.py::test_addContainer": true, + "tests/Settings/TestGlobalStack.py::test_addExtruder": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container2]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainDefinitionValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container2]": true, + "tests/Settings/TestGlobalStack.py::test_constrainMaterialValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainMaterialValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container2]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container2]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainQualityValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container2]": true, + "tests/Settings/TestGlobalStack.py::test_constrainUserChangesValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainUserChangesValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainVariantInvalid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainVariantInvalid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_constrainVariantValid[container0]": true, + "tests/Settings/TestGlobalStack.py::test_constrainVariantValid[container1]": true, + "tests/Settings/TestGlobalStack.py::test_deserializeMoveInstanceContainer": true, + "tests/Settings/TestGlobalStack.py::test_deserializeRemovesWrongContainerClass": true, + "tests/Settings/TestGlobalStack.py::test_deserializeRemovesWrongInstanceContainer": true, + "tests/Settings/TestGlobalStack.py::test_deserializeWrongDefinitionClass": true, + "tests/Settings/TestGlobalStack.py::test_getPropertyFallThrough": true, + "tests/Settings/TestGlobalStack.py::test_getPropertyInstancesBeforeResolve": true, + "tests/Settings/TestGlobalStack.py::test_getPropertyNoResolveInDefinition": true, + "tests/Settings/TestGlobalStack.py::test_getPropertyResolveInDefinition": true, + "tests/Settings/TestGlobalStack.py::test_getPropertyResolveInInstance": true, + "tests/Settings/TestGlobalStack.py::test_hasNoUserValue": true, + "tests/Settings/TestGlobalStack.py::test_hasUserValueQualityChanges": true, + "tests/Settings/TestGlobalStack.py::test_hasUserValueUserChanges": true, + "tests/Settings/TestGlobalStack.py::test_insertContainer": true, + "tests/Settings/TestGlobalStack.py::test_removeContainer": true, + "tests/Settings/TestGlobalStack.py::test_setNextStack": true, + "tests/Settings/TestGlobalStack.py::test_setPropertyUser[foo-value-100]": true, + "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-default_value-0.1337]": true, + "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-is_bright_pink-of course]": true, + "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-value-0.1337]": true, + "tests/Settings/TestGlobalStack.py::test_setPropertyUser[support_enabled-value-True]": true, + "tests/TestMachineAction.py::test_addMachineAction": true +} \ No newline at end of file diff --git a/.pytest_cache/v/cache/nodeids b/.pytest_cache/v/cache/nodeids new file mode 100644 index 0000000000..d548ce2ff2 --- /dev/null +++ b/.pytest_cache/v/cache/nodeids @@ -0,0 +1,3 @@ +[ + "plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py::test_upgradeVersionNr[Empty config file-[general]\\n version = 5\\n [metadata]\\n setting_version = 4\\n]" +] \ No newline at end of file diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 9344bf54da..ceb9d79087 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -20,7 +20,7 @@ catalog = i18nCatalog("cura") class UFPWriter(MeshWriter): def __init__(self): - super().__init__() + super().__init__(add_to_recent_files = False) self._snapshot = None Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot) From 6a08b63f21c4b50eae56e883d8f02c4d57968b4d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Aug 2018 13:32:22 +0200 Subject: [PATCH 037/364] Ensure that extruder configurations are correctly sorted CL-894 --- cura/PrinterOutput/ExtruderConfigurationModel.py | 4 ++-- plugins/Toolbox/src/Toolbox.py | 1 - .../UM3NetworkPrinting/ClusterUM3OutputDevice.py | 10 ++++------ .../UM3NetworkPrinting/PrintCoreConfiguration.qml | 15 ++++++++++++--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index 19d53d1271..75ee4b6ab3 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -11,9 +11,9 @@ class ExtruderConfigurationModel(QObject): extruderConfigurationChanged = pyqtSignal() - def __init__(self): + def __init__(self, position: int = -1): super().__init__() - self._position = -1 # type: int + self._position = position # type: int self._material = None # type: Optional[MaterialOutputModel] self._hotend_id = None # type: Optional[str] diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 4d04da5de0..c4205b8ed5 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -183,7 +183,6 @@ class Toolbox(QObject, Extension): "materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url=self._api_url)), "materials_generic": QUrl("{base_url}/packages?package_type=material&tags=generic".format(base_url=self._api_url)) } - print("*******", self._request_urls ) # Get the API root for the packages API depending on Cura version settings. def _getCloudAPIRoot(self) -> str: diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 6f292d4f4b..6fffe2e3bf 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -520,18 +520,16 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): key=data["uuid"], name= data["name"]) configuration = ConfigurationModel() - extruders = [] + extruders = [ExtruderConfigurationModel(position = idx) for idx in range(0, self._number_of_extruders)] for index in range(0, self._number_of_extruders): - extruder = ExtruderConfigurationModel() - extruder.setPosition(index) try: extruder_data = data["configuration"][index] except IndexError: - break - + 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", {}))) - extruders.append(extruder) + configuration.setExtruderConfigurations(extruders) print_job.updateConfiguration(configuration) diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 893f6f7177..46e45feac9 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -18,6 +18,15 @@ Item id: extruderCircle width: 30 height: 30 + opacity: + { + if(printCoreConfiguration == undefined || printCoreConfiguration.activeMaterial == undefined || printCoreConfiguration.hotendID == undefined) + { + return 0.5 + } + return 1 + } + Rectangle { anchors.fill: parent @@ -30,7 +39,7 @@ Item { anchors.centerIn: parent font: UM.Theme.getFont("default_bold") - text: printCoreConfiguration != undefined ? printCoreConfiguration.position + 1 : "" + text: printCoreConfiguration.position + 1 } } @@ -40,7 +49,7 @@ Item text: { - if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) + if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) { return printCoreConfiguration.activeMaterial.name } @@ -58,7 +67,7 @@ Item id: printCoreLabel text: { - if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) + if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) { return printCoreConfiguration.hotendID } From dc855689734b70109d670a9f7f19e2741b3e4433 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Aug 2018 13:52:09 +0200 Subject: [PATCH 038/364] Printer tiles in sidepanel can now be collapsed even if no job is active CL-893 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 6b5bb90479..2d37142935 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -81,7 +81,6 @@ Component { anchors.fill: parent onClicked: base.collapsed = !base.collapsed - enabled: modelData.activePrintJob != null } Rectangle @@ -110,7 +109,6 @@ Component id: collapseIcon width: 15 height: 15 - visible: modelData.activePrintJob != null sourceSize.width: width sourceSize.height: height source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") @@ -199,11 +197,14 @@ Component Item { id: jobInfo + property var showJobInfo: modelData.activePrintJob != null && modelData.activePrintJob.state != "queued" + anchors.top: jobSpacer.bottom anchors.left: parent.left anchors.right: parent.right anchors.margins: UM.Theme.getSize("default_margin").width - height: childrenRect.height + UM.Theme.getSize("default_margin").height + height: showJobInfo ? childrenRect.height + UM.Theme.getSize("default_margin").height: 0 + visible: showJobInfo Label { id: printJobName From 5a13b86a3ff6922f55dd81341617e7df56b92fa5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Aug 2018 14:55:18 +0200 Subject: [PATCH 039/364] Changed style for context button CL-894 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 1 - .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2d37142935..261685feda 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -224,7 +224,6 @@ Component source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter - //anchors.bottom: totalTimeLabel.top width: parent.width / 3 height: width } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 290e3d7605..d1d3b176bd 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -120,12 +120,25 @@ Item Button { id: contextButton - text: "..." + text: "\u22EE" //Unicode; Three stacked points. + + width: 30 + height: width anchors { right: parent.right top: parent.top } + hoverEnabled: true + + background: Rectangle + { + opacity: contextButton.down || contextButton.hovered ? 1 : 0 + width: contextButton.width + height: contextButton.height + radius: 0.5 * width + color: "grey" + } onClicked: parent.switchPopupState() } @@ -138,8 +151,6 @@ Item closePolicy: Popup.CloseOnPressOutsideParent x: parent.width - width y: contextButton.height - //y: configurationSelector.height - UM.Theme.getSize("default_lining").height - //x: configurationSelector.width - width width: 200 height: contentItem.height + 2 * padding visible: false From 08b325ee0484da12b1afb632de7c681bae6f482b Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 22 Aug 2018 12:31:48 +0200 Subject: [PATCH 040/364] Correctly load material favorites from preferences Contributes to CURA-5378, CURA-5162 --- cura/CuraApplication.py | 2 +- cura/Machines/MaterialManager.py | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 3cd49e591f..27f558bc41 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -501,7 +501,7 @@ class CuraApplication(QtApplication): preferences.addPreference("view/filter_current_build_plate", False) preferences.addPreference("cura/sidebar_collapsed", False) - preferences.addPreference("cura/favorite_materials", []) + preferences.addPreference("cura/favorite_materials", ";".join([])) self._need_to_show_user_agreement = not preferences.getValue("general/accepted_user_agreement") diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index d59aa07590..1463f2e40e 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -199,11 +199,8 @@ class MaterialManager(QObject): self.materialsUpdated.emit() favorites = self._application.getPreferences().getValue("cura/favorite_materials") - print(favorites) - for item in favorites: - print(item) + for item in favorites.split(";"): self._favorites.add(item) - print("LOADED FAVES", self._favorites) self.favoritesUpdated.emit() def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: @@ -623,24 +620,20 @@ class MaterialManager(QObject): @pyqtSlot(str) def addFavorite(self, root_material_id: str): - print(root_material_id) self._favorites.add(root_material_id) self.favoritesUpdated.emit() - print(self._favorites) - print(list(self._favorites)) # Ensure all settings are saved. - self._application.getPreferences().setValue("cura/favorite_materials", list(self._favorites)) + self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) self._application.saveSettings() @pyqtSlot(str) def removeFavorite(self, root_material_id: str): self._favorites.remove(root_material_id) self.favoritesUpdated.emit() - print(self._favorites) # Ensure all settings are saved. - self._application.getPreferences().setValue("cura/favorite_materials", list(self._favorites)) + self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) self._application.saveSettings() @pyqtSlot() From cb713eea6ae7b9bf9146e079da3cf4dd21400038 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 22 Aug 2018 12:33:29 +0200 Subject: [PATCH 041/364] Improve models Contributes to CURA-5162, CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 2 ++ cura/Machines/Models/BrandMaterialsModel.py | 4 +++- .../Machines/Models/FavoriteMaterialsModel.py | 9 ++++---- cura/Machines/Models/GenericMaterialsModel.py | 21 ++++++++++++------- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index ceba1f6eeb..ebf87e26b3 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -23,6 +23,7 @@ class BaseMaterialsModel(ListModel): ContainerNodeRole = Qt.UserRole + 7 ColorCodeRole = Qt.UserRole + 8 GUIDRole = Qt.UserRole + 9 + IsFavoriteRole = Qt.UserRole + 10 extruderPositionChanged = pyqtSignal() @@ -40,6 +41,7 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.ColorRole, "color_name") self.addRoleName(self.ColorCodeRole, "color_code") self.addRoleName(self.ContainerNodeRole, "container_node") + self.addRoleName(self.IsFavoriteRole, "is_favorite") self._extruder_position = 0 self._extruder_stack = None diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index c5edd6e57c..1eb76ca33c 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -58,6 +58,7 @@ class BrandMaterialsModel(ListModel): self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. + # self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed self._update() def _updateExtruderStack(self): @@ -106,6 +107,7 @@ class BrandMaterialsModel(ListModel): for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata + favorites = self._material_manager.getFavorites() # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): @@ -142,7 +144,7 @@ class BrandMaterialsModel(ListModel): "adhesion_info": metadata["adhesion_info"], "is_read_only": self._container_registry.isReadOnly(metadata["id"]), "container_node": container_node, - "is_favorite": False + "is_favorite": root_material_id in favorites } brand_group_dict[brand][material_type].append(item) diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 9d05f8cb4a..d9ca69f4e1 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -27,6 +27,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): if global_stack is None: self.setItems([]) return + extruder_position = str(self._extruder_position) if extruder_position not in global_stack.extruders: self.setItems([]) @@ -40,8 +41,6 @@ class FavoriteMaterialsModel(BaseMaterialsModel): favorite_ids = self._material_manager.getFavorites() - print("favorite_ids:", favorite_ids) - item_list = [] for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata @@ -61,11 +60,13 @@ class FavoriteMaterialsModel(BaseMaterialsModel): "brand": metadata["brand"], "material": metadata["material"], "color_name": metadata["color_name"], - "container_node": container_node + "color_code": metadata["color_code"], + "container_node": container_node, + "is_favorite": True } item_list.append(item) # Sort the item list by material name alphabetically - item_list = sorted(item_list, key = lambda d: d["name"].upper()) + item_list = sorted(item_list, key = lambda d: d["brand"].upper()) self.setItems(item_list) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index f14b039c91..90c8d43026 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -38,6 +38,8 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return + favorites = self._material_manager.getFavorites() + item_list = [] for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata @@ -50,14 +52,17 @@ class GenericMaterialsModel(BaseMaterialsModel): if bool(metadata.get("removed", False)): continue - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "name": metadata["name"], + "brand": metadata["brand"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "container_node": container_node, + "is_favorite": root_material_id in favorites + } item_list.append(item) # Sort the item list by material name alphabetically From 272e892179c7cdfe868cd0703e3e725da51fc552 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 22 Aug 2018 12:33:55 +0200 Subject: [PATCH 042/364] Extend Cura Light theme for material favorites Contributes to CURA-5162, CURA-5378 --- .../themes/cura-light/icons/favorites_star_empty.svg | 8 ++++++++ .../themes/cura-light/icons/favorites_star_full.svg | 6 ++++++ resources/themes/cura-light/theme.json | 12 +++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 resources/themes/cura-light/icons/favorites_star_empty.svg create mode 100644 resources/themes/cura-light/icons/favorites_star_full.svg diff --git a/resources/themes/cura-light/icons/favorites_star_empty.svg b/resources/themes/cura-light/icons/favorites_star_empty.svg new file mode 100644 index 0000000000..bb1205e7a7 --- /dev/null +++ b/resources/themes/cura-light/icons/favorites_star_empty.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/resources/themes/cura-light/icons/favorites_star_full.svg b/resources/themes/cura-light/icons/favorites_star_full.svg new file mode 100644 index 0000000000..aad45c5d02 --- /dev/null +++ b/resources/themes/cura-light/icons/favorites_star_full.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 7bcdafce98..c408146669 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -315,7 +315,13 @@ "tab_status_disconnected": [200, 200, 200, 255], "printer_config_matched": [12, 169, 227, 255], - "printer_config_mismatch": [127, 127, 127, 255] + "printer_config_mismatch": [127, 127, 127, 255], + + "favorites_header_bar": [245, 245, 245, 255], + "favorites_header_hover": [245, 245, 245, 255], + "favorites_header_text": [31, 36, 39, 255], + "favorites_header_text_hover": [31, 36, 39, 255], + "favorites_row_selected": [196, 239, 255, 255] }, "sizes": { @@ -372,6 +378,10 @@ "small_button": [2, 2], "small_button_icon": [1.5, 1.5], + "favorites_row": [2, 2], + "favorites_button": [2, 2], + "favorites_button_icon": [1.2, 1.2], + "printer_status_icon": [1.8, 1.8], "printer_sync_icon": [1.2, 1.2], From 00eb8e6788eb11bbe6d6f55f4c2c4d6839d36006 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 22 Aug 2018 12:34:38 +0200 Subject: [PATCH 043/364] Organize material preferences Contributes to CURA-5378 --- resources/qml/Cura.qml | 2 +- .../Preferences/Materials/MaterialSlot.qml | 120 +++++ .../{ => Materials}/MaterialView.qml | 2 + .../Materials/MaterialsDetailsPanel.qml | 103 +++++ .../{ => Materials}/MaterialsList.qml | 265 +++++++---- .../{ => Materials}/MaterialsPage.qml | 422 +++++++----------- .../Preferences/Materials/OldMaterialList.qml | 98 ++++ 7 files changed, 656 insertions(+), 356 deletions(-) create mode 100644 resources/qml/Preferences/Materials/MaterialSlot.qml rename resources/qml/Preferences/{ => Materials}/MaterialView.qml (99%) create mode 100644 resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml rename resources/qml/Preferences/{ => Materials}/MaterialsList.qml (50%) rename resources/qml/Preferences/{ => Materials}/MaterialsPage.qml (67%) create mode 100644 resources/qml/Preferences/Materials/OldMaterialList.qml diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 60f6e77ea9..f1bb3188b3 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -541,7 +541,7 @@ UM.MainWindow insertPage(2, catalog.i18nc("@title:tab", "Printers"), Qt.resolvedUrl("Preferences/MachinesPage.qml")); - insertPage(3, catalog.i18nc("@title:tab", "Materials"), Qt.resolvedUrl("Preferences/MaterialsPage.qml")); + insertPage(3, catalog.i18nc("@title:tab", "Materials"), Qt.resolvedUrl("Preferences/Materials/MaterialsPage.qml")); insertPage(4, catalog.i18nc("@title:tab", "Profiles"), Qt.resolvedUrl("Preferences/ProfilesPage.qml")); diff --git a/resources/qml/Preferences/Materials/MaterialSlot.qml b/resources/qml/Preferences/Materials/MaterialSlot.qml new file mode 100644 index 0000000000..678a69bd54 --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialSlot.qml @@ -0,0 +1,120 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium 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.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: material_slot + property var material + property var hovered: false + property var is_favorite: material.is_favorite + + height: UM.Theme.getSize("favorites_row").height + width: parent.width + color: base.currentItem == model ? UM.Theme.getColor("favorites_row_selected") : "transparent" + + Row + { + height: parent.height + width: parent.width + Rectangle + { + id: swatch + color: material.color_code + border.width: UM.Theme.getSize("default_lining").width + border.color: "black" + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + Label + { + text: material.brand + " " + material.name + verticalAlignment: Text.AlignVCenter + height: parent.height + anchors.left: swatch.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + } + MouseArea + { + anchors.fill: parent + onClicked: { base.currentItem = material } + hoverEnabled: true + onEntered: { material_slot.hovered = true } + onExited: { material_slot.hovered = false } + } + Button + { + id: favorite_button + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + visible: material_slot.hovered || material_slot.is_favorite || favorite_button.hovered + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + } + onClicked: + { + if (material_slot.is_favorite) { + base.materialManager.removeFavorite(material.root_material_id) + material_slot.is_favorite = false + return + } + base.materialManager.addFavorite(material.root_material_id) + material_slot.is_favorite = true + return + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + sourceSize.width: width + sourceSize.height: height + color: + { + if (favorite_button.hovered) + { + return UM.Theme.getColor("primary_hover") + } + else + { + if (material_slot.is_favorite) + { + return UM.Theme.getColor("primary") + } + else + { + UM.Theme.getColor("text_inactive") + } + } + } + source: material_slot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") + } + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/Materials/MaterialView.qml similarity index 99% rename from resources/qml/Preferences/MaterialView.qml rename to resources/qml/Preferences/Materials/MaterialView.qml index 0929f1790a..c3503ae646 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/Materials/MaterialView.qml @@ -8,6 +8,8 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura +import ".." // Access to ReadOnlyTextArea.qml + TabView { id: base diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml new file mode 100644 index 0000000000..e18ae15201 --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -0,0 +1,103 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: detailsPanel + + function updateMaterialPropertiesObject( currentItem ) + { +// var currentItem = materialsModel.getItem(materialListView.currentIndex); + + materialProperties.name = currentItem.name ? currentItem.name : "Unknown"; + materialProperties.guid = currentItem.guid; + materialProperties.container_id = currentItem.container_id; + + materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown"; + materialProperties.material = currentItem.material ? currentItem.material : "Unknown"; + materialProperties.color_name = currentItem.color_name ? currentItem.color_name : "Yellow"; + materialProperties.color_code = currentItem.color_code ? currentItem.color_code : "yellow"; + + materialProperties.description = currentItem.description ? currentItem.description : ""; + materialProperties.adhesion_info = currentItem.adhesion_info ? currentItem.adhesion_info : ""; + + materialProperties.density = currentItem.density ? currentItem.density : 0.0; + materialProperties.diameter = currentItem.diameter ? currentItem.diameter : 0.0; + materialProperties.approximate_diameter = currentItem.approximate_diameter ? currentItem.approximate_diameter : "0"; + } + + Item + { + anchors.fill: parent + + Item // Material title Label + { + id: profileName + + width: parent.width + height: childrenRect.height + + Label { + text: materialProperties.name + font: UM.Theme.getFont("large") + } + } + + MaterialView // Material detailed information view below the title Label + { + id: materialDetailsView + anchors + { + left: parent.left + right: parent.right + top: profileName.bottom + topMargin: UM.Theme.getSize("default_margin").height + bottom: parent.bottom + } + + editingEnabled: base.currentItem != null && !base.currentItem.is_read_only + + properties: materialProperties + containerId: base.currentItem != null ? base.currentItem.container_id : "" + currentMaterialNode: base.currentItem.container_node + + + } + + QtObject + { + id: materialProperties + + property string guid: "00000000-0000-0000-0000-000000000000" + property string container_id: "Unknown"; + property string name: "Unknown"; + property string profile_type: "Unknown"; + property string brand: "Unknown"; + property string material: "Unknown"; // This needs to be named as "material" to be consistent with + // the material container's metadata entry + + property string color_name: "Yellow"; + property color color_code: "yellow"; + + property real density: 0.0; + property real diameter: 0.0; + property string approximate_diameter: "0"; + + property real spool_cost: 0.0; + property real spool_weight: 0.0; + property real spool_length: 0.0; + property real cost_per_meter: 0.0; + + property string description: ""; + property string adhesion_info: ""; + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml similarity index 50% rename from resources/qml/Preferences/MaterialsList.qml rename to resources/qml/Preferences/Materials/MaterialsList.qml index db0f5461ec..a051f55cac 100644 --- a/resources/qml/Preferences/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -6,42 +6,174 @@ import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 import QtQuick.Dialogs 1.2 + import UM 1.2 as UM import Cura 1.0 as Cura Item { id: materialList - UM.I18nCatalog { id: catalog; name: "cura"; } - Cura.BrandMaterialsModel { id: materialsModel } - Cura.GenericMaterialsModel { id: genericMaterialsModel } - - width: materialScrollView.width - 20 + width: materialScrollView.width - 17 height: childrenRect.height - + // Children + UM.I18nCatalog { id: catalog; name: "cura"; } + Cura.BrandMaterialsModel { id: materialsModel } + Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } + Cura.GenericMaterialsModel { id: genericMaterialsModel } Column { Rectangle { - height: 23 + property var expanded: true + + id: favorites_section + height: childrenRect.height width: materialList.width - Label + Rectangle { - text: "Generic" + id: favorites_header_background + color: UM.Theme.getColor("favorites_header_bar") + anchors.fill: favorites_header } - } - Repeater - { - model: genericMaterialsModel - delegate: Rectangle + Row { - height: 23 - width: materialList.width - color: "green" + id: favorites_header Label { - text: model.name + id: favorites_name + text: "Favorites" + height: UM.Theme.getSize("favorites_row").height + width: materialList.width - UM.Theme.getSize("favorites_button").width + verticalAlignment: Text.AlignVCenter + leftPadding: 4 + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: "black" + source: favorites_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + } + } + MouseArea + { + anchors.fill: favorites_header + onPressed: + { + favorites_section.expanded = !favorites_section.expanded + } + } + Column + { + anchors.top: favorites_header.bottom + anchors.left: parent.left + width: materialList.width + height: favorites_section.expanded ? childrenRect.height : 0 + visible: favorites_section.expanded + Repeater + { + model: favoriteMaterialsModel + delegate: MaterialSlot { + material: model + } + } + } + } + Rectangle + { + property var expanded: true + + id: generic_section + height: childrenRect.height + width: materialList.width + Rectangle + { + id: generic_header_background + color: UM.Theme.getColor("favorites_header_bar") + anchors.fill: generic_header + } + Row + { + id: generic_header + Label + { + id: generic_name + text: "Generic" + height: UM.Theme.getSize("favorites_row").height + width: materialList.width - UM.Theme.getSize("favorites_button").width + verticalAlignment: Text.AlignVCenter + leftPadding: 4 + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: "black" + source: generic_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + } + } + MouseArea + { + anchors.fill: generic_header + onPressed: + { + generic_section.expanded = !generic_section.expanded + } + } + Column + { + anchors.top: generic_header.bottom + width: materialList.width + anchors.left: parent.left + height: generic_section.expanded ? childrenRect.height : 0 + visible: generic_section.expanded + Repeater + { + model: genericMaterialsModel + delegate: MaterialSlot { + material: model + } } } } @@ -60,7 +192,7 @@ Item Rectangle { id: brand_header_background - color: "grey" + color: UM.Theme.getColor("favorites_header_bar") anchors.fill: brand_header } Row @@ -71,16 +203,16 @@ Item { id: brand_name text: model.name - height: 24 - width: parent.width - 24 + height: UM.Theme.getSize("favorites_row").height + width: parent.width - UM.Theme.getSize("favorites_button").width verticalAlignment: Text.AlignVCenter leftPadding: 4 } Button { text: "" - implicitWidth: 24 - implicitHeight: 24 + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height UM.RecolorImage { anchors { @@ -115,9 +247,8 @@ Item Column { anchors.top: brand_header.bottom - width: parent.width - leftPadding + width: parent.width anchors.left: parent.left - leftPadding: 8 height: brand_section.expanded ? childrenRect.height : 0 visible: brand_section.expanded Repeater @@ -133,29 +264,34 @@ Item Rectangle { id: material_type_header_background - color: "grey" + color: UM.Theme.getColor("lining") anchors.bottom: material_type_header.bottom - height: 1 - width: parent.width + anchors.left: material_type_header.left + height: UM.Theme.getSize("default_lining").height + width: material_type_header.width } Row { id: material_type_header - width: parent.width - + width: parent.width - 8 + anchors + { + left: parent.left + leftMargin: 8 + } Label { text: model.name - height: 24 - width: parent.width - 24 + height: UM.Theme.getSize("favorites_row").height + width: parent.width - UM.Theme.getSize("favorites_button").width id: material_type_name verticalAlignment: Text.AlignVCenter } Button { text: "" - implicitWidth: 24 - implicitHeight: 24 + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height UM.RecolorImage { anchors { @@ -191,69 +327,14 @@ Item { height: material_type_section.expanded ? childrenRect.height : 0 visible: material_type_section.expanded - width: parent.width - leftPadding + width: parent.width anchors.top: material_type_header.bottom - leftPadding: 8 anchors.left: parent.left Repeater { model: colors_model - delegate: Rectangle - { - height: 24 - width: parent.width -// color: "green" - Row - { - height: parent.height - width: parent.width - Rectangle - { - id: swatch - color: model.color_code - border.width: 1 - border.color: "black" - width: 14 - height: 14 - anchors.verticalCenter: parent.verticalCenter - } - Label - { - text: model.name - verticalAlignment: Text.AlignVCenter - height: 24 - anchors.left: swatch.right - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: 4 - } - MouseArea - { - anchors.fill: parent - onClicked: - { - print(model.guid) - } - } - Button - { - text: "+" - implicitWidth: 24 - implicitHeight: 24 - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - onClicked: - { - if (model.is_favorite) { - base.materialManager.removeFavorite(model.root_material_id) - model.is_favorite = false - return - } - base.materialManager.addFavorite(model.root_material_id) - model.is_favorite = true - return - } - } - } + delegate: MaterialSlot { + material: model } } } diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml similarity index 67% rename from resources/qml/Preferences/MaterialsPage.qml rename to resources/qml/Preferences/Materials/MaterialsPage.qml index 07b5da3f4e..0e615a8d1b 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -9,13 +9,22 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura - Item { id: base property QtObject materialManager: CuraApplication.getMaterialManager() - property var resetEnabled: false // Keep PreferencesDialog happy + // Keep PreferencesDialog happy + property var resetEnabled: false + property var currentItem: null + property var isCurrentItemActivated: + { + const extruder_position = Cura.ExtruderManager.activeExtruderIndex; + const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; + return base.currentItem.root_material_id == root_material_id; + } + property string newRootMaterialIdToSwitchTo: "" + property bool toActivateNewMaterial: false UM.I18nCatalog { @@ -30,11 +39,72 @@ Item { id: genericMaterialsModel } + // Component.onCompleted: + // { + // // Select the activated material when this page shows up + // const extruder_position = Cura.ExtruderManager.activeExtruderIndex; + // const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; + // var itemIndex = -1; + // for (var i = 0; i < materialsModel.rowCount(); ++i) + // { + // var item = materialsModel.getItem(i); + // if (item.root_material_id == active_root_material_id) + // { + // itemIndex = i; + // break; + // } + // } + // materialListView.currentIndex = itemIndex; + // } + + // This connection makes sure that we will switch to the new + Connections + { + target: materialsModel + onItemsChanged: + { + var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id; + var position = Cura.ExtruderManager.activeExtruderIndex; + // try to pick the currently selected item; it may have been moved + if (base.newRootMaterialIdToSwitchTo == "") + { + base.newRootMaterialIdToSwitchTo = currentItemId; + } + + for (var idx = 0; idx < materialsModel.rowCount(); ++idx) + { + var item = materialsModel.getItem(idx); + if (item.root_material_id == base.newRootMaterialIdToSwitchTo) + { + // Switch to the newly created profile if needed + materialListView.currentIndex = idx; + materialListView.activateDetailsWithIndex(materialListView.currentIndex); + if (base.toActivateNewMaterial) + { + Cura.MachineManager.setMaterial(position, item.container_node); + } + base.newRootMaterialIdToSwitchTo = ""; + base.toActivateNewMaterial = false; + return + } + } + + materialListView.currentIndex = 0; + materialListView.activateDetailsWithIndex(materialListView.currentIndex); + if (base.toActivateNewMaterial) + { + Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node); + } + base.newRootMaterialIdToSwitchTo = ""; + base.toActivateNewMaterial = false; + } + } + + // Main layout Label { id: titleLabel - anchors { top: parent.top @@ -42,45 +112,12 @@ Item right: parent.right margins: 5 * screenScaleFactor } - font.pointSize: 18 text: catalog.i18nc("@title:tab", "Materials") } - property var hasCurrentItem: materialListView.currentItem != null - - property var currentItem: - { // is soon to be overwritten - var current_index = materialListView.currentIndex; - return materialsModel.getItem(current_index); - } - - property var isCurrentItemActivated: - { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return base.currentItem.root_material_id == root_material_id; - } - - Component.onCompleted: - { - // Select the activated material when this page shows up - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - var itemIndex = -1; - for (var i = 0; i < materialsModel.rowCount(); ++i) - { - var item = materialsModel.getItem(i); - if (item.root_material_id == active_root_material_id) - { - itemIndex = i; - break; - } - } - materialListView.currentIndex = itemIndex; - } - - Row // Button Row + // Button Row + Row { id: buttonRow anchors @@ -173,63 +210,102 @@ Item } } - property string newRootMaterialIdToSwitchTo: "" - property bool toActivateNewMaterial: false - - // This connection makes sure that we will switch to the new - Connections - { - target: materialsModel - onItemsChanged: + Item { + id: contentsItem + anchors { - var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id; - var position = Cura.ExtruderManager.activeExtruderIndex; - - // try to pick the currently selected item; it may have been moved - if (base.newRootMaterialIdToSwitchTo == "") - { - base.newRootMaterialIdToSwitchTo = currentItemId; - } - - for (var idx = 0; idx < materialsModel.rowCount(); ++idx) - { - var item = materialsModel.getItem(idx); - if (item.root_material_id == base.newRootMaterialIdToSwitchTo) - { - // Switch to the newly created profile if needed - materialListView.currentIndex = idx; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, item.container_node); - } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; - return - } - } - - materialListView.currentIndex = 0; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node); - } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; + top: titleLabel.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + margins: 5 * screenScaleFactor + bottomMargin: 0 } + clip: true } + Item + { + anchors + { + top: buttonRow.bottom + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + right: parent.right + bottom: parent.bottom + } + + SystemPalette { id: palette } + + Label + { + id: captionLabel + anchors + { + top: parent.top + left: parent.left + } + visible: text != "" + text: + { + var caption = catalog.i18nc("@action:label", "Printer") + ": " + Cura.MachineManager.activeMachineName; + if (Cura.MachineManager.hasVariants) + { + caption += ", " + Cura.MachineManager.activeDefinitionVariantsName + ": " + Cura.MachineManager.activeVariantName; + } + return caption; + } + width: materialScrollView.width + elide: Text.ElideRight + } + + ScrollView + { + id: materialScrollView + 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 + { + parent: viewport + anchors.fill: parent + color: palette.light + } + + width: true ? (parent.width * 0.4) | 0 : parent.width + frameVisible: true + verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn + + MaterialsList {} + } + + // MaterialsDetailsPanel + // { + // anchors + // { + // left: materialScrollView.right + // leftMargin: UM.Theme.getSize("default_margin").width + // top: parent.top + // bottom: parent.bottom + // right: parent.right + // } + // } + } + + // Dialogs MessageDialog { id: confirmRemoveMaterialDialog - icon: StandardIcon.Question; title: catalog.i18nc("@title:window", "Confirm Remove") text: catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name) standardButtons: StandardButton.Yes | StandardButton.No modality: Qt.ApplicationModal - onYes: { base.materialManager.removeMaterial(base.currentItem.container_node); @@ -299,184 +375,4 @@ Item { id: messageDialog } - - - Item { - id: contentsItem - - anchors - { - top: titleLabel.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - margins: 5 * screenScaleFactor - bottomMargin: 0 - } - - clip: true - } - - Item - { - anchors - { - top: buttonRow.bottom - topMargin: UM.Theme.getSize("default_margin").height - left: parent.left - right: parent.right - bottom: parent.bottom - } - - SystemPalette { id: palette } - - Label - { - id: captionLabel - anchors - { - top: parent.top - left: parent.left - } - visible: text != "" - text: - { - var caption = catalog.i18nc("@action:label", "Printer") + ": " + Cura.MachineManager.activeMachineName; - if (Cura.MachineManager.hasVariants) - { - caption += ", " + Cura.MachineManager.activeDefinitionVariantsName + ": " + Cura.MachineManager.activeVariantName; - } - return caption; - } - width: materialScrollView.width - elide: Text.ElideRight - } - - ScrollView - { - id: materialScrollView - 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 - { - parent: viewport - anchors.fill: parent - color: palette.light - } - - width: true ? (parent.width * 0.4) | 0 : parent.width - frameVisible: true - - MaterialsList {} - } - - - Item - { - id: detailsPanel - - anchors - { - left: materialScrollView.right - leftMargin: UM.Theme.getSize("default_margin").width - top: parent.top - bottom: parent.bottom - right: parent.right - } - - function updateMaterialPropertiesObject( currentItem ) - { -// var currentItem = materialsModel.getItem(materialListView.currentIndex); - - materialProperties.name = currentItem.name ? currentItem.name : "Unknown"; - materialProperties.guid = currentItem.guid; - materialProperties.container_id = currentItem.container_id; - - materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown"; - materialProperties.material = currentItem.material ? currentItem.material : "Unknown"; - materialProperties.color_name = currentItem.color_name ? currentItem.color_name : "Yellow"; - materialProperties.color_code = currentItem.color_code ? currentItem.color_code : "yellow"; - - materialProperties.description = currentItem.description ? currentItem.description : ""; - materialProperties.adhesion_info = currentItem.adhesion_info ? currentItem.adhesion_info : ""; - - materialProperties.density = currentItem.density ? currentItem.density : 0.0; - materialProperties.diameter = currentItem.diameter ? currentItem.diameter : 0.0; - materialProperties.approximate_diameter = currentItem.approximate_diameter ? currentItem.approximate_diameter : "0"; - } - - Item - { - anchors.fill: parent - - Item // Material title Label - { - id: profileName - - width: parent.width - height: childrenRect.height - - Label { - text: materialProperties.name - font: UM.Theme.getFont("large") - } - } - - MaterialView // Material detailed information view below the title Label - { - id: materialDetailsView - anchors - { - left: parent.left - right: parent.right - top: profileName.bottom - topMargin: UM.Theme.getSize("default_margin").height - bottom: parent.bottom - } - - editingEnabled: base.currentItem != null && !base.currentItem.is_read_only - - properties: materialProperties - containerId: base.currentItem != null ? base.currentItem.container_id : "" - currentMaterialNode: base.currentItem.container_node - - property alias pane: base - } - - QtObject - { - id: materialProperties - - property string guid: "00000000-0000-0000-0000-000000000000" - property string container_id: "Unknown"; - property string name: "Unknown"; - property string profile_type: "Unknown"; - property string brand: "Unknown"; - property string material: "Unknown"; // This needs to be named as "material" to be consistent with - // the material container's metadata entry - - property string color_name: "Yellow"; - property color color_code: "yellow"; - - property real density: 0.0; - property real diameter: 0.0; - property string approximate_diameter: "0"; - - property real spool_cost: 0.0; - property real spool_weight: 0.0; - property real spool_length: 0.0; - property real cost_per_meter: 0.0; - - property string description: ""; - property string adhesion_info: ""; - } - } - } - } } diff --git a/resources/qml/Preferences/Materials/OldMaterialList.qml b/resources/qml/Preferences/Materials/OldMaterialList.qml new file mode 100644 index 0000000000..6c15ddf7cc --- /dev/null +++ b/resources/qml/Preferences/Materials/OldMaterialList.qml @@ -0,0 +1,98 @@ +ListView +{ + id: materialListView + + model: materialsModel + + section.property: "brand" + section.criteria: ViewSection.FullString + section.delegate: Rectangle + { + width: materialScrollView.width + height: childrenRect.height + color: palette.light + + Label + { + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_lining").width + text: section + font.bold: true + color: palette.text + } + } + + delegate: Rectangle + { + width: materialScrollView.width + height: childrenRect.height + color: ListView.isCurrentItem ? palette.highlight : (model.index % 2) ? palette.base : palette.alternateBase + + Row + { + id: materialRow + spacing: (UM.Theme.getSize("default_margin").width / 2) | 0 + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + + property bool isCurrentItem: parent.ListView.isCurrentItem + + property bool isItemActivated: + { + const extruder_position = Cura.ExtruderManager.activeExtruderIndex; + const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; + return model.root_material_id == root_material_id; + } + + Rectangle + { + width: Math.floor(parent.height * 0.8) + height: Math.floor(parent.height * 0.8) + color: model.color_code + border.color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; + anchors.verticalCenter: parent.verticalCenter + } + Label + { + width: Math.floor((parent.width * 0.3)) + text: model.material + elide: Text.ElideRight + font.italic: materialRow.isItemActivated + color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; + } + Label + { + text: (model.name != model.material) ? model.name : "" + elide: Text.ElideRight + font.italic: materialRow.isItemActivated + color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; + } + } + + MouseArea + { + anchors.fill: parent + onClicked: + { + parent.ListView.view.currentIndex = model.index; + } + } + } + + function activateDetailsWithIndex(index) + { + var model = materialsModel.getItem(index); + base.currentItem = model; + materialDetailsView.containerId = model.container_id; + materialDetailsView.currentMaterialNode = model.container_node; + + detailsPanel.updateMaterialPropertiesObject(); + } + + onCurrentIndexChanged: + { + forceActiveFocus(); // causes the changed fields to be saved + activateDetailsWithIndex(currentIndex); + } +} From 94ce9205c3fc10f69c7508a189ca3a9641a4b123 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 22 Aug 2018 13:30:59 +0200 Subject: [PATCH 044/364] Remove pytest cache --- .gitignore | 1 + .pytest_cache/README.md | 8 --- .pytest_cache/v/cache/lastfailed | 100 ------------------------------- .pytest_cache/v/cache/nodeids | 3 - 4 files changed, 1 insertion(+), 111 deletions(-) delete mode 100644 .pytest_cache/README.md delete mode 100644 .pytest_cache/v/cache/lastfailed delete mode 100644 .pytest_cache/v/cache/nodeids diff --git a/.gitignore b/.gitignore index 98eaa6f414..5cc60c2f4c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ LC_MESSAGES .cache *.qmlc .mypy_cache +.pytest_cache #MacOS .DS_Store diff --git a/.pytest_cache/README.md b/.pytest_cache/README.md deleted file mode 100644 index bb78ba07ee..0000000000 --- a/.pytest_cache/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# pytest cache directory # - -This directory contains data from the pytest's cache plugin, -which provides the `--lf` and `--ff` options, as well as the `cache` fixture. - -**Do not** commit this to version control. - -See [the docs](https://docs.pytest.org/en/latest/cache.html) for more information. diff --git a/.pytest_cache/v/cache/lastfailed b/.pytest_cache/v/cache/lastfailed deleted file mode 100644 index adb96c8331..0000000000 --- a/.pytest_cache/v/cache/lastfailed +++ /dev/null @@ -1,100 +0,0 @@ -{ - "tests/Settings/TestCuraContainerRegistry.py::test_addContainerBadSettingVersion": true, - "tests/Settings/TestCuraContainerRegistry.py::test_addContainerExtruderStack": true, - "tests/Settings/TestCuraContainerRegistry.py::test_addContainerGlobalStack": true, - "tests/Settings/TestCuraContainerRegistry.py::test_addContainerGoodSettingVersion": true, - "tests/Settings/TestCuraContainerRegistry.py::test_addContainerNoSettingVersion": true, - "tests/Settings/TestExtruderStack.py::test_addContainer": true, - "tests/Settings/TestExtruderStack.py::test_constrainDefinitionValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainDefinitionValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainMaterialInvalid[container2]": true, - "tests/Settings/TestExtruderStack.py::test_constrainMaterialValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainMaterialValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesInvalid[container2]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityChangesValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityInvalid[container2]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainQualityValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainUserChangesInvalid[container2]": true, - "tests/Settings/TestExtruderStack.py::test_constrainUserChangesValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainUserChangesValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainVariantInvalid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainVariantInvalid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_constrainVariantValid[container0]": true, - "tests/Settings/TestExtruderStack.py::test_constrainVariantValid[container1]": true, - "tests/Settings/TestExtruderStack.py::test_deserializeMoveInstanceContainer": true, - "tests/Settings/TestExtruderStack.py::test_deserializeRemovesWrongContainerClass": true, - "tests/Settings/TestExtruderStack.py::test_deserializeRemovesWrongInstanceContainer": true, - "tests/Settings/TestExtruderStack.py::test_deserializeWrongDefinitionClass": true, - "tests/Settings/TestExtruderStack.py::test_getPropertyFallThrough": true, - "tests/Settings/TestExtruderStack.py::test_insertContainer": true, - "tests/Settings/TestExtruderStack.py::test_removeContainer": true, - "tests/Settings/TestExtruderStack.py::test_setPropertyUser[foo-value-100]": true, - "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-default_value-0.1337]": true, - "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-is_bright_pink-of course]": true, - "tests/Settings/TestExtruderStack.py::test_setPropertyUser[layer_height-value-0.1337]": true, - "tests/Settings/TestExtruderStack.py::test_setPropertyUser[support_enabled-value-True]": true, - "tests/Settings/TestGlobalStack.py::test_addContainer": true, - "tests/Settings/TestGlobalStack.py::test_addExtruder": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesInvalid[container2]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionChangesValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainDefinitionValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainMaterialInvalid[container2]": true, - "tests/Settings/TestGlobalStack.py::test_constrainMaterialValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainMaterialValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesInvalid[container2]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityChangesValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityInvalid[container2]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainQualityValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainUserChangesInvalid[container2]": true, - "tests/Settings/TestGlobalStack.py::test_constrainUserChangesValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainUserChangesValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainVariantInvalid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainVariantInvalid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_constrainVariantValid[container0]": true, - "tests/Settings/TestGlobalStack.py::test_constrainVariantValid[container1]": true, - "tests/Settings/TestGlobalStack.py::test_deserializeMoveInstanceContainer": true, - "tests/Settings/TestGlobalStack.py::test_deserializeRemovesWrongContainerClass": true, - "tests/Settings/TestGlobalStack.py::test_deserializeRemovesWrongInstanceContainer": true, - "tests/Settings/TestGlobalStack.py::test_deserializeWrongDefinitionClass": true, - "tests/Settings/TestGlobalStack.py::test_getPropertyFallThrough": true, - "tests/Settings/TestGlobalStack.py::test_getPropertyInstancesBeforeResolve": true, - "tests/Settings/TestGlobalStack.py::test_getPropertyNoResolveInDefinition": true, - "tests/Settings/TestGlobalStack.py::test_getPropertyResolveInDefinition": true, - "tests/Settings/TestGlobalStack.py::test_getPropertyResolveInInstance": true, - "tests/Settings/TestGlobalStack.py::test_hasNoUserValue": true, - "tests/Settings/TestGlobalStack.py::test_hasUserValueQualityChanges": true, - "tests/Settings/TestGlobalStack.py::test_hasUserValueUserChanges": true, - "tests/Settings/TestGlobalStack.py::test_insertContainer": true, - "tests/Settings/TestGlobalStack.py::test_removeContainer": true, - "tests/Settings/TestGlobalStack.py::test_setNextStack": true, - "tests/Settings/TestGlobalStack.py::test_setPropertyUser[foo-value-100]": true, - "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-default_value-0.1337]": true, - "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-is_bright_pink-of course]": true, - "tests/Settings/TestGlobalStack.py::test_setPropertyUser[layer_height-value-0.1337]": true, - "tests/Settings/TestGlobalStack.py::test_setPropertyUser[support_enabled-value-True]": true, - "tests/TestMachineAction.py::test_addMachineAction": true -} \ No newline at end of file diff --git a/.pytest_cache/v/cache/nodeids b/.pytest_cache/v/cache/nodeids deleted file mode 100644 index d548ce2ff2..0000000000 --- a/.pytest_cache/v/cache/nodeids +++ /dev/null @@ -1,3 +0,0 @@ -[ - "plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py::test_upgradeVersionNr[Empty config file-[general]\\n version = 5\\n [metadata]\\n setting_version = 4\\n]" -] \ No newline at end of file From 29180740de7100f58853556ce8603c54d2741f58 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 22 Aug 2018 13:36:17 +0200 Subject: [PATCH 045/364] Fix missed names --- resources/qml/Cura.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 60f6e77ea9..046a887a71 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -120,7 +120,7 @@ UM.MainWindow text: catalog.i18nc("@title:menu menubar:file","&Save...") onTriggered: { - var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetype": "application/x-curaproject+xml" }; + var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/x-curaproject+xml" }; if(UM.Preferences.getValue("cura/dialog_on_project_save")) { saveWorkspaceDialog.args = args; @@ -142,7 +142,7 @@ UM.MainWindow onTriggered: { var localDeviceId = "local_file"; - UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetype": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); + UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); } } @@ -151,7 +151,7 @@ UM.MainWindow text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection..."); enabled: UM.Selection.hasSelection; iconName: "document-save-as"; - onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetype": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); + onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); } MenuSeparator { } From afb4440d64494161b1a4eb041fcaeb21f44658af Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Wed, 22 Aug 2018 13:46:49 +0200 Subject: [PATCH 046/364] add PauseAtHeight post-processing script for RRF --- .../PauseAtHeightRepRapFirmwareDuet.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py new file mode 100644 index 0000000000..79e5d8c62d --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py @@ -0,0 +1,51 @@ +from ..Script import Script + +class PauseAtHeightRepRapFirmwareDuet(Script): + + def getSettingDataString(self): + return """{ + "name": "Pause at height for RepRapFirmware DuetWifi / Duet Ethernet / Duet Maestro", + "key": "PauseAtHeightRepRapFirmwareDuet", + "metadata": {}, + "version": 2, + "settings": + { + "pause_height": + { + "label": "Pause height", + "description": "At what height should the pause occur", + "unit": "mm", + "type": "float", + "default_value": 5.0 + } + } + }""" + + def execute(self, data): + current_z = 0. + pause_z = self.getSettingValueByKey("pause_height") + + layers_started = False + for layer_number, layer in enumerate(data): + lines = layer.split("\n") + for line in lines: + if ";LAYER:0" in line: + layers_started = True + continue + + if not layers_started: + continue + + if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: + current_z = self.getValue(line, 'Z') + if current_z != None: + if current_z >= pause_z: + prepend_gcode = ";TYPE:CUSTOM\n" + prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z + prepend_gcode += self.putValue(M = 226) + "\n" + layer = prepend_gcode + layer + + data[layer_number] = layer # Override the data of this layer with the modified data + return data + break + return data From 6225fff1f852e57bc47282cfd81cc7f11dfc6e2d Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 22 Aug 2018 15:58:58 +0200 Subject: [PATCH 047/364] Re-added material detail view Contributes to CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 2 +- cura/Machines/Models/BrandMaterialsModel.py | 33 +++++++++-------- .../Machines/Models/FavoriteMaterialsModel.py | 1 + cura/Machines/Models/GenericMaterialsModel.py | 1 + .../Preferences/Materials/MaterialSlot.qml | 2 +- .../Preferences/Materials/MaterialView.qml | 2 +- .../Materials/MaterialsDetailsPanel.qml | 35 +++++++++---------- .../Preferences/Materials/MaterialsPage.qml | 26 +++++++------- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index ebf87e26b3..80ecf72c0a 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -34,7 +34,7 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.RootMaterialIdRole, "root_material_id") self.addRoleName(self.IdRole, "id") - self.addRoleName(self.GUIDRole, "guid") + self.addRoleName(self.GUIDRole, "GUID") self.addRoleName(self.NameRole, "name") self.addRoleName(self.BrandRole, "brand") self.addRoleName(self.MaterialRole, "material") diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index 1eb76ca33c..154019d028 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -127,24 +127,23 @@ class BrandMaterialsModel(ListModel): # Now handle the individual materials item = { - "root_material_id": root_material_id, - # "root_material_id": container_node.metadata["base_file"] <- as written in material management model - "id": metadata["id"], - "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml - "guid": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "description": metadata["description"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "density": metadata.get("properties", {}).get("density", ""), - "diameter": metadata.get("properties", {}).get("diameter", ""), + "root_material_id": root_material_id, + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), "approximate_diameter": metadata["approximate_diameter"], - "adhesion_info": metadata["adhesion_info"], - "is_read_only": self._container_registry.isReadOnly(metadata["id"]), - "container_node": container_node, - "is_favorite": root_material_id in favorites + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": root_material_id in favorites } brand_group_dict[brand][material_type].append(item) diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index d9ca69f4e1..35a5229da1 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -56,6 +56,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): item = { "root_material_id": root_material_id, "id": metadata["id"], + "GUID": metadata["GUID"], "name": metadata["name"], "brand": metadata["brand"], "material": metadata["material"], diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 90c8d43026..a8f5bfbd35 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -55,6 +55,7 @@ class GenericMaterialsModel(BaseMaterialsModel): item = { "root_material_id": root_material_id, "id": metadata["id"], + "GUID": metadata["GUID"], "name": metadata["name"], "brand": metadata["brand"], "material": metadata["material"], diff --git a/resources/qml/Preferences/Materials/MaterialSlot.qml b/resources/qml/Preferences/Materials/MaterialSlot.qml index 678a69bd54..ab0dd23750 100644 --- a/resources/qml/Preferences/Materials/MaterialSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialSlot.qml @@ -21,7 +21,7 @@ Rectangle width: parent.width color: base.currentItem == model ? UM.Theme.getColor("favorites_row_selected") : "transparent" - Row + Item { height: parent.height width: parent.width diff --git a/resources/qml/Preferences/Materials/MaterialView.qml b/resources/qml/Preferences/Materials/MaterialView.qml index c3503ae646..1e5362567a 100644 --- a/resources/qml/Preferences/Materials/MaterialView.qml +++ b/resources/qml/Preferences/Materials/MaterialView.qml @@ -38,7 +38,7 @@ TabView if (!base.containerId || !base.editingEnabled) { return "" } - var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentMaterialNode, true); + var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentItem.container_node, true); if (linkedMaterials.length == 0) { return "" } diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index e18ae15201..fc8c6d728c 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -13,25 +13,24 @@ Item { id: detailsPanel + property var currentItem: base.currentItem + + onCurrentItemChanged: { updateMaterialPropertiesObject(currentItem) } + function updateMaterialPropertiesObject( currentItem ) { -// var currentItem = materialsModel.getItem(materialListView.currentIndex); - - materialProperties.name = currentItem.name ? currentItem.name : "Unknown"; - materialProperties.guid = currentItem.guid; - materialProperties.container_id = currentItem.container_id; - - materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown"; - materialProperties.material = currentItem.material ? currentItem.material : "Unknown"; - materialProperties.color_name = currentItem.color_name ? currentItem.color_name : "Yellow"; - materialProperties.color_code = currentItem.color_code ? currentItem.color_code : "yellow"; - - materialProperties.description = currentItem.description ? currentItem.description : ""; - materialProperties.adhesion_info = currentItem.adhesion_info ? currentItem.adhesion_info : ""; - - materialProperties.density = currentItem.density ? currentItem.density : 0.0; - materialProperties.diameter = currentItem.diameter ? currentItem.diameter : 0.0; - materialProperties.approximate_diameter = currentItem.approximate_diameter ? currentItem.approximate_diameter : "0"; + materialProperties.name = currentItem.name || "Unknown" + materialProperties.guid = currentItem.GUID; + materialProperties.container_id = currentItem.id + materialProperties.brand = currentItem.brand || "Unknown" + materialProperties.material = currentItem.material || "Unknown" + materialProperties.color_name = currentItem.color_name || "Yellow" + materialProperties.color_code = currentItem.color_code || "yellow" + materialProperties.description = currentItem.description || "" + materialProperties.adhesion_info = currentItem.adhesion_info || ""; + materialProperties.density = currentItem.density || 0.0 + materialProperties.diameter = currentItem.diameter || 0.0 + materialProperties.approximate_diameter = currentItem.approximate_diameter || "0" } Item @@ -66,7 +65,7 @@ Item editingEnabled: base.currentItem != null && !base.currentItem.is_read_only properties: materialProperties - containerId: base.currentItem != null ? base.currentItem.container_id : "" + containerId: base.currentItem != null ? base.currentItem.id : "" currentMaterialNode: base.currentItem.container_node diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 0e615a8d1b..ce7203f34b 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -56,8 +56,8 @@ Item // } // materialListView.currentIndex = itemIndex; // } - - // This connection makes sure that we will switch to the new + + onCurrentItemChanged: { MaterialsDetailsPanel.currentItem = currentItem } Connections { target: materialsModel @@ -284,17 +284,17 @@ Item MaterialsList {} } - // MaterialsDetailsPanel - // { - // anchors - // { - // left: materialScrollView.right - // leftMargin: UM.Theme.getSize("default_margin").width - // top: parent.top - // bottom: parent.bottom - // right: parent.right - // } - // } + MaterialsDetailsPanel + { + anchors + { + left: materialScrollView.right + leftMargin: UM.Theme.getSize("default_margin").width + top: parent.top + bottom: parent.bottom + right: parent.right + } + } } // Dialogs From 49e3c23d1438c7133e739af62b23f5f9297313b1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Aug 2018 16:53:27 +0200 Subject: [PATCH 048/364] Brackets on new line As per our code style. --- plugins/SimulationView/SimulationView.qml | 240 +++++++++++++++------- 1 file changed, 161 insertions(+), 79 deletions(-) diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index a3a8ced4cf..be767e93ab 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.4 @@ -12,30 +12,43 @@ import Cura 1.0 as Cura Item { id: base - width: { - if (UM.SimulationView.compatibilityMode) { + width: + { + if (UM.SimulationView.compatibilityMode) + { return UM.Theme.getSize("layerview_menu_size_compatibility").width; - } else { + } + else + { return UM.Theme.getSize("layerview_menu_size").width; } } height: { - if (viewSettings.collapsed) { - if (UM.SimulationView.compatibilityMode) { + if (viewSettings.collapsed) + { + if (UM.SimulationView.compatibilityMode) + { return UM.Theme.getSize("layerview_menu_size_compatibility_collapsed").height; } return UM.Theme.getSize("layerview_menu_size_collapsed").height; - } else if (UM.SimulationView.compatibilityMode) { + } + else if (UM.SimulationView.compatibilityMode) + { return UM.Theme.getSize("layerview_menu_size_compatibility").height; - } else if (UM.Preferences.getValue("layerview/layer_view_type") == 0) { + } + else if (UM.Preferences.getValue("layerview/layer_view_type") == 0) + { return UM.Theme.getSize("layerview_menu_size_material_color_mode").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) - } else { + } + else + { return UM.Theme.getSize("layerview_menu_size").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) } } Behavior on height { NumberAnimation { duration: 100 } } - property var buttonTarget: { + property var buttonTarget: + { if(parent != null) { var force_binding = parent.y; // ensure this gets reevaluated when the panel moves @@ -44,7 +57,8 @@ Item return Qt.point(0,0) } - Rectangle { + Rectangle + { id: layerViewMenu anchors.right: parent.right anchors.top: parent.top @@ -83,7 +97,8 @@ Item } } - ColumnLayout { + ColumnLayout + { id: viewSettings property bool collapsed: false @@ -195,7 +210,8 @@ Item width: width } - Connections { + Connections + { target: UM.Preferences onPreferenceChanged: { @@ -212,18 +228,22 @@ Item } } - Repeater { + Repeater + { model: Cura.ExtrudersModel{} - CheckBox { + CheckBox + { id: extrudersModelCheckBox checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == "" - onClicked: { + onClicked: + { viewSettings.extruder_opacities[index] = checked ? 1.0 : 0.0 UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|")); } visible: !UM.SimulationView.compatibilityMode enabled: index + 1 <= 4 - Rectangle { + Rectangle + { anchors.verticalCenter: parent.verticalCenter anchors.right: extrudersModelCheckBox.right width: UM.Theme.getSize("layerview_legend_size").width @@ -253,8 +273,10 @@ Item } } - Repeater { - model: ListModel { + Repeater + { + model: ListModel + { id: typesLegendModel Component.onCompleted: { @@ -285,13 +307,16 @@ Item } } - CheckBox { + CheckBox + { id: legendModelCheckBox checked: model.initialValue - onClicked: { + onClicked: + { UM.Preferences.setValue(model.preference, checked); } - Rectangle { + Rectangle + { anchors.verticalCenter: parent.verticalCenter anchors.right: legendModelCheckBox.right width: UM.Theme.getSize("layerview_legend_size").width @@ -320,18 +345,22 @@ Item } } - CheckBox { + CheckBox + { checked: viewSettings.only_show_top_layers - onClicked: { + onClicked: + { UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0); } text: catalog.i18nc("@label", "Only Show Top Layers") visible: UM.SimulationView.compatibilityMode style: UM.Theme.styles.checkbox } - CheckBox { + CheckBox + { checked: viewSettings.top_layer_count == 5 - onClicked: { + onClicked: + { UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1); } text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") @@ -339,8 +368,10 @@ Item style: UM.Theme.styles.checkbox } - Repeater { - model: ListModel { + Repeater + { + model: ListModel + { id: typesLegendModelNoCheck Component.onCompleted: { @@ -355,11 +386,13 @@ Item } } - Label { + Label + { text: label visible: viewSettings.show_legend id: typesLegendModelLabel - Rectangle { + Rectangle + { anchors.verticalCenter: parent.verticalCenter anchors.right: typesLegendModelLabel.right width: UM.Theme.getSize("layerview_legend_size").width @@ -378,30 +411,37 @@ Item } // Text for the minimum, maximum and units for the feedrates and layer thickness - Item { + Item + { id: gradientLegend visible: viewSettings.show_gradient width: parent.width height: UM.Theme.getSize("layerview_row").height - anchors { + anchors + { topMargin: UM.Theme.getSize("slider_layerview_margin").height horizontalCenter: parent.horizontalCenter } - Label { + Label + { text: minText() anchors.left: parent.left color: UM.Theme.getColor("setting_control_text") font: UM.Theme.getFont("default") - function minText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { + function minText() + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { return parseFloat(UM.SimulationView.getMinFeedrate()).toFixed(2) } // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2) } } @@ -409,20 +449,25 @@ Item } } - Label { + Label + { text: unitsText() anchors.horizontalCenter: parent.horizontalCenter color: UM.Theme.getColor("setting_control_text") font: UM.Theme.getFont("default") - function unitsText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { + function unitsText() + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { return "mm/s" } // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { return "mm" } } @@ -430,20 +475,25 @@ Item } } - Label { + Label + { text: maxText() anchors.right: parent.right color: UM.Theme.getColor("setting_control_text") font: UM.Theme.getFont("default") - function maxText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { + function maxText() + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { return parseFloat(UM.SimulationView.getMaxFeedrate()).toFixed(2) } // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2) } } @@ -453,7 +503,8 @@ Item } // Gradient colors for feedrate - Rectangle { // In QML 5.9 can be changed by LinearGradient + Rectangle + { // In QML 5.9 can be changed by LinearGradient // Invert values because then the bar is rotated 90 degrees id: feedrateGradient visible: viewSettings.show_feedrate_gradient @@ -463,20 +514,25 @@ Item border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient { - GradientStop { + gradient: Gradient + { + GradientStop + { position: 0.000 color: Qt.rgba(1, 0.5, 0, 1) } - GradientStop { + GradientStop + { position: 0.625 color: Qt.rgba(0.375, 0.5, 0, 1) } - GradientStop { + GradientStop + { position: 0.75 color: Qt.rgba(0.25, 1, 0, 1) } - GradientStop { + GradientStop + { position: 1.0 color: Qt.rgba(0, 0, 1, 1) } @@ -484,7 +540,8 @@ Item } // Gradient colors for layer thickness (similar to parula colormap) - Rectangle { // In QML 5.9 can be changed by LinearGradient + Rectangle // In QML 5.9 can be changed by LinearGradient + { // Invert values because then the bar is rotated 90 degrees id: thicknessGradient visible: viewSettings.show_thickness_gradient @@ -494,24 +551,30 @@ Item border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient { - GradientStop { + gradient: Gradient + { + GradientStop + { position: 0.000 color: Qt.rgba(1, 1, 0, 1) } - GradientStop { + GradientStop + { position: 0.25 color: Qt.rgba(1, 0.75, 0.25, 1) } - GradientStop { + GradientStop + { position: 0.5 color: Qt.rgba(0, 0.75, 0.5, 1) } - GradientStop { + GradientStop + { position: 0.75 color: Qt.rgba(0, 0.375, 0.75, 1) } - GradientStop { + GradientStop + { position: 1.0 color: Qt.rgba(0, 0, 0.5, 1) } @@ -520,19 +583,22 @@ Item } } - Item { + Item + { id: slidersBox width: parent.width visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity - anchors { + anchors + { top: parent.bottom topMargin: UM.Theme.getSize("slider_layerview_margin").height left: parent.left } - PathSlider { + PathSlider + { id: pathSlider height: UM.Theme.getSize("slider_handle").width @@ -553,25 +619,29 @@ Item rangeColor: UM.Theme.getColor("slider_groove_fill") // update values when layer data changes - Connections { + Connections + { target: UM.SimulationView onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) onCurrentPathChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) } // make sure the slider handlers show the correct value after switching views - Component.onCompleted: { + Component.onCompleted: + { pathSlider.setHandleValue(UM.SimulationView.currentPath) } } - LayerSlider { + LayerSlider + { id: layerSlider width: UM.Theme.getSize("slider_handle").width height: UM.Theme.getSize("layerview_menu_size").height - anchors { + anchors + { top: !UM.SimulationView.compatibilityMode ? pathSlider.bottom : parent.top topMargin: !UM.SimulationView.compatibilityMode ? UM.Theme.getSize("default_margin").height : 0 right: parent.right @@ -593,7 +663,8 @@ Item handleLabelWidth: UM.Theme.getSize("slider_layerview_background").width // update values when layer data changes - Connections { + Connections + { target: UM.SimulationView onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) @@ -601,45 +672,54 @@ Item } // make sure the slider handlers show the correct value after switching views - Component.onCompleted: { + Component.onCompleted: + { layerSlider.setLowerValue(UM.SimulationView.minimumLayer) layerSlider.setUpperValue(UM.SimulationView.currentLayer) } } // Play simulation button - Button { + Button + { id: playButton iconSource: "./resources/simulation_resume.svg" style: UM.Theme.styles.small_tool_button visible: !UM.SimulationView.compatibilityMode - anchors { + anchors + { verticalCenter: pathSlider.verticalCenter } property var status: 0 // indicates if it's stopped (0) or playing (1) - onClicked: { - switch(status) { - case 0: { + onClicked: + { + switch(status) + { + case 0: + { resumeSimulation() break } - case 1: { + case 1: + { pauseSimulation() break } } } - function pauseSimulation() { + function pauseSimulation() + { UM.SimulationView.setSimulationRunning(false) iconSource = "./resources/simulation_resume.svg" simulationTimer.stop() status = 0 } - function resumeSimulation() { + function resumeSimulation() + { UM.SimulationView.setSimulationRunning(true) iconSource = "./resources/simulation_pause.svg" simulationTimer.start() @@ -652,7 +732,8 @@ Item interval: 100 running: false repeat: true - onTriggered: { + onTriggered: + { var currentPath = UM.SimulationView.currentPath var numPaths = UM.SimulationView.numPaths var currentLayer = UM.SimulationView.currentLayer @@ -697,7 +778,8 @@ Item } } - FontMetrics { + FontMetrics + { id: fontMetrics font: UM.Theme.getFont("default") } From 5176ead0e2bb038348f679ed745e18c4fac8a890 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 15:07:31 +0200 Subject: [PATCH 049/364] Added print progress to sidebar CL-893 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 90 ++++++++++++++++++- 1 file changed, 86 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 261685feda..da9bf1d457 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -5,12 +5,16 @@ import QtQuick.Controls.Styles 1.3 import UM 1.3 as UM import Cura 1.0 as Cura + + Component { Rectangle { id: base property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. + + property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. visible: OutputDevice != null anchors.fill: parent @@ -41,8 +45,6 @@ Component ScrollView { - id: queuedPrintJobs - anchors { top: activePrintersLabel.bottom @@ -60,7 +62,7 @@ Component delegate: Rectangle { width: parent.width - height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height + height: childrenRect.height + UM.Theme.getSize("default_margin").height id: base property var collapsed: true @@ -89,7 +91,7 @@ Component anchors.top: parent.top width: 50 height: 50 - color: "blue" + color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } Label @@ -249,6 +251,86 @@ Component } } } + + ProgressBar + { + property var progress: + { + var result = modelData.activePrintJob.timeElapsed / modelData.activePrintJob.timeTotal + if(result > 1.0) + { + result = 1.0 + } + return result + } + + id: jobProgressBar + width: parent.width + value: progress + anchors.top: detailedInfo.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + + visible: modelData.activePrintJob != null && modelData.activePrintJob != undefined + + style: ProgressBarStyle + { + property var progressText: + { + if(modelData.activePrintJob == null) + { + return "" + } + + if(modelData.activePrintJob.state == "wait_cleanup") + { + return "Finshed" + } + else if(modelData.activePrintJob.state == "pre_print") + { + return "Preparing" + } + else + { + return OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) + } + } + + background: Rectangle + { + implicitWidth: 100 + implicitHeight: visible ? 24 : 0 + color: UM.Theme.getColor("viewport_background") + } + + progress: Rectangle + { + color: UM.Theme.getColor("primary") + id: progressItem + function getTextOffset() + { + if(progressItem.width + progressLabel.width < control.width) + { + return progressItem.width + UM.Theme.getSize("default_margin").width + } + else + { + return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width + } + } + + Label + { + id: progressLabel + anchors.left: parent.left + anchors.leftMargin: getTextOffset() + text: progressText + anchors.verticalCenter: parent.verticalCenter + color: progressItem.width + progressLabel.width < control.width ? "black" : "white" + width: contentWidth + } + } + } + } } } } From b0d9dc6fddd6f9dd8c12daaf1c90e059911be352 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 15:53:32 +0200 Subject: [PATCH 050/364] Added DropShadow to the printer & printjob tiles CL-893 && CL-894 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 29 ++++++++++++++----- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 25 ++++++++++++++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index da9bf1d457..75c31a7a58 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -1,12 +1,13 @@ -import QtQuick 2.2 +import QtQuick 2.3 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.3 +import QtGraphicalEffects 1.0 + import UM 1.3 as UM import Cura 1.0 as Cura - Component { Rectangle @@ -57,15 +58,25 @@ Component { anchors.fill: parent spacing: UM.Theme.getSize("default_margin").height - + displayMarginBeginning: 2 model: OutputDevice.printers delegate: Rectangle { - width: parent.width + width: parent.width - 2 * shadowRadius height: childrenRect.height + UM.Theme.getSize("default_margin").height - + anchors.horizontalCenter: parent.horizontalCenter id: base + property var shadowRadius: 5 property var collapsed: true + + layer.enabled: true + layer.effect: DropShadow + { + radius: base.shadowRadius + verticalOffset: 2 + color: "#3F000000" // 25% shadow + } + Item { id: printerInfo @@ -136,11 +147,13 @@ Component { id: detailedInfo property var printJob: modelData.activePrintJob - visible: !base.collapsed + visible: height == childrenRect.height anchors.top: printerInfo.bottom width: parent.width - height: visible ? childrenRect.height : 0 - + height: !base.collapsed ? childrenRect.height : 0 + opacity: visible ? 1 : 0 + Behavior on height { NumberAnimation { duration: 100 } } + Behavior on opacity { NumberAnimation { duration: 50 } } Rectangle { id: topSpacer diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index d1d3b176bd..ea3aafb5cc 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -1,15 +1,16 @@ import QtQuick 2.2 import QtQuick.Controls 2.0 import QtQuick.Controls.Styles 1.4 - +import QtGraphicalEffects 1.0 import UM 1.3 as UM Item { + id: base property var printJob: null - + property var shadowRadius: 5 function getPrettyTime(time) { return OutputDevice.formatDuration(time) @@ -24,7 +25,25 @@ Item Rectangle { id: background - anchors.fill: parent + anchors + { + top: parent.top + topMargin: 3 + left: parent.left + leftMargin: base.shadowRadius + rightMargin: base.shadowRadius + right: parent.right + bottom: parent.bottom + bottomMargin: base.shadowRadius + } + + layer.enabled: true + layer.effect: DropShadow + { + radius: base.shadowRadius + verticalOffset: 2 + color: "#3F000000" // 25% shadow + } Item { From 8da77736006429d5e719402e2bdc52bdb0250181 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 23 Aug 2018 16:04:51 +0200 Subject: [PATCH 051/364] Remove unused code Contributes to CURA-5162, CURA-5378 --- cura/CuraApplication.py | 6 +- .../Models/MaterialManagementModel.py | 104 ------------------ .../Preferences/Materials/OldMaterialList.qml | 98 ----------------- 3 files changed, 2 insertions(+), 206 deletions(-) delete mode 100644 cura/Machines/Models/MaterialManagementModel.py delete mode 100644 resources/qml/Preferences/Materials/OldMaterialList.qml diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 27f558bc41..27c0350eea 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -68,10 +68,9 @@ from cura.Machines.Models.NozzleModel import NozzleModel from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfilesDropDownMenuModel from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel -from cura.Machines.Models.MaterialManagementModel import MaterialManagementModel from cura.Machines.Models.FavoriteMaterialsModel import FavoriteMaterialsModel from cura.Machines.Models.GenericMaterialsModel import GenericMaterialsModel -from cura.Machines.Models.BrandMaterialsModel import BrandMaterialsModel +from cura.Machines.Models.MaterialBrandsModel import MaterialBrandsModel from cura.Machines.Models.QualityManagementModel import QualityManagementModel from cura.Machines.Models.QualitySettingsModel import QualitySettingsModel from cura.Machines.Models.MachineManagementModel import MachineManagementModel @@ -936,8 +935,7 @@ class CuraApplication(QtApplication): qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") - qmlRegisterType(BrandMaterialsModel, "Cura", 1, 0, "BrandMaterialsModel") - qmlRegisterType(MaterialManagementModel, "Cura", 1, 0, "MaterialManagementModel") + qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel") qmlRegisterType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel") qmlRegisterType(MachineManagementModel, "Cura", 1, 0, "MachineManagementModel") diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py deleted file mode 100644 index 46e9cb887a..0000000000 --- a/cura/Machines/Models/MaterialManagementModel.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from PyQt5.QtCore import Qt - -from UM.Logger import Logger -from UM.Qt.ListModel import ListModel - - -# -# This model is for the Material management page. -# -class MaterialManagementModel(ListModel): - RootMaterialIdRole = Qt.UserRole + 1 - DisplayNameRole = Qt.UserRole + 2 - BrandRole = Qt.UserRole + 3 - MaterialTypeRole = Qt.UserRole + 4 - ColorNameRole = Qt.UserRole + 5 - ColorCodeRole = Qt.UserRole + 6 - ContainerNodeRole = Qt.UserRole + 7 - ContainerIdRole = Qt.UserRole + 8 - - DescriptionRole = Qt.UserRole + 9 - AdhesionInfoRole = Qt.UserRole + 10 - ApproximateDiameterRole = Qt.UserRole + 11 - GuidRole = Qt.UserRole + 12 - DensityRole = Qt.UserRole + 13 - DiameterRole = Qt.UserRole + 14 - IsReadOnlyRole = Qt.UserRole + 15 - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.RootMaterialIdRole, "root_material_id") - self.addRoleName(self.DisplayNameRole, "name") - self.addRoleName(self.BrandRole, "brand") - self.addRoleName(self.MaterialTypeRole, "material") - self.addRoleName(self.ColorNameRole, "color_name") - self.addRoleName(self.ColorCodeRole, "color_code") - self.addRoleName(self.ContainerNodeRole, "container_node") - self.addRoleName(self.ContainerIdRole, "container_id") - - self.addRoleName(self.DescriptionRole, "description") - self.addRoleName(self.AdhesionInfoRole, "adhesion_info") - self.addRoleName(self.ApproximateDiameterRole, "approximate_diameter") - self.addRoleName(self.GuidRole, "guid") - self.addRoleName(self.DensityRole, "density") - self.addRoleName(self.DiameterRole, "diameter") - self.addRoleName(self.IsReadOnlyRole, "is_read_only") - - from cura.CuraApplication import CuraApplication - self._container_registry = CuraApplication.getInstance().getContainerRegistry() - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.globalContainerChanged.connect(self._update) - self._extruder_manager.activeExtruderChanged.connect(self._update) - self._material_manager.materialsUpdated.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 - if global_stack is None: - self.setItems([]) - return - active_extruder_stack = self._machine_manager.activeStack - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - active_extruder_stack) - if available_material_dict is None: - self.setItems([]) - return - - material_list = [] - for root_material_id, container_node in available_material_dict.items(): - keys_to_fetch = ("name", - "brand", - "material", - "color_name", - "color_code", - "description", - "adhesion_info", - "approximate_diameter",) - - item = {"root_material_id": container_node.metadata["base_file"], - "container_node": container_node, - "guid": container_node.metadata["GUID"], - "container_id": container_node.metadata["id"], - "density": container_node.metadata.get("properties", {}).get("density", ""), - "diameter": container_node.metadata.get("properties", {}).get("diameter", ""), - "is_read_only": self._container_registry.isReadOnly(container_node.metadata["id"]), - } - - for key in keys_to_fetch: - item[key] = container_node.metadata.get(key, "") - - material_list.append(item) - - material_list = sorted(material_list, key = lambda k: (k["brand"].upper(), k["name"].upper())) - self.setItems(material_list) diff --git a/resources/qml/Preferences/Materials/OldMaterialList.qml b/resources/qml/Preferences/Materials/OldMaterialList.qml deleted file mode 100644 index 6c15ddf7cc..0000000000 --- a/resources/qml/Preferences/Materials/OldMaterialList.qml +++ /dev/null @@ -1,98 +0,0 @@ -ListView -{ - id: materialListView - - model: materialsModel - - section.property: "brand" - section.criteria: ViewSection.FullString - section.delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: palette.light - - Label - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section - font.bold: true - color: palette.text - } - } - - delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: ListView.isCurrentItem ? palette.highlight : (model.index % 2) ? palette.base : palette.alternateBase - - Row - { - id: materialRow - spacing: (UM.Theme.getSize("default_margin").width / 2) | 0 - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - - property bool isCurrentItem: parent.ListView.isCurrentItem - - property bool isItemActivated: - { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return model.root_material_id == root_material_id; - } - - Rectangle - { - width: Math.floor(parent.height * 0.8) - height: Math.floor(parent.height * 0.8) - color: model.color_code - border.color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - anchors.verticalCenter: parent.verticalCenter - } - Label - { - width: Math.floor((parent.width * 0.3)) - text: model.material - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - Label - { - text: (model.name != model.material) ? model.name : "" - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - } - - MouseArea - { - anchors.fill: parent - onClicked: - { - parent.ListView.view.currentIndex = model.index; - } - } - } - - function activateDetailsWithIndex(index) - { - var model = materialsModel.getItem(index); - base.currentItem = model; - materialDetailsView.containerId = model.container_id; - materialDetailsView.currentMaterialNode = model.container_node; - - detailsPanel.updateMaterialPropertiesObject(); - } - - onCurrentIndexChanged: - { - forceActiveFocus(); // causes the changed fields to be saved - activateDetailsWithIndex(currentIndex); - } -} From 56a5f59964d25066c713dec6d5b04558b9a2bcab Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 23 Aug 2018 16:39:40 +0200 Subject: [PATCH 052/364] Cleaner code I was hoping to completely nix the generic materials model (since it's basically just a brand "Generic", but then in the QML it has to be have the same in terms of sub-menus or fold-outs and that looked stupid (Generic -> ABS -> ABS)). So we keep that one for now. It is cleaner though. Contributes to CURA-5162, CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 95 ++++++---- cura/Machines/Models/BrandMaterialsModel.py | 174 ------------------ .../Machines/Models/FavoriteMaterialsModel.py | 43 ++--- cura/Machines/Models/GenericMaterialsModel.py | 51 ++--- cura/Machines/Models/MaterialBrandsModel.py | 129 +++++++++++++ resources/qml/Menus/MaterialMenu.qml | 4 +- .../Preferences/Materials/MaterialsList.qml | 4 +- .../Preferences/Materials/MaterialsPage.qml | 2 +- 8 files changed, 222 insertions(+), 280 deletions(-) delete mode 100644 cura/Machines/Models/BrandMaterialsModel.py create mode 100644 cura/Machines/Models/MaterialBrandsModel.py diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 80ecf72c0a..122c38804c 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -2,51 +2,54 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty - -from UM.Application import Application from UM.Qt.ListModel import ListModel -# -# This is the base model class for GenericMaterialsModel and BrandMaterialsModel -# 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 -# +## 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 class BaseMaterialsModel(ListModel): - RootMaterialIdRole = Qt.UserRole + 1 - IdRole = Qt.UserRole + 2 - NameRole = Qt.UserRole + 3 - BrandRole = Qt.UserRole + 4 - MaterialRole = Qt.UserRole + 5 - ColorRole = Qt.UserRole + 6 - ContainerNodeRole = Qt.UserRole + 7 - ColorCodeRole = Qt.UserRole + 8 - GUIDRole = Qt.UserRole + 9 - IsFavoriteRole = Qt.UserRole + 10 extruderPositionChanged = pyqtSignal() def __init__(self, parent = None): super().__init__(parent) - self._application = Application.getInstance() - self._machine_manager = self._application.getMachineManager() - self.addRoleName(self.RootMaterialIdRole, "root_material_id") - self.addRoleName(self.IdRole, "id") - self.addRoleName(self.GUIDRole, "GUID") - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.BrandRole, "brand") - self.addRoleName(self.MaterialRole, "material") - self.addRoleName(self.ColorRole, "color_name") - self.addRoleName(self.ColorCodeRole, "color_code") - self.addRoleName(self.ContainerNodeRole, "container_node") - self.addRoleName(self.IsFavoriteRole, "is_favorite") + from cura.CuraApplication import CuraApplication + + self._application = CuraApplication.getInstance() + + # Make these managers available to all material models + self._extruder_manager = self._application.getExtruderManager() + self._machine_manager = self._application.getMachineManager() + self._material_manager = self._application.getMaterialManager() + + # Update the stack and the model data when the machine changes + self._machine_manager.globalContainerChanged.connect(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) + + self.addRoleName(Qt.UserRole + 1, "root_material_id") + self.addRoleName(Qt.UserRole + 2, "id") + self.addRoleName(Qt.UserRole + 3, "GUID") + self.addRoleName(Qt.UserRole + 4, "name") + self.addRoleName(Qt.UserRole + 5, "brand") + self.addRoleName(Qt.UserRole + 6, "material") + self.addRoleName(Qt.UserRole + 7, "color_name") + self.addRoleName(Qt.UserRole + 8, "color_code") + self.addRoleName(Qt.UserRole + 9, "container_node") + self.addRoleName(Qt.UserRole + 10, "is_favorite") self._extruder_position = 0 self._extruder_stack = None - # Update the stack and the model data when the machine changes - self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) + + self._available_materials = None + self._favorite_ids = None def _updateExtruderStack(self): global_stack = self._machine_manager.activeMachine @@ -71,8 +74,30 @@ class BaseMaterialsModel(ListModel): def extruderPosition(self) -> int: return self._extruder_position - # - # This is an abstract method that needs to be implemented by - # + ## This is an abstract method that needs to be implemented by the specific + # models themselves. def _update(self): pass + + ## 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: + 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 + diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py deleted file mode 100644 index 154019d028..0000000000 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty - -from UM.Qt.ListModel import ListModel -from UM.Logger import Logger -from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel - - -# -# This is an intermediate model to group materials with different colours for a same brand and type. -# -class MaterialsModelGroupedByType(ListModel): - NameRole = Qt.UserRole + 1 - ColorsRole = Qt.UserRole + 2 - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.ColorsRole, "colors") - - -# -# This model is used to show branded materials in the material drop down menu. -# The structure of the menu looks like this: -# Brand -> Material Type -> list of materials -# -# To illustrate, a branded material menu may look like this: -# Ultimaker -> PLA -> Yellow PLA -# -> Black PLA -# -> ... -# -> ABS -> White ABS -# ... -# -class BrandMaterialsModel(ListModel): - NameRole = Qt.UserRole + 1 - MaterialsRole = Qt.UserRole + 2 - - extruderPositionChanged = pyqtSignal() - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.MaterialsRole, "materials") - - self._extruder_position = 0 - self._extruder_stack = None - - from cura.CuraApplication import CuraApplication - self._container_registry = CuraApplication.getInstance().getContainerRegistry() - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) - self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. - self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. - # self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed - self._update() - - def _updateExtruderStack(self): - global_stack = self._machine_manager.activeMachine - if global_stack is None: - return - - if self._extruder_stack is not None: - self._extruder_stack.pyqtContainersChanged.disconnect(self._update) - self._extruder_stack = global_stack.extruders.get(str(self._extruder_position)) - if self._extruder_stack is not None: - self._extruder_stack.pyqtContainersChanged.connect(self._update) - # Force update the model when the extruder stack changes - self._update() - - def setExtruderPosition(self, position: int): - if self._extruder_stack is None or self._extruder_position != position: - self._extruder_position = position - self._updateExtruderStack() - self.extruderPositionChanged.emit() - - @pyqtProperty(int, fset=setExtruderPosition, notify=extruderPositionChanged) - def extruderPosition(self) -> int: - return self._extruder_position - - def _update(self): - Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) - global_stack = self._machine_manager.activeMachine - if global_stack is None: - self.setItems([]) - return - extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: - self.setItems([]) - return - extruder_stack = global_stack.extruders[str(self._extruder_position)] - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - extruder_stack) - if available_material_dict is None: - self.setItems([]) - return - - brand_item_list = [] - brand_group_dict = {} - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - - favorites = self._material_manager.getFavorites() - - # Do not include the materials from a to-be-removed package - if bool(metadata.get("removed", False)): - continue - - # Skip generic materials, and add brands we haven't seen yet to the dict - brand = metadata["brand"] - if brand.lower() == "generic": - continue - if brand not in brand_group_dict: - brand_group_dict[brand] = {} - - # Add material types we haven't seen yet to the dict - material_type = metadata["material"] - if material_type not in brand_group_dict[brand]: - brand_group_dict[brand][material_type] = [] - - # Now handle the individual materials - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "description": metadata["description"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "density": metadata.get("properties", {}).get("density", ""), - "diameter": metadata.get("properties", {}).get("diameter", ""), - "approximate_diameter": metadata["approximate_diameter"], - "adhesion_info": metadata["adhesion_info"], - "is_read_only": self._container_registry.isReadOnly(metadata["id"]), - "container_node": container_node, - "is_favorite": root_material_id in favorites - } - brand_group_dict[brand][material_type].append(item) - - for brand, material_dict in brand_group_dict.items(): - brand_item = {"name": brand, - "materials": MaterialsModelGroupedByType(self)} - - material_type_item_list = [] - for material_type, material_list in material_dict.items(): - material_type_item = {"name": material_type, - "colors": BaseMaterialsModel(self)} - material_type_item["colors"].clear() - - # Sort materials by name - material_list = sorted(material_list, key = lambda x: x["name"].upper()) - material_type_item["colors"].setItems(material_list) - - material_type_item_list.append(material_type_item) - - # Sort material type by name - material_type_item_list = sorted(material_type_item_list, key = lambda x: x["name"].upper()) - brand_item["materials"].setItems(material_type_item_list) - - brand_item_list.append(brand_item) - - # Sort brand by name - brand_item_list = sorted(brand_item_list, key = lambda x: x["name"].upper()) - self.setItems(brand_item_list) diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 35a5229da1..34e148e2fd 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -8,51 +8,32 @@ class FavoriteMaterialsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - - from cura.CuraApplication import CuraApplication - self._preferences = CuraApplication.getInstance().getPreferences() - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. - self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed 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 - if global_stack is None: + # Perform standard check and reset if the check fails + if not self._canUpdate(): self.setItems([]) return - extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: - self.setItems([]) - return - extruder_stack = global_stack.extruders[extruder_position] - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) - if available_material_dict is None: - self.setItems([]) - return - - favorite_ids = self._material_manager.getFavorites() + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() item_list = [] - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - # Only add results for favorite materials - if root_material_id not in favorite_ids: - continue + for root_material_id, container_node in self._available_materials.items(): + metadata = container_node.metadata # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue + # Only add results for favorite materials + if root_material_id not in self._favorite_ids: + continue + item = { "root_material_id": root_material_id, "id": metadata["id"], @@ -63,11 +44,11 @@ class FavoriteMaterialsModel(BaseMaterialsModel): "color_name": metadata["color_name"], "color_code": metadata["color_code"], "container_node": container_node, - "is_favorite": True + "is_favorite": True # Don't need to set since we only include favorites anyway } item_list.append(item) - # Sort the item list by material name alphabetically + # Sort the item list alphabetically by name item_list = sorted(item_list, key = lambda d: d["brand"].upper()) self.setItems(item_list) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index a8f5bfbd35..3432f3e35c 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -4,44 +4,25 @@ from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel - class GenericMaterialsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - - from cura.CuraApplication import CuraApplication - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. - self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. 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 - if global_stack is None: - self.setItems([]) - return - extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: - self.setItems([]) - return - extruder_stack = global_stack.extruders[extruder_position] - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - extruder_stack) - if available_material_dict is None: + # Perform standard check and reset if the check fails + if not self._canUpdate(): self.setItems([]) return - favorites = self._material_manager.getFavorites() + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() item_list = [] - for root_material_id, container_node in available_material_dict.items(): + + for root_material_id, container_node in self._available_materials.items(): metadata = container_node.metadata # Only add results for generic materials @@ -54,19 +35,19 @@ class GenericMaterialsModel(BaseMaterialsModel): item = { "root_material_id": root_material_id, - "id": metadata["id"], - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "container_node": container_node, - "is_favorite": root_material_id in favorites + "id": metadata["id"], + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "container_node": container_node, + "is_favorite": root_material_id in self._favorite_ids } item_list.append(item) - # Sort the item list by material name alphabetically + # Sort the item list alphabetically by name item_list = sorted(item_list, key = lambda d: d["name"].upper()) self.setItems(item_list) diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py new file mode 100644 index 0000000000..89d9fc7bfd --- /dev/null +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -0,0 +1,129 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty +from UM.Qt.ListModel import ListModel +from UM.Logger import Logger +from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel + +class MaterialTypesModel(ListModel): + + def __init__(self, parent = None): + super().__init__(parent) + + self.addRoleName(Qt.UserRole + 1, "name") + self.addRoleName(Qt.UserRole + 2, "colors") + +class MaterialBrandsModel(BaseMaterialsModel): + + extruderPositionChanged = pyqtSignal() + + def __init__(self, parent = None): + super().__init__(parent) + + from cura.CuraApplication import CuraApplication + + self.addRoleName(Qt.UserRole + 1, "name") + self.addRoleName(Qt.UserRole + 2, "material_types") + + self._container_registry = CuraApplication.getInstance().getContainerRegistry() + + self._update() + + def _update(self): + + # Perform standard check and reset if the check fails + if not self._canUpdate(): + self.setItems([]) + return + + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() + + brand_item_list = [] + brand_group_dict = {} + + # Part 1: Generate the entire tree of brands -> material types -> spcific materials + for root_material_id, container_node in self._available_materials.items(): + metadata = container_node.metadata + + # Do not include the materials from a to-be-removed package + if bool(metadata.get("removed", False)): + continue + + # Add brands we haven't seen yet to the dict, skipping generics + brand = metadata["brand"] + if brand.lower() == "generic": + continue + if brand not in brand_group_dict: + brand_group_dict[brand] = {} + + # Add material types we haven't seen yet to the dict + material_type = metadata["material"] + if material_type not in brand_group_dict[brand]: + brand_group_dict[brand][material_type] = [] + + # Now handle the individual materials + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), + "approximate_diameter": metadata["approximate_diameter"], + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": root_material_id in self._favorite_ids + } + brand_group_dict[brand][material_type].append(item) + + # Part 2: Organize the tree into models + # + # Normally, the structure of the menu looks like this: + # Brand -> Material Type -> Specific Material + # + # To illustrate, a branded material menu may look like this: + # Ultimaker ┳ PLA ┳ Yellow PLA + # ┃ ┣ Black PLA + # ┃ ┗ ... + # ┃ + # ┗ ABS ┳ White ABS + # ┗ ... + for brand, material_dict in brand_group_dict.items(): + + material_type_item_list = [] + brand_item = { + "name": brand, + "material_types": MaterialTypesModel(self) + } + + for material_type, material_list in material_dict.items(): + material_type_item = { + "name": material_type, + "colors": BaseMaterialsModel(self) + } + material_type_item["colors"].clear() + + # Sort materials by name + material_list = sorted(material_list, key = lambda x: x["name"].upper()) + material_type_item["colors"].setItems(material_list) + + material_type_item_list.append(material_type_item) + + # Sort material type by name + material_type_item_list = sorted(material_type_item_list, key = lambda x: x["name"].upper()) + brand_item["material_types"].setItems(material_type_item_list) + + brand_item_list.append(brand_item) + + # Sort brand by name + brand_item_list = sorted(brand_item_list, key = lambda x: x["name"].upper()) + self.setItems(brand_item_list) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index a53bc72a94..186c5d1d2a 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -26,7 +26,7 @@ Menu extruderPosition: menu.extruderIndex } - Cura.BrandMaterialsModel + Cura.MaterialBrandsModel { id: brandModel extruderPosition: menu.extruderIndex @@ -80,7 +80,7 @@ Menu id: brandMenu title: brandName property string brandName: model.name - property var brandMaterials: model.materials + property var brandMaterials: model.material_types Instantiator { diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index a051f55cac..220ce0134d 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -18,7 +18,7 @@ Item // Children UM.I18nCatalog { id: catalog; name: "cura"; } - Cura.BrandMaterialsModel { id: materialsModel } + Cura.MaterialBrandsModel { id: materialsModel } Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } Cura.GenericMaterialsModel { id: genericMaterialsModel } Column @@ -186,7 +186,7 @@ Item { id: brand_section property var expanded: true - property var types_model: model.materials + property var types_model: model.material_types height: childrenRect.height width: parent.width Rectangle diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index ce7203f34b..4df6049b3f 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -31,7 +31,7 @@ Item id: catalog name: "cura" } - Cura.BrandMaterialsModel + Cura.MaterialBrandsModel { id: materialsModel } From 6be9b5e27fb8cc2e0d3a9941b3824b40bc94d20a Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 23 Aug 2018 16:58:23 +0200 Subject: [PATCH 053/364] Consolidate models some more Contributes to CURA-5162, CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 42 ++++++++++++++++--- .../Machines/Models/FavoriteMaterialsModel.py | 13 +----- cura/Machines/Models/GenericMaterialsModel.py | 21 +++------- cura/Machines/Models/MaterialBrandsModel.py | 24 +---------- 4 files changed, 44 insertions(+), 56 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 122c38804c..ff006d00ae 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,6 +21,7 @@ class BaseMaterialsModel(ListModel): self._application = CuraApplication.getInstance() # Make these managers available to all material models + self._container_registry = self._application.getInstance().getContainerRegistry() self._extruder_manager = self._application.getExtruderManager() self._machine_manager = self._application.getMachineManager() self._material_manager = self._application.getMaterialManager() @@ -39,11 +40,17 @@ class BaseMaterialsModel(ListModel): self.addRoleName(Qt.UserRole + 3, "GUID") self.addRoleName(Qt.UserRole + 4, "name") self.addRoleName(Qt.UserRole + 5, "brand") - self.addRoleName(Qt.UserRole + 6, "material") - self.addRoleName(Qt.UserRole + 7, "color_name") - self.addRoleName(Qt.UserRole + 8, "color_code") - self.addRoleName(Qt.UserRole + 9, "container_node") - self.addRoleName(Qt.UserRole + 10, "is_favorite") + self.addRoleName(Qt.UserRole + 6, "description") + self.addRoleName(Qt.UserRole + 7, "material") + self.addRoleName(Qt.UserRole + 8, "color_name") + self.addRoleName(Qt.UserRole + 9, "color_code") + self.addRoleName(Qt.UserRole + 10, "density") + self.addRoleName(Qt.UserRole + 11, "diameter") + self.addRoleName(Qt.UserRole + 12, "approximate_diameter") + self.addRoleName(Qt.UserRole + 13, "adhesion_info") + self.addRoleName(Qt.UserRole + 14, "is_read_only") + self.addRoleName(Qt.UserRole + 15, "container_node") + self.addRoleName(Qt.UserRole + 16, "is_favorite") self._extruder_position = 0 self._extruder_stack = None @@ -101,3 +108,28 @@ class BaseMaterialsModel(ListModel): 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.metadata + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata["color_code"], + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), + "approximate_diameter": metadata["approximate_diameter"], + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": root_material_id in self._favorite_ids + } + return item + diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 34e148e2fd..3c5ca226fe 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -34,18 +34,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): if root_material_id not in self._favorite_ids: continue - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "container_node": container_node, - "is_favorite": True # Don't need to set since we only include favorites anyway - } + item = self._createMaterialItem(root_material_id, container_node) item_list.append(item) # Sort the item list alphabetically by name diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 3432f3e35c..27e6fdfd7c 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -25,26 +25,15 @@ class GenericMaterialsModel(BaseMaterialsModel): for root_material_id, container_node in self._available_materials.items(): metadata = container_node.metadata - # Only add results for generic materials - if metadata["brand"].lower() != "generic": - continue - # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "container_node": container_node, - "is_favorite": root_material_id in self._favorite_ids - } + # Only add results for generic materials + if metadata["brand"].lower() != "generic": + continue + + item = self._createMaterialItem(root_material_id, container_node) item_list.append(item) # Sort the item list alphabetically by name diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 89d9fc7bfd..3f917abb16 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -21,13 +21,9 @@ class MaterialBrandsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - from cura.CuraApplication import CuraApplication - self.addRoleName(Qt.UserRole + 1, "name") self.addRoleName(Qt.UserRole + 2, "material_types") - self._container_registry = CuraApplication.getInstance().getContainerRegistry() - self._update() def _update(self): @@ -64,25 +60,7 @@ class MaterialBrandsModel(BaseMaterialsModel): brand_group_dict[brand][material_type] = [] # Now handle the individual materials - item = { - "root_material_id": root_material_id, - "id": metadata["id"], - "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml - "GUID": metadata["GUID"], - "name": metadata["name"], - "brand": metadata["brand"], - "description": metadata["description"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "color_code": metadata["color_code"], - "density": metadata.get("properties", {}).get("density", ""), - "diameter": metadata.get("properties", {}).get("diameter", ""), - "approximate_diameter": metadata["approximate_diameter"], - "adhesion_info": metadata["adhesion_info"], - "is_read_only": self._container_registry.isReadOnly(metadata["id"]), - "container_node": container_node, - "is_favorite": root_material_id in self._favorite_ids - } + item = self._createMaterialItem(root_material_id, container_node) brand_group_dict[brand][material_type].append(item) # Part 2: Organize the tree into models From 8582a1ba1ad6b1287f638c9ac21cc4de8eb8dc22 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 23 Aug 2018 16:59:09 +0200 Subject: [PATCH 054/364] Mock application in unit tests --- tests/conftest.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index f2c709d8d8..77d215815a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,19 +3,21 @@ # The purpose of this class is to create fixtures or methods that can be shared among all tests. +import unittest.mock import pytest + from UM.Qt.QtApplication import QtApplication #QtApplication import is required, even though it isn't used. from cura.CuraApplication import CuraApplication from cura.MachineActionManager import MachineActionManager + + # 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: - application = CuraApplication.getInstance() - if application is None: - application = CuraApplication() - return application + app = unittest.mock.MagicMock() + return app # Returns a MachineActionManager instance. @pytest.fixture() From 26fced22bb3b1c124ae65dd6f1524ad9f5aa1ca5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 21 Aug 2018 14:13:27 +0200 Subject: [PATCH 055/364] Add quality profiles for S5 aluminum CURA-5656 --- ...s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg | 36 ++++++++++ ..._s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg | 35 ++++++++++ ...5_aa0.4_aluminum_ABS_High_Quality.inst.cfg | 10 +-- ...aa0.4_aluminum_ABS_Normal_Quality.inst.cfg | 34 +++++++++ ...5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg | 54 +++++++++++++++ ...s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg | 52 ++++++++++++++ ..._aa0.4_aluminum_CPEP_High_Quality.inst.cfg | 12 ++-- ...a0.4_aluminum_CPEP_Normal_Quality.inst.cfg | 54 +++++++++++++++ ...s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg | 35 ++++++++++ ..._s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg | 33 +++++++++ ...5_aa0.4_aluminum_CPE_High_Quality.inst.cfg | 14 ++-- ...aa0.4_aluminum_CPE_Normal_Quality.inst.cfg | 32 +++++++++ ..._s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg | 69 +++++++++++++++++++ ...m_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg | 69 +++++++++++++++++++ ...s5_aa0.4_aluminum_PC_High_Quality.inst.cfg | 15 ++-- ..._aa0.4_aluminum_PC_Normal_Quality.inst.cfg | 68 ++++++++++++++++++ ..._s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg | 65 +++++++++++++++++ ...m_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg | 67 ++++++++++++++++++ ..._aa0.4_aluminum_PP_Normal_Quality.inst.cfg | 68 ++++++++++++++++++ ...s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg | 9 +-- ...0.8_aluminum_ABS_Superdraft_Print.inst.cfg | 28 ++++++++ ...a0.8_aluminum_ABS_Verydraft_Print.inst.cfg | 28 ++++++++ ...s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg | 11 +-- ....8_aluminum_CPEP_Superdraft_Print.inst.cfg | 44 ++++++++++++ ...0.8_aluminum_CPEP_Verydraft_Print.inst.cfg | 44 ++++++++++++ ...s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg | 12 ++-- ...0.8_aluminum_CPE_Superdraft_Print.inst.cfg | 32 +++++++++ ...a0.8_aluminum_CPE_Verydraft_Print.inst.cfg | 31 +++++++++ ...m_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg | 11 +-- ...a0.8_aluminum_PC_Superdraft_Print.inst.cfg | 36 ++++++++++ ...aa0.8_aluminum_PC_Verydraft_Print.inst.cfg | 38 ++++++++++ ..._s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg | 6 +- ...a0.8_aluminum_PP_Superdraft_Print.inst.cfg | 56 +++++++++++++++ ...aa0.8_aluminum_PP_Verydraft_Print.inst.cfg | 54 +++++++++++++++ 34 files changed, 1217 insertions(+), 45 deletions(-) create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg new file mode 100644 index 0000000000..c8d64f9dcb --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 20 +material_initial_print_temperature = =material_print_temperature - 15 +material_final_print_temperature = =material_print_temperature - 20 +prime_tower_enable = False +skin_overlap = 20 +speed_print = 60 +speed_layer_0 = 20 +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) +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_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg new file mode 100644 index 0000000000..c7fa604e89 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = fast +weight = -1 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 15 +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_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_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_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg index 9a3eef5762..187023d3c0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg @@ -14,21 +14,21 @@ buildplate = Aluminum [values] cool_min_speed = 12 -layer_height_0 = 0.17 machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 90 -material_bed_temperature_layer_0 = 100 material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 -prime_blob_enable = False prime_tower_enable = False speed_print = 50 -speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_layer_0 = 20 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_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..81cb27f060 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 10 +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_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_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg new file mode 100644 index 0000000000..46e3483a6a --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = draft +weight = -2 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 80 +cool_min_speed = 5 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing = off +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 40 / 50) + +speed_wall = =math.ceil(speed_print * 50 / 50) +speed_wall_0 = =math.ceil(speed_wall * 40 / 50) +support_bottom_distance = =support_z_distance +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_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..5c235b656a --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg @@ -0,0 +1,52 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = fast +weight = -1 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 80 +cool_min_speed = 6 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing = off +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) + +speed_wall = =math.ceil(speed_print * 45 / 45) +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_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg index 8b0b08f731..326a730fe4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg @@ -22,18 +22,14 @@ infill_overlap = 0 infill_wipe_dist = 0 jerk_enabled = True jerk_print = 25 -layer_height_0 = 0.17 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 105 -material_bed_temperature_layer_0 = 115 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature + 2 material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 -prime_blob_enable = False prime_tower_enable = True prime_tower_wipe_enabled = True retraction_combing = off @@ -42,7 +38,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = =math.ceil(speed_print * 20 / 40) +speed_layer_0 = 20 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) @@ -51,3 +47,9 @@ 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_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..d40b2db90e --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = normal +weight = 0 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 50 +cool_min_speed = 7 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.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 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing = off +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 30 / 35) + +speed_wall = =math.ceil(speed_print * 35 / 40) +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_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..c812066e0c --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +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 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +skin_overlap = 20 +speed_print = 60 +speed_layer_0 = 20 +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) +wall_thickness = 1 + + +infill_pattern = zigzag +speed_infill = =math.ceil(speed_print * 50 / 60) +prime_tower_purge_volume = 1 + +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_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg new file mode 100644 index 0000000000..ef634316da --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg @@ -0,0 +1,33 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = fast +weight = -1 +material = generic_cpe +variant = AA 0.4 +buildplate = Aluminum + +[values] +cool_min_speed = 7 +material_print_temperature = =default_material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +speed_print = 60 +speed_layer_0 = 20 +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 = zigzag +speed_infill = =math.ceil(speed_print * 50 / 60) +prime_tower_purge_volume = 1 + +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_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg index 6299071194..cda97e6ab3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg @@ -14,19 +14,21 @@ buildplate = Aluminum [values] cool_min_speed = 12 -layer_height_0 = 0.17 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_bed_temperature_layer_0 = 90 material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 -prime_blob_enable = False speed_print = 50 -speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) infill_pattern = zigzag -speed_infill = =math.ceil(speed_print * 40 / 50) \ No newline at end of file +speed_infill = =math.ceil(speed_print * 40 / 50) +prime_tower_purge_volume = 1 + +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_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..5a75f3b6e3 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg @@ -0,0 +1,32 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = normal +weight = 0 +material = generic_cpe +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +speed_print = 55 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +speed_wall = =math.ceil(speed_print * 30 / 55) + +infill_pattern = zigzag +speed_infill = =math.ceil(speed_print * 45 / 55) +prime_tower_purge_volume = 1 + +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_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg new file mode 100644 index 0000000000..f05ecddc25 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg @@ -0,0 +1,69 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = draft +weight = -2 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[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 = 90 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 6 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap = 0 +infill_overlap_mm = 0.05 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +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_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_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 = =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_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg new file mode 100644 index 0000000000..6103519f1c --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg @@ -0,0 +1,69 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = fast +weight = -1 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[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 = 85 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 7 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap_mm = 0.05 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +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_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 + +speed_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 = =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_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg index 2afaf21de1..130afb8c91 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg @@ -16,7 +16,7 @@ buildplate = Aluminum acceleration_enabled = True acceleration_print = 4000 adhesion_type = brim -brim_width = 10 +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 @@ -28,19 +28,15 @@ infill_pattern = triangles infill_wipe_dist = 0.1 jerk_enabled = True jerk_print = 25 -layer_height_0 = 0.17 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 115 -material_bed_temperature_layer_0 = 125 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature - 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 -prime_blob_enable = False prime_tower_enable = True prime_tower_wipe_enabled = True raft_airgap = 0.25 @@ -52,9 +48,9 @@ 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_layer_0 = 25 speed_print = 50 -speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_topbottom = 25 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) @@ -68,4 +64,7 @@ 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_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..9e1bf394d4 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg @@ -0,0 +1,68 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = normal +weight = 0 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[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 = =round(line_width * 0.4 / 0.35, 2) +infill_overlap = 0 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_standby_temperature = 100 +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_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 + +speed_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 = =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_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg new file mode 100644 index 0000000000..6124dff257 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg @@ -0,0 +1,65 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = draft +weight = -2 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +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.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +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_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 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 +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_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..2791e9f5d5 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg @@ -0,0 +1,67 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = fast +weight = -1 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +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.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature - 12 +material_initial_print_temperature = =material_print_temperature - 2 +material_print_temperature = =default_material_print_temperature - 13 +material_print_temperature_layer_0 = =material_print_temperature + 3 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +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_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 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.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_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..f78b4048fb --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg @@ -0,0 +1,68 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = normal +weight = 0 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +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.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +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 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +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_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 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 +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.8_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg index 3d984e1dff..37dceff349 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg @@ -13,15 +13,16 @@ variant = AA 0.8 buildplate = Aluminum [values] -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 90 -material_bed_temperature_layer_0 = 100 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 -prime_blob_enable = False speed_print = 50 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_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..eac339baa8 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg @@ -0,0 +1,28 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = superdraft +weight = -4 +material = generic_abs +variant = AA 0.8 +buildplate = Aluminum + +[values] +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 25 +material_standby_temperature = 100 +speed_print = 50 +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_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..590496df0f --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg @@ -0,0 +1,28 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = verydraft +weight = -3 +material = generic_abs +variant = AA 0.8 +buildplate = Aluminum + +[values] +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 22 +material_standby_temperature = 100 +speed_print = 50 +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_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg index 6fd60c197a..3e74390840 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg @@ -16,22 +16,18 @@ buildplate = Aluminum brim_width = 14 cool_fan_full_at_height = =layer_height_0 + 14 * layer_height infill_before_walls = True -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.9375 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 105 -material_bed_temperature_layer_0 = 115 material_print_temperature = =default_material_print_temperature - 10 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 -prime_blob_enable = False prime_tower_enable = True retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = =math.ceil(speed_print * 15 / 50) +speed_layer_0 = 15 speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 35 / 50) @@ -41,3 +37,8 @@ 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_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..dc32bee180 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg @@ -0,0 +1,44 @@ +[general] +version = 4 +name = Sprint - Experimental +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = superdraft +weight = -4 +material = generic_cpe_plus +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 14 +cool_fan_full_at_height = =layer_height_0 + 7 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing = off +retraction_hop = 0.1 +retraction_hop_enabled = False +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 8 +speed_topbottom = =math.ceil(speed_print * 35 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +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_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..e8bc10aff7 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg @@ -0,0 +1,44 @@ +[general] +version = 4 +name = Extra Fast - Experimental +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = verydraft +weight = -3 +material = generic_cpe_plus +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 14 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_print_temperature = =default_material_print_temperature - 7 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing = off +retraction_hop = 0.1 +retraction_hop_enabled = False +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 10 +speed_topbottom = =math.ceil(speed_print * 35 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +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_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg index 37aa25f9d8..80c0585061 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg @@ -14,16 +14,18 @@ buildplate = Aluminum [values] brim_width = 15 -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 80 -material_bed_temperature_layer_0 = 90 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 -prime_blob_enable = False prime_tower_enable = True speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) -jerk_travel = 50 \ No newline at end of file +jerk_travel = 50 +prime_tower_purge_volume = 1 + +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_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..5dcc454173 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg @@ -0,0 +1,32 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = superdraft +weight = -4 +material = generic_cpe +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 15 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 20 +material_standby_temperature = 100 +prime_tower_enable = True +speed_print = 45 +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 +prime_tower_purge_volume = 1 + +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_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..8423e109e8 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = verydraft +weight = -3 +material = generic_cpe +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 15 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 17 +material_standby_temperature = 100 +prime_tower_enable = True +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 25 / 40) +speed_wall = =math.ceil(speed_print * 30 / 40) + +jerk_travel = 50 +prime_tower_purge_volume = 1 + +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_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg index 9ebf2ea151..747e2fe8a5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg @@ -16,21 +16,22 @@ buildplate = Aluminum brim_width = 10 cool_fan_full_at_height = =layer_height_0 + 14 * layer_height infill_before_walls = True -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 115 -material_bed_temperature_layer_0 = 125 material_print_temperature = =default_material_print_temperature - 5 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 -prime_blob_enable = False raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = =math.ceil(speed_print * 15 / 50) +speed_layer_0 = 15 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_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..e46914c7b0 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Sprint - Experimental +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = superdraft +weight = -2 +material = generic_pc +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 10 +cool_fan_full_at_height = =layer_height_0 + 7 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.875 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +raft_airgap = 0.5 +raft_margin = 15 +skin_overlap = 0 +speed_layer_0 = 15 +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_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..a6dbc255eb --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Extra Fast - Experimental +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = verydraft +weight = -1 +material = generic_pc +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 10 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature - 2 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +raft_airgap = 0.5 +raft_margin = 15 +skin_overlap = 0 +speed_layer_0 = 15 +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_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg index 94bede16bd..b80af1b75f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg @@ -23,14 +23,14 @@ infill_pattern = tetrahedral 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) -material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_bed_temperature_layer_0 = =material_bed_temperature material_print_temperature = =default_material_print_temperature - 2 material_print_temperature_layer_0 = =default_material_print_temperature + 2 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 -prime_tower_min_volume = 10 +prime_tower_wall_thickness = =prime_tower_line_width * 2 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 @@ -51,3 +51,5 @@ 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_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..970e0971a9 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = superdraft +weight = -4 +material = generic_pp +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 25 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 17 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +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) +material_bed_temperature_layer_0 = =material_bed_temperature +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +prime_tower_wall_thickness = =prime_tower_line_width * 2 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 0.5 +retraction_min_travel = 1.5 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) + +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +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.6 +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_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..e51ba3207b --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 5 +type = quality +quality_type = verydraft +weight = -3 +material = generic_pp +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 25 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 17 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +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) +material_bed_temperature_layer_0 = =material_bed_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +prime_tower_wall_thickness = =prime_tower_line_width * 2 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 0.5 +retraction_min_travel = 1.5 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) + +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +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.6 +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 From 01cf9ee23bf4f669aa7c3a4a473f2f1a0383131f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 23 Aug 2018 13:12:10 +0200 Subject: [PATCH 056/364] Remove "Experimental" text --- .../um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg | 2 +- .../um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg | 2 +- .../um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg | 2 +- .../um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg index dc32bee180..4c1b807430 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Sprint - Experimental +name = Sprint definition = ultimaker_s5 [metadata] diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg index e8bc10aff7..11aefc90cd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Extra Fast - Experimental +name = Extra Fast definition = ultimaker_s5 [metadata] diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg index e46914c7b0..689652dc06 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Sprint - Experimental +name = Sprint definition = ultimaker_s5 [metadata] diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg index a6dbc255eb..0480ee5620 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Extra Fast - Experimental +name = Extra Fast definition = ultimaker_s5 [metadata] From dab2efab7f087fc252e3f3fc62c34002efd536e3 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 17:29:48 +0200 Subject: [PATCH 057/364] Updated margins & layout for the monitor page CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 41 +++++++++++++------ .../UM3NetworkPrinting/ClusterMonitorItem.qml | 12 +++--- .../PrintCoreConfiguration.qml | 25 +++++++---- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 8 ++-- 4 files changed, 57 insertions(+), 29 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 75c31a7a58..bd94872183 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -51,15 +51,27 @@ Component top: activePrintersLabel.bottom left: parent.left right: parent.right - margins: UM.Theme.getSize("default_margin").width + topMargin: UM.Theme.getSize("default_margin").height bottom: parent.bottom } + + style: UM.Theme.styles.scrollview + ListView { - anchors.fill: parent + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.left + right: parent.right + leftMargin: 2 * UM.Theme.getSize("default_margin").width + rightMargin: 2 * UM.Theme.getSize("default_margin").width + } spacing: UM.Theme.getSize("default_margin").height displayMarginBeginning: 2 model: OutputDevice.printers + delegate: Rectangle { width: parent.width - 2 * shadowRadius @@ -100,6 +112,8 @@ Component { id: machineIcon anchors.top: parent.top + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.left: parent.left width: 50 height: 50 color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") @@ -157,7 +171,7 @@ Component Rectangle { id: topSpacer - color: "grey" + color: UM.Theme.getColor("viewport_background") height: 1 anchors { @@ -165,6 +179,7 @@ Component right: parent.right margins: UM.Theme.getSize("default_margin").width top: parent.top + topMargin: 2 * UM.Theme.getSize("default_margin").width } } @@ -172,11 +187,11 @@ Component { id: extrudersInfo anchors.top: topSpacer.bottom - anchors.topMargin : UM.Theme.getSize("default_margin").height + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width height: childrenRect.height spacing: UM.Theme.getSize("default_margin").width @@ -198,7 +213,7 @@ Component Rectangle { id: jobSpacer - color: "grey" + color: UM.Theme.getColor("viewport_background") height: 1 anchors { @@ -206,6 +221,7 @@ Component right: parent.right margins: UM.Theme.getSize("default_margin").width top: extrudersInfo.bottom + topMargin: 2 * UM.Theme.getSize("default_margin").height } } @@ -215,10 +231,12 @@ Component property var showJobInfo: modelData.activePrintJob != null && modelData.activePrintJob.state != "queued" anchors.top: jobSpacer.bottom + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height anchors.left: parent.left anchors.right: parent.right anchors.margins: UM.Theme.getSize("default_margin").width - height: showJobInfo ? childrenRect.height + UM.Theme.getSize("default_margin").height: 0 + anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width + height: showJobInfo ? childrenRect.height + 3 * UM.Theme.getSize("default_margin").height: 0 visible: showJobInfo Label { @@ -246,12 +264,11 @@ Component Rectangle { id: showCameraIcon - width: 30 * screenScaleFactor + width: 35 * screenScaleFactor height: width - radius: width + radius: 0.5 * width anchors.left: parent.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.bottom: printJobPreview.bottom + anchors.top: printJobPreview.bottom color: UM.Theme.getColor("setting_control_border_highlight") Image { diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 3bc9fedc9c..1fd217cbdf 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -79,15 +79,16 @@ Component margins: UM.Theme.getSize("default_margin").width top: activePrintersLabel.bottom left: parent.left - leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. - rightMargin: UM.Theme.getSize("default_lining").width + bottomMargin: 0 right: parent.right bottom: parent.bottom } + style: UM.Theme.styles.scrollview ListView { anchors.fill: parent + anchors.margins: UM.Theme.getSize("default_margin").height spacing: UM.Theme.getSize("default_margin").height model: OutputDevice.queuedPrintJobs @@ -95,11 +96,10 @@ Component delegate: PrintJobInfoBlock { printJob: modelData - width: Math.min(800 * screenScaleFactor, maximumWidth) + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").height height: 125 * screenScaleFactor - - // Add a 1 pix margin, as the border is sometimes cut off otherwise. - anchors.horizontalCenter: parent.horizontalCenter } } } diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 46e45feac9..c8825cd197 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -47,7 +47,6 @@ Item { id: materialLabel text: - { if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) { @@ -55,11 +54,15 @@ Item } return "" } - elide: Text.ElideRight - width: parent.width font: UM.Theme.getFont("default_bold") - anchors.left: extruderCircle.right - anchors.leftMargin: UM.Theme.getSize("default_margin").height + elide: Text.ElideRight + + anchors + { + right: parent.right + left: extruderCircle.right + margins: UM.Theme.getSize("default_margin").width + } } Label @@ -75,8 +78,14 @@ Item } anchors.top: materialLabel.bottom elide: Text.ElideRight - width: parent.width - anchors.left: extruderCircle.right - anchors.leftMargin: UM.Theme.getSize("default_margin").height + + anchors + { + top: materialLabel.bottom + right: parent.right + left: extruderCircle.right + leftMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("default_margin").width + } } } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index ea3aafb5cc..1be58a35b8 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -54,7 +54,8 @@ Item bottom: parent.bottom left: parent.left right: parent.horizontalCenter - margins: UM.Theme.getSize("default_margin").width + margins: 2 * UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("default_margin").width } Label @@ -101,7 +102,8 @@ Item bottom: parent.bottom left: parent.horizontalCenter right: parent.right - margins: UM.Theme.getSize("default_margin").width + margins: 2 * UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("default_margin").width } Label @@ -254,7 +256,7 @@ Item Rectangle { - color: "grey" + color: UM.Theme.getColor("viewport_background") width: 1 anchors.top: parent.top From c703d15cd3b9558bc3f9f551b75161ed14156b1f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 18:05:13 +0200 Subject: [PATCH 058/364] Updated the styling of the context hover CL-896 --- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 2 +- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 33 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 1fd217cbdf..be52eea214 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -99,7 +99,7 @@ Component anchors.left: parent.left anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").height - height: 125 * screenScaleFactor + height: 175 * screenScaleFactor } } } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 1be58a35b8..5722f332cc 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -142,8 +142,8 @@ Item { id: contextButton text: "\u22EE" //Unicode; Three stacked points. - - width: 30 + font.pixelSize: 25 + width: 35 height: width anchors { @@ -158,8 +158,9 @@ Item width: contextButton.width height: contextButton.height radius: 0.5 * width - color: "grey" + color: UM.Theme.getColor("viewport_background") } + onClicked: parent.switchPopupState() } @@ -175,7 +176,7 @@ Item width: 200 height: contentItem.height + 2 * padding visible: false - padding: UM.Theme.getSize("default_lining").width + transformOrigin: Popup.Top contentItem: Item { @@ -188,6 +189,12 @@ Item onClicked: OutputDevice.sendJobToTop(printJob.key) width: parent.width enabled: OutputDevice.printJobs[0].key != printJob.key + hoverEnabled: true + background: Rectangle + { + opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0 + color: UM.Theme.getColor("viewport_background") + } } Button { @@ -196,14 +203,28 @@ Item onClicked: OutputDevice.deleteJobFromQueue(printJob.key) width: parent.width anchors.top: sendToTopButton.bottom + hoverEnabled: true + background: Rectangle + { + opacity: deleteButton.down || deleteButton.hovered ? 1 : 0 + color: UM.Theme.getColor("viewport_background") + } } } background: Rectangle { color: UM.Theme.getColor("setting_control") - border.color: UM.Theme.getColor("setting_control_border") - height: popup.height + height: popup.height - 10 // - 2 times the radius of the dropshadow. + width: popup.width - 10 + layer.enabled: true + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + layer.effect: DropShadow + { + radius: 5 + color: "#3F000000" // 25% shadow + } } exit: Transition From e9d4c36b320deb2424b461cffa384c021513675c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 18:16:39 +0200 Subject: [PATCH 059/364] Updated labels --- .../UM3NetworkPrinting/ClusterControlItem.qml | 2 +- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 37 +++++-------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index bd94872183..807a18c1ea 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -39,7 +39,7 @@ Component right: parent.right } - text: OutputDevice.name + text: catalog.i18nc("@label", "Printing") elide: Text.ElideRight } diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index be52eea214..b39266b3e6 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -40,34 +40,16 @@ Component visible: OutputDevice.printers.length == 0 } - Item + Label { - anchors.topMargin: UM.Theme.getSize("default_margin").height + id: queuedLabel + anchors.left: queuedPrintJobs.left anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - - width: Math.min(800 * screenScaleFactor, maximumWidth) - height: children.height - visible: OutputDevice.printers.length != 0 - - Label - { - id: addRemovePrintersLabel - anchors.right: parent.right - text: catalog.i18nc("@label link to connect manager", "Add/Remove printers") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - linkColor: UM.Theme.getColor("text_link") - } - - MouseArea - { - anchors.fill: addRemovePrintersLabel - hoverEnabled: true - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel() - onEntered: addRemovePrintersLabel.font.underline = true - onExited: addRemovePrintersLabel.font.underline = false - } + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height + anchors.leftMargin: 3 * UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@label", "Queued") + font: UM.Theme.getFont("large") + color: UM.Theme.getColor("text") } ScrollView @@ -77,7 +59,8 @@ Component anchors { margins: UM.Theme.getSize("default_margin").width - top: activePrintersLabel.bottom + top: queuedLabel.bottom + topMargin: 0 left: parent.left bottomMargin: 0 right: parent.right From 6bfa2fed966c8e8cee5370ef9589665fb5e2207d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 19:46:14 +0200 Subject: [PATCH 060/364] Updated display states and fixed some more margins CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 807a18c1ea..2e67668741 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -53,6 +53,7 @@ Component right: parent.right topMargin: UM.Theme.getSize("default_margin").height bottom: parent.bottom + bottomMargin: UM.Theme.getSize("default_margin").height } style: UM.Theme.styles.scrollview @@ -69,7 +70,6 @@ Component rightMargin: 2 * UM.Theme.getSize("default_margin").width } spacing: UM.Theme.getSize("default_margin").height - displayMarginBeginning: 2 model: OutputDevice.printers delegate: Rectangle @@ -167,7 +167,7 @@ Component height: !base.collapsed ? childrenRect.height : 0 opacity: visible ? 1 : 0 Behavior on height { NumberAnimation { duration: 100 } } - Behavior on opacity { NumberAnimation { duration: 50 } } + Behavior on opacity { NumberAnimation { duration: 100 } } Rectangle { id: topSpacer @@ -179,7 +179,7 @@ Component right: parent.right margins: UM.Theme.getSize("default_margin").width top: parent.top - topMargin: 2 * UM.Theme.getSize("default_margin").width + topMargin: UM.Theme.getSize("default_margin").width } } @@ -236,7 +236,7 @@ Component anchors.right: parent.right anchors.margins: UM.Theme.getSize("default_margin").width anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width - height: showJobInfo ? childrenRect.height + 3 * UM.Theme.getSize("default_margin").height: 0 + height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0 visible: showJobInfo Label { @@ -286,6 +286,10 @@ Component { property var progress: { + if(modelData.activePrintJob == null) + { + return 0 + } var result = modelData.activePrintJob.timeElapsed / modelData.activePrintJob.timeTotal if(result > 1.0) { @@ -311,17 +315,23 @@ Component return "" } - if(modelData.activePrintJob.state == "wait_cleanup") + switch(modelData.activePrintJob.state) { - return "Finshed" - } - else if(modelData.activePrintJob.state == "pre_print") - { - return "Preparing" - } - else - { - return OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) + case "wait_cleanup": + return catalog.i18nc("@label:status", "Finshed") + case "pre_print": + case "sent_to_printer": + return catalog.i18nc("@label:status", "Preparing") + case "aborted": + case "wait_user_action": + return catalog.i18nc("@label:status", "Aborted") + case "pausing": + case "paused": + return catalog.i18nc("@label:status", "Paused") + case "resuming": + return catalog.i18nc("@label:status", "Resuming") + default: + OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) } } From fc83520ad9ccfc385db4d88e1f81e9b0152253c1 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 23 Aug 2018 20:34:20 +0200 Subject: [PATCH 061/364] Added camera view back to cluster screen CL-893 --- cura/CameraImageProvider.py | 8 ++++++- .../UM3NetworkPrinting/ClusterControlItem.qml | 8 +++++++ .../UM3NetworkPrinting/ClusterMonitorItem.qml | 7 ++++--- .../ClusterUM3OutputDevice.py | 20 ++++++++++++++++++ .../UM3NetworkPrinting/PrinterVideoStream.qml | 21 +++++++++++-------- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/cura/CameraImageProvider.py b/cura/CameraImageProvider.py index ff5c51f24b..6a07f6b029 100644 --- a/cura/CameraImageProvider.py +++ b/cura/CameraImageProvider.py @@ -19,5 +19,11 @@ class CameraImageProvider(QQuickImageProvider): return image, QSize(15, 15) except AttributeError: - pass + try: + image = output_device.activeCamera.getImage() + + return image, QSize(15, 15) + except AttributeError: + pass + return QImage(), QSize(15, 15) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2e67668741..50419c48ff 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -278,6 +278,14 @@ Component anchors.rightMargin: parent.rightMargin source: "camera-icon.svg" } + MouseArea + { + anchors.fill:parent + onClicked: + { + OutputDevice.setActiveCamera(modelData.camera) + } + } } } } diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index b39266b3e6..ff5fad5abd 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -89,17 +89,18 @@ Component PrinterVideoStream { - visible: OutputDevice.activePrinter != null + visible: OutputDevice.activeCamera != null anchors.fill: parent + camera: OutputDevice.activeCamera } onVisibleChanged: { - if (!monitorFrame.visible) + if (monitorFrame != null && !monitorFrame.visible) { // After switching the Tab ensure that active printer is Null, the video stream image // might be active - OutputDevice.setActivePrinter(null) + OutputDevice.setActiveCamera(null) } } } diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 6fffe2e3bf..7506a870a9 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -46,6 +46,7 @@ i18n_catalog = i18nCatalog("cura") class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): printJobsChanged = pyqtSignal() activePrinterChanged = pyqtSignal() + activeCameraChanged = pyqtSignal() # This is a bit of a hack, as the notify can only use signals that are defined by the class that they are in. # Inheritance doesn't seem to work. Tying them together does work, but i'm open for better suggestions. @@ -96,6 +97,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._latest_reply_handler = None # type: Optional[QNetworkReply] self._sending_job = None + self._active_camera = None # type: Optional[NetworkCamera] + 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) @@ -256,6 +259,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def activePrinter(self) -> Optional[PrinterOutputModel]: return self._active_printer + @pyqtProperty(QObject, notify=activeCameraChanged) + def activeCamera(self) -> Optional[NetworkCamera]: + return self._active_camera + @pyqtSlot(QObject) def setActivePrinter(self, printer: Optional[PrinterOutputModel]) -> None: if self._active_printer != printer: @@ -264,6 +271,19 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._active_printer = printer self.activePrinterChanged.emit() + @pyqtSlot(QObject) + def setActiveCamera(self, camera: Optional[NetworkCamera]) -> None: + if self._active_camera != camera: + if self._active_camera: + self._active_camera.stop() + + self._active_camera = camera + + if self._active_camera: + self._active_camera.start() + + self.activeCameraChanged.emit() + def _onPostPrintJobFinished(self, reply: QNetworkReply) -> None: if self._progress_message: self._progress_message.hide() diff --git a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml index 68758e095e..74c8ec8483 100644 --- a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml +++ b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml @@ -7,6 +7,8 @@ import UM 1.3 as UM Item { + property var camera: null + Rectangle { anchors.fill:parent @@ -17,7 +19,7 @@ Item MouseArea { anchors.fill: parent - onClicked: OutputDevice.setActivePrinter(null) + onClicked: OutputDevice.setActiveCamera(null) z: 0 } @@ -32,7 +34,7 @@ Item width: 20 * screenScaleFactor height: 20 * screenScaleFactor - onClicked: OutputDevice.setActivePrinter(null) + onClicked: OutputDevice.setActiveCamera(null) style: ButtonStyle { @@ -65,23 +67,24 @@ Item { if(visible) { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) + if(camera != null) { - OutputDevice.activePrinter.camera.start() + camera.start() } } else { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) + if(camera != null) { - OutputDevice.activePrinter.camera.stop() + camera.stop() } } } + source: { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) + if(camera != null && camera.latestImage != null) { - return OutputDevice.activePrinter.camera.latestImage; + return camera.latestImage; } return ""; } @@ -92,7 +95,7 @@ Item anchors.fill: cameraImage onClicked: { - OutputDevice.setActivePrinter(null) + OutputDevice.setActiveCamera(null) } z: 1 } From 93645e6bfe1d2b1c330beade5db2906c46184396 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 24 Aug 2018 10:46:23 +0200 Subject: [PATCH 062/364] Reduce component sizes Contributes to CURA-5378 --- .../Materials/MaterialBrandSection.qml | 88 ++++++++++ .../Materials/MaterialTypeSection.qml | 97 +++++++++++ .../Preferences/Materials/MaterialsList.qml | 162 +----------------- 3 files changed, 186 insertions(+), 161 deletions(-) create mode 100644 resources/qml/Preferences/Materials/MaterialBrandSection.qml create mode 100644 resources/qml/Preferences/Materials/MaterialTypeSection.qml diff --git a/resources/qml/Preferences/Materials/MaterialBrandSection.qml b/resources/qml/Preferences/Materials/MaterialBrandSection.qml new file mode 100644 index 0000000000..0acd2aa1d5 --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialBrandSection.qml @@ -0,0 +1,88 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium 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.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: brand_section + property var expanded: true + property var types_model: model.material_types + height: childrenRect.height + width: parent.width + Rectangle + { + id: brand_header_background + color: UM.Theme.getColor("favorites_header_bar") + anchors.fill: brand_header + } + Row + { + id: brand_header + width: parent.width + Label + { + id: brand_name + text: model.name + height: UM.Theme.getSize("favorites_row").height + width: parent.width - UM.Theme.getSize("favorites_button").width + verticalAlignment: Text.AlignVCenter + leftPadding: 4 + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: "black" + source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + } + } + MouseArea + { + anchors.fill: brand_header + onPressed: + { + brand_section.expanded = !brand_section.expanded + } + } + Column + { + anchors.top: brand_header.bottom + width: parent.width + anchors.left: parent.left + height: brand_section.expanded ? childrenRect.height : 0 + visible: brand_section.expanded + Repeater + { + model: types_model + delegate: MaterialTypeSection {} + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialTypeSection.qml b/resources/qml/Preferences/Materials/MaterialTypeSection.qml new file mode 100644 index 0000000000..ba4621f15e --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialTypeSection.qml @@ -0,0 +1,97 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium 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.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: material_type_section + property var expanded: true + property var colors_model: model.colors + height: childrenRect.height + width: parent.width + Rectangle + { + id: material_type_header_background + color: UM.Theme.getColor("lining") + anchors.bottom: material_type_header.bottom + anchors.left: material_type_header.left + height: UM.Theme.getSize("default_lining").height + width: material_type_header.width + } + Row + { + id: material_type_header + width: parent.width - 8 + anchors + { + left: parent.left + leftMargin: 8 + } + Label + { + text: model.name + height: UM.Theme.getSize("favorites_row").height + width: parent.width - UM.Theme.getSize("favorites_button").width + id: material_type_name + verticalAlignment: Text.AlignVCenter + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: 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 + { + anchors.fill: material_type_header + onPressed: + { + material_type_section.expanded = !material_type_section.expanded + } + } + Column + { + height: material_type_section.expanded ? childrenRect.height : 0 + visible: material_type_section.expanded + width: parent.width + anchors.top: material_type_header.bottom + anchors.left: parent.left + Repeater + { + model: colors_model + delegate: MaterialSlot { + material: model + } + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 220ce0134d..c16b37170f 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -180,168 +180,8 @@ Item Repeater { id: brand_list - model: materialsModel - delegate: Rectangle - { - id: brand_section - property var expanded: true - property var types_model: model.material_types - height: childrenRect.height - width: parent.width - Rectangle - { - id: brand_header_background - color: UM.Theme.getColor("favorites_header_bar") - anchors.fill: brand_header - } - Row - { - id: brand_header - width: parent.width - Label - { - id: brand_name - text: model.name - height: UM.Theme.getSize("favorites_row").height - width: parent.width - UM.Theme.getSize("favorites_button").width - verticalAlignment: Text.AlignVCenter - leftPadding: 4 - } - Button - { - text: "" - implicitWidth: UM.Theme.getSize("favorites_button").width - implicitHeight: UM.Theme.getSize("favorites_button").height - UM.RecolorImage { - anchors - { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: "black" - source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") - } - style: ButtonStyle - { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } - } - } - } - MouseArea - { - anchors.fill: brand_header - onPressed: - { - brand_section.expanded = !brand_section.expanded - } - } - Column - { - anchors.top: brand_header.bottom - width: parent.width - anchors.left: parent.left - height: brand_section.expanded ? childrenRect.height : 0 - visible: brand_section.expanded - Repeater - { - model: types_model - delegate: Rectangle - { - id: material_type_section - property var expanded: true - property var colors_model: model.colors - height: childrenRect.height - width: parent.width - Rectangle - { - id: material_type_header_background - color: UM.Theme.getColor("lining") - anchors.bottom: material_type_header.bottom - anchors.left: material_type_header.left - height: UM.Theme.getSize("default_lining").height - width: material_type_header.width - } - Row - { - id: material_type_header - width: parent.width - 8 - anchors - { - left: parent.left - leftMargin: 8 - } - Label - { - text: model.name - height: UM.Theme.getSize("favorites_row").height - width: parent.width - UM.Theme.getSize("favorites_button").width - id: material_type_name - verticalAlignment: Text.AlignVCenter - } - Button - { - text: "" - implicitWidth: UM.Theme.getSize("favorites_button").width - implicitHeight: UM.Theme.getSize("favorites_button").height - UM.RecolorImage { - anchors - { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: 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 - { - anchors.fill: material_type_header - onPressed: - { - material_type_section.expanded = !material_type_section.expanded - } - } - Column - { - height: material_type_section.expanded ? childrenRect.height : 0 - visible: material_type_section.expanded - width: parent.width - anchors.top: material_type_header.bottom - anchors.left: parent.left - Repeater - { - model: colors_model - delegate: MaterialSlot { - material: model - } - } - } - } - } - } - } + delegate: MaterialBrandSection {} } } } \ No newline at end of file From 61c635fbaf9545fb460950042622d4045f710ffa Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 23 Aug 2018 16:59:09 +0200 Subject: [PATCH 063/364] Mock application in unit tests --- tests/conftest.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index f2c709d8d8..77d215815a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,19 +3,21 @@ # The purpose of this class is to create fixtures or methods that can be shared among all tests. +import unittest.mock import pytest + from UM.Qt.QtApplication import QtApplication #QtApplication import is required, even though it isn't used. from cura.CuraApplication import CuraApplication from cura.MachineActionManager import MachineActionManager + + # 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: - application = CuraApplication.getInstance() - if application is None: - application = CuraApplication() - return application + app = unittest.mock.MagicMock() + return app # Returns a MachineActionManager instance. @pytest.fixture() From 3e623a6fe6b7dda7747849c6b91bd4a62508d0fd Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 11:02:05 +0200 Subject: [PATCH 064/364] Added pointer to context popup CL-894 --- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 5722f332cc..c9a4f14116 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -181,7 +181,7 @@ Item contentItem: Item { width: popup.width - 2 * popup.padding - height: childrenRect.height + height: childrenRect.height + 15 Button { id: sendToTopButton @@ -189,6 +189,8 @@ Item onClicked: OutputDevice.sendJobToTop(printJob.key) width: parent.width enabled: OutputDevice.printJobs[0].key != printJob.key + anchors.top: parent.top + anchors.topMargin: 10 hoverEnabled: true background: Rectangle { @@ -196,6 +198,7 @@ Item color: UM.Theme.getColor("viewport_background") } } + Button { id: deleteButton @@ -212,18 +215,49 @@ Item } } - background: Rectangle + background: Item { - color: UM.Theme.getColor("setting_control") - height: popup.height - 10 // - 2 times the radius of the dropshadow. - width: popup.width - 10 - layer.enabled: true - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - layer.effect: DropShadow + width: popup.width + height: popup.height + + DropShadow { + anchors.fill: pointedRectangle radius: 5 color: "#3F000000" // 25% shadow + source: pointedRectangle + transparentBorder: true + } + + Item + { + id: pointedRectangle + width: parent.width -10 + height: parent.height -10 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + + Rectangle + { + id: point + height: 13 + width: 13 + color: UM.Theme.getColor("setting_control") + transform: Rotation { angle: 45} + anchors.right: bloop.right + y: 1 + } + + Rectangle + { + id: bloop + color: UM.Theme.getColor("setting_control") + width: parent.width + anchors.top: parent.top + anchors.topMargin: 10 + anchors.bottom: parent.bottom + anchors.bottomMargin: 5 + } } } From 13069a2f99f5d530c0f06e564daa99ceb358ad0b Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 24 Aug 2018 11:06:44 +0200 Subject: [PATCH 065/364] Some file renaming Contributes to CURA-5378 --- .../{MaterialBrandSection.qml => MaterialsBrandSection.qml} | 2 +- .../qml/Preferences/Materials/MaterialsDetailsPanel.qml | 2 +- resources/qml/Preferences/Materials/MaterialsList.qml | 6 +++--- .../Materials/{MaterialSlot.qml => MaterialsSlot.qml} | 0 .../{MaterialTypeSection.qml => MaterialsTypeSection.qml} | 2 +- .../Materials/{MaterialView.qml => MaterialsView.qml} | 0 6 files changed, 6 insertions(+), 6 deletions(-) rename resources/qml/Preferences/Materials/{MaterialBrandSection.qml => MaterialsBrandSection.qml} (98%) rename resources/qml/Preferences/Materials/{MaterialSlot.qml => MaterialsSlot.qml} (100%) rename resources/qml/Preferences/Materials/{MaterialTypeSection.qml => MaterialsTypeSection.qml} (98%) rename resources/qml/Preferences/Materials/{MaterialView.qml => MaterialsView.qml} (100%) diff --git a/resources/qml/Preferences/Materials/MaterialBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml similarity index 98% rename from resources/qml/Preferences/Materials/MaterialBrandSection.qml rename to resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 0acd2aa1d5..7e1db1353c 100644 --- a/resources/qml/Preferences/Materials/MaterialBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -82,7 +82,7 @@ Rectangle Repeater { model: types_model - delegate: MaterialTypeSection {} + delegate: MaterialsTypeSection {} } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index fc8c6d728c..ad9f0e3766 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -50,7 +50,7 @@ Item } } - MaterialView // Material detailed information view below the title Label + MaterialsView // Material detailed information view below the title Label { id: materialDetailsView anchors diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index c16b37170f..2aea433843 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -94,7 +94,7 @@ Item Repeater { model: favoriteMaterialsModel - delegate: MaterialSlot { + delegate: MaterialsSlot { material: model } } @@ -171,7 +171,7 @@ Item Repeater { model: genericMaterialsModel - delegate: MaterialSlot { + delegate: MaterialsSlot { material: model } } @@ -181,7 +181,7 @@ Item { id: brand_list model: materialsModel - delegate: MaterialBrandSection {} + delegate: MaterialsBrandSection {} } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml similarity index 100% rename from resources/qml/Preferences/Materials/MaterialSlot.qml rename to resources/qml/Preferences/Materials/MaterialsSlot.qml diff --git a/resources/qml/Preferences/Materials/MaterialTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml similarity index 98% rename from resources/qml/Preferences/Materials/MaterialTypeSection.qml rename to resources/qml/Preferences/Materials/MaterialsTypeSection.qml index ba4621f15e..2395714d15 100644 --- a/resources/qml/Preferences/Materials/MaterialTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -89,7 +89,7 @@ Rectangle Repeater { model: colors_model - delegate: MaterialSlot { + delegate: MaterialsSlot { material: model } } diff --git a/resources/qml/Preferences/Materials/MaterialView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml similarity index 100% rename from resources/qml/Preferences/Materials/MaterialView.qml rename to resources/qml/Preferences/Materials/MaterialsView.qml From 2304aeaceb2a29b6210a5e3513488ba04a7b01cf Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 24 Aug 2018 12:10:32 +0200 Subject: [PATCH 066/364] Expanded states preserved when updating models Did this so that models can be updated more often fixing bugs where when a material is set as "not favorite" in the favorites section, its updated accordingly in its "normal" section. It's also the ground work for saving material section expansion to preferences. Contributes to CURA-5378 --- cura/Machines/Models/BaseMaterialsModel.py | 3 ++ .../Machines/Models/FavoriteMaterialsModel.py | 1 - .../Materials/MaterialsBrandSection.qml | 16 +++++- .../Preferences/Materials/MaterialsList.qml | 16 +++++- .../Preferences/Materials/MaterialsPage.qml | 50 +++++++++++-------- .../Materials/MaterialsTypeSection.qml | 16 +++++- 6 files changed, 74 insertions(+), 28 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index ff006d00ae..a90d762236 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -35,6 +35,9 @@ class BaseMaterialsModel(ListModel): # Update this model when list of materials changes self._material_manager.materialsUpdated.connect(self._update) + # Update this model when list of favorites changes + self._material_manager.favoritesUpdated.connect(self._update) + self.addRoleName(Qt.UserRole + 1, "root_material_id") self.addRoleName(Qt.UserRole + 2, "id") self.addRoleName(Qt.UserRole + 3, "GUID") diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 3c5ca226fe..be3f0f605f 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -8,7 +8,6 @@ class FavoriteMaterialsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - self._material_manager.favoritesUpdated.connect(self._update) # Update when favorites are changed self._update() def _update(self): diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 7e1db1353c..1077cbff6f 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -13,7 +13,7 @@ import Cura 1.0 as Cura Rectangle { id: brand_section - property var expanded: true + property var expanded: base.collapsed_brands.indexOf(model.name) > -1 property var types_model: model.material_types height: childrenRect.height width: parent.width @@ -69,7 +69,19 @@ Rectangle anchors.fill: brand_header onPressed: { - brand_section.expanded = !brand_section.expanded + const i = base.collapsed_brands.indexOf(model.name) + if (i > -1) + { + // Remove it + base.collapsed_brands.splice(i, 1) + brand_section.expanded = false + } + else + { + // Add it + base.collapsed_brands.push(model.name) + brand_section.expanded = true + } } } Column diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 2aea433843..4a1a330ed6 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -102,7 +102,7 @@ Item } Rectangle { - property var expanded: true + property var expanded: base.collapsed_brands.indexOf("Generic") > -1 id: generic_section height: childrenRect.height @@ -158,7 +158,19 @@ Item anchors.fill: generic_header onPressed: { - generic_section.expanded = !generic_section.expanded + const i = base.collapsed_brands.indexOf("Generic") + if (i > -1) + { + // Remove it + base.collapsed_brands.splice(i, 1) + generic_section.expanded = false + } + else + { + // Add it + base.collapsed_brands.push("Generic") + generic_section.expanded = true + } } } Column diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 4df6049b3f..0b81df5fa1 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -26,36 +26,44 @@ Item property string newRootMaterialIdToSwitchTo: "" property bool toActivateNewMaterial: false + // TODO: Save these to preferences + property var collapsed_brands: [] + property var collapsed_types: [] + UM.I18nCatalog { id: catalog name: "cura" } - Cura.MaterialBrandsModel + Cura.MaterialBrandsModel { id: materialsModel } + + function findModelByRootId( search_root_id ) { - id: materialsModel + for (var i = 0; i < materialsModel.rowCount(); i++) + { + var types_model = materialsModel.getItem(i).material_types; + for (var j = 0; j < types_model.rowCount(); j++) + { + var colors_model = types_model.getItem(j).colors; + for (var k = 0; k < colors_model.rowCount(); k++) + { + var material = colors_model.getItem(k); + if (material.root_material_id == search_root_id) + { + return material + } + } + } + } } - Cura.GenericMaterialsModel + Component.onCompleted: { - id: genericMaterialsModel + // Select the activated material when this page shows up + const extruder_position = Cura.ExtruderManager.activeExtruderIndex; + const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; + console.log("goign to search for", active_root_material_id) + base.currentItem = findModelByRootId(active_root_material_id) } - // Component.onCompleted: - // { - // // Select the activated material when this page shows up - // const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - // const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - // var itemIndex = -1; - // for (var i = 0; i < materialsModel.rowCount(); ++i) - // { - // var item = materialsModel.getItem(i); - // if (item.root_material_id == active_root_material_id) - // { - // itemIndex = i; - // break; - // } - // } - // materialListView.currentIndex = itemIndex; - // } onCurrentItemChanged: { MaterialsDetailsPanel.currentItem = currentItem } Connections diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 2395714d15..11bf2385e1 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -13,7 +13,7 @@ import Cura 1.0 as Cura Rectangle { id: material_type_section - property var expanded: true + property var expanded: base.collapsed_types.indexOf(model.brand + "_" + model.name) > -1 property var colors_model: model.colors height: childrenRect.height width: parent.width @@ -76,7 +76,19 @@ Rectangle anchors.fill: material_type_header onPressed: { - material_type_section.expanded = !material_type_section.expanded + const i = base.collapsed_types.indexOf(model.brand + "_" + model.name) + if (i > -1) + { + // Remove it + base.collapsed_types.splice(i, 1) + material_type_section.expanded = false + } + else + { + // Add it + base.collapsed_types.push(model.brand + "_" + model.name) + material_type_section.expanded = true + } } } Column From ea935024cfae2cc6b376d1caa0a832d589bfb429 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Fri, 24 Aug 2018 13:02:06 +0200 Subject: [PATCH 067/364] Add materil xml file to UFP file CURA-5555 --- plugins/UFPWriter/UFPWriter.py | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index ceb9d79087..7c8b43a018 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -60,5 +60,43 @@ class UFPWriter(MeshWriter): else: Logger.log("d", "Thumbnail not created, cannot save it") + #Store the material. + application = Application.getInstance() + machine_manager = application.getMachineManager() + global_stack = machine_manager.activeMachine + container_registry = application.getContainerRegistry() + + archive.addContentType(extension="xml.fdm_material", mime_type="application/x-ultimaker-material-profile") + + added_materials = [] + for extruder_stack in global_stack.extruders.values(): + material = extruder_stack.material + material_file_name = material.getMetaData()["base_file"] + ".xml.fdm_material" + material_file_name = "/Cura/" + material_file_name + + #Same material cannot be added + if material_file_name in added_materials: + continue + + material_file = archive.getStream(material_file_name) + material_containers = container_registry.findContainers(id=material.getMetaDataEntry("base_file")) + + if not material_containers: + Logger.log("e", "Cannot find material container with id: %s", material.id) + return False + + material_container = material_containers[0] + try: + serialized_material = material_container.serialize() + except NotImplementedError: + Logger.log("e", "Unable serialize material container with id: %s", material.id) + return False + + material_file.write(serialized_material.encode("UTF-8")) + archive.addRelation(virtual_path=material_file_name,relation_type="http://schemas.ultimaker.org/package/2018/relationships/xml.fdm_material") + + + added_materials.append(material_file_name) + archive.close() - return True + return True \ No newline at end of file From c13f25219357e87d041a99f0e07c08da3375618a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 13:41:33 +0200 Subject: [PATCH 068/364] Some spacing / anchoring fixes CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 19 +++++++++-------- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 21 ++++++++++++------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 50419c48ff..a89da54e1b 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -19,7 +19,7 @@ Component property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. visible: OutputDevice != null anchors.fill: parent - color: UM.Theme.getColor("viewport_background") + color: "white" UM.I18nCatalog { @@ -29,11 +29,12 @@ Component Label { - id: activePrintersLabel + id: printingLabel font: UM.Theme.getFont("large") anchors { - margins: UM.Theme.getSize("default_margin").width + margins: 2 * UM.Theme.getSize("default_margin").width + leftMargin: 4 * UM.Theme.getSize("default_margin").width top: parent.top left: parent.left right: parent.right @@ -48,10 +49,10 @@ Component { anchors { - top: activePrintersLabel.bottom + top: printingLabel.bottom left: parent.left right: parent.right - topMargin: UM.Theme.getSize("default_margin").height + topMargin: 2 * UM.Theme.getSize("default_margin").height bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } @@ -172,7 +173,7 @@ Component { id: topSpacer color: UM.Theme.getColor("viewport_background") - height: 1 + height: 2 anchors { left: parent.left @@ -214,7 +215,7 @@ Component { id: jobSpacer color: UM.Theme.getColor("viewport_background") - height: 1 + height: 2 anchors { left: parent.left @@ -257,7 +258,7 @@ Component source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter - width: parent.width / 3 + width: parent.width / 2 height: width } @@ -268,7 +269,7 @@ Component height: width radius: 0.5 * width anchors.left: parent.left - anchors.top: printJobPreview.bottom + anchors.bottom: printJobPreview.bottom color: UM.Theme.getColor("setting_control_border_highlight") Image { diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index c9a4f14116..8562eb3c61 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -77,7 +77,7 @@ Item source: printJob.preview_image_url anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: totalTimeLabel.top + anchors.bottom: totalTimeLabel.bottom width: height } @@ -186,7 +186,11 @@ Item { id: sendToTopButton text: catalog.i18nc("@label", "Move to top") - onClicked: OutputDevice.sendJobToTop(printJob.key) + onClicked: + { + OutputDevice.sendJobToTop(printJob.key) + popup.close() + } width: parent.width enabled: OutputDevice.printJobs[0].key != printJob.key anchors.top: parent.top @@ -198,12 +202,16 @@ Item color: UM.Theme.getColor("viewport_background") } } - + Button { id: deleteButton text: catalog.i18nc("@label", "Delete") - onClicked: OutputDevice.deleteJobFromQueue(printJob.key) + onClicked: + { + OutputDevice.deleteJobFromQueue(printJob.key) + popup.close() + } width: parent.width anchors.top: sendToTopButton.bottom hoverEnabled: true @@ -312,14 +320,11 @@ Item Rectangle { color: UM.Theme.getColor("viewport_background") - width: 1 - + width: 2 anchors.top: parent.top anchors.bottom: parent.bottom anchors.margins: UM.Theme.getSize("default_margin").height anchors.horizontalCenter: parent.horizontalCenter - } - } } \ No newline at end of file From bc651fea92d959b2505109ada790663faad49973 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 13:50:52 +0200 Subject: [PATCH 069/364] First printer tile no longer has shadow cut off from top CL-894 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 499 +++++++++--------- 1 file changed, 252 insertions(+), 247 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index a89da54e1b..95a823d950 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -70,312 +70,317 @@ Component leftMargin: 2 * UM.Theme.getSize("default_margin").width rightMargin: 2 * UM.Theme.getSize("default_margin").width } - spacing: UM.Theme.getSize("default_margin").height + spacing: UM.Theme.getSize("default_margin").height -10 model: OutputDevice.printers - delegate: Rectangle + delegate: Item { - width: parent.width - 2 * shadowRadius - height: childrenRect.height + UM.Theme.getSize("default_margin").height - anchors.horizontalCenter: parent.horizontalCenter - id: base - property var shadowRadius: 5 - property var collapsed: true - - layer.enabled: true - layer.effect: DropShadow + width: parent.width + height: base.height + 2 * base.shadowRadius // To ensure that the shadow doesn't get cut off. + Rectangle { - radius: base.shadowRadius - verticalOffset: 2 - color: "#3F000000" // 25% shadow - } + width: parent.width - 2 * shadowRadius + height: childrenRect.height + UM.Theme.getSize("default_margin").height + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + id: base + property var shadowRadius: 5 + property var collapsed: true - Item - { - id: printerInfo - height: machineIcon.height - anchors + layer.enabled: true + layer.effect: DropShadow { - top: parent.top - left: parent.left - right: parent.right - - margins: UM.Theme.getSize("default_margin").width + radius: base.shadowRadius + verticalOffset: 2 + color: "#3F000000" // 25% shadow } - MouseArea + Item { - anchors.fill: parent - onClicked: base.collapsed = !base.collapsed - } - - Rectangle - { - id: machineIcon - anchors.top: parent.top - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.left: parent.left - width: 50 - height: 50 - color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") - } - - Label - { - id: machineNameLabel - text: modelData.name - anchors.top: machineIcon.top - anchors.left: machineIcon.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: collapseIcon.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - elide: Text.ElideRight - } - - UM.RecolorImage - { - id: collapseIcon - width: 15 - height: 15 - sourceSize.width: width - sourceSize.height: height - source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - color: "black" - } - - Label - { - id: activeJobLabel - text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" - anchors.top: machineNameLabel.bottom - anchors.left: machineNameLabel.left - anchors.right: collapseIcon.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - elide: Text.ElideRight - } - } - - Item - { - id: detailedInfo - property var printJob: modelData.activePrintJob - visible: height == childrenRect.height - anchors.top: printerInfo.bottom - width: parent.width - height: !base.collapsed ? childrenRect.height : 0 - opacity: visible ? 1 : 0 - Behavior on height { NumberAnimation { duration: 100 } } - Behavior on opacity { NumberAnimation { duration: 100 } } - Rectangle - { - id: topSpacer - color: UM.Theme.getColor("viewport_background") - height: 2 + id: printerInfo + height: machineIcon.height anchors { - left: parent.left - right: parent.right - margins: UM.Theme.getSize("default_margin").width top: parent.top - topMargin: UM.Theme.getSize("default_margin").width - } - } - - Row - { - id: extrudersInfo - anchors.top: topSpacer.bottom - anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width - height: childrenRect.height - spacing: UM.Theme.getSize("default_margin").width - - PrintCoreConfiguration - { - id: leftExtruderInfo - width: Math.round(parent.width / 2) - printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[0] - } - - PrintCoreConfiguration - { - id: rightExtruderInfo - width: Math.round(parent.width / 2) - printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[1] - } - } - - Rectangle - { - id: jobSpacer - color: UM.Theme.getColor("viewport_background") - height: 2 - anchors - { left: parent.left right: parent.right margins: UM.Theme.getSize("default_margin").width - top: extrudersInfo.bottom - topMargin: 2 * UM.Theme.getSize("default_margin").height + } + + MouseArea + { + anchors.fill: parent + onClicked: base.collapsed = !base.collapsed + } + + Rectangle + { + id: machineIcon + anchors.top: parent.top + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.left: parent.left + width: 50 + height: 50 + color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") + } + + Label + { + id: machineNameLabel + text: modelData.name + anchors.top: machineIcon.top + anchors.left: machineIcon.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: collapseIcon.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + elide: Text.ElideRight + } + + UM.RecolorImage + { + id: collapseIcon + width: 15 + height: 15 + sourceSize.width: width + sourceSize.height: height + source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + color: "black" + } + + Label + { + id: activeJobLabel + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" + anchors.top: machineNameLabel.bottom + anchors.left: machineNameLabel.left + anchors.right: collapseIcon.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + elide: Text.ElideRight } } Item { - id: jobInfo - property var showJobInfo: modelData.activePrintJob != null && modelData.activePrintJob.state != "queued" - - anchors.top: jobSpacer.bottom - anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").width - anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width - height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0 - visible: showJobInfo - Label + id: detailedInfo + property var printJob: modelData.activePrintJob + visible: height == childrenRect.height + anchors.top: printerInfo.bottom + width: parent.width + height: !base.collapsed ? childrenRect.height : 0 + opacity: visible ? 1 : 0 + Behavior on height { NumberAnimation { duration: 100 } } + Behavior on opacity { NumberAnimation { duration: 100 } } + Rectangle { - id: printJobName - text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "" - font: UM.Theme.getFont("default_bold") - } - Label - { - id: ownerName - anchors.top: printJobName.bottom - text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : "" + id: topSpacer + color: UM.Theme.getColor("viewport_background") + height: 2 + anchors + { + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + top: parent.top + topMargin: UM.Theme.getSize("default_margin").width + } } - Image + Row { - id: printJobPreview - source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" - anchors.top: ownerName.bottom - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width / 2 - height: width + id: extrudersInfo + anchors.top: topSpacer.bottom + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width + height: childrenRect.height + spacing: UM.Theme.getSize("default_margin").width + + PrintCoreConfiguration + { + id: leftExtruderInfo + width: Math.round(parent.width / 2) + printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[0] + } + + PrintCoreConfiguration + { + id: rightExtruderInfo + width: Math.round(parent.width / 2) + printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[1] + } } Rectangle { - id: showCameraIcon - width: 35 * screenScaleFactor - height: width - radius: 0.5 * width + id: jobSpacer + color: UM.Theme.getColor("viewport_background") + height: 2 + anchors + { + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + top: extrudersInfo.bottom + topMargin: 2 * UM.Theme.getSize("default_margin").height + } + } + + Item + { + id: jobInfo + property var showJobInfo: modelData.activePrintJob != null && modelData.activePrintJob.state != "queued" + + anchors.top: jobSpacer.bottom + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height anchors.left: parent.left - anchors.bottom: printJobPreview.bottom - color: UM.Theme.getColor("setting_control_border_highlight") + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").width + anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width + height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0 + visible: showJobInfo + Label + { + id: printJobName + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "" + font: UM.Theme.getFont("default_bold") + } + Label + { + id: ownerName + anchors.top: printJobName.bottom + text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : "" + } + Image { - width: parent.width + id: printJobPreview + source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" + anchors.top: ownerName.bottom + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width / 2 height: width - anchors.right: parent.right - anchors.rightMargin: parent.rightMargin - source: "camera-icon.svg" } - MouseArea + + Rectangle { - anchors.fill:parent - onClicked: + id: showCameraIcon + width: 35 * screenScaleFactor + height: width + radius: 0.5 * width + anchors.left: parent.left + anchors.bottom: printJobPreview.bottom + color: UM.Theme.getColor("setting_control_border_highlight") + Image { - OutputDevice.setActiveCamera(modelData.camera) + width: parent.width + height: width + anchors.right: parent.right + anchors.rightMargin: parent.rightMargin + source: "camera-icon.svg" + } + MouseArea + { + anchors.fill:parent + onClicked: + { + OutputDevice.setActiveCamera(modelData.camera) + } } } } } - } - ProgressBar - { - property var progress: + ProgressBar { - if(modelData.activePrintJob == null) - { - return 0 - } - var result = modelData.activePrintJob.timeElapsed / modelData.activePrintJob.timeTotal - if(result > 1.0) - { - result = 1.0 - } - return result - } - - id: jobProgressBar - width: parent.width - value: progress - anchors.top: detailedInfo.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - visible: modelData.activePrintJob != null && modelData.activePrintJob != undefined - - style: ProgressBarStyle - { - property var progressText: + property var progress: { if(modelData.activePrintJob == null) { - return "" + return 0 } - - switch(modelData.activePrintJob.state) + var result = modelData.activePrintJob.timeElapsed / modelData.activePrintJob.timeTotal + if(result > 1.0) { - case "wait_cleanup": - return catalog.i18nc("@label:status", "Finshed") - case "pre_print": - case "sent_to_printer": - return catalog.i18nc("@label:status", "Preparing") - case "aborted": - case "wait_user_action": - return catalog.i18nc("@label:status", "Aborted") - case "pausing": - case "paused": - return catalog.i18nc("@label:status", "Paused") - case "resuming": - return catalog.i18nc("@label:status", "Resuming") - default: - OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) + result = 1.0 } + return result } - background: Rectangle - { - implicitWidth: 100 - implicitHeight: visible ? 24 : 0 - color: UM.Theme.getColor("viewport_background") - } + id: jobProgressBar + width: parent.width + value: progress + anchors.top: detailedInfo.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height - progress: Rectangle + visible: modelData.activePrintJob != null && modelData.activePrintJob != undefined + + style: ProgressBarStyle { - color: UM.Theme.getColor("primary") - id: progressItem - function getTextOffset() + property var progressText: { - if(progressItem.width + progressLabel.width < control.width) + if(modelData.activePrintJob == null) { - return progressItem.width + UM.Theme.getSize("default_margin").width + return "" } - else + + switch(modelData.activePrintJob.state) { - return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width + case "wait_cleanup": + return catalog.i18nc("@label:status", "Finshed") + case "pre_print": + case "sent_to_printer": + return catalog.i18nc("@label:status", "Preparing") + case "aborted": + case "wait_user_action": + return catalog.i18nc("@label:status", "Aborted") + case "pausing": + case "paused": + return catalog.i18nc("@label:status", "Paused") + case "resuming": + return catalog.i18nc("@label:status", "Resuming") + default: + OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) } } - Label + background: Rectangle { - id: progressLabel - anchors.left: parent.left - anchors.leftMargin: getTextOffset() - text: progressText - anchors.verticalCenter: parent.verticalCenter - color: progressItem.width + progressLabel.width < control.width ? "black" : "white" - width: contentWidth + implicitWidth: 100 + implicitHeight: visible ? 24 : 0 + color: UM.Theme.getColor("viewport_background") + } + + progress: Rectangle + { + color: UM.Theme.getColor("primary") + id: progressItem + function getTextOffset() + { + if(progressItem.width + progressLabel.width < control.width) + { + return progressItem.width + UM.Theme.getSize("default_margin").width + } + else + { + return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width + } + } + + Label + { + id: progressLabel + anchors.left: parent.left + anchors.leftMargin: getTextOffset() + text: progressText + anchors.verticalCenter: parent.verticalCenter + color: progressItem.width + progressLabel.width < control.width ? "black" : "white" + width: contentWidth + } } } } From 36da9cc9e5ddb33208360dcf1f20244ced10cb17 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 13:52:34 +0200 Subject: [PATCH 070/364] Added verticalOffset to popup shadow. This way it's more in line with the rest of the elements CL-896 --- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 8562eb3c61..a6b35ca44a 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -235,6 +235,7 @@ Item color: "#3F000000" // 25% shadow source: pointedRectangle transparentBorder: true + verticalOffset: 2 } Item From 5605ff3b4629ad294b5a5924297c5d842f812d86 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 14:07:56 +0200 Subject: [PATCH 071/364] Fixed fonts CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 8 +++++++- plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml | 3 +++ plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 6 ++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 95a823d950..0574a2eba5 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -52,7 +52,7 @@ Component top: printingLabel.bottom left: parent.left right: parent.right - topMargin: 2 * UM.Theme.getSize("default_margin").height + topMargin: 1 * UM.Theme.getSize("default_margin").height bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } @@ -134,6 +134,7 @@ Component anchors.right: collapseIcon.left anchors.rightMargin: UM.Theme.getSize("default_margin").width elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") } UM.RecolorImage @@ -159,6 +160,8 @@ Component anchors.right: collapseIcon.left anchors.rightMargin: UM.Theme.getSize("default_margin").width elide: Text.ElideRight + font: UM.Theme.getFont("default") + opacity: 0.6 } } @@ -254,6 +257,8 @@ Component id: ownerName anchors.top: printJobName.bottom text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : "" + font: UM.Theme.getFont("default") + opacity: 0.6 } Image @@ -380,6 +385,7 @@ Component anchors.verticalCenter: parent.verticalCenter color: progressItem.width + progressLabel.width < control.width ? "black" : "white" width: contentWidth + font: UM.Theme.getFont("default") } } } diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index c8825cd197..ddac895d29 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -79,6 +79,9 @@ Item anchors.top: materialLabel.bottom elide: Text.ElideRight + opacity: 0.6 + font: UM.Theme.getFont("default") + anchors { top: materialLabel.bottom diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index a6b35ca44a..e7b5e1c59d 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -70,6 +70,8 @@ Item id: ownerName anchors.top: printJobName.bottom text: printJob.owner + font: UM.Theme.getFont("default") + opacity: 0.6 } Image @@ -84,10 +86,10 @@ Item Label { id: totalTimeLabel - + opacity: 0.6 anchors.bottom: parent.bottom anchors.right: parent.right - + font: UM.Theme.getFont("default") text: printJob != null ? getPrettyTime(printJob.timeTotal) : "" elide: Text.ElideRight } From 86f872ae706ef7be6b15725bf28fa0c28378ae35 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 14:12:49 +0200 Subject: [PATCH 072/364] Decreased the spacing between printJob tiles in the queueuueueu CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 1 - plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 0574a2eba5..7100fb0fd7 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -44,7 +44,6 @@ Component elide: Text.ElideRight } - ScrollView { anchors diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index ff5fad5abd..8d46ac94c6 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -72,7 +72,7 @@ Component { anchors.fill: parent anchors.margins: UM.Theme.getSize("default_margin").height - spacing: UM.Theme.getSize("default_margin").height + spacing: UM.Theme.getSize("default_margin").height - 10 // 2x the shadow radius model: OutputDevice.queuedPrintJobs From aee90081e59ab94bebd18ee86b143d385dccc7b5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 14:51:13 +0200 Subject: [PATCH 073/364] Added machine icons --- plugins/UM3NetworkPrinting/UM3-icon.svg | 1 + plugins/UM3NetworkPrinting/UM3x-icon.svg | 1 + plugins/UM3NetworkPrinting/UMs5-icon.svg | 1 + 3 files changed, 3 insertions(+) create mode 100644 plugins/UM3NetworkPrinting/UM3-icon.svg create mode 100644 plugins/UM3NetworkPrinting/UM3x-icon.svg create mode 100644 plugins/UM3NetworkPrinting/UMs5-icon.svg diff --git a/plugins/UM3NetworkPrinting/UM3-icon.svg b/plugins/UM3NetworkPrinting/UM3-icon.svg new file mode 100644 index 0000000000..6b5d4e4895 --- /dev/null +++ b/plugins/UM3NetworkPrinting/UM3-icon.svg @@ -0,0 +1 @@ +UM3-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/UM3x-icon.svg b/plugins/UM3NetworkPrinting/UM3x-icon.svg new file mode 100644 index 0000000000..3708173dc5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/UM3x-icon.svg @@ -0,0 +1 @@ +UM3x-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/UMs5-icon.svg b/plugins/UM3NetworkPrinting/UMs5-icon.svg new file mode 100644 index 0000000000..78437465b3 --- /dev/null +++ b/plugins/UM3NetworkPrinting/UMs5-icon.svg @@ -0,0 +1 @@ +UMs5-icon \ No newline at end of file From d7e907f1a56c1fdf89e8316cdad51b5ef65889b0 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 15:13:29 +0200 Subject: [PATCH 074/364] Icons are now displayed in the printerTile CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 7100fb0fd7..34b097b006 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -112,14 +112,27 @@ Component onClicked: base.collapsed = !base.collapsed } - Rectangle + UM.RecolorImage { id: machineIcon anchors.top: parent.top anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.left: parent.left - width: 50 - height: 50 + source: + { + switch(modelData.type) + { + case "Ultimaker 3": + return "UM3-icon.svg" + case "Ultimaker 3 Extended": + return "UM3x-icon.svg" + case "Ultimaker S5": + return "UMs5-icon.svg" + } + } + width: sourceSize.width + height: sourceSize.height + color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } From aa03fabc57ceb2bc485ef59470451f25301560eb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Aug 2018 15:24:00 +0200 Subject: [PATCH 075/364] Remove trailing whitespace --- cura/LayerPolygon.py | 2 +- resources/definitions/ultimaker3.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index 9766e0c82a..f33934de0c 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -21,7 +21,7 @@ class LayerPolygon: __number_of_types = 11 __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType), numpy.arange(__number_of_types) == MoveRetractionType) - + ## LayerPolygon, used in ProcessSlicedLayersJob # \param extruder # \param line_types array with line_types diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 08fe01a76b..b75d12ce44 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -90,7 +90,7 @@ "infill_overlap": { "value": "0" }, "infill_pattern": { "value": "'triangles'" }, "infill_wipe_dist": { "value": "0" }, - "initial_layer_line_width_factor": { "value": "120" }, + "initial_layer_line_width_factor": { "value": "120" }, "jerk_enabled": { "value": "True" }, "jerk_layer_0": { "value": "jerk_topbottom" }, "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, From 8daf02063da0f66ff12f49e0d8f8d8ac324c174b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 24 Aug 2018 15:35:01 +0200 Subject: [PATCH 076/364] Fix quality lookup fallback mechanism CURA-5668 The last fallback is the global qualities, either machine-specific or generic, but not using both. Because if a machine defines its own global qualities, it is intended to override the existing ones, so do not fallback again in this case. --- cura/Machines/QualityManager.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index df3bec0827..cb2776429f 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -259,8 +259,12 @@ class QualityManager(QObject): # 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 qualities if exist - # 6. generic 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. @@ -289,7 +293,13 @@ class QualityManager(QObject): addNodesToCheck(machine_node, nodes_to_check, node_info_list_0, 0) - nodes_to_check += [machine_node, default_machine_node] + # 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.quality_type_map: + nodes_to_check += [machine_node] + else: + nodes_to_check += [default_machine_node] + for node in nodes_to_check: if node and node.quality_type_map: if has_variant_materials: From 9564f98ccc639fa718b933f632aeaa2d55586307 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 16:06:29 +0200 Subject: [PATCH 077/364] Added context menu to printerTile CL-893 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 160 +++++++++++++++++- .../ClusterUM3PrinterOutputController.py | 2 - .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 1 - 3 files changed, 159 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 34b097b006..753197cdca 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -3,6 +3,7 @@ import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.3 import QtGraphicalEffects 1.0 +import QtQuick.Controls 2.0 as Controls2 import UM 1.3 as UM import Cura 1.0 as Cura @@ -132,7 +133,7 @@ Component } width: sourceSize.width height: sourceSize.height - + color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } @@ -272,6 +273,163 @@ Component font: UM.Theme.getFont("default") opacity: 0.6 } + function switchPopupState() + { + popup.visible ? popup.close() : popup.open() + } + Controls2.Button + { + id: contextButton + text: "\u22EE" //Unicode; Three stacked points. + font.pixelSize: 25 + width: 35 + height: width + anchors + { + right: parent.right + top: parent.top + } + hoverEnabled: true + + background: Rectangle + { + opacity: contextButton.down || contextButton.hovered ? 1 : 0 + width: contextButton.width + height: contextButton.height + radius: 0.5 * width + color: UM.Theme.getColor("viewport_background") + } + + onClicked: parent.switchPopupState() + } + + Controls2.Popup + { + // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property + id: popup + clip: true + closePolicy: Controls2.Popup.CloseOnPressOutsideParent + x: parent.width - width + y: contextButton.height + width: 200 + height: contentItem.height + 2 * padding + visible: false + + transformOrigin: Controls2.Popup.Top + contentItem: Item + { + width: popup.width - 2 * popup.padding + height: childrenRect.height + 15 + Controls2.Button + { + id: pauseButton + text: modelData.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause") + onClicked: + { + if(modelData.activePrintJob.state == "paused") + { + modelData.activePrintJob.setState("print") + } + else if(modelData.activePrintJob.state == "printing") + { + modelData.activePrintJob.setState("pause") + } + popup.close() + } + width: parent.width + enabled: ["paused", "printing"].indexOf(modelData.activePrintJob.state) >= 0 + anchors.top: parent.top + anchors.topMargin: 10 + hoverEnabled: true + background: Rectangle + { + opacity: pauseButton.down || pauseButton.hovered ? 1 : 0 + color: UM.Theme.getColor("viewport_background") + } + } + + Controls2.Button + { + id: abortButton + text: catalog.i18nc("@label", "Abort") + onClicked: + { + modelData.activePrintJob.setState("abort") + popup.close() + } + width: parent.width + anchors.top: pauseButton.bottom + hoverEnabled: true + enabled: ["paused", "printing", "pre_print"].indexOf(modelData.activePrintJob.state) >= 0 + background: Rectangle + { + opacity: abortButton.down || abortButton.hovered ? 1 : 0 + color: UM.Theme.getColor("viewport_background") + } + } + } + + background: Item + { + width: popup.width + height: popup.height + + DropShadow + { + anchors.fill: pointedRectangle + radius: 5 + color: "#3F000000" // 25% shadow + source: pointedRectangle + transparentBorder: true + verticalOffset: 2 + } + + Item + { + id: pointedRectangle + width: parent.width -10 + height: parent.height -10 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + + Rectangle + { + id: point + height: 13 + width: 13 + color: UM.Theme.getColor("setting_control") + transform: Rotation { angle: 45} + anchors.right: bloop.right + y: 1 + } + + Rectangle + { + id: bloop + color: UM.Theme.getColor("setting_control") + width: parent.width + anchors.top: parent.top + anchors.topMargin: 10 + anchors.bottom: parent.bottom + anchors.bottomMargin: 5 + } + } + } + + exit: Transition + { + // This applies a default NumberAnimation to any changes a state change makes to x or y properties + NumberAnimation { property: "visible"; duration: 75; } + } + enter: Transition + { + // This applies a default NumberAnimation to any changes a state change makes to x or y properties + NumberAnimation { property: "visible"; duration: 75; } + } + + onClosed: visible = false + onOpened: visible = true + } Image { diff --git a/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py index 4a0319cafc..fcced0b883 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py @@ -6,8 +6,6 @@ from cura.PrinterOutput.PrinterOutputController import PrinterOutputController MYPY = False if MYPY: from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel - from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel - class ClusterUM3PrinterOutputController(PrinterOutputController): def __init__(self, output_device): diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index e7b5e1c59d..427aa8b851 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -166,7 +166,6 @@ Item onClicked: parent.switchPopupState() } - Popup { // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property From d57f166b082ef7fc1f72decfed29568ab90a49f9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 16:26:51 +0200 Subject: [PATCH 078/364] Added opacity to preview if print is done / paused CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 753197cdca..ca1ae07585 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -439,6 +439,23 @@ Component anchors.horizontalCenter: parent.horizontalCenter width: parent.width / 2 height: width + opacity: + { + if(modelData.activePrintJob == null) + { + return 1.0 + } + + switch(modelData.activePrintJob.state) + { + case "wait_cleanup": + case "wait_user_action": + case "paused": + return 0.5 + default: + return 1.0 + } + } } Rectangle From 39b12fed770c4e32b753b5e0007a75c0ddd788fd Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 16:47:46 +0200 Subject: [PATCH 079/364] Added icons to beter indicate printjob state CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 32 +++++++++++++++++++ plugins/UM3NetworkPrinting/aborted-icon.svg | 1 + plugins/UM3NetworkPrinting/approved-icon.svg | 1 + plugins/UM3NetworkPrinting/paused-icon.svg | 1 + 4 files changed, 35 insertions(+) create mode 100644 plugins/UM3NetworkPrinting/aborted-icon.svg create mode 100644 plugins/UM3NetworkPrinting/approved-icon.svg create mode 100644 plugins/UM3NetworkPrinting/paused-icon.svg diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index ca1ae07585..01aeb85cde 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -456,6 +456,38 @@ Component return 1.0 } } + + + } + + UM.RecolorImage + { + id: statusImage + anchors.centerIn: printJobPreview + source: + { + if(modelData.activePrintJob == null) + { + return "" + } + switch(modelData.activePrintJob.state) + { + case "paused": + return "paused-icon.svg" + case "wait_cleanup": + return "approved-icon.svg" + case "wait_user_action": + return "aborted-icon.svg" + default: + return "" + } + } + visible: source != "" + width: 0.5 * printJobPreview.width + height: 0.5 * printJobPreview.height + sourceSize.width: width + sourceSize.height: height + color: "black" } Rectangle diff --git a/plugins/UM3NetworkPrinting/aborted-icon.svg b/plugins/UM3NetworkPrinting/aborted-icon.svg new file mode 100644 index 0000000000..7ef82c8911 --- /dev/null +++ b/plugins/UM3NetworkPrinting/aborted-icon.svg @@ -0,0 +1 @@ +aborted-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/approved-icon.svg b/plugins/UM3NetworkPrinting/approved-icon.svg new file mode 100644 index 0000000000..671957d709 --- /dev/null +++ b/plugins/UM3NetworkPrinting/approved-icon.svg @@ -0,0 +1 @@ +approved-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/paused-icon.svg b/plugins/UM3NetworkPrinting/paused-icon.svg new file mode 100644 index 0000000000..a66217d662 --- /dev/null +++ b/plugins/UM3NetworkPrinting/paused-icon.svg @@ -0,0 +1 @@ +paused-icon \ No newline at end of file From 1749a6f9d5c06205721b07606eef6f95aadab392 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Aug 2018 17:08:32 +0200 Subject: [PATCH 080/364] Fixed some QML errors --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 01aeb85cde..12381d3f7a 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -323,7 +323,7 @@ Component Controls2.Button { id: pauseButton - text: modelData.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause") + text: modelData.activePrintJob != null && modelData.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause") onClicked: { if(modelData.activePrintJob.state == "paused") @@ -337,7 +337,7 @@ Component popup.close() } width: parent.width - enabled: ["paused", "printing"].indexOf(modelData.activePrintJob.state) >= 0 + enabled: modelData.activePrintJob != null && ["paused", "printing"].indexOf(modelData.activePrintJob.state) >= 0 anchors.top: parent.top anchors.topMargin: 10 hoverEnabled: true @@ -360,7 +360,7 @@ Component width: parent.width anchors.top: pauseButton.bottom hoverEnabled: true - enabled: ["paused", "printing", "pre_print"].indexOf(modelData.activePrintJob.state) >= 0 + enabled: modelData.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(modelData.activePrintJob.state) >= 0 background: Rectangle { opacity: abortButton.down || abortButton.hovered ? 1 : 0 From 82570ee35ff027daa03ae7ed51bd748bac03079b Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Sat, 25 Aug 2018 14:46:21 +0200 Subject: [PATCH 081/364] bq Hephestos2: Getting a rid of custom g-code * Getting a rid of M800: This removes M800 completely. The problem is basically that M800 sets the temperature to 200deg. As a result we tell the firmware to heat up to e.g. 205deg, then M800 kicks in and sets the temperature to 200deg and then we heat up to 205deg again. Therefore I looked into the firmware and extracted all g-code lines except the one which tells to go to 200deg. * Getting independent of bq's fork and therefore adding compatibility to Marlin We use standard g-code, which is safe to be used with both firmware. Note: This change might be also interesting for other bq products, but can't test on them. Therefore it is up to bq and/or the owners of these products to contribute and correct this here, as I did. --- resources/definitions/bq_hephestos_2.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/bq_hephestos_2.def.json b/resources/definitions/bq_hephestos_2.def.json index ca0e66ada2..90a86433fb 100644 --- a/resources/definitions/bq_hephestos_2.def.json +++ b/resources/definitions/bq_hephestos_2.def.json @@ -17,8 +17,8 @@ "overrides": { "machine_name": { "default_value": "BQ Hephestos 2" }, - "machine_start_gcode": { "default_value": "; -- START GCODE --\nM104 S{material_print_temperature} ; Heat up extruder while leveling\nM800 ; Custom GCODE to fire start print procedure\nM109 S{material_print_temperature} ; Makes sure the temperature is correct before printing\n; -- end of START GCODE --" }, - "machine_end_gcode": { "default_value": "; -- END GCODE --\nM801 ; Custom GCODE to fire end print procedure\n; -- end of END GCODE --" }, + "machine_start_gcode": { "default_value": "; -- START GCODE --\nM104 S{material_print_temperature}\nG28 ; Zero-ing position\nG29 ; Auto bed-leveling\nG0 X4 Y297 Z15 F4000 ; Fast move to BQ's start position\nG90 ; Set to Absolute Positioning\nG92 E0 ; Reset extruder 0\nG1 F1800 ; Set default feedrate\nM109 S{material_print_temperature} ; Makes sure the temperature is correct before printing\n; -- end of START GCODE --" }, + "machine_end_gcode": { "default_value": "; -- END GCODE --\nM801 ; Marlin G-CODE to fire end print procedure\n; -- end of END GCODE --" }, "machine_width": { "default_value": 210 }, "machine_depth": { "default_value": 297 }, "machine_height": { "default_value": 220 }, From eac70dc06dd5e062fc54a36482b9ab025a147b65 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 27 Aug 2018 09:41:19 +0200 Subject: [PATCH 082/364] Change default print job name to 'Untitled' This is more common for documents that don't yet have a title in many applications. --- cura/PrintInformation.py | 2 +- resources/qml/JobSpecs.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 21e2040dc1..8527da1b8a 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -300,7 +300,7 @@ class PrintInformation(QObject): def _updateJobName(self): if self._base_name == "": - self._job_name = "unnamed" + self._job_name = "Untitled" self._is_user_specified_job_name = False self.jobNameChanged.emit() return diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 20ec8ce289..31ca84d66e 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -81,7 +81,7 @@ Item { text: PrintInformation.jobName horizontalAlignment: TextInput.AlignRight onEditingFinished: { - var new_name = text == "" ? catalog.i18nc("@text Print job name", "unnamed") : text; + var new_name = text == "" ? catalog.i18nc("@text Print job name", "Untitled") : text; PrintInformation.setJobName(new_name, true); printJobTextfield.focus = false; } From 33f495442a84eecbb0a0aee4970d17258b52dd75 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 27 Aug 2018 10:44:13 +0200 Subject: [PATCH 083/364] Remove unneeded code CURA-5162 --- cura/Machines/Models/BaseMaterialsModel.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index a90d762236..43b42c55ff 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -22,7 +22,6 @@ class BaseMaterialsModel(ListModel): # Make these managers available to all material models self._container_registry = self._application.getInstance().getContainerRegistry() - self._extruder_manager = self._application.getExtruderManager() self._machine_manager = self._application.getMachineManager() self._material_manager = self._application.getMaterialManager() From 336ea150d931e7e91582997648bf02af4a023832 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 27 Aug 2018 10:45:18 +0200 Subject: [PATCH 084/364] Change tabs into spaces As per our code style. --- resources/extruders/builder_premium_large_front.def.json | 6 +++--- resources/extruders/builder_premium_large_rear.def.json | 4 ++-- resources/extruders/builder_premium_medium_front.def.json | 6 +++--- resources/extruders/builder_premium_medium_rear.def.json | 4 ++-- resources/extruders/builder_premium_small_front.def.json | 6 +++--- resources/extruders/builder_premium_small_rear.def.json | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/resources/extruders/builder_premium_large_front.def.json b/resources/extruders/builder_premium_large_front.def.json index 059f7ef8a7..4834bc8fd9 100644 --- a/resources/extruders/builder_premium_large_front.def.json +++ b/resources/extruders/builder_premium_large_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_large_rear.def.json b/resources/extruders/builder_premium_large_rear.def.json index 769178a8b4..f257749ea4 100644 --- a/resources/extruders/builder_premium_large_rear.def.json +++ b/resources/extruders/builder_premium_large_rear.def.json @@ -20,9 +20,9 @@ "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_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_medium_front.def.json b/resources/extruders/builder_premium_medium_front.def.json index bd735fbe25..05dcb3d49f 100644 --- a/resources/extruders/builder_premium_medium_front.def.json +++ b/resources/extruders/builder_premium_medium_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_medium_rear.def.json b/resources/extruders/builder_premium_medium_rear.def.json index 59e688ff71..3461e07f09 100644 --- a/resources/extruders/builder_premium_medium_rear.def.json +++ b/resources/extruders/builder_premium_medium_rear.def.json @@ -20,9 +20,9 @@ "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_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_small_front.def.json b/resources/extruders/builder_premium_small_front.def.json index 17fb914a42..7a1c352c73 100644 --- a/resources/extruders/builder_premium_small_front.def.json +++ b/resources/extruders/builder_premium_small_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_small_rear.def.json b/resources/extruders/builder_premium_small_rear.def.json index 70a2dbf1aa..7085236a5c 100644 --- a/resources/extruders/builder_premium_small_rear.def.json +++ b/resources/extruders/builder_premium_small_rear.def.json @@ -20,9 +20,9 @@ "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_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } From 45e335531884902becc2c948e592fa6aa0a12b10 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 27 Aug 2018 10:57:58 +0200 Subject: [PATCH 085/364] Catch failure to parse QML component Don't crash the application then. --- plugins/PostProcessingPlugin/PostProcessingPlugin.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index da971a8e61..b28a028325 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -1,5 +1,6 @@ -# Copyright (c) 2015 Jaime van Kessel, Ultimaker B.V. +# Copyright (c) 2018 Jaime van Kessel, Ultimaker B.V. # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. + from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot from UM.PluginRegistry import PluginRegistry @@ -260,6 +261,9 @@ class PostProcessingPlugin(QObject, Extension): # Create the plugin dialog component path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml") self._view = Application.getInstance().createQmlComponent(path, {"manager": self}) + if self._view is None: + Logger.log("e", "Not creating PostProcessing button near save button because the QML component failed to be created.") + return Logger.log("d", "Post processing view created.") # Create the save button component @@ -269,6 +273,9 @@ class PostProcessingPlugin(QObject, Extension): def showPopup(self): if self._view is None: self._createView() + if self._view is None: + Logger.log("e", "Not creating PostProcessing window since the QML component failed to be created.") + return self._view.show() ## Property changed: trigger re-slice From 423f1210b013b268086c2edd4acf121bdde64710 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 27 Aug 2018 11:10:41 +0200 Subject: [PATCH 086/364] Catch erros and open the write stream only if the material cointaner is found CURA-5555 --- plugins/UFPWriter/UFPWriter.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 7c8b43a018..841d61a000 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -24,6 +24,8 @@ class UFPWriter(MeshWriter): self._snapshot = None Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot) + self._default_data_path ="/Cura/" + def _createSnapshot(self, *args): # must be called from the main thread because of OpenGL Logger.log("d", "Creating thumbnail image...") @@ -66,19 +68,24 @@ class UFPWriter(MeshWriter): global_stack = machine_manager.activeMachine container_registry = application.getContainerRegistry() - archive.addContentType(extension="xml.fdm_material", mime_type="application/x-ultimaker-material-profile") + material_extension = "xml.fdm_material" + material_mime_type = "application/x-ultimaker-material-profile" + + try: + archive.addContentType(extension=material_extension, mime_type=material_mime_type) + except: + Logger.log("w", "The material extension: %s was already added", material_extension) added_materials = [] for extruder_stack in global_stack.extruders.values(): material = extruder_stack.material material_file_name = material.getMetaData()["base_file"] + ".xml.fdm_material" - material_file_name = "/Cura/" + material_file_name + material_file_name = self._default_data_path + material_file_name #Same material cannot be added if material_file_name in added_materials: continue - material_file = archive.getStream(material_file_name) material_containers = container_registry.findContainers(id=material.getMetaDataEntry("base_file")) if not material_containers: @@ -92,10 +99,10 @@ class UFPWriter(MeshWriter): Logger.log("e", "Unable serialize material container with id: %s", material.id) return False + material_file = archive.getStream(material_file_name) material_file.write(serialized_material.encode("UTF-8")) archive.addRelation(virtual_path=material_file_name,relation_type="http://schemas.ultimaker.org/package/2018/relationships/xml.fdm_material") - added_materials.append(material_file_name) archive.close() From 22ccf074f3b8529bbb541d1da20ca39ff7d9d572 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 27 Aug 2018 13:20:18 +0200 Subject: [PATCH 087/364] Only check if printing extruder is enabled for printing meshes CURA-5669 --- plugins/CuraEngineBackend/StartSliceJob.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 0ebcafdbb2..1295390c22 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -220,8 +220,10 @@ class StartSliceJob(Job): stack = global_stack skip_group = False for node in group: + # Only check if the printing extruder is enabled for printing meshes + is_non_printing_mesh = node.callDecoration("evaluateIsNonPrintingMesh") extruder_position = node.callDecoration("getActiveExtruderPosition") - if not extruders_enabled[extruder_position]: + if not is_non_printing_mesh and not extruders_enabled[extruder_position]: skip_group = True has_model_with_disabled_extruders = True associated_disabled_extruders.add(extruder_position) From 1dd0d794df8c2578781c6755d2c79f8555fea0aa Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 24 Aug 2018 11:24:43 +0200 Subject: [PATCH 088/364] Collect user modified settings - Collect user modified settings in user_changes and quality_changes - Update example data --- plugins/SliceInfoPlugin/SliceInfo.py | 16 ++++++++++++++++ plugins/SliceInfoPlugin/example_data.json | 1 + 2 files changed, 17 insertions(+) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 2e9e557c4a..48c1d2ab20 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -95,6 +95,20 @@ class SliceInfo(QObject, Extension): def setSendSliceInfo(self, enabled: bool): Application.getInstance().getPreferences().setValue("info/send_slice_info", enabled) + def _getUserModifiedSettingKeys(self) -> list: + application = Application.getInstance() + machine_manager = application.getMachineManager() + global_stack = machine_manager.activeMachine + + user_modified_setting_keys = set() + + for stack in [global_stack] + list(global_stack.extruders.values()): + # Get all settings in user_changes and quality_changes + all_keys = stack.userChanges.getAllKeys() | stack.qualityChanges.getAllKeys() + user_modified_setting_keys |= all_keys + + return list(sorted(user_modified_setting_keys)) + def _onWriteStarted(self, output_device): try: if not Application.getInstance().getPreferences().getValue("info/send_slice_info"): @@ -164,6 +178,8 @@ class SliceInfo(QObject, Extension): data["quality_profile"] = global_stack.quality.getMetaData().get("quality_type") + data["user_modified_setting_keys"] = ",".join(self._getUserModifiedSettingKeys()) + data["models"] = [] # Listing all files placed on the build plate for node in DepthFirstIterator(application.getController().getScene().getRoot()): diff --git a/plugins/SliceInfoPlugin/example_data.json b/plugins/SliceInfoPlugin/example_data.json index ec953e0842..3f0a9fb388 100644 --- a/plugins/SliceInfoPlugin/example_data.json +++ b/plugins/SliceInfoPlugin/example_data.json @@ -56,6 +56,7 @@ } ], "quality_profile": "fast", + "user_modified_setting_keys": "layer_height,wall_line_width,infill_sparse_density", "models": [ { "hash": "b72789b9beb5366dff20b1cf501020c3d4d4df7dc2295ecd0fddd0a6436df070", From fe9cada45903c71b64c033fd3603eb6866917a2e Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 27 Aug 2018 13:59:00 +0200 Subject: [PATCH 089/364] Increase plugin API version to 5 CURA-5627 --- plugins/3MFReader/plugin.json | 2 +- plugins/3MFWriter/plugin.json | 2 +- plugins/ChangeLogPlugin/plugin.json | 2 +- plugins/CuraEngineBackend/plugin.json | 2 +- plugins/CuraProfileReader/plugin.json | 2 +- plugins/CuraProfileWriter/plugin.json | 2 +- plugins/FirmwareUpdateChecker/plugin.json | 2 +- plugins/GCodeGzReader/plugin.json | 2 +- plugins/GCodeGzWriter/plugin.json | 2 +- plugins/GCodeProfileReader/plugin.json | 2 +- plugins/GCodeReader/plugin.json | 2 +- plugins/GCodeWriter/plugin.json | 2 +- plugins/ImageReader/plugin.json | 2 +- plugins/LegacyProfileReader/plugin.json | 2 +- plugins/MachineSettingsAction/plugin.json | 2 +- plugins/ModelChecker/plugin.json | 2 +- plugins/MonitorStage/plugin.json | 2 +- plugins/PerObjectSettingsTool/plugin.json | 2 +- plugins/PostProcessingPlugin/plugin.json | 2 +- plugins/PrepareStage/plugin.json | 2 +- plugins/RemovableDriveOutputDevice/plugin.json | 2 +- plugins/SimulationView/plugin.json | 2 +- plugins/SliceInfoPlugin/plugin.json | 2 +- plugins/SolidView/plugin.json | 2 +- plugins/SupportEraser/plugin.json | 2 +- plugins/Toolbox/plugin.json | 2 +- plugins/UFPWriter/plugin.json | 2 +- plugins/UM3NetworkPrinting/plugin.json | 2 +- plugins/USBPrinting/plugin.json | 2 +- plugins/UltimakerMachineActions/plugin.json | 2 +- plugins/UserAgreement/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json | 2 +- plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json | 2 +- plugins/X3DReader/plugin.json | 2 +- plugins/XRayView/plugin.json | 2 +- plugins/XmlMaterialProfile/plugin.json | 2 +- 43 files changed, 43 insertions(+), 43 deletions(-) diff --git a/plugins/3MFReader/plugin.json b/plugins/3MFReader/plugin.json index 5d15123017..5e41975752 100644 --- a/plugins/3MFReader/plugin.json +++ b/plugins/3MFReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for reading 3MF files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/3MFWriter/plugin.json b/plugins/3MFWriter/plugin.json index 22d18b2cf1..9ec4fb0c20 100644 --- a/plugins/3MFWriter/plugin.json +++ b/plugins/3MFWriter/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for writing 3MF files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/ChangeLogPlugin/plugin.json b/plugins/ChangeLogPlugin/plugin.json index e9414b9b71..e09a08564a 100644 --- a/plugins/ChangeLogPlugin/plugin.json +++ b/plugins/ChangeLogPlugin/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Shows changes since latest checked version.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/CuraEngineBackend/plugin.json b/plugins/CuraEngineBackend/plugin.json index e5df06f228..111698d8d1 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": 4, + "api": 5, "version": "1.0.0", "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileReader/plugin.json b/plugins/CuraProfileReader/plugin.json index 004a1ade4d..66a2a6a56b 100644 --- a/plugins/CuraProfileReader/plugin.json +++ b/plugins/CuraProfileReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for importing Cura profiles.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileWriter/plugin.json b/plugins/CuraProfileWriter/plugin.json index d9accce770..16c8c34152 100644 --- a/plugins/CuraProfileWriter/plugin.json +++ b/plugins/CuraProfileWriter/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for exporting Cura profiles.", - "api": 4, + "api": 5, "i18n-catalog":"cura" } diff --git a/plugins/FirmwareUpdateChecker/plugin.json b/plugins/FirmwareUpdateChecker/plugin.json index d6a9f9fbd7..cbbd41e420 100644 --- a/plugins/FirmwareUpdateChecker/plugin.json +++ b/plugins/FirmwareUpdateChecker/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Checks for firmware updates.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/GCodeGzReader/plugin.json b/plugins/GCodeGzReader/plugin.json index e9f14724e0..3bd6a4097d 100644 --- a/plugins/GCodeGzReader/plugin.json +++ b/plugins/GCodeGzReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Reads g-code from a compressed archive.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/GCodeGzWriter/plugin.json b/plugins/GCodeGzWriter/plugin.json index 9774e9a25c..4c6497317b 100644 --- a/plugins/GCodeGzWriter/plugin.json +++ b/plugins/GCodeGzWriter/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Writes g-code to a compressed archive.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/GCodeProfileReader/plugin.json b/plugins/GCodeProfileReader/plugin.json index f8f7d4c291..9677628c85 100644 --- a/plugins/GCodeProfileReader/plugin.json +++ b/plugins/GCodeProfileReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for importing profiles from g-code files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/GCodeReader/plugin.json b/plugins/GCodeReader/plugin.json index f72a8cc12c..75b4d0cd4f 100644 --- a/plugins/GCodeReader/plugin.json +++ b/plugins/GCodeReader/plugin.json @@ -3,6 +3,6 @@ "author": "Victor Larchenko", "version": "1.0.0", "description": "Allows loading and displaying G-code files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/GCodeWriter/plugin.json b/plugins/GCodeWriter/plugin.json index 5fcb1a3bd7..3bbbab8b95 100644 --- a/plugins/GCodeWriter/plugin.json +++ b/plugins/GCodeWriter/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Writes g-code to a file.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/ImageReader/plugin.json b/plugins/ImageReader/plugin.json index 2752c6e8f4..08195863e8 100644 --- a/plugins/ImageReader/plugin.json +++ b/plugins/ImageReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Enables ability to generate printable geometry from 2D image files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/LegacyProfileReader/plugin.json b/plugins/LegacyProfileReader/plugin.json index 2dc71511a9..179f5444e0 100644 --- a/plugins/LegacyProfileReader/plugin.json +++ b/plugins/LegacyProfileReader/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for importing profiles from legacy Cura versions.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/MachineSettingsAction/plugin.json b/plugins/MachineSettingsAction/plugin.json index 703a145deb..571658e40a 100644 --- a/plugins/MachineSettingsAction/plugin.json +++ b/plugins/MachineSettingsAction/plugin.json @@ -3,6 +3,6 @@ "author": "fieldOfView", "version": "1.0.0", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/ModelChecker/plugin.json b/plugins/ModelChecker/plugin.json index a9190adcaa..3753c0cc88 100644 --- a/plugins/ModelChecker/plugin.json +++ b/plugins/ModelChecker/plugin.json @@ -2,7 +2,7 @@ "name": "Model Checker", "author": "Ultimaker B.V.", "version": "0.1", - "api": 4, + "api": 5, "description": "Checks models and print configuration for possible printing issues and give suggestions.", "i18n-catalog": "cura" } diff --git a/plugins/MonitorStage/plugin.json b/plugins/MonitorStage/plugin.json index cb3f55a80d..88b53840e0 100644 --- a/plugins/MonitorStage/plugin.json +++ b/plugins/MonitorStage/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides a monitor stage in Cura.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/PerObjectSettingsTool/plugin.json b/plugins/PerObjectSettingsTool/plugin.json index 3254662d33..15fde63387 100644 --- a/plugins/PerObjectSettingsTool/plugin.json +++ b/plugins/PerObjectSettingsTool/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides the Per Model Settings.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/PostProcessingPlugin/plugin.json b/plugins/PostProcessingPlugin/plugin.json index ebfef8145a..fea061e93b 100644 --- a/plugins/PostProcessingPlugin/plugin.json +++ b/plugins/PostProcessingPlugin/plugin.json @@ -2,7 +2,7 @@ "name": "Post Processing", "author": "Ultimaker", "version": "2.2", - "api": 4, + "api": 5, "description": "Extension that allows for user created scripts for post processing", "catalog": "cura" } \ No newline at end of file diff --git a/plugins/PrepareStage/plugin.json b/plugins/PrepareStage/plugin.json index 4fd55e955e..f0464313c7 100644 --- a/plugins/PrepareStage/plugin.json +++ b/plugins/PrepareStage/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides a prepare stage in Cura.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/RemovableDriveOutputDevice/plugin.json b/plugins/RemovableDriveOutputDevice/plugin.json index df11644256..36bb9ae186 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.0", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/SimulationView/plugin.json b/plugins/SimulationView/plugin.json index 0e7bec0626..93df98068f 100644 --- a/plugins/SimulationView/plugin.json +++ b/plugins/SimulationView/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides the Simulation view.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/SliceInfoPlugin/plugin.json b/plugins/SliceInfoPlugin/plugin.json index d1c643266b..939e5ff235 100644 --- a/plugins/SliceInfoPlugin/plugin.json +++ b/plugins/SliceInfoPlugin/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Submits anonymous slice info. Can be disabled through preferences.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/SolidView/plugin.json b/plugins/SolidView/plugin.json index 6d6bda96f0..e70ec224dd 100644 --- a/plugins/SolidView/plugin.json +++ b/plugins/SolidView/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides a normal solid mesh view.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/SupportEraser/plugin.json b/plugins/SupportEraser/plugin.json index 5ccb639913..7af35e0fb5 100644 --- a/plugins/SupportEraser/plugin.json +++ b/plugins/SupportEraser/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Creates an eraser mesh to block the printing of support in certain places", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/Toolbox/plugin.json b/plugins/Toolbox/plugin.json index 12d4042b6b..2557185524 100644 --- a/plugins/Toolbox/plugin.json +++ b/plugins/Toolbox/plugin.json @@ -2,6 +2,6 @@ "name": "Toolbox", "author": "Ultimaker B.V.", "version": "1.0.0", - "api": 4, + "api": 5, "description": "Find, manage and install new Cura packages." } diff --git a/plugins/UFPWriter/plugin.json b/plugins/UFPWriter/plugin.json index 7d10b89ad4..ab590353e0 100644 --- a/plugins/UFPWriter/plugin.json +++ b/plugins/UFPWriter/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides support for writing Ultimaker Format Packages.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json index e7b59fadd6..d415338374 100644 --- a/plugins/UM3NetworkPrinting/plugin.json +++ b/plugins/UM3NetworkPrinting/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "description": "Manages network connections to Ultimaker 3 printers.", "version": "1.0.0", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/USBPrinting/plugin.json b/plugins/USBPrinting/plugin.json index 27e07c45b2..3484c8a48a 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.0", - "api": 4, + "api": 5, "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", "i18n-catalog": "cura" } diff --git a/plugins/UltimakerMachineActions/plugin.json b/plugins/UltimakerMachineActions/plugin.json index 57b3e6bc8f..b60c7df88e 100644 --- a/plugins/UltimakerMachineActions/plugin.json +++ b/plugins/UltimakerMachineActions/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/UserAgreement/plugin.json b/plugins/UserAgreement/plugin.json index b10abc5640..50a2aa0441 100644 --- a/plugins/UserAgreement/plugin.json +++ b/plugins/UserAgreement/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Ask the user once if he/she agrees with our license.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json index 79115f931e..463fcdc941 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json index d213042ad2..e7a0b1c559 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json index 759b6368fd..3029539887 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json index 3c3d7fff8c..225da67235 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json index 3df84ff7e6..9a139851ec 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json index d80b820976..cf42b3f6cd 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json index fbce09c807..f9cc968dae 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json index 164b79d504..f5ba7235d1 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json index 1059ca3e57..c07ae31c0a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Upgrades configurations from Cura 3.4 to Cura 4.0.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/X3DReader/plugin.json b/plugins/X3DReader/plugin.json index f18c7f033d..9ee09e43df 100644 --- a/plugins/X3DReader/plugin.json +++ b/plugins/X3DReader/plugin.json @@ -3,6 +3,6 @@ "author": "Seva Alekseyev", "version": "0.5.0", "description": "Provides support for reading X3D files.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/XRayView/plugin.json b/plugins/XRayView/plugin.json index 4e89690c13..576dec4656 100644 --- a/plugins/XRayView/plugin.json +++ b/plugins/XRayView/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides the X-Ray view.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/XmlMaterialProfile/plugin.json b/plugins/XmlMaterialProfile/plugin.json index 17056dcb3e..4b2901c375 100644 --- a/plugins/XmlMaterialProfile/plugin.json +++ b/plugins/XmlMaterialProfile/plugin.json @@ -3,6 +3,6 @@ "author": "Ultimaker B.V.", "version": "1.0.0", "description": "Provides capabilities to read and write XML-based material profiles.", - "api": 4, + "api": 5, "i18n-catalog": "cura" } From 8c4117541c1f15d0ac8655e56c0e9a20d54a25fc Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Fri, 17 Aug 2018 12:01:43 +0200 Subject: [PATCH 090/364] Update Peopoly moai definitions and files --- resources/definitions/peopoly_moai.def.json | 115 +++++++++++++++--- resources/images/moai.jpg | Bin 0 -> 431184 bytes resources/meshes/moai.obj | 32 +++++ .../peopoly_moai/peopoly_moai_coarse.inst.cfg | 17 +++ .../peopoly_moai/peopoly_moai_draft.inst.cfg | 18 +++ .../peopoly_moai_extra_high.inst.cfg | 18 +++ .../peopoly_moai/peopoly_moai_high.inst.cfg | 13 +- .../peopoly_moai/peopoly_moai_max.inst.cfg | 17 --- .../peopoly_moai/peopoly_moai_normal.inst.cfg | 14 +-- 9 files changed, 199 insertions(+), 45 deletions(-) create mode 100644 resources/images/moai.jpg create mode 100644 resources/meshes/moai.obj create mode 100644 resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg create mode 100644 resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg create mode 100644 resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg delete mode 100644 resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 5c03444d49..815469db32 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -4,15 +4,13 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "fieldOfView", + "author": "Peopoly", "manufacturer": "Peopoly", "file_formats": "text/x-gcode", "has_machine_quality": true, "has_materials": false, - "machine_extruder_trains": - { - "0": "peopoly_moai_extruder_0" - } + "platform": "moai.obj", + "platform_texture": "moai.jpg" }, "overrides": { @@ -28,6 +26,9 @@ "machine_depth": { "default_value": 130 }, + "machine_nozzle_size": { + "default_value": 0.067 + }, "machine_head_with_fans_polygon": { "default_value": [ @@ -37,6 +38,10 @@ [ 10, -10 ] ] }, + "material_diameter": { + "enabled": false, + "value": 1.75 + }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, @@ -46,7 +51,6 @@ "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" }, - "line_width": { "minimum_value_warning": "machine_nozzle_size" }, @@ -75,7 +79,8 @@ "value": "0.1" }, "top_bottom_thickness": { - "minimum_value_warning": "0.1" + "minimum_value_warning": "0.1", + "value": "0.4" }, "infill_sparse_thickness": { "maximum_value_warning": "0.5" @@ -102,24 +107,23 @@ "value": "speed_print" }, "speed_travel": { - "value": "300" + "value": 150 }, "speed_travel_layer_0": { - "value": "300" + "value": 150 }, "speed_layer_0": { - "value": "5" + "value": 5 }, "speed_slowdown_layers": { - "value": "2" + "value": 3 }, "infill_overlap": { - "value": "15" + "value": 15 }, "adhesion_type": { - "value": "\"none\"" + "value": "'none'" }, - "acceleration_enabled": { "value": "False" }, @@ -139,6 +143,10 @@ "enabled": false, "value": "False" }, + "cool_fan_speed_min": { + "enabled": false, + "value": 0 + }, "retraction_enable": { "enabled": false, "value": "False" @@ -148,7 +156,8 @@ "value": "'off'" }, "retract_at_layer_change": { - "enabled": false + "enabled": false, + "value": false }, "cool_min_layer_time_fan_speed_max": { "enabled": false @@ -158,6 +167,82 @@ }, "cool_fan_full_layer": { "enabled": false + }, + "snap_distance": { + "value": "0.1" + }, + "meshfix_maximum_resolution": { + "value": "0.005" + }, + "skin_outline_count": { + "value": 0 + }, + "travel_compensate_overlapping_walls_enabled": { + "value": "False" + }, + "travel_compensate_overlapping_walls_0_enabled": { + "value": "False" + }, + "travel_compensate_overlapping_walls_x_enabled": { + "value": "False" + }, + "wall_thickness": { + "value": 0.4 + }, + "infill_sparse_density": { + "value": 70 + }, + "infill_pattern": { + "value": "'lines'" + }, + "cool_min_layer_time": { + "enabled": false, + "value": 0 + }, + "cool_min_speed": { + "enabled": false, + "value": 0 + }, + "cool_lift_head": { + "enabled": false, + "value": "False" + }, + "material_flow": { + "enabled": false + }, + "material_flow_layer_0": { + "enabled": false + }, + "speed_equalize_flow_enabled": { + "enabled": false, + "value": "False" + }, + "draft_shield_enabled": { + "enabled": false, + "value": "False" + }, + "z_seam_corner": { + "value": "'z_seam_corner_none'" + }, + "z_seam_type": { + "value": "'shortest'" + }, + "skin_no_small_gaps_heuristic": { + "value": "False" + }, + "ironing_enabled": { + "enabled": false, + "value": "False" + }, + "skin_overlap": { + "value": 6 + }, + "infill_wipe_dist": { + "value": 0 + }, + "max_feedrate_z_override": { + "value": 0, + "enabled": false } } } diff --git a/resources/images/moai.jpg b/resources/images/moai.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb7fcf35621850f15cf874032224c00990b4acad GIT binary patch literal 431184 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Ƀ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 literal 0 HcmV?d00001 diff --git a/resources/meshes/moai.obj b/resources/meshes/moai.obj new file mode 100644 index 0000000000..f13f30d6f4 --- /dev/null +++ b/resources/meshes/moai.obj @@ -0,0 +1,32 @@ +# OBJ written from C:\Users\Flo\Desktop\Cura_FILES\moai.obj +mtllib moai.mtl +# Units millimeters + +g Mesh +v 65 -65 0 +v -65 -65 0 +v -65 65 0 +v 65 65 0 +v 65 -65 0 +v -65 -65 0 +v -65 65 0 +v 65 65 0 +v -65 65 18.8383 +v 65 65 18.8383 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vt 0.0975501 1 +vt 1 1 +vt 1 0.0977239 +vt 0.0975501 0.0977239 +vt 0.0186426 0.870052 +vt 0.0736426 0.870052 +vt 0.0186426 0.815052 +vt 0.0214764 0.912057 +vt 0.0764764 0.967057 +vt 0.0214764 0.967057 +usemtl red +f 1/1/1 4/2/1 3/3/1 2/4/1 +f 7/5/2 9/6/2 6/7/2 +f 5/8/3 10/9/3 8/10/3 diff --git a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg new file mode 100644 index 0000000000..482b8ce51a --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Coarse +definition = peopoly_moai + +[metadata] +setting_version = 5 +type = quality +quality_type = coarse +weight = 3 + +[values] +layer_height = 0.08 +speed_print = 90 +speed_travel = 100 +speed_travel_layer_0 = 100 +speed_wall = 90 diff --git a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg new file mode 100644 index 0000000000..e7cfa673b2 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Draft +definition = peopoly_moai + +[metadata] +setting_version = 5 +type = quality +quality_type = draft +weight = 4 + +[values] +layer_height = 0.1 +speed_print = 85 +speed_travel = 100 +speed_travel_layer_0 = 100 +speed_wall = 85 +speed_slowdown_layers = 2 diff --git a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg new file mode 100644 index 0000000000..da62ee32cd --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Extra High +definition = peopoly_moai + +[metadata] +setting_version = 5 +type = quality +quality_type = extra_high +weight = 0 + +[values] +layer_height = 0.02 +speed_print = 185 +speed_travel = 190 +speed_travel_layer_0 = 100 +speed_wall = 185 +speed_slowdown_layers = 5 diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 36b5f21ff8..be35dbaf05 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Extra Fine +name = High definition = peopoly_moai [metadata] @@ -10,8 +10,9 @@ quality_type = high weight = 1 [values] -infill_sparse_density = 70 -layer_height = 0.05 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 150 +layer_height = 0.04 +speed_print = 140 +speed_travel = 145 +speed_travel_layer_0 = 100 +speed_wall = 140 +speed_slowdown_layers = 4 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg deleted file mode 100644 index 48ffd07f33..0000000000 --- a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg +++ /dev/null @@ -1,17 +0,0 @@ -[general] -version = 4 -name = Maximum Quality -definition = peopoly_moai - -[metadata] -setting_version = 5 -type = quality -quality_type = extra_high -weight = 2 - -[values] -infill_sparse_density = 70 -layer_height = 0.025 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 200 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index f5fe799ac3..2d6ba873db 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -1,17 +1,17 @@ [general] version = 4 -name = Fine +name = Normal definition = peopoly_moai [metadata] setting_version = 5 type = quality quality_type = normal -weight = 0 +weight = 2 [values] -infill_sparse_density = 70 -layer_height = 0.1 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 100 +layer_height = 0.06 +speed_print = 120 +speed_travel = 130 +speed_travel_layer_0 = 100 +speed_wall = 120 From eca2f5f6bad341e407b887dcb7147702c00ae1e9 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Fri, 17 Aug 2018 12:27:38 +0200 Subject: [PATCH 091/364] change from snap_distance to minimum_polygon_circumference --- resources/definitions/peopoly_moai.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 815469db32..cf919dd1fa 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -168,7 +168,7 @@ "cool_fan_full_layer": { "enabled": false }, - "snap_distance": { + "minimum_polygon_circumference": { "value": "0.1" }, "meshfix_maximum_resolution": { From d0c14969604f69053404bcadd3eac667c5f97f84 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Fri, 17 Aug 2018 17:02:56 +0200 Subject: [PATCH 092/364] fix issues with moai profile --- resources/definitions/peopoly_moai.def.json | 12 ++++-------- resources/extruders/peopoly_moai_extruder_0.def.json | 5 ++++- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index cf919dd1fa..85480b303d 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -10,7 +10,10 @@ "has_machine_quality": true, "has_materials": false, "platform": "moai.obj", - "platform_texture": "moai.jpg" + "platform_texture": "moai.jpg", + "machine_extruder_trains": { + "0": "peopoly_moai_extruder_0" + } }, "overrides": { @@ -26,9 +29,6 @@ "machine_depth": { "default_value": 130 }, - "machine_nozzle_size": { - "default_value": 0.067 - }, "machine_head_with_fans_polygon": { "default_value": [ @@ -38,10 +38,6 @@ [ 10, -10 ] ] }, - "material_diameter": { - "enabled": false, - "value": 1.75 - }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, diff --git a/resources/extruders/peopoly_moai_extruder_0.def.json b/resources/extruders/peopoly_moai_extruder_0.def.json index 7940002926..bbffd4ac4d 100644 --- a/resources/extruders/peopoly_moai_extruder_0.def.json +++ b/resources/extruders/peopoly_moai_extruder_0.def.json @@ -11,6 +11,9 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.067 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { + "enabled": false, + "default_value": 1.75 + } } } From 048bdd36a66d49edb128c39f722c186ae31c5b1d Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Sun, 19 Aug 2018 21:11:20 +0200 Subject: [PATCH 093/364] updated moai plate image --- resources/images/moai.jpg | Bin 431184 -> 308997 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/images/moai.jpg b/resources/images/moai.jpg index eb7fcf35621850f15cf874032224c00990b4acad..54c6c7561e2f4031a7a52350fc7a5257371dfa14 100644 GIT binary patch literal 308997 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

rjL6g#g~Em8>-G4Q8_nf{*1Gs%*r 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

=0Hrz4-Obzf!+jyBk+L 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

ys&wKl?eniE{{To_c2sWeQsW)i>*Ub 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

URor-XbJ0>Y^AX^R&ImyP)N79mgu8Eq>~a++}k zuUFO_q?paN%6LGGG-=3+9I-?Mr=khJ8s@-IpEB1A1%v+2u{S@_`5z~rI!U_PTABT) zW?bNtWz*U}^8SSgG80t8rkZ5SVV(qRS;IRFa|aTOMD`n>;n3aNN|mIK;9f{@uzG}h z{%3`3I^i7>T|y|sOK>Hd6O83Hg}hrA47u>_+2c^#Z|)kKPNPpqu}zPdT(1fS1e3^A zks?c>_Q#H-6q^f4k zs4;5)07h1ud=+q+m;I7`w83W7f9WWFnV`m?S8AE)OvFTv=*>3NqSN}oY~Y*=p4wGBaHTP4q8`y~B^Jha&+*Ct|&m>N=4 zCw3!kDn!$m^l@_^LU1K7m=iIP;ubjau?ts?Zl#M6uBapCCJYsc5eENl}PuPQ|B&HZG;C;Eveo6SipNj2s33zIc!Yd`V;BCe7p(tru;{m`jBxrF?i|N92TrrwviA z(McXn@@5g1E;EEPd$Wc~VL*b81+7=lmkzGNQ zMp)n3J&n_$9Ahl_Ake^G-5n%&!P%z*GNQ=KX5T;lOV#DNLv$+O+l(U&>Sd6G;6{8? zB~?RL$r92x(Uxgcke-Upir&!Enoos7#BQ#M_RP?*jG-xM#Ih2iOAkrXXSK1b*i~hk z+=@|tFj$4Fd?ddq%AXH7(uKsNt;VMk3AT{VQAfokDCF2*f=v|J)lL*VDp;9Z$tpOd zT+>JiC5aI4#2ZjW$W9nq;cKb6|&H%o2pBA@(I7 z0!48r(3|rD4J=elUQ4gfWav~QS#>_%4rr&oTm`px5c!E*}<(};MT63*Z3Z~Cv)dG zqfB@|z&IT3BTX4IEu)?qgWV@lj!95UB5?a35xGi?--C$MzoW*S# z$twPZVnf6vV~iyhLa>byf~brwfojA>#JV>7=zf%#cG4P?ro@=hA+RQuv*CV4h+ZKo ze5y!y`5F==?YF`usYF&S1H6otqfR3)$o&cC7O7g`N;uaxTV^LFUys{=fvCoY+n+hd zqg)Rdt5e8uIZTyr3{=5cuiQ(cOOv?fG0FAGq_kz5L~taem|ugA8zFqzTcR@gCYJ`^ z2-ta~PYKDD8z4RTzU3P)1gaElwphEBw(`E3hrC8ddN+hTXv zZKG{Q5j}=Tnv}dUwjX|kg|^#CC8CzYb%Ki0ip@BaYD7TEs)VY8Xc=WN5cMbbh#SS5Y+;O8W@ zM%psPsKDI`X-yO)-b*o9Z9E={L7zra5?GNR!#6)GEKcQUoX$jmf{)lcN2*!*-Ct?#Kdrw7hZ$+VpKE!4Egp`-Uj5jD=i9>^4 zG-1HxLYiut_Ar+w&1B^^=XN`@r|==R+faybJ?y?g3xVq#@=48D`KU2av`$7nV=Kqu zc`_tCgkg}GI1U#k-J512h(n4vGf3xc5Y`w^!Iw^8%jDWO!09H0%#)l#T;WRWl6CIM zT^b;h;L8&#d>G_Yk%TRrtk>&LSNu7kCY@Z966Lo40OLUf5J3bGK@aK;h?H^0{0Vqs zP7IZUCE-a_f=a@;0!hy~p&qs(3sXp9p8`%0k^)|Mf)cU@NVIeVB;-#XL}^(7rC~5& zNm&skP)T&WP{~FlV36cMmw+V4h+EfxL279TQs7Ia{z##WF@i>agmA(i+VW8-;f?f& zzq|Po^ZLF>Kdbp8&+PdUv-iL3sv#dQ`yu}T)BePa{p0)CO3&QSp|j$okkvjsP?v(G z{{Vve>#e)sC~w~tQ+}2GP5%I6X3zU}Hf+DQXZHU9+pFikOZ0~ zLgkV-=}p=*Y|Mz+q&IB9-!n5dXzr5@=$Ko!WqPC^Qh_z8q#;X>`0l#vuDa{4xn~xo QB%6p!+y4Oh82l3MwESL^_C3 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Ƀ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 From ae4d6f05f8378541fceb7bad8933471df5b40933 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Mon, 20 Aug 2018 12:12:31 +0200 Subject: [PATCH 094/364] teaking the moai profile --- resources/definitions/peopoly_moai.def.json | 49 +++++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 85480b303d..6ab1157c62 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -76,7 +76,13 @@ }, "top_bottom_thickness": { "minimum_value_warning": "0.1", - "value": "0.4" + "value": "0.1" + }, + "top_thickness": { + "minimum_value_warning": "resolveOrValue('layer_height')" + }, + "bottom_thickness": { + "minimum_value_warning": "resolveOrValue('layer_height')" }, "infill_sparse_thickness": { "maximum_value_warning": "0.5" @@ -115,7 +121,7 @@ "value": 3 }, "infill_overlap": { - "value": 15 + "value": 12 }, "adhesion_type": { "value": "'none'" @@ -182,8 +188,11 @@ "travel_compensate_overlapping_walls_x_enabled": { "value": "False" }, + "wall_0_wipe_dist": { + "value": "machine_nozzle_size / 3" + }, "wall_thickness": { - "value": 0.4 + "value": 0.5 }, "infill_sparse_density": { "value": 70 @@ -191,6 +200,9 @@ "infill_pattern": { "value": "'lines'" }, + "infill_angles": { + "valie": "[10,55,100,145,190,235,280,325]" + }, "cool_min_layer_time": { "enabled": false, "value": 0 @@ -231,14 +243,43 @@ "value": "False" }, "skin_overlap": { - "value": 6 + "value": 3 }, "infill_wipe_dist": { "value": 0 }, + "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 + }, + "flow_rate_extrusion_offset_factor": { + "enabled": false + }, + "adaptive_layer_height_enabled": { + "value": "False", + "enabled": false + }, + "bridge_settings_enabled": { + "value": "False", + "enabled": false + }, + "acceleration_enabled": { + "value": "False", + "enabled": false + }, + "relative_extrusion": { + "value": "False", + "enabled": false + }, + "coasting_enable": { + "value": "False", + "enabled": false } } } From 39cbfca17f423cd9064960caffca12005f6948fe Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Mon, 20 Aug 2018 15:09:31 +0200 Subject: [PATCH 095/364] typo in moai profile --- resources/definitions/peopoly_moai.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 6ab1157c62..e6d8b90571 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -201,7 +201,7 @@ "value": "'lines'" }, "infill_angles": { - "valie": "[10,55,100,145,190,235,280,325]" + "value": "[10,55,100,145,190,235,280,325]" }, "cool_min_layer_time": { "enabled": false, From 65992f4281afe5b4f798ce34aeae1bf4f9defcb8 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Wed, 22 Aug 2018 16:26:34 +0200 Subject: [PATCH 096/364] Add KDE .directory file in gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5cc60c2f4c..0a66b6eb33 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ LC_MESSAGES *.lprof *~ *.qm +.directory .idea cura.desktop From 203e77fee102a8e63cec1f34991a4587ebd2c6d8 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Fri, 24 Aug 2018 23:08:18 +0200 Subject: [PATCH 097/364] moai definition tweaks --- resources/definitions/peopoly_moai.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index e6d8b90571..ac9cee131b 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -121,7 +121,7 @@ "value": 3 }, "infill_overlap": { - "value": 12 + "value": 15 }, "adhesion_type": { "value": "'none'" @@ -243,7 +243,7 @@ "value": "False" }, "skin_overlap": { - "value": 3 + "value": 5 }, "infill_wipe_dist": { "value": 0 From 255a2afe3bcde210a6e3723f3285c5a3a0ec3386 Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Sat, 25 Aug 2018 13:31:48 +0200 Subject: [PATCH 098/364] more moai tweaks --- resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg index 482b8ce51a..ac4f9ee81d 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg @@ -12,6 +12,6 @@ weight = 3 [values] layer_height = 0.08 speed_print = 90 -speed_travel = 100 +speed_travel = 120 speed_travel_layer_0 = 100 speed_wall = 90 diff --git a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg index e7cfa673b2..2d21b1f7e0 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg @@ -12,7 +12,7 @@ weight = 4 [values] layer_height = 0.1 speed_print = 85 -speed_travel = 100 +speed_travel = 120 speed_travel_layer_0 = 100 speed_wall = 85 speed_slowdown_layers = 2 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 da62ee32cd..796c2cff3c 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg @@ -12,7 +12,7 @@ weight = 0 [values] layer_height = 0.02 speed_print = 185 -speed_travel = 190 +speed_travel = 185 speed_travel_layer_0 = 100 speed_wall = 185 speed_slowdown_layers = 5 diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index be35dbaf05..b36163d9f1 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -12,7 +12,7 @@ weight = 1 [values] layer_height = 0.04 speed_print = 140 -speed_travel = 145 +speed_travel = 140 speed_travel_layer_0 = 100 speed_wall = 140 speed_slowdown_layers = 4 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index 2d6ba873db..cf67591ab2 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -12,6 +12,6 @@ weight = 2 [values] layer_height = 0.06 speed_print = 120 -speed_travel = 130 +speed_travel = 120 speed_travel_layer_0 = 100 speed_wall = 120 From dd0ddaedac6404edb9808a50e11e071bda839e6d Mon Sep 17 00:00:00 2001 From: Matteo Spinelli Date: Tue, 28 Aug 2018 07:48:24 +0200 Subject: [PATCH 099/364] reduce stress on the galvo by printing infill in straight lines --- resources/definitions/peopoly_moai.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index ac9cee131b..a578cc4240 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -201,7 +201,7 @@ "value": "'lines'" }, "infill_angles": { - "value": "[10,55,100,145,190,235,280,325]" + "value": "[0,90]" }, "cool_min_layer_time": { "enabled": false, From 3e3f1cb03d27eabdaa682bea1cbb38e59dd14de9 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 28 Aug 2018 09:31:05 +0200 Subject: [PATCH 100/364] Remove double shortcut buttons CURA-5642 --- resources/qml/Actions.qml | 18 +++++++++--------- resources/qml/Cura.qml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 21e6eebf58..d5572298f7 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -110,35 +110,35 @@ Item Action { id: view3DCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&3D View"); + text: catalog.i18nc("@action:inmenu menubar:view","3D View"); onTriggered: UM.Controller.rotateView("3d", 0); } Action { id: viewFrontCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Front View"); + text: catalog.i18nc("@action:inmenu menubar:view","Front View"); onTriggered: UM.Controller.rotateView("home", 0); } Action { id: viewTopCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Top View"); + text: catalog.i18nc("@action:inmenu menubar:view","Top View"); onTriggered: UM.Controller.rotateView("y", 90); } Action { id: viewLeftSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Left Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Left Side View"); onTriggered: UM.Controller.rotateView("x", 90); } Action { id: viewRightSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Right Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Right Side View"); onTriggered: UM.Controller.rotateView("x", -90); } @@ -229,7 +229,7 @@ Item Action { id: deleteSelectionAction; - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount); + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-delete"; shortcut: StandardKey.Delete; @@ -239,7 +239,7 @@ Item Action //Also add backspace as the same function as delete because on Macintosh keyboards the button called "delete" is actually a backspace, and the user expects it to function as a delete. { id: backspaceSelectionAction - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount) + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount) enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection iconName: "edit-delete" shortcut: StandardKey.Backspace @@ -328,7 +328,7 @@ Item Action { id: selectAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Select All Models"); + text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models"); enabled: UM.Controller.toolsEnabled; iconName: "edit-select-all"; shortcut: "Ctrl+A"; @@ -386,7 +386,7 @@ Item Action { id: resetAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model &Transformations"); + text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations"); onTriggered: CuraApplication.resetAll(); } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index cd8a122bd2..33e456c758 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -117,7 +117,7 @@ UM.MainWindow MenuItem { id: saveWorkspaceMenu - text: catalog.i18nc("@title:menu menubar:file","&Save...") + text: catalog.i18nc("@title:menu menubar:file","Save...") onTriggered: { var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/x-curaproject+xml" }; From 40c4e9c5dfe5361a8f7c38ec3ef2462b0ec2aacb Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 28 Aug 2018 09:56:00 +0200 Subject: [PATCH 101/364] Fix KeyError color_code in BaseMaterialsModel --- cura/Machines/Models/BaseMaterialsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 43b42c55ff..1b20e1188c 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -124,7 +124,7 @@ class BaseMaterialsModel(ListModel): "description": metadata["description"], "material": metadata["material"], "color_name": metadata["color_name"], - "color_code": metadata["color_code"], + "color_code": metadata.get("color_code", ""), "density": metadata.get("properties", {}).get("density", ""), "diameter": metadata.get("properties", {}).get("diameter", ""), "approximate_diameter": metadata["approximate_diameter"], From 694cc91ae9d174f8b420f63188754e3db232457d Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 28 Aug 2018 11:21:47 +0200 Subject: [PATCH 102/364] Add a "Favorites" heading to materials menu Contributes to CURA-5162 Also fixed some non i18n strings --- resources/qml/Menus/MaterialMenu.qml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 186c5d1d2a..f9e343d2dd 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -10,7 +10,7 @@ import Cura 1.0 as Cura Menu { id: menu - title: "Material" + title: catalog.i18nc("@label:category menu label", "Material") property int extruderIndex: 0 @@ -32,6 +32,12 @@ Menu extruderPosition: menu.extruderIndex } + MenuItem + { + text: catalog.i18nc("@label:category menu label", "Favorites") + enabled: false + visible: favoriteMaterialsModel.items.length > 0 + } Instantiator { model: favoriteMaterialsModel @@ -52,7 +58,7 @@ Menu Menu { id: genericMenu - title: "Generic" + title: catalog.i18nc("@label:category menu label", "Generic") Instantiator { From 60353bcd67836225537aef9de182760e6fa9bbae Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 29 Aug 2018 11:00:24 +0200 Subject: [PATCH 103/364] Added missing elides CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 6 ++++++ plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 12381d3f7a..153adce252 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -264,6 +264,8 @@ Component id: printJobName text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "" font: UM.Theme.getFont("default_bold") + width: parent.width + elide: Text.ElideRight } Label { @@ -272,11 +274,15 @@ Component text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : "" font: UM.Theme.getFont("default") opacity: 0.6 + width: parent.width + elide: Text.ElideRight } + function switchPopupState() { popup.visible ? popup.close() : popup.open() } + Controls2.Button { id: contextButton diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 427aa8b851..5024e8eef1 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -63,6 +63,8 @@ Item id: printJobName text: printJob.name font: UM.Theme.getFont("default_bold") + width: parent.width + elide: Text.ElideRight } Label @@ -72,6 +74,8 @@ Item text: printJob.owner font: UM.Theme.getFont("default") opacity: 0.6 + width: parent.width + elide: Text.ElideRight } Image From e0aea1817710a871c9695eb1707408772919d1d8 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 29 Aug 2018 11:42:45 +0200 Subject: [PATCH 104/364] Reset machines that use a removed quality changes CURA-5675 When a custom quality gets removed, Cura should reset all machines which use this custom quality to default. --- cura/Machines/QualityManager.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index cb2776429f..6869d99bc7 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -363,8 +363,19 @@ class QualityManager(QObject): @pyqtSlot(QObject) def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup"): Logger.log("i", "Removing quality changes group [%s]", quality_changes_group.name) + removed_quality_changes_ids = set() for node in quality_changes_group.getAllNodes(): - self._container_registry.removeContainer(node.getMetaDataEntry("id")) + 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. From dda356fbc4fb122b36fd71e096434c414319c9f4 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 29 Aug 2018 11:50:43 +0200 Subject: [PATCH 105/364] Remove the 40 char maximum on printer address textfield --- plugins/UM3NetworkPrinting/DiscoverUM3Action.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml index 127b3c35bd..b5b80a3010 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml @@ -364,7 +364,6 @@ Cura.MachineAction { id: addressField width: parent.width - maximumLength: 40 validator: RegExpValidator { regExp: /[a-zA-Z0-9\.\-\_]*/ From 1d8f19f1d1c501f5d7525ca695967a7813f30c16 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 29 Aug 2018 11:55:37 +0200 Subject: [PATCH 106/364] Don't give error value for infill layer thickness if no infill It won't crash the engine because the entire infill filling routine is skipped. --- resources/definitions/fdmprinter.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3eb7cb1c32..610ee1473e 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1819,9 +1819,9 @@ "unit": "mm", "type": "float", "default_value": 0.1, - "minimum_value": "resolveOrValue('layer_height')", + "minimum_value": "resolveOrValue('layer_height') 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)", + "maximum_value": "resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8) if infill_line_distance > 0 else 999999", "value": "resolveOrValue('layer_height')", "enabled": "infill_sparse_density > 0 and not spaghetti_infill_enabled", "limit_to_extruder": "infill_extruder_nr", From c48a5474f0f0e51945d9783839e0d5d0eee338df Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 29 Aug 2018 13:42:26 +0200 Subject: [PATCH 107/364] remove .curaproject from the extensions and just use .3mf CURA-5650 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 +--- plugins/3MFReader/__init__.py | 6 +----- plugins/3MFWriter/__init__.py | 6 +----- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 16ab22473b..685f3091e2 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -89,7 +89,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): MimeType( name="application/x-curaproject+xml", comment="Cura Project File", - suffixes=["curaproject.3mf"] + suffixes=["3mf"] ) ) @@ -726,8 +726,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): nodes = [] base_file_name = os.path.basename(file_name) - if base_file_name.endswith(".curaproject.3mf"): - base_file_name = base_file_name[:base_file_name.rfind(".curaproject.3mf")] self.setWorkspaceName(base_file_name) return nodes diff --git a/plugins/3MFReader/__init__.py b/plugins/3MFReader/__init__.py index 3a4fde4ab8..ce94bbe69c 100644 --- a/plugins/3MFReader/__init__.py +++ b/plugins/3MFReader/__init__.py @@ -18,11 +18,7 @@ catalog = i18nCatalog("cura") def getMetaData() -> Dict: - # Workaround for osx not supporting double file extensions correctly. - if Platform.isOSX(): - workspace_extension = "3mf" - else: - workspace_extension = "curaproject.3mf" + workspace_extension = "3mf" metaData = {} if "3MFReader.ThreeMFReader" in sys.modules: diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py index e779628f7e..29e2beae60 100644 --- a/plugins/3MFWriter/__init__.py +++ b/plugins/3MFWriter/__init__.py @@ -15,11 +15,7 @@ from UM.Platform import Platform i18n_catalog = i18nCatalog("uranium") def getMetaData(): - # Workarround for osx not supporting double file extensions correctly. - if Platform.isOSX(): - workspace_extension = "3mf" - else: - workspace_extension = "curaproject.3mf" + workspace_extension = "3mf" metaData = {} From baef0350cdf931a8365272b86e42233740c99541 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 29 Aug 2018 14:41:38 +0200 Subject: [PATCH 108/364] Cleaned up MIME types --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 8 -------- plugins/3MFWriter/__init__.py | 2 +- resources/qml/Cura.qml | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 685f3091e2..6d55e0643d 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -85,14 +85,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): def __init__(self) -> None: super().__init__() - MimeTypeDatabase.addMimeType( - MimeType( - name="application/x-curaproject+xml", - comment="Cura Project File", - suffixes=["3mf"] - ) - ) - self._supported_extensions = [".3mf"] self._dialog = WorkspaceDialog() self._3mf_mesh_reader = None diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py index 29e2beae60..4b8a03888d 100644 --- a/plugins/3MFWriter/__init__.py +++ b/plugins/3MFWriter/__init__.py @@ -32,7 +32,7 @@ def getMetaData(): "output": [{ "extension": workspace_extension, "description": i18n_catalog.i18nc("@item:inlistbox", "Cura Project 3MF file"), - "mime_type": "application/x-curaproject+xml", + "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode }] } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 33e456c758..616523fc45 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -120,7 +120,7 @@ UM.MainWindow text: catalog.i18nc("@title:menu menubar:file","Save...") onTriggered: { - var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/x-curaproject+xml" }; + var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; if(UM.Preferences.getValue("cura/dialog_on_project_save")) { saveWorkspaceDialog.args = args; From 1fbf9c973145c202ecc6773d18e70234ca6af8d4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 29 Aug 2018 17:21:47 +0200 Subject: [PATCH 109/364] Add default value to extruders_enabled_count Otherwise CuraEngine can't parse this setting from the JSON file in command line slicing. Contributes to issue CURA-4410. --- resources/definitions/fdmprinter.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3eb7cb1c32..f00fecbaab 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -216,6 +216,7 @@ "label": "Number of Extruders that are enabled", "description": "Number of extruder trains that are enabled; automatically set in software", "value": "machine_extruder_count", + "default_value": 1, "minimum_value": "1", "maximum_value": "16", "type": "int", From 939484bc9181f2b08a0c0f093c3ed7f4539a5364 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 29 Aug 2018 17:25:34 +0200 Subject: [PATCH 110/364] Fix adding materials in UFP CURA-5555 - Store materials in virtual path "/Materials" - Correct material relationship type - Add origin for material relationship - Use MaterialManager instead of ContainerRegistry to get materials - Other minor changes --- plugins/UFPWriter/UFPWriter.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 841d61a000..49a6a36d68 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -24,8 +24,6 @@ class UFPWriter(MeshWriter): self._snapshot = None Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot) - self._default_data_path ="/Cura/" - def _createSnapshot(self, *args): # must be called from the main thread because of OpenGL Logger.log("d", "Creating thumbnail image...") @@ -62,17 +60,17 @@ class UFPWriter(MeshWriter): else: Logger.log("d", "Thumbnail not created, cannot save it") - #Store the material. + # Store the material. application = Application.getInstance() machine_manager = application.getMachineManager() + material_manager = application.getMaterialManager() global_stack = machine_manager.activeMachine - container_registry = application.getContainerRegistry() material_extension = "xml.fdm_material" material_mime_type = "application/x-ultimaker-material-profile" try: - archive.addContentType(extension=material_extension, mime_type=material_mime_type) + archive.addContentType(extension = material_extension, mime_type = material_mime_type) except: Logger.log("w", "The material extension: %s was already added", material_extension) @@ -80,30 +78,32 @@ class UFPWriter(MeshWriter): for extruder_stack in global_stack.extruders.values(): material = extruder_stack.material material_file_name = material.getMetaData()["base_file"] + ".xml.fdm_material" - material_file_name = self._default_data_path + material_file_name + material_file_name = "/Materials/" + material_file_name #Same material cannot be added if material_file_name in added_materials: continue - material_containers = container_registry.findContainers(id=material.getMetaDataEntry("base_file")) - - if not material_containers: - Logger.log("e", "Cannot find material container with id: %s", material.id) + 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) return False - material_container = material_containers[0] + material_container = material_group.root_material_node try: serialized_material = material_container.serialize() except NotImplementedError: - Logger.log("e", "Unable serialize material container with id: %s", material.id) + Logger.log("e", "Unable serialize material container with root id: %s", material_root_id) return False material_file = archive.getStream(material_file_name) material_file.write(serialized_material.encode("UTF-8")) - archive.addRelation(virtual_path=material_file_name,relation_type="http://schemas.ultimaker.org/package/2018/relationships/xml.fdm_material") + archive.addRelation(virtual_path = material_file_name, + relation_type = "http://schemas.ultimaker.org/package/2018/relationships/material", + origin = "/3D/model.gcode") added_materials.append(material_file_name) archive.close() - return True \ No newline at end of file + return True From 8f5aa82bdb98e8df2cb6c89f061545f3f0396afc Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 29 Aug 2018 17:33:18 +0200 Subject: [PATCH 111/364] Fix adding materials in UFP CURA-5555 Need to use getContainer() for a MaterialNode. --- plugins/UFPWriter/UFPWriter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 49a6a36d68..d838aaef36 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -90,7 +90,7 @@ class UFPWriter(MeshWriter): Logger.log("e", "Cannot find material container with root id [%s]", material_root_id) return False - material_container = material_group.root_material_node + material_container = material_group.root_material_node.getContainer() try: serialized_material = material_container.serialize() except NotImplementedError: From 570d0715eda45a1ec4caf05f143171cdd208cb9c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 29 Aug 2018 17:33:51 +0200 Subject: [PATCH 112/364] Add call_on_qt_thread to UFPWriter.write() CURA-5555 --- plugins/UFPWriter/UFPWriter.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index d838aaef36..a85ee489cb 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -13,6 +13,7 @@ from UM.PluginRegistry import PluginRegistry #To get the g-code writer. from PyQt5.QtCore import QBuffer from cura.Snapshot import Snapshot +from cura.Utils.Threading import call_on_qt_thread from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -29,6 +30,11 @@ class UFPWriter(MeshWriter): Logger.log("d", "Creating thumbnail image...") self._snapshot = Snapshot.snapshot(width = 300, height = 300) + # 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 + # Qt thread. The File read/write operations right now are executed on separated threads because they are scheduled + # by the Job class. + @call_on_qt_thread def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode): archive = VirtualFile() archive.openStream(stream, "application/x-ufp", OpenMode.WriteOnly) From 14f253017b3c6a1fe57572ae8e6d061f06fedf37 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 30 Aug 2018 10:21:50 +0200 Subject: [PATCH 113/364] Align printer name & printjob name with center of printer icon CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 153adce252..e2a77063b5 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -137,17 +137,38 @@ Component color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } - Label + Item { - id: machineNameLabel - text: modelData.name - anchors.top: machineIcon.top - anchors.left: machineIcon.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: collapseIcon.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - elide: Text.ElideRight - font: UM.Theme.getFont("default_bold") + height: childrenRect.height + anchors + { + right: collapseIcon.left + rightMargin: UM.Theme.getSize("default_margin").width + left: machineIcon.right + leftMargin: UM.Theme.getSize("default_margin").width + + verticalCenter: machineIcon.verticalCenter + } + + Label + { + id: machineNameLabel + text: modelData.name + width: parent.width + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") + } + + Label + { + id: activeJobLabel + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" + anchors.top: machineNameLabel.bottom + width: parent.width + elide: Text.ElideRight + font: UM.Theme.getFont("default") + opacity: 0.6 + } } UM.RecolorImage @@ -163,19 +184,6 @@ Component anchors.rightMargin: UM.Theme.getSize("default_margin").width color: "black" } - - Label - { - id: activeJobLabel - text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" - anchors.top: machineNameLabel.bottom - anchors.left: machineNameLabel.left - anchors.right: collapseIcon.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - elide: Text.ElideRight - font: UM.Theme.getFont("default") - opacity: 0.6 - } } Item @@ -573,6 +581,8 @@ Component return catalog.i18nc("@label:status", "Paused") case "resuming": return catalog.i18nc("@label:status", "Resuming") + case "queued": + return catalog.i18nc("@label:status", "Configuration change") default: OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) } From fd1b0a80e7330d61eeefb7dd4b4a3196070ccb63 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 30 Aug 2018 10:32:37 +0200 Subject: [PATCH 114/364] Fixed alignment of printCoreConfiguration CL-896 --- .../PrintCoreConfiguration.qml | 64 +++++++++---------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index ddac895d29..e6f2372874 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -18,6 +18,8 @@ Item id: extruderCircle width: 30 height: 30 + + anchors.verticalCenter: printAndMaterialLabel.verticalCenter opacity: { if(printCoreConfiguration == undefined || printCoreConfiguration.activeMaterial == undefined || printCoreConfiguration.hotendID == undefined) @@ -31,7 +33,7 @@ Item { anchors.fill: parent radius: Math.round(width / 2) - border.width: 1 + border.width: 2 border.color: "black" } @@ -43,52 +45,48 @@ Item } } - Label + Item { - id: materialLabel - text: - { - if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) - { - return printCoreConfiguration.activeMaterial.name - } - return "" - } - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - + id: printAndMaterialLabel anchors { right: parent.right left: extruderCircle.right margins: UM.Theme.getSize("default_margin").width } - } + height: childrenRect.height - Label - { - id: printCoreLabel - text: + Label { - if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) + id: materialLabel + text: { - return printCoreConfiguration.hotendID + if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) + { + return printCoreConfiguration.activeMaterial.name + } + return "" } - return "" + font: UM.Theme.getFont("default_bold") + elide: Text.ElideRight } - anchors.top: materialLabel.bottom - elide: Text.ElideRight - opacity: 0.6 - font: UM.Theme.getFont("default") - - anchors + Label { - top: materialLabel.bottom - right: parent.right - left: extruderCircle.right - leftMargin: UM.Theme.getSize("default_margin").width - rightMargin: UM.Theme.getSize("default_margin").width + id: printCoreLabel + text: + { + if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) + { + return printCoreConfiguration.hotendID + } + return "" + } + anchors.top: materialLabel.bottom + elide: Text.ElideRight + + opacity: 0.6 + font: UM.Theme.getFont("default") } } } From ac2125c3a5d8b4c16afd23922f0a3c8151696e6f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 30 Aug 2018 14:36:54 +0200 Subject: [PATCH 115/364] Hide setting when support pattern is set to concentric... because it has no influence on the concentric pattern --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index be7eecc686..57b7c93eed 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3882,7 +3882,7 @@ "minimum_value": "-90", "maximum_value": "90", "default_value": 0, - "enabled": "support_enable", + "enabled": "support_enable and support_pattern != 'concentric' and support_infill_rate > 0", "settable_per_mesh": false, "settable_per_extruder": true }, From 65f3605d9205bc7c551894b6b3d226d80c63b59e Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 30 Aug 2018 14:43:00 +0200 Subject: [PATCH 116/364] Allow the full range of orientations --- resources/definitions/fdmprinter.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 57b7c93eed..b3601b4405 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3879,8 +3879,8 @@ "description": "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane.", "unit": "°", "type": "float", - "minimum_value": "-90", - "maximum_value": "90", + "minimum_value": "-180", + "maximum_value": "180", "default_value": 0, "enabled": "support_enable and support_pattern != 'concentric' and support_infill_rate > 0", "settable_per_mesh": false, From e2bcf4dfa82611412f99b553237c8a2f9f8f7a24 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 30 Aug 2018 17:18:48 +0200 Subject: [PATCH 117/364] Show correct labels & status icon if print was aborted CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index e2a77063b5..4978ce821a 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -489,6 +489,10 @@ Component case "paused": return "paused-icon.svg" case "wait_cleanup": + if(modelData.activePrintJob.timeElapsed < modelData.activePrintJob.timeTotal) + { + return "aborted-icon.svg" + } return "approved-icon.svg" case "wait_user_action": return "aborted-icon.svg" @@ -569,7 +573,11 @@ Component switch(modelData.activePrintJob.state) { case "wait_cleanup": - return catalog.i18nc("@label:status", "Finshed") + if(modelData.activePrintJob.timeTotal > modelData.activePrintJob.timeElapsed) + { + return catalog.i18nc("@label:status", "Aborted") + } + return catalog.i18nc("@label:status", "Finished") case "pre_print": case "sent_to_printer": return catalog.i18nc("@label:status", "Preparing") From 9258c9a7fc49b3bbe8b7c775c1b4377ca26fe4ef Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Fri, 31 Aug 2018 11:03:30 +0200 Subject: [PATCH 118/364] Added links to toolbox CURA-5676 --- .../resources/qml/ToolboxAuthorPage.qml | 31 ++++++++++- .../qml/ToolboxCompatibilityChart.qml | 47 ++++++++++++++++ plugins/Toolbox/src/PackagesModel.py | 54 ++++++++++++------- 3 files changed, 111 insertions(+), 21 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 04b055ed66..9666e65613 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -82,9 +82,16 @@ Item } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) width: childrenRect.width + Label { - text: catalog.i18nc("@label", "Contact") + ":" + text: catalog.i18nc("@label", "Website") + ":" + font: UM.Theme.getFont("very_small") + color: UM.Theme.getColor("text_medium") + } + Label + { + text: catalog.i18nc("@label", "Email") + ":" font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text_medium") } @@ -100,6 +107,26 @@ Item topMargin: UM.Theme.getSize("default_margin").height } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) + + Label + { + text: + { + if (details.website) + { + return "Link" + } + else + { + return "" + } + } + font: UM.Theme.getFont("very_small") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + onLinkActivated: Qt.openUrlExternally(link) + } + Label { text: @@ -110,7 +137,7 @@ Item } else { - return ""+details.name+"" + return "" } } font: UM.Theme.getFont("very_small") diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index 1efcde2110..2ab8db007b 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -8,7 +8,31 @@ import UM 1.1 as UM Item { + id: base + property var packageData + property var technical_data_sheet_url + + function initiazeLinks() + { + var all_links = packageData.links + for(var index = 0; index < all_links.length; index++) + { + var temp_link = all_links[index] + var title = temp_link["title"] + + if(title === "Technical Data Sheet") + { + base.technical_data_sheet_url = temp_link["url"] + } + } + } + + Component.onCompleted: + { + initiazeLinks() + } + anchors.topMargin: UM.Theme.getSize("default_margin").height height: visible ? childrenRect.height : 0 visible: packageData.type == "material" && packageData.has_configs @@ -132,4 +156,27 @@ Item width: Math.floor(table.width * 0.1) } } + + + + Label + { + id: technical_data_sheet + anchors.top: table.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 + visible: base.technical_data_sheet_url !== undefined + text: + { + if (base.technical_data_sheet_url !== undefined) + { + return "%2".arg(base.technical_data_sheet_url).arg("Technical Data Sheet") + } + return "" + } + font: UM.Theme.getFont("very_small") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + onLinkActivated: Qt.openUrlExternally(link) + } + } diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index 8b9199b127..ddbd2d2665 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -7,6 +7,7 @@ from typing import Dict from PyQt5.QtCore import Qt, pyqtProperty from UM.Qt.ListModel import ListModel from .ConfigsModel import ConfigsModel +from UM.Logger import Logger ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. class PackagesModel(ListModel): @@ -34,6 +35,8 @@ class PackagesModel(ListModel): self.addRoleName(Qt.UserRole + 17, "supported_configs") self.addRoleName(Qt.UserRole + 18, "download_count") self.addRoleName(Qt.UserRole + 19, "tags") + self.addRoleName(Qt.UserRole + 20, "links") + self.addRoleName(Qt.UserRole + 21, "website") # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str, str] @@ -45,10 +48,18 @@ class PackagesModel(ListModel): def _update(self): items = [] + #If a user has a slow internet connection then the metadata might be None + if self._metadata is None: + Logger.logException("w", "Failed to load packages for Toolbox") + self.setItems(items) + return + + for package in self._metadata: has_configs = False configs_model = None + data_links = [] if "data" in package: if "supported_configs" in package["data"]: if len(package["data"]["supported_configs"]) > 0: @@ -56,33 +67,38 @@ class PackagesModel(ListModel): configs_model = ConfigsModel() configs_model.setConfigs(package["data"]["supported_configs"]) + data_links = package['data']['links'] if 'links' in package['data'] else [] + if "author_id" not in package["author"] or "display_name" not in package["author"]: package["author"]["author_id"] = "" package["author"]["display_name"] = "" # raise Exception("Detected a package with malformed author data.") items.append({ - "id": package["package_id"], - "type": package["package_type"], - "name": package["display_name"], - "version": package["package_version"], - "author_id": package["author"]["author_id"], - "author_name": package["author"]["display_name"], - "author_email": package["author"]["email"] if "email" in package["author"] else None, - "description": package["description"] if "description" in package else None, - "icon_url": package["icon_url"] if "icon_url" in package else None, - "image_urls": package["image_urls"] if "image_urls" in package else None, - "download_url": package["download_url"] if "download_url" in package else None, - "last_updated": package["last_updated"] if "last_updated" in package else None, - "is_bundled": package["is_bundled"] if "is_bundled" in package else False, - "is_active": package["is_active"] if "is_active" in package else False, - "is_installed": package["is_installed"] if "is_installed" in package else False, - "has_configs": has_configs, - "supported_configs": configs_model, - "download_count": package["download_count"] if "download_count" in package else 0, - "tags": package["tags"] if "tags" in package else [] + "id": package["package_id"], + "type": package["package_type"], + "name": package["display_name"], + "version": package["package_version"], + "author_id": package["author"]["author_id"], + "author_name": package["author"]["display_name"], + "author_email": package["author"]["email"] if "email" in package["author"] else None, + "description": package["description"] if "description" in package else None, + "icon_url": package["icon_url"] if "icon_url" in package else None, + "image_urls": package["image_urls"] if "image_urls" in package else None, + "download_url": package["download_url"] if "download_url" in package else None, + "last_updated": package["last_updated"] if "last_updated" in package else None, + "is_bundled": package["is_bundled"] if "is_bundled" in package else False, + "is_active": package["is_active"] if "is_active" in package else False, + "is_installed": package["is_installed"] if "is_installed" in package else False, + "has_configs": has_configs, + "supported_configs": configs_model, + "download_count": package["download_count"] if "download_count" in package else 0, + "tags": package["tags"] if "tags" in package else [], + "links": data_links, + "website": package["website"] if "website" in package else None, }) + # Filter on all the key-word arguments. for key, value in self._filter.items(): if key is "tags": From b0b148f2d0d7ad880608880779f2b0d0fa3a7967 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Fri, 31 Aug 2018 11:06:25 +0200 Subject: [PATCH 119/364] Remove wrong setting CURA-5676 --- resources/definitions/fdmprinter.def.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 1b2d66810b..3eb7cb1c32 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3875,19 +3875,6 @@ } } }, - "support_infill_angle": - { - "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": "-90", - "maximum_value": "90", - "default_value": 0, - "enabled": "support_enable", - "settable_per_mesh": false, - "settable_per_extruder": true - }, "support_z_distance": { "label": "Support Z Distance", From e17cf3dfbffd8c8d2c19ec97c059d7629f22ebb5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 31 Aug 2018 13:20:40 +0200 Subject: [PATCH 120/364] Show company website full link as text CURA-5676 --- plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 9666e65613..7195f6d276 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -114,7 +114,7 @@ Item { if (details.website) { - return "Link" + return ""+details.website+"" } else { From 9433cf7c45df38b599c3272aa02a7c04e406ae6d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 31 Aug 2018 13:23:39 +0200 Subject: [PATCH 121/364] Change email field to show full email address CURA-5676 --- plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 7195f6d276..be6cd5e713 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -133,7 +133,7 @@ Item { if (details.email) { - return ""+details.name+"" + return ""+details.email+"" } else { From c4afbe7a673ceeac7bee277ef91c1e8efaa3bd41 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 31 Aug 2018 13:45:02 +0200 Subject: [PATCH 122/364] Convert links to a dict CURA-5676 Easier to process. --- .../qml/ToolboxCompatibilityChart.qml | 31 +++++-------------- plugins/Toolbox/src/PackagesModel.py | 27 +++++++++------- 2 files changed, 23 insertions(+), 35 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index 2ab8db007b..4a008f2a83 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -11,26 +11,13 @@ Item id: base property var packageData - property var technical_data_sheet_url - - function initiazeLinks() - { - var all_links = packageData.links - for(var index = 0; index < all_links.length; index++) + property var technicalDataSheetUrl: { + var link = undefined + if ("Technical Data Sheet" in packageData.links) { - var temp_link = all_links[index] - var title = temp_link["title"] - - if(title === "Technical Data Sheet") - { - base.technical_data_sheet_url = temp_link["url"] - } + link = packageData.links["Technical Data Sheet"] } - } - - Component.onCompleted: - { - initiazeLinks() + return link } anchors.topMargin: UM.Theme.getSize("default_margin").height @@ -157,19 +144,17 @@ Item } } - - Label { id: technical_data_sheet anchors.top: table.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 - visible: base.technical_data_sheet_url !== undefined + visible: base.technicalDataSheetUrl !== undefined text: { - if (base.technical_data_sheet_url !== undefined) + if (base.technicalDataSheetUrl !== undefined) { - return "%2".arg(base.technical_data_sheet_url).arg("Technical Data Sheet") + return "%2".arg(base.technicalDataSheetUrl).arg("Technical Data Sheet") } return "" } diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index ddbd2d2665..7892044d00 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -5,9 +5,12 @@ import re from typing import Dict from PyQt5.QtCore import Qt, pyqtProperty -from UM.Qt.ListModel import ListModel -from .ConfigsModel import ConfigsModel + from UM.Logger import Logger +from UM.Qt.ListModel import ListModel + +from .ConfigsModel import ConfigsModel + ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. class PackagesModel(ListModel): @@ -48,18 +51,16 @@ class PackagesModel(ListModel): def _update(self): items = [] - #If a user has a slow internet connection then the metadata might be None if self._metadata is None: Logger.logException("w", "Failed to load packages for Toolbox") self.setItems(items) return - for package in self._metadata: - has_configs = False configs_model = None - data_links = [] + + links_dict = {} if "data" in package: if "supported_configs" in package["data"]: if len(package["data"]["supported_configs"]) > 0: @@ -67,7 +68,10 @@ class PackagesModel(ListModel): configs_model = ConfigsModel() configs_model.setConfigs(package["data"]["supported_configs"]) - data_links = package['data']['links'] if 'links' in package['data'] else [] + # Links is a list of dictionaries with "title" and "url". Convert this list into a dict so it's easier + # to process. + link_list = package['data']['links'] if 'links' in package['data'] else [] + links_dict = {d["title"]: d["url"] for d in link_list} if "author_id" not in package["author"] or "display_name" not in package["author"]: package["author"]["author_id"] = "" @@ -94,19 +98,18 @@ class PackagesModel(ListModel): "supported_configs": configs_model, "download_count": package["download_count"] if "download_count" in package else 0, "tags": package["tags"] if "tags" in package else [], - "links": data_links, + "links": links_dict, "website": package["website"] if "website" in package else None, }) - # Filter on all the key-word arguments. for key, value in self._filter.items(): if key is "tags": - key_filter = lambda item, value = value: value in item["tags"] + key_filter = lambda item, v = value: v in item["tags"] elif "*" in value: - key_filter = lambda candidate, key = key, value = value: self._matchRegExp(candidate, key, value) + key_filter = lambda candidate, k = key, v = value: self._matchRegExp(candidate, k, v) else: - key_filter = lambda candidate, key = key, value = value: self._matchString(candidate, key, value) + key_filter = lambda candidate, k = key, v = value: self._matchString(candidate, k, v) items = filter(key_filter, items) # Execute all filters. From 98d8a3f3e3c83ffd4443ac2a8afae84d071e80eb Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 31 Aug 2018 13:49:08 +0200 Subject: [PATCH 123/364] Fix code style and small cleanup CURA-5676 --- .../Toolbox/resources/qml/ToolboxAuthorPage.qml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index be6cd5e713..90b92bd832 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -114,12 +114,9 @@ Item { if (details.website) { - return ""+details.website+"" - } - else - { - return "" + return "" + details.website + "" } + return "" } font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text") @@ -133,12 +130,9 @@ Item { if (details.email) { - return ""+details.email+"" - } - else - { - return "" + return "" + details.email + "" } + return "" } font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text") From 3ce9b481a29dae0eb73b287c4f3a4b437d1dd94b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 31 Aug 2018 15:01:54 +0200 Subject: [PATCH 124/364] Add rabithole links to cluster monitor page CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 22 +++++++++++++++++++ .../UM3NetworkPrinting/ClusterMonitorItem.qml | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 4978ce821a..2ee5054fc0 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -45,8 +45,30 @@ Component elide: Text.ElideRight } + Label + { + id: managePrintersLabel + anchors.rightMargin: 4 * UM.Theme.getSize("default_margin").width + anchors.right: printerScrollView.right + anchors.bottom: printingLabel.bottom + text: catalog.i18nc("@label link to connect manager", "Manage printers") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("primary") + linkColor: UM.Theme.getColor("primary") + } + + MouseArea + { + anchors.fill: managePrintersLabel + hoverEnabled: true + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel() + onEntered: managePrintersLabel.font.underline = true + onExited: managePrintersLabel.font.underline = false + } + ScrollView { + id: printerScrollView anchors { top: printingLabel.bottom diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 8d46ac94c6..a7a18753fb 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -40,6 +40,27 @@ Component visible: OutputDevice.printers.length == 0 } + Label + { + id: manageQueueLabel + anchors.rightMargin: 5 * UM.Theme.getSize("default_margin").width + anchors.right: queuedPrintJobs.right + anchors.bottom: queuedLabel.bottom + text: catalog.i18nc("@label link to connect manager", "Manage queue") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("primary") + linkColor: UM.Theme.getColor("primary") + } + + MouseArea + { + anchors.fill: manageQueueLabel + hoverEnabled: true + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() + onEntered: manageQueueLabel.font.underline = true + onExited: manageQueueLabel.font.underline = false + } + Label { id: queuedLabel From 6cceebb117c963dcef71448be368ea2012a3a44d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 31 Aug 2018 15:13:44 +0200 Subject: [PATCH 125/364] Revert "Remove double shortcut buttons" CURA-5642 This breaks translations and doesn't fix the shortcut key problem. --- resources/qml/Actions.qml | 18 +++++++++--------- resources/qml/Cura.qml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index d5572298f7..21e6eebf58 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -110,35 +110,35 @@ Item Action { id: view3DCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","3D View"); + text: catalog.i18nc("@action:inmenu menubar:view","&3D View"); onTriggered: UM.Controller.rotateView("3d", 0); } Action { id: viewFrontCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Front View"); + text: catalog.i18nc("@action:inmenu menubar:view","&Front View"); onTriggered: UM.Controller.rotateView("home", 0); } Action { id: viewTopCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Top View"); + text: catalog.i18nc("@action:inmenu menubar:view","&Top View"); onTriggered: UM.Controller.rotateView("y", 90); } Action { id: viewLeftSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Left Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","&Left Side View"); onTriggered: UM.Controller.rotateView("x", 90); } Action { id: viewRightSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Right Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","&Right Side View"); onTriggered: UM.Controller.rotateView("x", -90); } @@ -229,7 +229,7 @@ Item Action { id: deleteSelectionAction; - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount); + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-delete"; shortcut: StandardKey.Delete; @@ -239,7 +239,7 @@ Item Action //Also add backspace as the same function as delete because on Macintosh keyboards the button called "delete" is actually a backspace, and the user expects it to function as a delete. { id: backspaceSelectionAction - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount) + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount) enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection iconName: "edit-delete" shortcut: StandardKey.Backspace @@ -328,7 +328,7 @@ Item Action { id: selectAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models"); + text: catalog.i18nc("@action:inmenu menubar:edit","&Select All Models"); enabled: UM.Controller.toolsEnabled; iconName: "edit-select-all"; shortcut: "Ctrl+A"; @@ -386,7 +386,7 @@ Item Action { id: resetAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations"); + text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model &Transformations"); onTriggered: CuraApplication.resetAll(); } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 616523fc45..97742de57a 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -117,7 +117,7 @@ UM.MainWindow MenuItem { id: saveWorkspaceMenu - text: catalog.i18nc("@title:menu menubar:file","Save...") + text: catalog.i18nc("@title:menu menubar:file","&Save...") onTriggered: { var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; From 485058c3def4bc56afc55c9c663a71822941a784 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 31 Aug 2018 15:50:34 +0200 Subject: [PATCH 126/364] Made queue have a max width CL-896 --- plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index a7a18753fb..3ff012d6d4 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -79,20 +79,18 @@ Component anchors { - margins: UM.Theme.getSize("default_margin").width top: queuedLabel.bottom topMargin: 0 - left: parent.left + horizontalCenter: parent.horizontalCenter bottomMargin: 0 - right: parent.right bottom: parent.bottom } style: UM.Theme.styles.scrollview - + width: Math.min(800 * screenScaleFactor, maximumWidth) ListView { anchors.fill: parent - anchors.margins: UM.Theme.getSize("default_margin").height + //anchors.margins: UM.Theme.getSize("default_margin").height spacing: UM.Theme.getSize("default_margin").height - 10 // 2x the shadow radius model: OutputDevice.queuedPrintJobs @@ -103,6 +101,7 @@ Component anchors.left: parent.left anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").height + anchors.leftMargin: UM.Theme.getSize("default_margin").height height: 175 * screenScaleFactor } } From 224108c342a45d10b005e18ffaf089e24df2fad3 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 31 Aug 2018 15:55:22 +0200 Subject: [PATCH 127/364] Decrease width of popups for cluster monitor CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 2 +- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2ee5054fc0..068d5769ee 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -347,7 +347,7 @@ Component closePolicy: Controls2.Popup.CloseOnPressOutsideParent x: parent.width - width y: contextButton.height - width: 200 + width: 160 height: contentItem.height + 2 * padding visible: false diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 5024e8eef1..e54e70043e 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -178,7 +178,7 @@ Item closePolicy: Popup.CloseOnPressOutsideParent x: parent.width - width y: contextButton.height - width: 200 + width: 160 height: contentItem.height + 2 * padding visible: false From 8aef7216ec21580c2c987ed16d5e2768d1adff07 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 31 Aug 2018 16:11:20 +0200 Subject: [PATCH 128/364] Increase the margin between print montior header and tiles CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 2 +- plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 068d5769ee..c0dad98708 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -74,7 +74,7 @@ Component top: printingLabel.bottom left: parent.left right: parent.right - topMargin: 1 * UM.Theme.getSize("default_margin").height + topMargin: UM.Theme.getSize("default_margin").height bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 3ff012d6d4..a3bfdeb843 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -80,7 +80,7 @@ Component anchors { top: queuedLabel.bottom - topMargin: 0 + topMargin: UM.Theme.getSize("default_margin").height horizontalCenter: parent.horizontalCenter bottomMargin: 0 bottom: parent.bottom From dec76a19ed2ee1bf5c9baaf3da8ad6110a875c92 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 31 Aug 2018 16:13:01 +0200 Subject: [PATCH 129/364] Build models using reserved tags Contributes to CURA-5670 --- .../resources/qml/ToolboxDownloadsPage.qml | 2 +- plugins/Toolbox/src/Toolbox.py | 84 +++++++++++++++---- 2 files changed, 70 insertions(+), 16 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml index 1089fcc51e..bcca02583d 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml @@ -30,7 +30,7 @@ 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.authorsModel : toolbox.packagesModel + model: toolbox.viewCategory == "material" ? toolbox.materialsAvailableModel : toolbox.pluginsAvailableModel } ToolboxDownloadsGrid diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index c4205b8ed5..48219494bd 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -83,7 +83,7 @@ class Toolbox(QObject, Extension): "plugins_available": PackagesModel(self), "plugins_installed": PackagesModel(self), "materials_showcase": AuthorsModel(self), - "materials_available": PackagesModel(self), + "materials_available": AuthorsModel(self), "materials_installed": PackagesModel(self), "materials_generic": PackagesModel(self) } # type: Dict[str, ListModel] @@ -517,7 +517,7 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = int) def getTotalNumberOfPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["materials_available"]: + for package in self._metadata["packages"]: if package["author"]["author_id"] == author_id: count += 1 return count @@ -624,24 +624,27 @@ class Toolbox(QObject, Extension): Logger.log("e", "Could not find the %s model.", type) break - # HACK: Eventually get rid of the code from here... - if type is "plugins_showcase" or type is "materials_showcase": - self._metadata["plugins_showcase"] = json_data["data"]["plugin"]["packages"] - self._models["plugins_showcase"].setMetadata(self._metadata["plugins_showcase"]) - self._metadata["materials_showcase"] = json_data["data"]["material"]["authors"] - self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) - else: - # ...until here. - # This hack arises for multiple reasons but the main - # one is because there are not separate API calls - # for different kinds of showcases. - self._metadata[type] = json_data["data"] - self._models[type].setMetadata(self._metadata[type]) + # HACK + do_not_handle = [ + "materials_available", + "materials_showcase", + "plugins_available", + "plugins_showcase", + ] + + # Do nothing because we'll handle these from the "packages" call + if type in do_not_handle: + return + + self._metadata[type] = json_data["data"] + self._models[type].setMetadata(self._metadata[type]) # Do some auto filtering # TODO: Make multiple API calls in the future to handle this if type is "packages": self._models[type].setFilter({"type": "plugin"}) + self.buildMaterialsModels() + self.buildPluginsModels() if type is "authors": self._models[type].setFilter({"package_types": "material"}) if type is "materials_generic": @@ -755,6 +758,10 @@ class Toolbox(QObject, Extension): def pluginsShowcaseModel(self) -> PackagesModel: return cast(PackagesModel, self._models["plugins_showcase"]) + @pyqtProperty(QObject, notify = metadataChanged) + def pluginsAvailableModel(self) -> PackagesModel: + return cast(PackagesModel, self._models["plugins_available"]) + @pyqtProperty(QObject, notify = metadataChanged) def pluginsInstalledModel(self) -> PackagesModel: return cast(PackagesModel, self._models["plugins_installed"]) @@ -763,6 +770,10 @@ class Toolbox(QObject, Extension): def materialsShowcaseModel(self) -> AuthorsModel: return cast(AuthorsModel, self._models["materials_showcase"]) + @pyqtProperty(QObject, notify = metadataChanged) + def materialsAvailableModel(self) -> AuthorsModel: + return cast(AuthorsModel, self._models["materials_available"]) + @pyqtProperty(QObject, notify = metadataChanged) def materialsInstalledModel(self) -> PackagesModel: return cast(PackagesModel, self._models["materials_installed"]) @@ -798,3 +809,46 @@ class Toolbox(QObject, Extension): return self._models[model_type].setFilter({}) self.filterChanged.emit() + + + # HACK(S): + # -------------------------------------------------------------------------- + def buildMaterialsModels(self) -> None: + + self._metadata["materials_showcase"] = [] + self._metadata["materials_available"] = [] + + processed_authors = [] + + for item in self._metadata["packages"]: + if item["package_type"] == "material": + + author = item["author"] + if author["author_id"] in processed_authors: + continue + + if "showcase" in item["tags"]: + self._metadata["materials_showcase"].append(author) + else: + self._metadata["materials_available"].append(author) + + processed_authors.append(author["author_id"]) + + self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) + self._models["materials_available"].setMetadata(self._metadata["materials_available"]) + + def buildPluginsModels(self) -> None: + + self._metadata["plugins_showcase"] = [] + self._metadata["plugins_available"] = [] + + for item in self._metadata["packages"]: + if item["package_type"] == "plugin": + + if "showcase" in item["tags"]: + self._metadata["plugins_showcase"].append(item) + else: + self._metadata["plugins_available"].append(item) + + self._models["plugins_showcase"].setMetadata(self._metadata["plugins_showcase"]) + self._models["plugins_available"].setMetadata(self._metadata["plugins_available"]) From 98d0ad6c270459b152916197e2f0cb26328240b6 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 31 Aug 2018 16:47:26 +0200 Subject: [PATCH 130/364] Add printer pill type to cluster monitor printer tile CL-896 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 14 ++++++++-- .../UM3NetworkPrinting/PrinterFamilyPill.qml | 28 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 plugins/UM3NetworkPrinting/PrinterFamilyPill.qml diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index c0dad98708..dbc5465056 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -233,11 +233,21 @@ Component topMargin: UM.Theme.getSize("default_margin").width } } - + PrinterFamilyPill + { + id: printerFamilyPill + color: UM.Theme.getColor("viewport_background") + anchors.top: topSpacer.bottom + anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height + text: modelData.type + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + padding: 3 + } Row { id: extrudersInfo - anchors.top: topSpacer.bottom + anchors.top: printerFamilyPill.bottom anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height anchors.left: parent.left anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width diff --git a/plugins/UM3NetworkPrinting/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/PrinterFamilyPill.qml new file mode 100644 index 0000000000..b785cd02b7 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrinterFamilyPill.qml @@ -0,0 +1,28 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import UM 1.2 as UM + +Item +{ + property alias color: background.color + property alias text: familyNameLabel.text + property var padding: 0 + implicitHeight: familyNameLabel.contentHeight + 2 * padding // Apply the padding to top and bottom. + implicitWidth: familyNameLabel.contentWidth + implicitHeight // The extra height is added to ensure the radius doesn't cut something off. + Rectangle + { + id: background + height: parent.height + width: parent.width + color: parent.color + anchors.right: parent.right + anchors.horizontalCenter: parent.horizontalCenter + radius: 0.5 * height + } + Label + { + id: familyNameLabel + anchors.centerIn: parent + text: "" + } +} \ No newline at end of file From 988b9059b9d7966cc1daae28561ea16cc24ff11b Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 31 Aug 2018 16:55:03 +0200 Subject: [PATCH 131/364] Fix code-style Contributes to CURA-5670 --- plugins/Toolbox/src/Toolbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 48219494bd..52b00f5069 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -818,7 +818,7 @@ class Toolbox(QObject, Extension): self._metadata["materials_showcase"] = [] self._metadata["materials_available"] = [] - processed_authors = [] + processed_authors = [] # type: List[str] for item in self._metadata["packages"]: if item["package_type"] == "material": From 6ddafa00a4eeb53bd4095a79462a4947e9e51fbb Mon Sep 17 00:00:00 2001 From: Sacha Telgenhof Oude Koehorst Date: Sat, 1 Sep 2018 19:37:53 +0900 Subject: [PATCH 132/364] Add Creality Ender-3 machine definition. --- .../definitions/creality_ender3.def.json | 92 + resources/meshes/creality_ender3_platform.stl | 58774 ++++++++++++++++ 2 files changed, 58866 insertions(+) create mode 100755 resources/definitions/creality_ender3.def.json create mode 100644 resources/meshes/creality_ender3_platform.stl diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json new file mode 100755 index 0000000000..4ae4d4ad93 --- /dev/null +++ b/resources/definitions/creality_ender3.def.json @@ -0,0 +1,92 @@ +{ + "name": "Creality Ender-3", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Sacha Telgenhof", + "manufacturer": "Creality3D", + "file_formats": "text/x-gcode", + "platform": "creality_ender3_platform.stl", + "preferred_quality_type": "draft" + }, + "overrides": { + "machine_name": { + "default_value": "Creality Ender-3" + }, + "machine_width": { + "default_value": 220 + }, + "machine_height": { + "default_value": 250 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_heated_bed": { + "default_value": true + }, + "gantry_height": { + "default_value": 30 + }, + "machine_head_polygon": { + "default_value": [ + [-30, 34], + [-30, -32], + [30, -32], + [30, 34] + ] + }, + "material_diameter": { + "default_value": 1.75 + }, + "acceleration_enabled": { + "default_value": true + }, + "acceleration_print": { + "default_value": 500 + }, + "acceleration_travel": { + "default_value": 500 + }, + "jerk_enabled": { + "default_value": true + }, + "jerk_travel": { + "default_value": 20 + }, + "layer_height": { + "default_value": 0.15 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "adhesion_type": { + "default_value": "skirt" + }, + "top_bottom_thickness": { + "default_value": 0.6 + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 40 + }, + "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\nM104 S{material_print_temperature_layer_0} ; Set Extruder temperature\nM140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z5.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 Z5.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed" + }, + "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 Z10 ; Move Z Axis up 10 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\nM104 S0 ; Turn off Extruder temperature\nM140 S0 ; Turn off Heat Bed\nM106 S0 ; Turn off Cooling Fan\nM107 ; Turn off Fan\nM84 ; Disable stepper motors" + } + } +} \ No newline at end of file diff --git a/resources/meshes/creality_ender3_platform.stl b/resources/meshes/creality_ender3_platform.stl new file mode 100644 index 0000000000..e4f9b1fd89 --- /dev/null +++ b/resources/meshes/creality_ender3_platform.stl @@ -0,0 +1,58774 @@ +solid OpenSCAD_Model + facet normal 0 0 1 + outer loop + vertex 19.3736 -10.7173 -0.1 + vertex 19.6895 -11.13 -0.1 + vertex 19.6819 -11.0243 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4763 -10.749 -0.1 + vertex 19.6819 -11.0243 -0.1 + vertex 19.6583 -10.9333 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.557 -10.7956 -0.1 + vertex 19.6583 -10.9333 -0.1 + vertex 19.6172 -10.8571 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6895 -11.13 -0.1 + vertex 19.3736 -10.7173 -0.1 + vertex 19.6598 -11.2975 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6583 -10.9333 -0.1 + vertex 19.557 -10.7956 -0.1 + vertex 19.4763 -10.749 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6819 -11.0243 -0.1 + vertex 19.4763 -10.749 -0.1 + vertex 19.3736 -10.7173 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0963 -10.6988 -0.1 + vertex 19.6598 -11.2975 -0.1 + vertex 19.3736 -10.7173 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6598 -11.2975 -0.1 + vertex 19.0963 -10.6988 -0.1 + vertex 19.5653 -11.6083 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.7132 -10.7406 -0.1 + vertex 19.5653 -11.6083 -0.1 + vertex 19.0963 -10.6988 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.2126 -10.843 -0.1 + vertex 19.5653 -11.6083 -0.1 + vertex 18.7132 -10.7406 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5653 -11.6083 -0.1 + vertex 18.2126 -10.843 -0.1 + vertex 19.1479 -12.7477 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.5824 -11.0066 -0.1 + vertex 19.1479 -12.7477 -0.1 + vertex 18.2126 -10.843 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 16.811 -11.2316 -0.1 + vertex 19.1479 -12.7477 -0.1 + vertex 17.5824 -11.0066 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.1479 -12.7477 -0.1 + vertex 16.811 -11.2316 -0.1 + vertex 18.3699 -14.7241 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.1363 -14.3424 -0.1 + vertex 18.3699 -14.7241 -0.1 + vertex 16.811 -11.2316 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.0967 -14.5873 -0.1 + vertex 18.3699 -14.7241 -0.1 + vertex 14.1362 -14.4186 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3699 -14.7241 -0.1 + vertex 14.1363 -14.3424 -0.1 + vertex 14.1362 -14.4186 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.7217 -12.1451 -0.1 + vertex 14.1363 -14.3424 -0.1 + vertex 16.811 -11.2316 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.1363 -14.3424 -0.1 + vertex 13.7217 -12.1451 -0.1 + vertex 14.0881 -14.3092 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0881 -14.3092 -0.1 + vertex 13.7217 -12.1451 -0.1 + vertex 14.0003 -14.2763 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0003 -14.2763 -0.1 + vertex 13.7217 -12.1451 -0.1 + vertex 13.7222 -14.2141 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.4022 -12.26 -0.1 + vertex 13.7222 -14.2141 -0.1 + vertex 13.7217 -12.1451 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.1153 -12.4148 -0.1 + vertex 13.7222 -14.2141 -0.1 + vertex 13.4022 -12.26 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.7222 -14.2141 -0.1 + vertex 13.1153 -12.4148 -0.1 + vertex 13.3346 -14.1615 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.8673 -12.6015 -0.1 + vertex 13.3346 -14.1615 -0.1 + vertex 13.1153 -12.4148 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.6645 -12.8127 -0.1 + vertex 13.3346 -14.1615 -0.1 + vertex 12.8673 -12.6015 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.513 -13.0405 -0.1 + vertex 13.3346 -14.1615 -0.1 + vertex 12.6645 -12.8127 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3346 -14.1615 -0.1 + vertex 12.513 -13.0405 -0.1 + vertex 12.8698 -14.1239 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.419 -13.2773 -0.1 + vertex 12.8698 -14.1239 -0.1 + vertex 12.513 -13.0405 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.3889 -13.5153 -0.1 + vertex 12.8698 -14.1239 -0.1 + vertex 12.419 -13.2773 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 12.3997 -13.6324 -0.1 + vertex 12.8698 -14.1239 -0.1 + vertex 12.3889 -13.5153 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 12.5013 -13.8876 -0.1 + vertex 12.8698 -14.1239 -0.1 + vertex 12.3997 -13.6324 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8698 -14.1239 -0.1 + vertex 12.6087 -14.0056 -0.1 + vertex 12.7363 -14.0885 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8698 -14.1239 -0.1 + vertex 12.5013 -13.8876 -0.1 + vertex 12.6087 -14.0056 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.5013 -13.8876 -0.1 + vertex 12.3997 -13.6324 -0.1 + vertex 12.4287 -13.7469 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.9185 -15.1524 -0.1 + vertex 18.3699 -14.7241 -0.1 + vertex 14.0967 -14.5873 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3699 -14.7241 -0.1 + vertex 13.9185 -15.1524 -0.1 + vertex 17.1638 -17.7131 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.6397 -15.9386 -0.1 + vertex 17.1638 -17.7131 -0.1 + vertex 13.9185 -15.1524 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.2984 -16.8469 -0.1 + vertex 17.1638 -17.7131 -0.1 + vertex 13.6397 -15.9386 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.5806 -18.6336 -0.1 + vertex 17.1638 -17.7131 -0.1 + vertex 13.2984 -16.8469 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2803 -19.3138 -0.1 + vertex 17.1638 -17.7131 -0.1 + vertex 12.5806 -18.6336 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.1638 -17.7131 -0.1 + vertex 12.2803 -19.3138 -0.1 + vertex 14.5952 -23.8342 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0697 -19.7199 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 12.2803 -19.3138 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0185 -19.7802 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 12.0697 -19.7199 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.9563 -19.8175 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 12.0185 -19.7802 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.1598 -23.7848 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 10.1807 -23.3758 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.1103 -22.7594 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 11.9563 -19.8175 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.1103 -22.7594 -0.1 + vertex 11.9563 -19.8175 -0.1 + vertex 11.881 -19.8313 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.99008 -22.4166 -0.1 + vertex 11.881 -19.8313 -0.1 + vertex 11.7902 -19.8211 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.81668 -22.1284 -0.1 + vertex 11.7902 -19.8211 -0.1 + vertex 11.5538 -19.7266 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.95745 -24.7805 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 10.0892 -24.2416 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.59484 -21.895 -0.1 + vertex 11.5538 -19.7266 -0.1 + vertex 11.2294 -19.5302 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.5952 -23.8342 -0.1 + vertex 9.95745 -24.7805 -0.1 + vertex 12.8097 -28.1484 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 11.2294 -19.5302 -0.1 + vertex 11.0203 -19.4009 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.75283 -25.4359 -0.1 + vertex 12.8097 -28.1484 -0.1 + vertex 9.95745 -24.7805 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 11.0203 -19.4009 -0.1 + vertex 10.8168 -19.3006 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.46376 -26.2422 -0.1 + vertex 12.8097 -28.1484 -0.1 + vertex 9.75283 -25.4359 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.07864 -27.2338 -0.1 + vertex 12.8097 -28.1484 -0.1 + vertex 9.46376 -26.2422 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8097 -28.1484 -0.1 + vertex 9.07864 -27.2338 -0.1 + vertex 12.0447 -30.0547 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 10.8168 -19.3006 -0.1 + vertex 10.602 -19.227 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6919 -34.4621 -0.1 + vertex 12.2468 -35.1875 -0.1 + vertex 12.2214 -34.9805 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6919 -34.4621 -0.1 + vertex 12.2214 -34.9805 -0.1 + vertex 12.1503 -34.7994 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4668 -34.4353 -0.1 + vertex 12.2468 -35.1875 -0.1 + vertex 11.6919 -34.4621 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2239 -35.4151 -0.1 + vertex 11.4668 -34.4353 -0.1 + vertex 12.1496 -35.6584 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8827 -34.5351 -0.1 + vertex 12.1503 -34.7994 -0.1 + vertex 12.0364 -34.6492 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2468 -35.1875 -0.1 + vertex 11.4668 -34.4353 -0.1 + vertex 12.2239 -35.4151 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1503 -34.7994 -0.1 + vertex 11.8827 -34.5351 -0.1 + vertex 11.6919 -34.4621 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1496 -35.6584 -0.1 + vertex 11.4668 -34.4353 -0.1 + vertex 12.0956 -35.7642 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0956 -35.7642 -0.1 + vertex 11.4668 -34.4353 -0.1 + vertex 12.0181 -35.8752 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.143 -34.4171 -0.1 + vertex 12.0181 -35.8752 -0.1 + vertex 11.4668 -34.4353 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0181 -35.8752 -0.1 + vertex 11.143 -34.4171 -0.1 + vertex 11.8034 -36.1064 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8034 -36.1064 -0.1 + vertex 11.143 -34.4171 -0.1 + vertex 11.5264 -36.339 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.016 -34.3915 -0.1 + vertex 11.5264 -36.339 -0.1 + vertex 11.143 -34.4171 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5264 -36.339 -0.1 + vertex 11.016 -34.3915 -0.1 + vertex 11.208 -36.5595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9123 -34.3507 -0.1 + vertex 11.208 -36.5595 -0.1 + vertex 11.016 -34.3915 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9123 -34.3507 -0.1 + vertex 10.8691 -36.7549 -0.1 + vertex 11.208 -36.5595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5307 -36.9119 -0.1 + vertex 10.9123 -34.3507 -0.1 + vertex 10.832 -34.2912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.71926 -37.0921 -0.1 + vertex 10.832 -34.2912 -0.1 + vertex 10.775 -34.2097 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.94379 -37.3156 -0.1 + vertex 10.775 -34.2097 -0.1 + vertex 10.7415 -34.103 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.63949 -32.8952 -0.1 + vertex 10.7415 -34.103 -0.1 + vertex 10.7315 -33.9677 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9123 -34.3507 -0.1 + vertex 10.5307 -36.9119 -0.1 + vertex 10.8691 -36.7549 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.97377 -29.9101 -0.1 + vertex 12.0447 -30.0547 -0.1 + vertex 9.07864 -27.2338 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 10.602 -19.227 -0.1 + vertex 10.3591 -19.1774 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0892 -24.2416 -0.1 + vertex 14.5952 -23.8342 -0.1 + vertex 10.1598 -23.7848 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0447 -30.0547 -0.1 + vertex 7.97377 -29.9101 -0.1 + vertex 11.5005 -31.4602 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.5952 -23.8342 -0.1 + vertex 10.149 -22.9513 -0.1 + vertex 10.1807 -23.3758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.5952 -23.8342 -0.1 + vertex 10.1103 -22.7594 -0.1 + vertex 10.149 -22.9513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 10.3591 -19.1774 -0.1 + vertex 10.0711 -19.1496 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.881 -19.8313 -0.1 + vertex 10.0571 -22.5812 -0.1 + vertex 10.1103 -22.7594 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.881 -19.8313 -0.1 + vertex 9.99008 -22.4166 -0.1 + vertex 10.0571 -22.5812 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7902 -19.8211 -0.1 + vertex 9.90973 -22.2656 -0.1 + vertex 9.99008 -22.4166 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7902 -19.8211 -0.1 + vertex 9.81668 -22.1284 -0.1 + vertex 9.90973 -22.2656 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 -0.1 + vertex 10.0711 -19.1496 -0.1 + vertex 9.72114 -19.1409 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5538 -19.7266 -0.1 + vertex 9.71152 -22.0048 -0.1 + vertex 9.81668 -22.1284 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5538 -19.7266 -0.1 + vertex 9.59484 -21.895 -0.1 + vertex 9.71152 -22.0048 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.2294 -19.5302 -0.1 + vertex 9.46723 -21.7989 -0.1 + vertex 9.59484 -21.895 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0711 -19.1496 -0.1 + vertex 9.18157 -21.6481 -0.1 + vertex 9.46723 -21.7989 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.72114 -19.1409 -0.1 + vertex 8.85925 -21.5524 -0.1 + vertex 9.18157 -21.6481 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.76754 -19.1712 -0.1 + vertex 8.85925 -21.5524 -0.1 + vertex 9.72114 -19.1409 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.76754 -19.1712 -0.1 + vertex 8.50498 -21.5121 -0.1 + vertex 8.85925 -21.5524 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.80885 -19.2424 -0.1 + vertex 8.50498 -21.5121 -0.1 + vertex 8.76754 -19.1712 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.50498 -21.5121 -0.1 + vertex 7.80885 -19.2424 -0.1 + vertex 8.12348 -21.5274 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.42262 -19.2967 -0.1 + vertex 8.12348 -21.5274 -0.1 + vertex 7.80885 -19.2424 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.12348 -21.5274 -0.1 + vertex 7.42262 -19.2967 -0.1 + vertex 7.71946 -21.5983 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.07441 -19.3694 -0.1 + vertex 7.71946 -21.5983 -0.1 + vertex 7.42262 -19.2967 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.74616 -19.4649 -0.1 + vertex 7.71946 -21.5983 -0.1 + vertex 7.07441 -19.3694 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.71946 -21.5983 -0.1 + vertex 6.74616 -19.4649 -0.1 + vertex 7.29763 -21.7251 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.41984 -19.5879 -0.1 + vertex 7.29763 -21.7251 -0.1 + vertex 6.74616 -19.4649 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.07737 -19.7427 -0.1 + vertex 7.29763 -21.7251 -0.1 + vertex 6.41984 -19.5879 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.29763 -21.7251 -0.1 + vertex 6.07737 -19.7427 -0.1 + vertex 6.8627 -21.9079 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.70074 -19.9339 -0.1 + vertex 6.8627 -21.9079 -0.1 + vertex 6.07737 -19.7427 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.8627 -21.9079 -0.1 + vertex 5.70074 -19.9339 -0.1 + vertex 6.41939 -22.1469 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.20766 -20.2058 -0.1 + vertex 6.41939 -22.1469 -0.1 + vertex 5.70074 -19.9339 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.41939 -22.1469 -0.1 + vertex 5.20766 -20.2058 -0.1 + vertex 5.97241 -22.4422 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.71458 -20.5006 -0.1 + vertex 5.97241 -22.4422 -0.1 + vertex 5.20766 -20.2058 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.22328 -20.8168 -0.1 + vertex 5.97241 -22.4422 -0.1 + vertex 4.71458 -20.5006 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.97241 -22.4422 -0.1 + vertex 4.22328 -20.8168 -0.1 + vertex 5.52647 -22.794 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.73558 -21.1527 -0.1 + vertex 5.52647 -22.794 -0.1 + vertex 4.22328 -20.8168 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.52647 -22.794 -0.1 + vertex 3.73558 -21.1527 -0.1 + vertex 5.08628 -23.2024 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.25328 -21.5067 -0.1 + vertex 5.08628 -23.2024 -0.1 + vertex 3.73558 -21.1527 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.08628 -23.2024 -0.1 + vertex 3.25328 -21.5067 -0.1 + vertex 4.45147 -23.8871 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.77819 -21.8771 -0.1 + vertex 4.45147 -23.8871 -0.1 + vertex 3.25328 -21.5067 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.31211 -22.2625 -0.1 + vertex 4.45147 -23.8871 -0.1 + vertex 2.77819 -21.8771 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.45147 -23.8871 -0.1 + vertex 2.31211 -22.2625 -0.1 + vertex 3.85887 -24.6213 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.85684 -22.661 -0.1 + vertex 3.85887 -24.6213 -0.1 + vertex 2.31211 -22.2625 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.4142 -23.0712 -0.1 + vertex 3.85887 -24.6213 -0.1 + vertex 1.85684 -22.661 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.85887 -24.6213 -0.1 + vertex 1.4142 -23.0712 -0.1 + vertex 3.31148 -25.3951 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.985991 -23.4913 -0.1 + vertex 3.31148 -25.3951 -0.1 + vertex 1.4142 -23.0712 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.574011 -23.9198 -0.1 + vertex 3.31148 -25.3951 -0.1 + vertex 0.985991 -23.4913 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.31148 -25.3951 -0.1 + vertex 0.574011 -23.9198 -0.1 + vertex 2.81229 -26.1986 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.18007 -24.355 -0.1 + vertex 2.81229 -26.1986 -0.1 + vertex 0.574011 -23.9198 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.194025 -24.7953 -0.1 + vertex 2.81229 -26.1986 -0.1 + vertex 0.18007 -24.355 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.81229 -26.1986 -0.1 + vertex -0.194025 -24.7953 -0.1 + vertex 2.36428 -27.0218 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.546472 -25.2391 -0.1 + vertex 2.36428 -27.0218 -0.1 + vertex -0.194025 -24.7953 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.875463 -25.6847 -0.1 + vertex 2.36428 -27.0218 -0.1 + vertex -0.546472 -25.2391 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.36428 -27.0218 -0.1 + vertex -0.875463 -25.6847 -0.1 + vertex 1.97046 -27.8549 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.17919 -26.1306 -0.1 + vertex 1.97046 -27.8549 -0.1 + vertex -0.875463 -25.6847 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.45361 -26.5684 -0.1 + vertex 1.97046 -27.8549 -0.1 + vertex -1.17919 -26.1306 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5005 -31.4602 -0.1 + vertex 7.97377 -29.9101 -0.1 + vertex 11.1661 -32.3709 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.44603 -31.1479 -0.1 + vertex 11.1661 -32.3709 -0.1 + vertex 7.97377 -29.9101 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1661 -32.3709 -0.1 + vertex 7.44603 -31.1479 -0.1 + vertex 10.9267 -33.0747 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.00854 -32.1311 -0.1 + vertex 10.9267 -33.0747 -0.1 + vertex 7.44603 -31.1479 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9267 -33.0747 -0.1 + vertex 7.00854 -32.1311 -0.1 + vertex 10.7819 -33.5982 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.7819 -33.5982 -0.1 + vertex 7.00854 -32.1311 -0.1 + vertex 10.7449 -33.8005 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.63949 -32.8952 -0.1 + vertex 10.7449 -33.8005 -0.1 + vertex 7.00854 -32.1311 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.7449 -33.8005 -0.1 + vertex 6.63949 -32.8952 -0.1 + vertex 10.7315 -33.9677 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.7415 -34.103 -0.1 + vertex 6.63949 -32.8952 -0.1 + vertex 6.31707 -33.4759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.832 -34.2912 -0.1 + vertex 9.93892 -37.0575 -0.1 + vertex 10.2137 -37.0171 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.832 -34.2912 -0.1 + vertex 10.2137 -37.0171 -0.1 + vertex 10.5307 -36.9119 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.832 -34.2912 -0.1 + vertex 9.71926 -37.0921 -0.1 + vertex 9.93892 -37.0575 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.775 -34.2097 -0.1 + vertex 9.37163 -37.1827 -0.1 + vertex 9.71926 -37.0921 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 8.94379 -37.3156 -0.1 + vertex 10.7415 -34.103 -0.1 + vertex 6.31707 -33.4759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.775 -34.2097 -0.1 + vertex 8.94379 -37.3156 -0.1 + vertex 9.37163 -37.1827 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.01946 -33.9088 -0.1 + vertex 8.94379 -37.3156 -0.1 + vertex 6.31707 -33.4759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.94379 -37.3156 -0.1 + vertex 6.01946 -33.9088 -0.1 + vertex 8.4835 -37.477 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.87315 -34.0811 -0.1 + vertex 8.4835 -37.477 -0.1 + vertex 6.01946 -33.9088 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.72486 -34.2297 -0.1 + vertex 8.4835 -37.477 -0.1 + vertex 5.87315 -34.0811 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.4835 -37.477 -0.1 + vertex 5.72486 -34.2297 -0.1 + vertex 7.35232 -37.8908 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.41146 -34.4742 -0.1 + vertex 7.35232 -37.8908 -0.1 + vertex 5.72486 -34.2297 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.69132 -37.3222 -0.1 + vertex 7.35232 -37.8908 -0.1 + vertex 5.41146 -34.4742 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.35232 -37.8908 -0.1 + vertex 4.69132 -37.3222 -0.1 + vertex 6.47346 -38.1927 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 4.72035 -37.4346 -0.1 + vertex 6.47346 -38.1927 -0.1 + vertex 4.69132 -37.3222 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.47346 -38.1927 -0.1 + vertex 4.72035 -37.4346 -0.1 + vertex 5.81563 -38.3852 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 4.74716 -37.8041 -0.1 + vertex 5.81563 -38.3852 -0.1 + vertex 4.72035 -37.4346 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.69132 -37.3222 -0.1 + vertex 5.41146 -34.4742 -0.1 + vertex 5.05744 -34.678 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.55983 -38.4413 -0.1 + vertex 4.74716 -37.8041 -0.1 + vertex 5.34756 -38.4712 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 4.76904 -38.117 -0.1 + vertex 5.34756 -38.4712 -0.1 + vertex 4.74716 -37.8041 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.34756 -38.4712 -0.1 + vertex 4.76904 -38.117 -0.1 + vertex 5.17491 -38.475 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.17491 -38.475 -0.1 + vertex 4.76904 -38.117 -0.1 + vertex 5.03796 -38.4533 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.03796 -38.4533 -0.1 + vertex 4.80226 -38.2378 -0.1 + vertex 4.93281 -38.4063 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.93281 -38.4063 -0.1 + vertex 4.80226 -38.2378 -0.1 + vertex 4.85555 -38.3343 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 4.80226 -38.2378 -0.1 + vertex 5.03796 -38.4533 -0.1 + vertex 4.76904 -38.117 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.81563 -38.3852 -0.1 + vertex 4.74716 -37.8041 -0.1 + vertex 5.55983 -38.4413 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.05744 -34.678 -0.1 + vertex 4.65588 -37.2809 -0.1 + vertex 4.69132 -37.3222 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.59905 -34.8756 -0.1 + vertex 4.65588 -37.2809 -0.1 + vertex 5.05744 -34.678 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.12685 -35.011 -0.1 + vertex 4.65588 -37.2809 -0.1 + vertex 4.59905 -34.8756 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.65273 -35.0844 -0.1 + vertex 4.65588 -37.2809 -0.1 + vertex 4.12685 -35.011 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.65588 -37.2809 -0.1 + vertex 3.65273 -35.0844 -0.1 + vertex 4.26446 -37.4494 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.18861 -35.0966 -0.1 + vertex 4.26446 -37.4494 -0.1 + vertex 3.65273 -35.0844 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.26446 -37.4494 -0.1 + vertex 3.18861 -35.0966 -0.1 + vertex 3.45158 -37.8545 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.7464 -35.0478 -0.1 + vertex 3.45158 -37.8545 -0.1 + vertex 3.18861 -35.0966 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.45158 -37.8545 -0.1 + vertex 2.7464 -35.0478 -0.1 + vertex 3.20396 -37.9704 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.20396 -37.9704 -0.1 + vertex 2.7464 -35.0478 -0.1 + vertex 2.93102 -38.0768 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.53723 -35.0007 -0.1 + vertex 2.93102 -38.0768 -0.1 + vertex 2.7464 -35.0478 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.32439 -38.26 -0.1 + vertex 2.53723 -35.0007 -0.1 + vertex 2.33801 -34.9386 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.53723 -35.0007 -0.1 + vertex 2.32439 -38.26 -0.1 + vertex 2.93102 -38.0768 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.66207 -38.4009 -0.1 + vertex 2.33801 -34.9386 -0.1 + vertex 2.15022 -34.8616 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.66207 -38.4009 -0.1 + vertex 2.15022 -34.8616 -0.1 + vertex 1.97535 -34.7696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.974434 -38.4962 -0.1 + vertex 1.97535 -34.7696 -0.1 + vertex 1.8149 -34.6627 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.291868 -38.543 -0.1 + vertex 1.8149 -34.6627 -0.1 + vertex 1.67035 -34.5411 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.33801 -34.9386 -0.1 + vertex 1.66207 -38.4009 -0.1 + vertex 2.32439 -38.26 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.355246 -38.538 -0.1 + vertex 1.67035 -34.5411 -0.1 + vertex 1.50339 -34.3603 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.66982 -37.4742 -0.1 + vertex 1.50339 -34.3603 -0.1 + vertex 1.35782 -34.1559 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.25661 -36.6145 -0.1 + vertex 1.35782 -34.1559 -0.1 + vertex 1.23329 -33.9292 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.68783 -35.5721 -0.1 + vertex 1.23329 -33.9292 -0.1 + vertex 1.1294 -33.6813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.87516 -34.8013 -0.1 + vertex 1.1294 -33.6813 -0.1 + vertex 1.04578 -33.4136 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97277 -33.9877 -0.1 + vertex 1.04578 -33.4136 -0.1 + vertex 0.982074 -33.1272 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.97535 -34.7696 -0.1 + vertex 0.974434 -38.4962 -0.1 + vertex 1.66207 -38.4009 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97004 -33.2395 -0.1 + vertex 0.982074 -33.1272 -0.1 + vertex 0.937893 -32.8234 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.8527 -32.4651 -0.1 + vertex 0.937893 -32.8234 -0.1 + vertex 0.912865 -32.5034 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.75417 -32.0301 -0.1 + vertex 0.912865 -32.5034 -0.1 + vertex 0.906618 -32.1685 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.97046 -27.8549 -0.1 + vertex -1.45361 -26.5684 -0.1 + vertex 1.63381 -28.6878 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.72295 -27.0315 -0.1 + vertex 1.63381 -28.6878 -0.1 + vertex -1.45361 -26.5684 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.23947 -28.0146 -0.1 + vertex 1.63381 -28.6878 -0.1 + vertex -1.72295 -27.0315 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.63381 -28.6878 -0.1 + vertex -2.23947 -28.0146 -0.1 + vertex 1.35733 -29.5107 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.71481 -29.043 -0.1 + vertex 1.35733 -29.5107 -0.1 + vertex -2.23947 -28.0146 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.35733 -29.5107 -0.1 + vertex -2.71481 -29.043 -0.1 + vertex 1.144 -30.3137 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.144 -30.3137 -0.1 + vertex -2.71481 -29.043 -0.1 + vertex 0.99682 -31.0867 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.135 -30.0798 -0.1 + vertex 0.99682 -31.0867 -0.1 + vertex -2.71481 -29.043 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.99682 -31.0867 -0.1 + vertex -3.135 -30.0798 -0.1 + vertex 0.918778 -31.8199 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.4861 -31.0878 -0.1 + vertex 0.918778 -31.8199 -0.1 + vertex -3.135 -30.0798 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.918778 -31.8199 -0.1 + vertex -3.4861 -31.0878 -0.1 + vertex 0.906618 -32.1685 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.75417 -32.0301 -0.1 + vertex 0.906618 -32.1685 -0.1 + vertex -3.4861 -31.0878 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.912865 -32.5034 -0.1 + vertex -3.75417 -32.0301 -0.1 + vertex -3.8527 -32.4651 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.937893 -32.8234 -0.1 + vertex -3.8527 -32.4651 -0.1 + vertex -3.92523 -32.8697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.937893 -32.8234 -0.1 + vertex -3.92523 -32.8697 -0.1 + vertex -3.97004 -33.2395 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04578 -33.4136 -0.1 + vertex -3.97277 -33.9877 -0.1 + vertex -3.93569 -34.3989 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04578 -33.4136 -0.1 + vertex -3.93569 -34.3989 -0.1 + vertex -3.87516 -34.8013 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.1294 -33.6813 -0.1 + vertex -3.87516 -34.8013 -0.1 + vertex -3.79219 -35.193 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.8149 -34.6627 -0.1 + vertex 0.291868 -38.543 -0.1 + vertex 0.974434 -38.4962 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.23329 -33.9292 -0.1 + vertex -3.56309 -35.9367 -0.1 + vertex -3.41901 -36.2848 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.23329 -33.9292 -0.1 + vertex -3.41901 -36.2848 -0.1 + vertex -3.25661 -36.6145 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.35782 -34.1559 -0.1 + vertex -3.25661 -36.6145 -0.1 + vertex -3.07693 -36.924 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.35782 -34.1559 -0.1 + vertex -3.07693 -36.924 -0.1 + vertex -2.88099 -37.2112 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.35782 -34.1559 -0.1 + vertex -2.88099 -37.2112 -0.1 + vertex -2.66982 -37.4742 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.50339 -34.3603 -0.1 + vertex -2.20592 -37.9202 -0.1 + vertex -0.936529 -38.478 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.19299 -38.4265 -0.1 + vertex -2.20592 -37.9202 -0.1 + vertex -1.4216 -38.36 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.69347 -38.2465 -0.1 + vertex -2.20592 -37.9202 -0.1 + vertex -1.95525 -38.0993 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.4216 -38.36 -0.1 + vertex -2.20592 -37.9202 -0.1 + vertex -1.69347 -38.2465 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.936529 -38.478 -0.1 + vertex -2.20592 -37.9202 -0.1 + vertex -1.19299 -38.4265 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.50339 -34.3603 -0.1 + vertex -2.44446 -37.7112 -0.1 + vertex -2.20592 -37.9202 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.50339 -34.3603 -0.1 + vertex -0.936529 -38.478 -0.1 + vertex -0.355246 -38.538 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.50339 -34.3603 -0.1 + vertex -2.66982 -37.4742 -0.1 + vertex -2.44446 -37.7112 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.1294 -33.6813 -0.1 + vertex -3.79219 -35.193 -0.1 + vertex -3.68783 -35.5721 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.67035 -34.5411 -0.1 + vertex -0.355246 -38.538 -0.1 + vertex 0.291868 -38.543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.982074 -33.1272 -0.1 + vertex -3.97004 -33.2395 -0.1 + vertex -3.98536 -33.5697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.23329 -33.9292 -0.1 + vertex -3.68783 -35.5721 -0.1 + vertex -3.56309 -35.9367 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.982074 -33.1272 -0.1 + vertex -3.98536 -33.5697 -0.1 + vertex -3.97277 -33.9877 -0.1 + endloop + endfacet + facet normal -0.2949 -0.955528 0 + outer loop + vertex 19.3736 -10.7173 -0.1 + vertex 19.4763 -10.749 0 + vertex 19.3736 -10.7173 0 + endloop + endfacet + facet normal -0.2949 -0.955528 -0 + outer loop + vertex 19.4763 -10.749 0 + vertex 19.3736 -10.7173 -0.1 + vertex 19.4763 -10.749 -0.1 + endloop + endfacet + facet normal -0.500051 -0.865996 0 + outer loop + vertex 19.4763 -10.749 -0.1 + vertex 19.557 -10.7956 0 + vertex 19.4763 -10.749 0 + endloop + endfacet + facet normal -0.500051 -0.865996 -0 + outer loop + vertex 19.557 -10.7956 0 + vertex 19.4763 -10.749 -0.1 + vertex 19.557 -10.7956 -0.1 + endloop + endfacet + facet normal -0.714409 -0.699729 0 + outer loop + vertex 19.6172 -10.8571 -0.1 + vertex 19.557 -10.7956 0 + vertex 19.557 -10.7956 -0.1 + endloop + endfacet + facet normal -0.714409 -0.699729 0 + outer loop + vertex 19.557 -10.7956 0 + vertex 19.6172 -10.8571 -0.1 + vertex 19.6172 -10.8571 0 + endloop + endfacet + facet normal -0.879991 -0.47499 0 + outer loop + vertex 19.6583 -10.9333 -0.1 + vertex 19.6172 -10.8571 0 + vertex 19.6172 -10.8571 -0.1 + endloop + endfacet + facet normal -0.879991 -0.47499 0 + outer loop + vertex 19.6172 -10.8571 0 + vertex 19.6583 -10.9333 -0.1 + vertex 19.6583 -10.9333 0 + endloop + endfacet + facet normal -0.967951 -0.251138 0 + outer loop + vertex 19.6819 -11.0243 -0.1 + vertex 19.6583 -10.9333 0 + vertex 19.6583 -10.9333 -0.1 + endloop + endfacet + facet normal -0.967951 -0.251138 0 + outer loop + vertex 19.6583 -10.9333 0 + vertex 19.6819 -11.0243 -0.1 + vertex 19.6819 -11.0243 0 + endloop + endfacet + facet normal -0.997465 -0.0711569 0 + outer loop + vertex 19.6895 -11.13 -0.1 + vertex 19.6819 -11.0243 0 + vertex 19.6819 -11.0243 -0.1 + endloop + endfacet + facet normal -0.997465 -0.0711569 0 + outer loop + vertex 19.6819 -11.0243 0 + vertex 19.6895 -11.13 -0.1 + vertex 19.6895 -11.13 0 + endloop + endfacet + facet normal -0.984705 0.17423 0 + outer loop + vertex 19.6598 -11.2975 -0.1 + vertex 19.6895 -11.13 0 + vertex 19.6895 -11.13 -0.1 + endloop + endfacet + facet normal -0.984705 0.17423 0 + outer loop + vertex 19.6895 -11.13 0 + vertex 19.6598 -11.2975 -0.1 + vertex 19.6598 -11.2975 0 + endloop + endfacet + facet normal -0.956743 0.290933 0 + outer loop + vertex 19.5653 -11.6083 -0.1 + vertex 19.6598 -11.2975 0 + vertex 19.6598 -11.2975 -0.1 + endloop + endfacet + facet normal -0.956743 0.290933 0 + outer loop + vertex 19.6598 -11.2975 0 + vertex 19.5653 -11.6083 -0.1 + vertex 19.5653 -11.6083 0 + endloop + endfacet + facet normal -0.93899 0.343946 0 + outer loop + vertex 19.1479 -12.7477 -0.1 + vertex 19.5653 -11.6083 0 + vertex 19.5653 -11.6083 -0.1 + endloop + endfacet + facet normal -0.93899 0.343946 0 + outer loop + vertex 19.5653 -11.6083 0 + vertex 19.1479 -12.7477 -0.1 + vertex 19.1479 -12.7477 0 + endloop + endfacet + facet normal -0.930496 0.366302 0 + outer loop + vertex 18.3699 -14.7241 -0.1 + vertex 19.1479 -12.7477 0 + vertex 19.1479 -12.7477 -0.1 + endloop + endfacet + facet normal -0.930496 0.366302 0 + outer loop + vertex 19.1479 -12.7477 0 + vertex 18.3699 -14.7241 -0.1 + vertex 18.3699 -14.7241 0 + endloop + endfacet + facet normal -0.92735 0.374196 0 + outer loop + vertex 17.1638 -17.7131 -0.1 + vertex 18.3699 -14.7241 0 + vertex 18.3699 -14.7241 -0.1 + endloop + endfacet + facet normal -0.92735 0.374196 0 + outer loop + vertex 18.3699 -14.7241 0 + vertex 17.1638 -17.7131 -0.1 + vertex 17.1638 -17.7131 0 + endloop + endfacet + facet normal -0.922106 0.386938 0 + outer loop + vertex 14.5952 -23.8342 -0.1 + vertex 17.1638 -17.7131 0 + vertex 17.1638 -17.7131 -0.1 + endloop + endfacet + facet normal -0.922106 0.386938 0 + outer loop + vertex 17.1638 -17.7131 0 + vertex 14.5952 -23.8342 -0.1 + vertex 14.5952 -23.8342 0 + endloop + endfacet + facet normal -0.923985 0.382428 0 + outer loop + vertex 12.8097 -28.1484 -0.1 + vertex 14.5952 -23.8342 0 + vertex 14.5952 -23.8342 -0.1 + endloop + endfacet + facet normal -0.923985 0.382428 0 + outer loop + vertex 14.5952 -23.8342 0 + vertex 12.8097 -28.1484 -0.1 + vertex 12.8097 -28.1484 0 + endloop + endfacet + facet normal -0.928075 0.372394 0 + outer loop + vertex 12.0447 -30.0547 -0.1 + vertex 12.8097 -28.1484 0 + vertex 12.8097 -28.1484 -0.1 + endloop + endfacet + facet normal -0.928075 0.372394 0 + outer loop + vertex 12.8097 -28.1484 0 + vertex 12.0447 -30.0547 -0.1 + vertex 12.0447 -30.0547 0 + endloop + endfacet + facet normal -0.932522 0.361114 0 + outer loop + vertex 11.5005 -31.4602 -0.1 + vertex 12.0447 -30.0547 0 + vertex 12.0447 -30.0547 -0.1 + endloop + endfacet + facet normal -0.932522 0.361114 0 + outer loop + vertex 12.0447 -30.0547 0 + vertex 11.5005 -31.4602 -0.1 + vertex 11.5005 -31.4602 0 + endloop + endfacet + facet normal -0.938737 0.344634 0 + outer loop + vertex 11.1661 -32.3709 -0.1 + vertex 11.5005 -31.4602 0 + vertex 11.5005 -31.4602 -0.1 + endloop + endfacet + facet normal -0.938737 0.344634 0 + outer loop + vertex 11.5005 -31.4602 0 + vertex 11.1661 -32.3709 -0.1 + vertex 11.1661 -32.3709 0 + endloop + endfacet + facet normal -0.946728 0.322034 0 + outer loop + vertex 10.9267 -33.0747 -0.1 + vertex 11.1661 -32.3709 0 + vertex 11.1661 -32.3709 -0.1 + endloop + endfacet + facet normal -0.946728 0.322034 0 + outer loop + vertex 11.1661 -32.3709 0 + vertex 10.9267 -33.0747 -0.1 + vertex 10.9267 -33.0747 0 + endloop + endfacet + facet normal -0.963806 0.266603 0 + outer loop + vertex 10.7819 -33.5982 -0.1 + vertex 10.9267 -33.0747 0 + vertex 10.9267 -33.0747 -0.1 + endloop + endfacet + facet normal -0.963806 0.266603 0 + outer loop + vertex 10.9267 -33.0747 0 + vertex 10.7819 -33.5982 -0.1 + vertex 10.7819 -33.5982 0 + endloop + endfacet + facet normal -0.983685 0.179901 0 + outer loop + vertex 10.7449 -33.8005 -0.1 + vertex 10.7819 -33.5982 0 + vertex 10.7819 -33.5982 -0.1 + endloop + endfacet + facet normal -0.983685 0.179901 0 + outer loop + vertex 10.7819 -33.5982 0 + vertex 10.7449 -33.8005 -0.1 + vertex 10.7449 -33.8005 0 + endloop + endfacet + facet normal -0.996773 0.0802779 0 + outer loop + vertex 10.7315 -33.9677 -0.1 + vertex 10.7449 -33.8005 0 + vertex 10.7449 -33.8005 -0.1 + endloop + endfacet + facet normal -0.996773 0.0802779 0 + outer loop + vertex 10.7449 -33.8005 0 + vertex 10.7315 -33.9677 -0.1 + vertex 10.7315 -33.9677 0 + endloop + endfacet + facet normal -0.997256 -0.0740364 0 + outer loop + vertex 10.7415 -34.103 -0.1 + vertex 10.7315 -33.9677 0 + vertex 10.7315 -33.9677 -0.1 + endloop + endfacet + facet normal -0.997256 -0.0740364 0 + outer loop + vertex 10.7315 -33.9677 0 + vertex 10.7415 -34.103 -0.1 + vertex 10.7415 -34.103 0 + endloop + endfacet + facet normal -0.954067 -0.299593 0 + outer loop + vertex 10.775 -34.2097 -0.1 + vertex 10.7415 -34.103 0 + vertex 10.7415 -34.103 -0.1 + endloop + endfacet + facet normal -0.954067 -0.299593 0 + outer loop + vertex 10.7415 -34.103 0 + vertex 10.775 -34.2097 -0.1 + vertex 10.775 -34.2097 0 + endloop + endfacet + facet normal -0.81961 -0.572921 0 + outer loop + vertex 10.832 -34.2912 -0.1 + vertex 10.775 -34.2097 0 + vertex 10.775 -34.2097 -0.1 + endloop + endfacet + facet normal -0.81961 -0.572921 0 + outer loop + vertex 10.775 -34.2097 0 + vertex 10.832 -34.2912 -0.1 + vertex 10.832 -34.2912 0 + endloop + endfacet + facet normal -0.595252 -0.803539 0 + outer loop + vertex 10.832 -34.2912 -0.1 + vertex 10.9123 -34.3507 0 + vertex 10.832 -34.2912 0 + endloop + endfacet + facet normal -0.595252 -0.803539 -0 + outer loop + vertex 10.9123 -34.3507 0 + vertex 10.832 -34.2912 -0.1 + vertex 10.9123 -34.3507 -0.1 + endloop + endfacet + facet normal -0.366659 -0.930355 0 + outer loop + vertex 10.9123 -34.3507 -0.1 + vertex 11.016 -34.3915 0 + vertex 10.9123 -34.3507 0 + endloop + endfacet + facet normal -0.366659 -0.930355 -0 + outer loop + vertex 11.016 -34.3915 0 + vertex 10.9123 -34.3507 -0.1 + vertex 11.016 -34.3915 -0.1 + endloop + endfacet + facet normal -0.197016 -0.9804 0 + outer loop + vertex 11.016 -34.3915 -0.1 + vertex 11.143 -34.4171 0 + vertex 11.016 -34.3915 0 + endloop + endfacet + facet normal -0.197016 -0.9804 -0 + outer loop + vertex 11.143 -34.4171 0 + vertex 11.016 -34.3915 -0.1 + vertex 11.143 -34.4171 -0.1 + endloop + endfacet + facet normal -0.0562764 -0.998415 0 + outer loop + vertex 11.143 -34.4171 -0.1 + vertex 11.4668 -34.4353 0 + vertex 11.143 -34.4171 0 + endloop + endfacet + facet normal -0.0562764 -0.998415 -0 + outer loop + vertex 11.4668 -34.4353 0 + vertex 11.143 -34.4171 -0.1 + vertex 11.4668 -34.4353 -0.1 + endloop + endfacet + facet normal -0.118118 -0.993 0 + outer loop + vertex 11.4668 -34.4353 -0.1 + vertex 11.6919 -34.4621 0 + vertex 11.4668 -34.4353 0 + endloop + endfacet + facet normal -0.118118 -0.993 -0 + outer loop + vertex 11.6919 -34.4621 0 + vertex 11.4668 -34.4353 -0.1 + vertex 11.6919 -34.4621 -0.1 + endloop + endfacet + facet normal -0.357337 -0.933976 0 + outer loop + vertex 11.6919 -34.4621 -0.1 + vertex 11.8827 -34.5351 0 + vertex 11.6919 -34.4621 0 + endloop + endfacet + facet normal -0.357337 -0.933976 -0 + outer loop + vertex 11.8827 -34.5351 0 + vertex 11.6919 -34.4621 -0.1 + vertex 11.8827 -34.5351 -0.1 + endloop + endfacet + facet normal -0.596054 -0.802944 0 + outer loop + vertex 11.8827 -34.5351 -0.1 + vertex 12.0364 -34.6492 0 + vertex 11.8827 -34.5351 0 + endloop + endfacet + facet normal -0.596054 -0.802944 -0 + outer loop + vertex 12.0364 -34.6492 0 + vertex 11.8827 -34.5351 -0.1 + vertex 12.0364 -34.6492 -0.1 + endloop + endfacet + facet normal -0.796902 -0.604109 0 + outer loop + vertex 12.1503 -34.7994 -0.1 + vertex 12.0364 -34.6492 0 + vertex 12.0364 -34.6492 -0.1 + endloop + endfacet + facet normal -0.796902 -0.604109 0 + outer loop + vertex 12.0364 -34.6492 0 + vertex 12.1503 -34.7994 -0.1 + vertex 12.1503 -34.7994 0 + endloop + endfacet + facet normal -0.930863 -0.365367 0 + outer loop + vertex 12.2214 -34.9805 -0.1 + vertex 12.1503 -34.7994 0 + vertex 12.1503 -34.7994 -0.1 + endloop + endfacet + facet normal -0.930863 -0.365367 0 + outer loop + vertex 12.1503 -34.7994 0 + vertex 12.2214 -34.9805 -0.1 + vertex 12.2214 -34.9805 0 + endloop + endfacet + facet normal -0.992505 -0.122206 0 + outer loop + vertex 12.2468 -35.1875 -0.1 + vertex 12.2214 -34.9805 0 + vertex 12.2214 -34.9805 -0.1 + endloop + endfacet + facet normal -0.992505 -0.122206 0 + outer loop + vertex 12.2214 -34.9805 0 + vertex 12.2468 -35.1875 -0.1 + vertex 12.2468 -35.1875 0 + endloop + endfacet + facet normal -0.994949 0.100386 0 + outer loop + vertex 12.2239 -35.4151 -0.1 + vertex 12.2468 -35.1875 0 + vertex 12.2468 -35.1875 -0.1 + endloop + endfacet + facet normal -0.994949 0.100386 0 + outer loop + vertex 12.2468 -35.1875 0 + vertex 12.2239 -35.4151 -0.1 + vertex 12.2239 -35.4151 0 + endloop + endfacet + facet normal -0.956433 0.291953 0 + outer loop + vertex 12.1496 -35.6584 -0.1 + vertex 12.2239 -35.4151 0 + vertex 12.2239 -35.4151 -0.1 + endloop + endfacet + facet normal -0.956433 0.291953 0 + outer loop + vertex 12.2239 -35.4151 0 + vertex 12.1496 -35.6584 -0.1 + vertex 12.1496 -35.6584 0 + endloop + endfacet + facet normal -0.890412 0.455156 0 + outer loop + vertex 12.0956 -35.7642 -0.1 + vertex 12.1496 -35.6584 0 + vertex 12.1496 -35.6584 -0.1 + endloop + endfacet + facet normal -0.890412 0.455156 0 + outer loop + vertex 12.1496 -35.6584 0 + vertex 12.0956 -35.7642 -0.1 + vertex 12.0956 -35.7642 0 + endloop + endfacet + facet normal -0.820093 0.572231 0 + outer loop + vertex 12.0181 -35.8752 -0.1 + vertex 12.0956 -35.7642 0 + vertex 12.0956 -35.7642 -0.1 + endloop + endfacet + facet normal -0.820093 0.572231 0 + outer loop + vertex 12.0956 -35.7642 0 + vertex 12.0181 -35.8752 -0.1 + vertex 12.0181 -35.8752 0 + endloop + endfacet + facet normal -0.732832 0.680409 0 + outer loop + vertex 11.8034 -36.1064 -0.1 + vertex 12.0181 -35.8752 0 + vertex 12.0181 -35.8752 -0.1 + endloop + endfacet + facet normal -0.732832 0.680409 0 + outer loop + vertex 12.0181 -35.8752 0 + vertex 11.8034 -36.1064 -0.1 + vertex 11.8034 -36.1064 0 + endloop + endfacet + facet normal -0.642938 0.765918 0 + outer loop + vertex 11.8034 -36.1064 -0.1 + vertex 11.5264 -36.339 0 + vertex 11.8034 -36.1064 0 + endloop + endfacet + facet normal -0.642938 0.765918 0 + outer loop + vertex 11.5264 -36.339 0 + vertex 11.8034 -36.1064 -0.1 + vertex 11.5264 -36.339 -0.1 + endloop + endfacet + facet normal -0.569468 0.822014 0 + outer loop + vertex 11.5264 -36.339 -0.1 + vertex 11.208 -36.5595 0 + vertex 11.5264 -36.339 0 + endloop + endfacet + facet normal -0.569468 0.822014 0 + outer loop + vertex 11.208 -36.5595 0 + vertex 11.5264 -36.339 -0.1 + vertex 11.208 -36.5595 -0.1 + endloop + endfacet + facet normal -0.499497 0.866315 0 + outer loop + vertex 11.208 -36.5595 -0.1 + vertex 10.8691 -36.7549 0 + vertex 11.208 -36.5595 0 + endloop + endfacet + facet normal -0.499497 0.866315 0 + outer loop + vertex 10.8691 -36.7549 0 + vertex 11.208 -36.5595 -0.1 + vertex 10.8691 -36.7549 -0.1 + endloop + endfacet + facet normal -0.420709 0.907196 0 + outer loop + vertex 10.8691 -36.7549 -0.1 + vertex 10.5307 -36.9119 0 + vertex 10.8691 -36.7549 0 + endloop + endfacet + facet normal -0.420709 0.907196 0 + outer loop + vertex 10.5307 -36.9119 0 + vertex 10.8691 -36.7549 -0.1 + vertex 10.5307 -36.9119 -0.1 + endloop + endfacet + facet normal -0.315116 0.949053 0 + outer loop + vertex 10.5307 -36.9119 -0.1 + vertex 10.2137 -37.0171 0 + vertex 10.5307 -36.9119 0 + endloop + endfacet + facet normal -0.315116 0.949053 0 + outer loop + vertex 10.2137 -37.0171 0 + vertex 10.5307 -36.9119 -0.1 + vertex 10.2137 -37.0171 -0.1 + endloop + endfacet + facet normal -0.145343 0.989381 0 + outer loop + vertex 10.2137 -37.0171 -0.1 + vertex 9.93892 -37.0575 0 + vertex 10.2137 -37.0171 0 + endloop + endfacet + facet normal -0.145343 0.989381 0 + outer loop + vertex 9.93892 -37.0575 0 + vertex 10.2137 -37.0171 -0.1 + vertex 9.93892 -37.0575 -0.1 + endloop + endfacet + facet normal -0.15554 0.98783 0 + outer loop + vertex 9.93892 -37.0575 -0.1 + vertex 9.71926 -37.0921 0 + vertex 9.93892 -37.0575 0 + endloop + endfacet + facet normal -0.15554 0.98783 0 + outer loop + vertex 9.71926 -37.0921 0 + vertex 9.93892 -37.0575 -0.1 + vertex 9.71926 -37.0921 -0.1 + endloop + endfacet + facet normal -0.252236 0.967666 0 + outer loop + vertex 9.71926 -37.0921 -0.1 + vertex 9.37163 -37.1827 0 + vertex 9.71926 -37.0921 0 + endloop + endfacet + facet normal -0.252236 0.967666 0 + outer loop + vertex 9.37163 -37.1827 0 + vertex 9.71926 -37.0921 -0.1 + vertex 9.37163 -37.1827 -0.1 + endloop + endfacet + facet normal -0.296619 0.954996 0 + outer loop + vertex 9.37163 -37.1827 -0.1 + vertex 8.94379 -37.3156 0 + vertex 9.37163 -37.1827 0 + endloop + endfacet + facet normal -0.296619 0.954996 0 + outer loop + vertex 8.94379 -37.3156 0 + vertex 9.37163 -37.1827 -0.1 + vertex 8.94379 -37.3156 -0.1 + endloop + endfacet + facet normal -0.330869 0.943677 0 + outer loop + vertex 8.94379 -37.3156 -0.1 + vertex 8.4835 -37.477 0 + vertex 8.94379 -37.3156 0 + endloop + endfacet + facet normal -0.330869 0.943677 0 + outer loop + vertex 8.4835 -37.477 0 + vertex 8.94379 -37.3156 -0.1 + vertex 8.4835 -37.477 -0.1 + endloop + endfacet + facet normal -0.343608 0.939113 0 + outer loop + vertex 8.4835 -37.477 -0.1 + vertex 7.35232 -37.8908 0 + vertex 8.4835 -37.477 0 + endloop + endfacet + facet normal -0.343608 0.939113 0 + outer loop + vertex 7.35232 -37.8908 0 + vertex 8.4835 -37.477 -0.1 + vertex 7.35232 -37.8908 -0.1 + endloop + endfacet + facet normal -0.324819 0.945776 0 + outer loop + vertex 7.35232 -37.8908 -0.1 + vertex 6.47346 -38.1927 0 + vertex 7.35232 -37.8908 0 + endloop + endfacet + facet normal -0.324819 0.945776 0 + outer loop + vertex 6.47346 -38.1927 0 + vertex 7.35232 -37.8908 -0.1 + vertex 6.47346 -38.1927 -0.1 + endloop + endfacet + facet normal -0.280895 0.959739 0 + outer loop + vertex 6.47346 -38.1927 -0.1 + vertex 5.81563 -38.3852 0 + vertex 6.47346 -38.1927 0 + endloop + endfacet + facet normal -0.280895 0.959739 0 + outer loop + vertex 5.81563 -38.3852 0 + vertex 6.47346 -38.1927 -0.1 + vertex 5.81563 -38.3852 -0.1 + endloop + endfacet + facet normal -0.214328 0.976762 0 + outer loop + vertex 5.81563 -38.3852 -0.1 + vertex 5.55983 -38.4413 0 + vertex 5.81563 -38.3852 0 + endloop + endfacet + facet normal -0.214328 0.976762 0 + outer loop + vertex 5.55983 -38.4413 0 + vertex 5.81563 -38.3852 -0.1 + vertex 5.55983 -38.4413 -0.1 + endloop + endfacet + facet normal -0.139165 0.990269 0 + outer loop + vertex 5.55983 -38.4413 -0.1 + vertex 5.34756 -38.4712 0 + vertex 5.55983 -38.4413 0 + endloop + endfacet + facet normal -0.139165 0.990269 0 + outer loop + vertex 5.34756 -38.4712 0 + vertex 5.55983 -38.4413 -0.1 + vertex 5.34756 -38.4712 -0.1 + endloop + endfacet + facet normal -0.0224422 0.999748 0 + outer loop + vertex 5.34756 -38.4712 -0.1 + vertex 5.17491 -38.475 0 + vertex 5.34756 -38.4712 0 + endloop + endfacet + facet normal -0.0224422 0.999748 0 + outer loop + vertex 5.17491 -38.475 0 + vertex 5.34756 -38.4712 -0.1 + vertex 5.17491 -38.475 -0.1 + endloop + endfacet + facet normal 0.156812 0.987628 -0 + outer loop + vertex 5.17491 -38.475 -0.1 + vertex 5.03796 -38.4533 0 + vertex 5.17491 -38.475 0 + endloop + endfacet + facet normal 0.156812 0.987628 0 + outer loop + vertex 5.03796 -38.4533 0 + vertex 5.17491 -38.475 -0.1 + vertex 5.03796 -38.4533 -0.1 + endloop + endfacet + facet normal 0.408161 0.91291 -0 + outer loop + vertex 5.03796 -38.4533 -0.1 + vertex 4.93281 -38.4063 0 + vertex 5.03796 -38.4533 0 + endloop + endfacet + facet normal 0.408161 0.91291 0 + outer loop + vertex 4.93281 -38.4063 0 + vertex 5.03796 -38.4533 -0.1 + vertex 4.93281 -38.4063 -0.1 + endloop + endfacet + facet normal 0.681473 0.731843 -0 + outer loop + vertex 4.93281 -38.4063 -0.1 + vertex 4.85555 -38.3343 0 + vertex 4.93281 -38.4063 0 + endloop + endfacet + facet normal 0.681473 0.731843 0 + outer loop + vertex 4.85555 -38.3343 0 + vertex 4.93281 -38.4063 -0.1 + vertex 4.85555 -38.3343 -0.1 + endloop + endfacet + facet normal 0.875472 0.48327 0 + outer loop + vertex 4.85555 -38.3343 0 + vertex 4.80226 -38.2378 -0.1 + vertex 4.80226 -38.2378 0 + endloop + endfacet + facet normal 0.875472 0.48327 0 + outer loop + vertex 4.80226 -38.2378 -0.1 + vertex 4.85555 -38.3343 0 + vertex 4.85555 -38.3343 -0.1 + endloop + endfacet + facet normal 0.964192 0.265205 0 + outer loop + vertex 4.80226 -38.2378 0 + vertex 4.76904 -38.117 -0.1 + vertex 4.76904 -38.117 0 + endloop + endfacet + facet normal 0.964192 0.265205 0 + outer loop + vertex 4.76904 -38.117 -0.1 + vertex 4.80226 -38.2378 0 + vertex 4.80226 -38.2378 -0.1 + endloop + endfacet + facet normal 0.997564 0.069762 0 + outer loop + vertex 4.76904 -38.117 0 + vertex 4.74716 -37.8041 -0.1 + vertex 4.74716 -37.8041 0 + endloop + endfacet + facet normal 0.997564 0.069762 0 + outer loop + vertex 4.74716 -37.8041 -0.1 + vertex 4.76904 -38.117 0 + vertex 4.76904 -38.117 -0.1 + endloop + endfacet + facet normal 0.997378 0.0723715 0 + outer loop + vertex 4.74716 -37.8041 0 + vertex 4.72035 -37.4346 -0.1 + vertex 4.72035 -37.4346 0 + endloop + endfacet + facet normal 0.997378 0.0723715 0 + outer loop + vertex 4.72035 -37.4346 -0.1 + vertex 4.74716 -37.8041 0 + vertex 4.74716 -37.8041 -0.1 + endloop + endfacet + facet normal 0.968245 0.250005 0 + outer loop + vertex 4.72035 -37.4346 0 + vertex 4.69132 -37.3222 -0.1 + vertex 4.69132 -37.3222 0 + endloop + endfacet + facet normal 0.968245 0.250005 0 + outer loop + vertex 4.69132 -37.3222 -0.1 + vertex 4.72035 -37.4346 0 + vertex 4.72035 -37.4346 -0.1 + endloop + endfacet + facet normal 0.758745 0.651387 0 + outer loop + vertex 4.69132 -37.3222 0 + vertex 4.65588 -37.2809 -0.1 + vertex 4.65588 -37.2809 0 + endloop + endfacet + facet normal 0.758745 0.651387 0 + outer loop + vertex 4.65588 -37.2809 -0.1 + vertex 4.69132 -37.3222 0 + vertex 4.69132 -37.3222 -0.1 + endloop + endfacet + facet normal -0.395389 0.918514 0 + outer loop + vertex 4.65588 -37.2809 -0.1 + vertex 4.26446 -37.4494 0 + vertex 4.65588 -37.2809 0 + endloop + endfacet + facet normal -0.395389 0.918514 0 + outer loop + vertex 4.26446 -37.4494 0 + vertex 4.65588 -37.2809 -0.1 + vertex 4.26446 -37.4494 -0.1 + endloop + endfacet + facet normal -0.446029 0.895018 0 + outer loop + vertex 4.26446 -37.4494 -0.1 + vertex 3.45158 -37.8545 0 + vertex 4.26446 -37.4494 0 + endloop + endfacet + facet normal -0.446029 0.895018 0 + outer loop + vertex 3.45158 -37.8545 0 + vertex 4.26446 -37.4494 -0.1 + vertex 3.45158 -37.8545 -0.1 + endloop + endfacet + facet normal -0.42381 0.905751 0 + outer loop + vertex 3.45158 -37.8545 -0.1 + vertex 3.20396 -37.9704 0 + vertex 3.45158 -37.8545 0 + endloop + endfacet + facet normal -0.42381 0.905751 0 + outer loop + vertex 3.20396 -37.9704 0 + vertex 3.45158 -37.8545 -0.1 + vertex 3.20396 -37.9704 -0.1 + endloop + endfacet + facet normal -0.363414 0.931628 0 + outer loop + vertex 3.20396 -37.9704 -0.1 + vertex 2.93102 -38.0768 0 + vertex 3.20396 -37.9704 0 + endloop + endfacet + facet normal -0.363414 0.931628 0 + outer loop + vertex 2.93102 -38.0768 0 + vertex 3.20396 -37.9704 -0.1 + vertex 2.93102 -38.0768 -0.1 + endloop + endfacet + facet normal -0.289057 0.957312 0 + outer loop + vertex 2.93102 -38.0768 -0.1 + vertex 2.32439 -38.26 0 + vertex 2.93102 -38.0768 0 + endloop + endfacet + facet normal -0.289057 0.957312 0 + outer loop + vertex 2.32439 -38.26 0 + vertex 2.93102 -38.0768 -0.1 + vertex 2.32439 -38.26 -0.1 + endloop + endfacet + facet normal -0.208009 0.978127 0 + outer loop + vertex 2.32439 -38.26 -0.1 + vertex 1.66207 -38.4009 0 + vertex 2.32439 -38.26 0 + endloop + endfacet + facet normal -0.208009 0.978127 0 + outer loop + vertex 1.66207 -38.4009 0 + vertex 2.32439 -38.26 -0.1 + vertex 1.66207 -38.4009 -0.1 + endloop + endfacet + facet normal -0.13739 0.990517 0 + outer loop + vertex 1.66207 -38.4009 -0.1 + vertex 0.974434 -38.4962 0 + vertex 1.66207 -38.4009 0 + endloop + endfacet + facet normal -0.13739 0.990517 0 + outer loop + vertex 0.974434 -38.4962 0 + vertex 1.66207 -38.4009 -0.1 + vertex 0.974434 -38.4962 -0.1 + endloop + endfacet + facet normal -0.0683412 0.997662 0 + outer loop + vertex 0.974434 -38.4962 -0.1 + vertex 0.291868 -38.543 0 + vertex 0.974434 -38.4962 0 + endloop + endfacet + facet normal -0.0683412 0.997662 0 + outer loop + vertex 0.291868 -38.543 0 + vertex 0.974434 -38.4962 -0.1 + vertex 0.291868 -38.543 -0.1 + endloop + endfacet + facet normal 0.00775161 0.99997 -0 + outer loop + vertex 0.291868 -38.543 -0.1 + vertex -0.355246 -38.538 0 + vertex 0.291868 -38.543 0 + endloop + endfacet + facet normal 0.00775161 0.99997 0 + outer loop + vertex -0.355246 -38.538 0 + vertex 0.291868 -38.543 -0.1 + vertex -0.355246 -38.538 -0.1 + endloop + endfacet + facet normal 0.10258 0.994725 -0 + outer loop + vertex -0.355246 -38.538 -0.1 + vertex -0.936529 -38.478 0 + vertex -0.355246 -38.538 0 + endloop + endfacet + facet normal 0.10258 0.994725 0 + outer loop + vertex -0.936529 -38.478 0 + vertex -0.355246 -38.538 -0.1 + vertex -0.936529 -38.478 -0.1 + endloop + endfacet + facet normal 0.197071 0.980389 -0 + outer loop + vertex -0.936529 -38.478 -0.1 + vertex -1.19299 -38.4265 0 + vertex -0.936529 -38.478 0 + endloop + endfacet + facet normal 0.197071 0.980389 0 + outer loop + vertex -1.19299 -38.4265 0 + vertex -0.936529 -38.478 -0.1 + vertex -1.19299 -38.4265 -0.1 + endloop + endfacet + facet normal 0.279186 0.960237 -0 + outer loop + vertex -1.19299 -38.4265 -0.1 + vertex -1.4216 -38.36 0 + vertex -1.19299 -38.4265 0 + endloop + endfacet + facet normal 0.279186 0.960237 0 + outer loop + vertex -1.4216 -38.36 0 + vertex -1.19299 -38.4265 -0.1 + vertex -1.4216 -38.36 -0.1 + endloop + endfacet + facet normal 0.385209 0.92283 -0 + outer loop + vertex -1.4216 -38.36 -0.1 + vertex -1.69347 -38.2465 0 + vertex -1.4216 -38.36 0 + endloop + endfacet + facet normal 0.385209 0.92283 0 + outer loop + vertex -1.69347 -38.2465 0 + vertex -1.4216 -38.36 -0.1 + vertex -1.69347 -38.2465 -0.1 + endloop + endfacet + facet normal 0.490243 0.871586 -0 + outer loop + vertex -1.69347 -38.2465 -0.1 + vertex -1.95525 -38.0993 0 + vertex -1.69347 -38.2465 0 + endloop + endfacet + facet normal 0.490243 0.871586 0 + outer loop + vertex -1.95525 -38.0993 0 + vertex -1.69347 -38.2465 -0.1 + vertex -1.95525 -38.0993 -0.1 + endloop + endfacet + facet normal 0.581299 0.81369 -0 + outer loop + vertex -1.95525 -38.0993 -0.1 + vertex -2.20592 -37.9202 0 + vertex -1.95525 -38.0993 0 + endloop + endfacet + facet normal 0.581299 0.81369 0 + outer loop + vertex -2.20592 -37.9202 0 + vertex -1.95525 -38.0993 -0.1 + vertex -2.20592 -37.9202 -0.1 + endloop + endfacet + facet normal 0.65901 0.752134 -0 + outer loop + vertex -2.20592 -37.9202 -0.1 + vertex -2.44446 -37.7112 0 + vertex -2.20592 -37.9202 0 + endloop + endfacet + facet normal 0.65901 0.752134 0 + outer loop + vertex -2.44446 -37.7112 0 + vertex -2.20592 -37.9202 -0.1 + vertex -2.44446 -37.7112 -0.1 + endloop + endfacet + facet normal 0.724655 0.689112 0 + outer loop + vertex -2.44446 -37.7112 0 + vertex -2.66982 -37.4742 -0.1 + vertex -2.66982 -37.4742 0 + endloop + endfacet + facet normal 0.724655 0.689112 0 + outer loop + vertex -2.66982 -37.4742 -0.1 + vertex -2.44446 -37.7112 0 + vertex -2.44446 -37.7112 -0.1 + endloop + endfacet + facet normal 0.779827 0.625996 0 + outer loop + vertex -2.66982 -37.4742 0 + vertex -2.88099 -37.2112 -0.1 + vertex -2.88099 -37.2112 0 + endloop + endfacet + facet normal 0.779827 0.625996 0 + outer loop + vertex -2.88099 -37.2112 -0.1 + vertex -2.66982 -37.4742 0 + vertex -2.66982 -37.4742 -0.1 + endloop + endfacet + facet normal 0.826071 0.563566 0 + outer loop + vertex -2.88099 -37.2112 0 + vertex -3.07693 -36.924 -0.1 + vertex -3.07693 -36.924 0 + endloop + endfacet + facet normal 0.826071 0.563566 0 + outer loop + vertex -3.07693 -36.924 -0.1 + vertex -2.88099 -37.2112 0 + vertex -2.88099 -37.2112 -0.1 + endloop + endfacet + facet normal 0.864772 0.502165 0 + outer loop + vertex -3.07693 -36.924 0 + vertex -3.25661 -36.6145 -0.1 + vertex -3.25661 -36.6145 0 + endloop + endfacet + facet normal 0.864772 0.502165 0 + outer loop + vertex -3.25661 -36.6145 -0.1 + vertex -3.07693 -36.924 0 + vertex -3.07693 -36.924 -0.1 + endloop + endfacet + facet normal 0.897098 0.441832 0 + outer loop + vertex -3.25661 -36.6145 0 + vertex -3.41901 -36.2848 -0.1 + vertex -3.41901 -36.2848 0 + endloop + endfacet + facet normal 0.897098 0.441832 0 + outer loop + vertex -3.41901 -36.2848 -0.1 + vertex -3.25661 -36.6145 0 + vertex -3.25661 -36.6145 -0.1 + endloop + endfacet + facet normal 0.923982 0.382435 0 + outer loop + vertex -3.41901 -36.2848 0 + vertex -3.56309 -35.9367 -0.1 + vertex -3.56309 -35.9367 0 + endloop + endfacet + facet normal 0.923982 0.382435 0 + outer loop + vertex -3.56309 -35.9367 -0.1 + vertex -3.41901 -36.2848 0 + vertex -3.41901 -36.2848 -0.1 + endloop + endfacet + facet normal 0.946149 0.323732 0 + outer loop + vertex -3.56309 -35.9367 0 + vertex -3.68783 -35.5721 -0.1 + vertex -3.68783 -35.5721 0 + endloop + endfacet + facet normal 0.946149 0.323732 0 + outer loop + vertex -3.68783 -35.5721 -0.1 + vertex -3.56309 -35.9367 0 + vertex -3.56309 -35.9367 -0.1 + endloop + endfacet + facet normal 0.964131 0.265426 0 + outer loop + vertex -3.68783 -35.5721 0 + vertex -3.79219 -35.193 -0.1 + vertex -3.79219 -35.193 0 + endloop + endfacet + facet normal 0.964131 0.265426 0 + outer loop + vertex -3.79219 -35.193 -0.1 + vertex -3.68783 -35.5721 0 + vertex -3.68783 -35.5721 -0.1 + endloop + endfacet + facet normal 0.978298 0.207204 0 + outer loop + vertex -3.79219 -35.193 0 + vertex -3.87516 -34.8013 -0.1 + vertex -3.87516 -34.8013 0 + endloop + endfacet + facet normal 0.978298 0.207204 0 + outer loop + vertex -3.87516 -34.8013 -0.1 + vertex -3.79219 -35.193 0 + vertex -3.79219 -35.193 -0.1 + endloop + endfacet + facet normal 0.988873 0.148763 0 + outer loop + vertex -3.87516 -34.8013 0 + vertex -3.93569 -34.3989 -0.1 + vertex -3.93569 -34.3989 0 + endloop + endfacet + facet normal 0.988873 0.148763 0 + outer loop + vertex -3.93569 -34.3989 -0.1 + vertex -3.87516 -34.8013 0 + vertex -3.87516 -34.8013 -0.1 + endloop + endfacet + facet normal 0.995959 0.0898073 0 + outer loop + vertex -3.93569 -34.3989 0 + vertex -3.97277 -33.9877 -0.1 + vertex -3.97277 -33.9877 0 + endloop + endfacet + facet normal 0.995959 0.0898073 0 + outer loop + vertex -3.97277 -33.9877 -0.1 + vertex -3.93569 -34.3989 0 + vertex -3.93569 -34.3989 -0.1 + endloop + endfacet + facet normal 0.999547 0.0300979 0 + outer loop + vertex -3.97277 -33.9877 0 + vertex -3.98536 -33.5697 -0.1 + vertex -3.98536 -33.5697 0 + endloop + endfacet + facet normal 0.999547 0.0300979 0 + outer loop + vertex -3.98536 -33.5697 -0.1 + vertex -3.97277 -33.9877 0 + vertex -3.97277 -33.9877 -0.1 + endloop + endfacet + facet normal 0.998925 -0.0463463 0 + outer loop + vertex -3.98536 -33.5697 0 + vertex -3.97004 -33.2395 -0.1 + vertex -3.97004 -33.2395 0 + endloop + endfacet + facet normal 0.998925 -0.0463463 0 + outer loop + vertex -3.97004 -33.2395 -0.1 + vertex -3.98536 -33.5697 0 + vertex -3.98536 -33.5697 -0.1 + endloop + endfacet + facet normal 0.99274 -0.120283 0 + outer loop + vertex -3.97004 -33.2395 0 + vertex -3.92523 -32.8697 -0.1 + vertex -3.92523 -32.8697 0 + endloop + endfacet + facet normal 0.99274 -0.120283 0 + outer loop + vertex -3.92523 -32.8697 -0.1 + vertex -3.97004 -33.2395 0 + vertex -3.97004 -33.2395 -0.1 + endloop + endfacet + facet normal 0.984312 -0.176435 0 + outer loop + vertex -3.92523 -32.8697 0 + vertex -3.8527 -32.4651 -0.1 + vertex -3.8527 -32.4651 0 + endloop + endfacet + facet normal 0.984312 -0.176435 0 + outer loop + vertex -3.8527 -32.4651 -0.1 + vertex -3.92523 -32.8697 0 + vertex -3.92523 -32.8697 -0.1 + endloop + endfacet + facet normal 0.975291 -0.220925 0 + outer loop + vertex -3.8527 -32.4651 0 + vertex -3.75417 -32.0301 -0.1 + vertex -3.75417 -32.0301 0 + endloop + endfacet + facet normal 0.975291 -0.220925 0 + outer loop + vertex -3.75417 -32.0301 -0.1 + vertex -3.8527 -32.4651 0 + vertex -3.8527 -32.4651 -0.1 + endloop + endfacet + facet normal 0.96184 -0.273613 0 + outer loop + vertex -3.75417 -32.0301 0 + vertex -3.4861 -31.0878 -0.1 + vertex -3.4861 -31.0878 0 + endloop + endfacet + facet normal 0.96184 -0.273613 0 + outer loop + vertex -3.4861 -31.0878 -0.1 + vertex -3.75417 -32.0301 0 + vertex -3.75417 -32.0301 -0.1 + endloop + endfacet + facet normal 0.944354 -0.328931 0 + outer loop + vertex -3.4861 -31.0878 0 + vertex -3.135 -30.0798 -0.1 + vertex -3.135 -30.0798 0 + endloop + endfacet + facet normal 0.944354 -0.328931 0 + outer loop + vertex -3.135 -30.0798 -0.1 + vertex -3.4861 -31.0878 0 + vertex -3.4861 -31.0878 -0.1 + endloop + endfacet + facet normal 0.926769 -0.375632 0 + outer loop + vertex -3.135 -30.0798 0 + vertex -2.71481 -29.043 -0.1 + vertex -2.71481 -29.043 0 + endloop + endfacet + facet normal 0.926769 -0.375632 0 + outer loop + vertex -2.71481 -29.043 -0.1 + vertex -3.135 -30.0798 0 + vertex -3.135 -30.0798 -0.1 + endloop + endfacet + facet normal 0.907733 -0.419549 0 + outer loop + vertex -2.71481 -29.043 0 + vertex -2.23947 -28.0146 -0.1 + vertex -2.23947 -28.0146 0 + endloop + endfacet + facet normal 0.907733 -0.419549 0 + outer loop + vertex -2.23947 -28.0146 -0.1 + vertex -2.71481 -29.043 0 + vertex -2.71481 -29.043 -0.1 + endloop + endfacet + facet normal 0.885263 -0.46509 0 + outer loop + vertex -2.23947 -28.0146 0 + vertex -1.72295 -27.0315 -0.1 + vertex -1.72295 -27.0315 0 + endloop + endfacet + facet normal 0.885263 -0.46509 0 + outer loop + vertex -1.72295 -27.0315 -0.1 + vertex -2.23947 -28.0146 0 + vertex -2.23947 -28.0146 -0.1 + endloop + endfacet + facet normal 0.8644 -0.502806 0 + outer loop + vertex -1.72295 -27.0315 0 + vertex -1.45361 -26.5684 -0.1 + vertex -1.45361 -26.5684 0 + endloop + endfacet + facet normal 0.8644 -0.502806 0 + outer loop + vertex -1.45361 -26.5684 -0.1 + vertex -1.72295 -27.0315 0 + vertex -1.72295 -27.0315 -0.1 + endloop + endfacet + facet normal 0.847345 -0.531043 0 + outer loop + vertex -1.45361 -26.5684 0 + vertex -1.17919 -26.1306 -0.1 + vertex -1.17919 -26.1306 0 + endloop + endfacet + facet normal 0.847345 -0.531043 0 + outer loop + vertex -1.17919 -26.1306 -0.1 + vertex -1.45361 -26.5684 0 + vertex -1.45361 -26.5684 -0.1 + endloop + endfacet + facet normal 0.82644 -0.563025 0 + outer loop + vertex -1.17919 -26.1306 0 + vertex -0.875463 -25.6847 -0.1 + vertex -0.875463 -25.6847 0 + endloop + endfacet + facet normal 0.82644 -0.563025 0 + outer loop + vertex -0.875463 -25.6847 -0.1 + vertex -1.17919 -26.1306 0 + vertex -1.17919 -26.1306 -0.1 + endloop + endfacet + facet normal 0.8045 -0.593952 0 + outer loop + vertex -0.875463 -25.6847 0 + vertex -0.546472 -25.2391 -0.1 + vertex -0.546472 -25.2391 0 + endloop + endfacet + facet normal 0.8045 -0.593952 0 + outer loop + vertex -0.546472 -25.2391 -0.1 + vertex -0.875463 -25.6847 0 + vertex -0.875463 -25.6847 -0.1 + endloop + endfacet + facet normal 0.783077 -0.621924 0 + outer loop + vertex -0.546472 -25.2391 0 + vertex -0.194025 -24.7953 -0.1 + vertex -0.194025 -24.7953 0 + endloop + endfacet + facet normal 0.783077 -0.621924 0 + outer loop + vertex -0.194025 -24.7953 -0.1 + vertex -0.546472 -25.2391 0 + vertex -0.546472 -25.2391 -0.1 + endloop + endfacet + facet normal 0.762077 -0.647486 0 + outer loop + vertex -0.194025 -24.7953 0 + vertex 0.18007 -24.355 -0.1 + vertex 0.18007 -24.355 0 + endloop + endfacet + facet normal 0.762077 -0.647486 0 + outer loop + vertex 0.18007 -24.355 -0.1 + vertex -0.194025 -24.7953 0 + vertex -0.194025 -24.7953 -0.1 + endloop + endfacet + facet normal 0.74138 -0.671085 0 + outer loop + vertex 0.18007 -24.355 0 + vertex 0.574011 -23.9198 -0.1 + vertex 0.574011 -23.9198 0 + endloop + endfacet + facet normal 0.74138 -0.671085 0 + outer loop + vertex 0.574011 -23.9198 -0.1 + vertex 0.18007 -24.355 0 + vertex 0.18007 -24.355 -0.1 + endloop + endfacet + facet normal 0.720855 -0.693086 0 + outer loop + vertex 0.574011 -23.9198 0 + vertex 0.985991 -23.4913 -0.1 + vertex 0.985991 -23.4913 0 + endloop + endfacet + facet normal 0.720855 -0.693086 0 + outer loop + vertex 0.985991 -23.4913 -0.1 + vertex 0.574011 -23.9198 0 + vertex 0.574011 -23.9198 -0.1 + endloop + endfacet + facet normal 0.700344 -0.713805 0 + outer loop + vertex 0.985991 -23.4913 -0.1 + vertex 1.4142 -23.0712 0 + vertex 0.985991 -23.4913 0 + endloop + endfacet + facet normal 0.700344 -0.713805 0 + outer loop + vertex 1.4142 -23.0712 0 + vertex 0.985991 -23.4913 -0.1 + vertex 1.4142 -23.0712 -0.1 + endloop + endfacet + facet normal 0.679685 -0.733504 0 + outer loop + vertex 1.4142 -23.0712 -0.1 + vertex 1.85684 -22.661 0 + vertex 1.4142 -23.0712 0 + endloop + endfacet + facet normal 0.679685 -0.733504 0 + outer loop + vertex 1.85684 -22.661 0 + vertex 1.4142 -23.0712 -0.1 + vertex 1.85684 -22.661 -0.1 + endloop + endfacet + facet normal 0.658698 -0.752407 0 + outer loop + vertex 1.85684 -22.661 -0.1 + vertex 2.31211 -22.2625 0 + vertex 1.85684 -22.661 0 + endloop + endfacet + facet normal 0.658698 -0.752407 0 + outer loop + vertex 2.31211 -22.2625 0 + vertex 1.85684 -22.661 -0.1 + vertex 2.31211 -22.2625 -0.1 + endloop + endfacet + facet normal 0.637189 -0.770708 0 + outer loop + vertex 2.31211 -22.2625 -0.1 + vertex 2.77819 -21.8771 0 + vertex 2.31211 -22.2625 0 + endloop + endfacet + facet normal 0.637189 -0.770708 0 + outer loop + vertex 2.77819 -21.8771 0 + vertex 2.31211 -22.2625 -0.1 + vertex 2.77819 -21.8771 -0.1 + endloop + endfacet + facet normal 0.614941 -0.788573 0 + outer loop + vertex 2.77819 -21.8771 -0.1 + vertex 3.25328 -21.5067 0 + vertex 2.77819 -21.8771 0 + endloop + endfacet + facet normal 0.614941 -0.788573 0 + outer loop + vertex 3.25328 -21.5067 0 + vertex 2.77819 -21.8771 -0.1 + vertex 3.25328 -21.5067 -0.1 + endloop + endfacet + facet normal 0.591711 -0.80615 0 + outer loop + vertex 3.25328 -21.5067 -0.1 + vertex 3.73558 -21.1527 0 + vertex 3.25328 -21.5067 0 + endloop + endfacet + facet normal 0.591711 -0.80615 0 + outer loop + vertex 3.73558 -21.1527 0 + vertex 3.25328 -21.5067 -0.1 + vertex 3.73558 -21.1527 -0.1 + endloop + endfacet + facet normal 0.567228 -0.823561 0 + outer loop + vertex 3.73558 -21.1527 -0.1 + vertex 4.22328 -20.8168 0 + vertex 3.73558 -21.1527 0 + endloop + endfacet + facet normal 0.567228 -0.823561 0 + outer loop + vertex 4.22328 -20.8168 0 + vertex 3.73558 -21.1527 -0.1 + vertex 4.22328 -20.8168 -0.1 + endloop + endfacet + facet normal 0.541167 -0.840915 0 + outer loop + vertex 4.22328 -20.8168 -0.1 + vertex 4.71458 -20.5006 0 + vertex 4.22328 -20.8168 0 + endloop + endfacet + facet normal 0.541167 -0.840915 0 + outer loop + vertex 4.71458 -20.5006 0 + vertex 4.22328 -20.8168 -0.1 + vertex 4.71458 -20.5006 -0.1 + endloop + endfacet + facet normal 0.513171 -0.858287 0 + outer loop + vertex 4.71458 -20.5006 -0.1 + vertex 5.20766 -20.2058 0 + vertex 4.71458 -20.5006 0 + endloop + endfacet + facet normal 0.513171 -0.858287 0 + outer loop + vertex 5.20766 -20.2058 0 + vertex 4.71458 -20.5006 -0.1 + vertex 5.20766 -20.2058 -0.1 + endloop + endfacet + facet normal 0.482795 -0.875733 0 + outer loop + vertex 5.20766 -20.2058 -0.1 + vertex 5.70074 -19.9339 0 + vertex 5.20766 -20.2058 0 + endloop + endfacet + facet normal 0.482795 -0.875733 0 + outer loop + vertex 5.70074 -19.9339 0 + vertex 5.20766 -20.2058 -0.1 + vertex 5.70074 -19.9339 -0.1 + endloop + endfacet + facet normal 0.452672 -0.891677 0 + outer loop + vertex 5.70074 -19.9339 -0.1 + vertex 6.07737 -19.7427 0 + vertex 5.70074 -19.9339 0 + endloop + endfacet + facet normal 0.452672 -0.891677 0 + outer loop + vertex 6.07737 -19.7427 0 + vertex 5.70074 -19.9339 -0.1 + vertex 6.07737 -19.7427 -0.1 + endloop + endfacet + facet normal 0.411982 -0.911192 0 + outer loop + vertex 6.07737 -19.7427 -0.1 + vertex 6.41984 -19.5879 0 + vertex 6.07737 -19.7427 0 + endloop + endfacet + facet normal 0.411982 -0.911192 0 + outer loop + vertex 6.41984 -19.5879 0 + vertex 6.07737 -19.7427 -0.1 + vertex 6.41984 -19.5879 -0.1 + endloop + endfacet + facet normal 0.352601 -0.935774 0 + outer loop + vertex 6.41984 -19.5879 -0.1 + vertex 6.74616 -19.4649 0 + vertex 6.41984 -19.5879 0 + endloop + endfacet + facet normal 0.352601 -0.935774 0 + outer loop + vertex 6.74616 -19.4649 0 + vertex 6.41984 -19.5879 -0.1 + vertex 6.74616 -19.4649 -0.1 + endloop + endfacet + facet normal 0.279545 -0.960133 0 + outer loop + vertex 6.74616 -19.4649 -0.1 + vertex 7.07441 -19.3694 0 + vertex 6.74616 -19.4649 0 + endloop + endfacet + facet normal 0.279545 -0.960133 0 + outer loop + vertex 7.07441 -19.3694 0 + vertex 6.74616 -19.4649 -0.1 + vertex 7.07441 -19.3694 -0.1 + endloop + endfacet + facet normal 0.204293 -0.97891 0 + outer loop + vertex 7.07441 -19.3694 -0.1 + vertex 7.42262 -19.2967 0 + vertex 7.07441 -19.3694 0 + endloop + endfacet + facet normal 0.204293 -0.97891 0 + outer loop + vertex 7.42262 -19.2967 0 + vertex 7.07441 -19.3694 -0.1 + vertex 7.42262 -19.2967 -0.1 + endloop + endfacet + facet normal 0.139108 -0.990277 0 + outer loop + vertex 7.42262 -19.2967 -0.1 + vertex 7.80885 -19.2424 0 + vertex 7.42262 -19.2967 0 + endloop + endfacet + facet normal 0.139108 -0.990277 0 + outer loop + vertex 7.80885 -19.2424 0 + vertex 7.42262 -19.2967 -0.1 + vertex 7.80885 -19.2424 -0.1 + endloop + endfacet + facet normal 0.0740931 -0.997251 0 + outer loop + vertex 7.80885 -19.2424 -0.1 + vertex 8.76754 -19.1712 0 + vertex 7.80885 -19.2424 0 + endloop + endfacet + facet normal 0.0740931 -0.997251 0 + outer loop + vertex 8.76754 -19.1712 0 + vertex 7.80885 -19.2424 -0.1 + vertex 8.76754 -19.1712 -0.1 + endloop + endfacet + facet normal 0.0317962 -0.999494 0 + outer loop + vertex 8.76754 -19.1712 -0.1 + vertex 9.72114 -19.1409 0 + vertex 8.76754 -19.1712 0 + endloop + endfacet + facet normal 0.0317962 -0.999494 0 + outer loop + vertex 9.72114 -19.1409 0 + vertex 8.76754 -19.1712 -0.1 + vertex 9.72114 -19.1409 -0.1 + endloop + endfacet + facet normal -0.0248159 -0.999692 0 + outer loop + vertex 9.72114 -19.1409 -0.1 + vertex 10.0711 -19.1496 0 + vertex 9.72114 -19.1409 0 + endloop + endfacet + facet normal -0.0248159 -0.999692 -0 + outer loop + vertex 10.0711 -19.1496 0 + vertex 9.72114 -19.1409 -0.1 + vertex 10.0711 -19.1496 -0.1 + endloop + endfacet + facet normal -0.0963554 -0.995347 0 + outer loop + vertex 10.0711 -19.1496 -0.1 + vertex 10.3591 -19.1774 0 + vertex 10.0711 -19.1496 0 + endloop + endfacet + facet normal -0.0963554 -0.995347 -0 + outer loop + vertex 10.3591 -19.1774 0 + vertex 10.0711 -19.1496 -0.1 + vertex 10.3591 -19.1774 -0.1 + endloop + endfacet + facet normal -0.199823 -0.979832 0 + outer loop + vertex 10.3591 -19.1774 -0.1 + vertex 10.602 -19.227 0 + vertex 10.3591 -19.1774 0 + endloop + endfacet + facet normal -0.199823 -0.979832 -0 + outer loop + vertex 10.602 -19.227 0 + vertex 10.3591 -19.1774 -0.1 + vertex 10.602 -19.227 -0.1 + endloop + endfacet + facet normal -0.324456 -0.945901 0 + outer loop + vertex 10.602 -19.227 -0.1 + vertex 10.8168 -19.3006 0 + vertex 10.602 -19.227 0 + endloop + endfacet + facet normal -0.324456 -0.945901 -0 + outer loop + vertex 10.8168 -19.3006 0 + vertex 10.602 -19.227 -0.1 + vertex 10.8168 -19.3006 -0.1 + endloop + endfacet + facet normal -0.441937 -0.897046 0 + outer loop + vertex 10.8168 -19.3006 -0.1 + vertex 11.0203 -19.4009 0 + vertex 10.8168 -19.3006 0 + endloop + endfacet + facet normal -0.441937 -0.897046 -0 + outer loop + vertex 11.0203 -19.4009 0 + vertex 10.8168 -19.3006 -0.1 + vertex 11.0203 -19.4009 -0.1 + endloop + endfacet + facet normal -0.525875 -0.850562 0 + outer loop + vertex 11.0203 -19.4009 -0.1 + vertex 11.2294 -19.5302 0 + vertex 11.0203 -19.4009 0 + endloop + endfacet + facet normal -0.525875 -0.850562 -0 + outer loop + vertex 11.2294 -19.5302 0 + vertex 11.0203 -19.4009 -0.1 + vertex 11.2294 -19.5302 -0.1 + endloop + endfacet + facet normal -0.518008 -0.855376 0 + outer loop + vertex 11.2294 -19.5302 -0.1 + vertex 11.5538 -19.7266 0 + vertex 11.2294 -19.5302 0 + endloop + endfacet + facet normal -0.518008 -0.855376 -0 + outer loop + vertex 11.5538 -19.7266 0 + vertex 11.2294 -19.5302 -0.1 + vertex 11.5538 -19.7266 -0.1 + endloop + endfacet + facet normal -0.370976 -0.928642 0 + outer loop + vertex 11.5538 -19.7266 -0.1 + vertex 11.7902 -19.8211 0 + vertex 11.5538 -19.7266 0 + endloop + endfacet + facet normal -0.370976 -0.928642 -0 + outer loop + vertex 11.7902 -19.8211 0 + vertex 11.5538 -19.7266 -0.1 + vertex 11.7902 -19.8211 -0.1 + endloop + endfacet + facet normal -0.111982 -0.99371 0 + outer loop + vertex 11.7902 -19.8211 -0.1 + vertex 11.881 -19.8313 0 + vertex 11.7902 -19.8211 0 + endloop + endfacet + facet normal -0.111982 -0.99371 -0 + outer loop + vertex 11.881 -19.8313 0 + vertex 11.7902 -19.8211 -0.1 + vertex 11.881 -19.8313 -0.1 + endloop + endfacet + facet normal 0.179863 -0.983692 0 + outer loop + vertex 11.881 -19.8313 -0.1 + vertex 11.9563 -19.8175 0 + vertex 11.881 -19.8313 0 + endloop + endfacet + facet normal 0.179863 -0.983692 0 + outer loop + vertex 11.9563 -19.8175 0 + vertex 11.881 -19.8313 -0.1 + vertex 11.9563 -19.8175 -0.1 + endloop + endfacet + facet normal 0.514293 -0.857615 0 + outer loop + vertex 11.9563 -19.8175 -0.1 + vertex 12.0185 -19.7802 0 + vertex 11.9563 -19.8175 0 + endloop + endfacet + facet normal 0.514293 -0.857615 0 + outer loop + vertex 12.0185 -19.7802 0 + vertex 11.9563 -19.8175 -0.1 + vertex 12.0185 -19.7802 -0.1 + endloop + endfacet + facet normal 0.762299 -0.647226 0 + outer loop + vertex 12.0185 -19.7802 0 + vertex 12.0697 -19.7199 -0.1 + vertex 12.0697 -19.7199 0 + endloop + endfacet + facet normal 0.762299 -0.647226 0 + outer loop + vertex 12.0697 -19.7199 -0.1 + vertex 12.0185 -19.7802 0 + vertex 12.0185 -19.7802 -0.1 + endloop + endfacet + facet normal 0.887752 -0.460323 0 + outer loop + vertex 12.0697 -19.7199 0 + vertex 12.2803 -19.3138 -0.1 + vertex 12.2803 -19.3138 0 + endloop + endfacet + facet normal 0.887752 -0.460323 0 + outer loop + vertex 12.2803 -19.3138 -0.1 + vertex 12.0697 -19.7199 0 + vertex 12.0697 -19.7199 -0.1 + endloop + endfacet + facet normal 0.914794 -0.403921 0 + outer loop + vertex 12.2803 -19.3138 0 + vertex 12.5806 -18.6336 -0.1 + vertex 12.5806 -18.6336 0 + endloop + endfacet + facet normal 0.914794 -0.403921 0 + outer loop + vertex 12.5806 -18.6336 -0.1 + vertex 12.2803 -19.3138 0 + vertex 12.2803 -19.3138 -0.1 + endloop + endfacet + facet normal 0.927919 -0.372782 0 + outer loop + vertex 12.5806 -18.6336 0 + vertex 13.2984 -16.8469 -0.1 + vertex 13.2984 -16.8469 0 + endloop + endfacet + facet normal 0.927919 -0.372782 0 + outer loop + vertex 13.2984 -16.8469 -0.1 + vertex 12.5806 -18.6336 0 + vertex 12.5806 -18.6336 -0.1 + endloop + endfacet + facet normal 0.936103 -0.351727 0 + outer loop + vertex 13.2984 -16.8469 0 + vertex 13.6397 -15.9386 -0.1 + vertex 13.6397 -15.9386 0 + endloop + endfacet + facet normal 0.936103 -0.351727 0 + outer loop + vertex 13.6397 -15.9386 -0.1 + vertex 13.2984 -16.8469 0 + vertex 13.2984 -16.8469 -0.1 + endloop + endfacet + facet normal 0.9425 -0.334207 0 + outer loop + vertex 13.6397 -15.9386 0 + vertex 13.9185 -15.1524 -0.1 + vertex 13.9185 -15.1524 0 + endloop + endfacet + facet normal 0.9425 -0.334207 0 + outer loop + vertex 13.9185 -15.1524 -0.1 + vertex 13.6397 -15.9386 0 + vertex 13.6397 -15.9386 -0.1 + endloop + endfacet + facet normal 0.953687 -0.300802 0 + outer loop + vertex 13.9185 -15.1524 0 + vertex 14.0967 -14.5873 -0.1 + vertex 14.0967 -14.5873 0 + endloop + endfacet + facet normal 0.953687 -0.300802 0 + outer loop + vertex 14.0967 -14.5873 -0.1 + vertex 13.9185 -15.1524 0 + vertex 13.9185 -15.1524 -0.1 + endloop + endfacet + facet normal 0.97364 -0.22809 0 + outer loop + vertex 14.0967 -14.5873 0 + vertex 14.1362 -14.4186 -0.1 + vertex 14.1362 -14.4186 0 + endloop + endfacet + facet normal 0.97364 -0.22809 0 + outer loop + vertex 14.1362 -14.4186 -0.1 + vertex 14.0967 -14.5873 0 + vertex 14.0967 -14.5873 -0.1 + endloop + endfacet + facet normal 0.999999 -0.00127602 0 + outer loop + vertex 14.1362 -14.4186 0 + vertex 14.1363 -14.3424 -0.1 + vertex 14.1363 -14.3424 0 + endloop + endfacet + facet normal 0.999999 -0.00127602 0 + outer loop + vertex 14.1363 -14.3424 -0.1 + vertex 14.1362 -14.4186 0 + vertex 14.1362 -14.4186 -0.1 + endloop + endfacet + facet normal 0.566913 0.823778 -0 + outer loop + vertex 14.1363 -14.3424 -0.1 + vertex 14.0881 -14.3092 0 + vertex 14.1363 -14.3424 0 + endloop + endfacet + facet normal 0.566913 0.823778 0 + outer loop + vertex 14.0881 -14.3092 0 + vertex 14.1363 -14.3424 -0.1 + vertex 14.0881 -14.3092 -0.1 + endloop + endfacet + facet normal 0.351025 0.936366 -0 + outer loop + vertex 14.0881 -14.3092 -0.1 + vertex 14.0003 -14.2763 0 + vertex 14.0881 -14.3092 0 + endloop + endfacet + facet normal 0.351025 0.936366 0 + outer loop + vertex 14.0003 -14.2763 0 + vertex 14.0881 -14.3092 -0.1 + vertex 14.0003 -14.2763 -0.1 + endloop + endfacet + facet normal 0.218251 0.975893 -0 + outer loop + vertex 14.0003 -14.2763 -0.1 + vertex 13.7222 -14.2141 0 + vertex 14.0003 -14.2763 0 + endloop + endfacet + facet normal 0.218251 0.975893 0 + outer loop + vertex 13.7222 -14.2141 0 + vertex 14.0003 -14.2763 -0.1 + vertex 13.7222 -14.2141 -0.1 + endloop + endfacet + facet normal 0.134641 0.990894 -0 + outer loop + vertex 13.7222 -14.2141 -0.1 + vertex 13.3346 -14.1615 0 + vertex 13.7222 -14.2141 0 + endloop + endfacet + facet normal 0.134641 0.990894 0 + outer loop + vertex 13.3346 -14.1615 0 + vertex 13.7222 -14.2141 -0.1 + vertex 13.3346 -14.1615 -0.1 + endloop + endfacet + facet normal 0.0805571 0.99675 -0 + outer loop + vertex 13.3346 -14.1615 -0.1 + vertex 12.8698 -14.1239 0 + vertex 13.3346 -14.1615 0 + endloop + endfacet + facet normal 0.0805571 0.99675 0 + outer loop + vertex 12.8698 -14.1239 0 + vertex 13.3346 -14.1615 -0.1 + vertex 12.8698 -14.1239 -0.1 + endloop + endfacet + facet normal 0.256285 0.966601 -0 + outer loop + vertex 12.8698 -14.1239 -0.1 + vertex 12.7363 -14.0885 0 + vertex 12.8698 -14.1239 0 + endloop + endfacet + facet normal 0.256285 0.966601 0 + outer loop + vertex 12.7363 -14.0885 0 + vertex 12.8698 -14.1239 -0.1 + vertex 12.7363 -14.0885 -0.1 + endloop + endfacet + facet normal 0.544571 0.838715 -0 + outer loop + vertex 12.7363 -14.0885 -0.1 + vertex 12.6087 -14.0056 0 + vertex 12.7363 -14.0885 0 + endloop + endfacet + facet normal 0.544571 0.838715 0 + outer loop + vertex 12.6087 -14.0056 0 + vertex 12.7363 -14.0885 -0.1 + vertex 12.6087 -14.0056 -0.1 + endloop + endfacet + facet normal 0.739657 0.672985 0 + outer loop + vertex 12.6087 -14.0056 0 + vertex 12.5013 -13.8876 -0.1 + vertex 12.5013 -13.8876 0 + endloop + endfacet + facet normal 0.739657 0.672985 0 + outer loop + vertex 12.5013 -13.8876 -0.1 + vertex 12.6087 -14.0056 0 + vertex 12.6087 -14.0056 -0.1 + endloop + endfacet + facet normal 0.888712 0.458466 0 + outer loop + vertex 12.5013 -13.8876 0 + vertex 12.4287 -13.7469 -0.1 + vertex 12.4287 -13.7469 0 + endloop + endfacet + facet normal 0.888712 0.458466 0 + outer loop + vertex 12.4287 -13.7469 -0.1 + vertex 12.5013 -13.8876 0 + vertex 12.5013 -13.8876 -0.1 + endloop + endfacet + facet normal 0.969282 0.245953 0 + outer loop + vertex 12.4287 -13.7469 0 + vertex 12.3997 -13.6324 -0.1 + vertex 12.3997 -13.6324 0 + endloop + endfacet + facet normal 0.969282 0.245953 0 + outer loop + vertex 12.3997 -13.6324 -0.1 + vertex 12.4287 -13.7469 0 + vertex 12.4287 -13.7469 -0.1 + endloop + endfacet + facet normal 0.995788 0.0916817 0 + outer loop + vertex 12.3997 -13.6324 0 + vertex 12.3889 -13.5153 -0.1 + vertex 12.3889 -13.5153 0 + endloop + endfacet + facet normal 0.995788 0.0916817 0 + outer loop + vertex 12.3889 -13.5153 -0.1 + vertex 12.3997 -13.6324 0 + vertex 12.3997 -13.6324 -0.1 + endloop + endfacet + facet normal 0.99207 -0.12569 0 + outer loop + vertex 12.3889 -13.5153 0 + vertex 12.419 -13.2773 -0.1 + vertex 12.419 -13.2773 0 + endloop + endfacet + facet normal 0.99207 -0.12569 0 + outer loop + vertex 12.419 -13.2773 -0.1 + vertex 12.3889 -13.5153 0 + vertex 12.3889 -13.5153 -0.1 + endloop + endfacet + facet normal 0.929521 -0.368768 0 + outer loop + vertex 12.419 -13.2773 0 + vertex 12.513 -13.0405 -0.1 + vertex 12.513 -13.0405 0 + endloop + endfacet + facet normal 0.929521 -0.368768 0 + outer loop + vertex 12.513 -13.0405 -0.1 + vertex 12.419 -13.2773 0 + vertex 12.419 -13.2773 -0.1 + endloop + endfacet + facet normal 0.832694 -0.553733 0 + outer loop + vertex 12.513 -13.0405 0 + vertex 12.6645 -12.8127 -0.1 + vertex 12.6645 -12.8127 0 + endloop + endfacet + facet normal 0.832694 -0.553733 0 + outer loop + vertex 12.6645 -12.8127 -0.1 + vertex 12.513 -13.0405 0 + vertex 12.513 -13.0405 -0.1 + endloop + endfacet + facet normal 0.721168 -0.69276 0 + outer loop + vertex 12.6645 -12.8127 0 + vertex 12.8673 -12.6015 -0.1 + vertex 12.8673 -12.6015 0 + endloop + endfacet + facet normal 0.721168 -0.69276 0 + outer loop + vertex 12.8673 -12.6015 -0.1 + vertex 12.6645 -12.8127 0 + vertex 12.6645 -12.8127 -0.1 + endloop + endfacet + facet normal 0.601691 -0.798729 0 + outer loop + vertex 12.8673 -12.6015 -0.1 + vertex 13.1153 -12.4148 0 + vertex 12.8673 -12.6015 0 + endloop + endfacet + facet normal 0.601691 -0.798729 0 + outer loop + vertex 13.1153 -12.4148 0 + vertex 12.8673 -12.6015 -0.1 + vertex 13.1153 -12.4148 -0.1 + endloop + endfacet + facet normal 0.474719 -0.880138 0 + outer loop + vertex 13.1153 -12.4148 -0.1 + vertex 13.4022 -12.26 0 + vertex 13.1153 -12.4148 0 + endloop + endfacet + facet normal 0.474719 -0.880138 0 + outer loop + vertex 13.4022 -12.26 0 + vertex 13.1153 -12.4148 -0.1 + vertex 13.4022 -12.26 -0.1 + endloop + endfacet + facet normal 0.33852 -0.940959 0 + outer loop + vertex 13.4022 -12.26 -0.1 + vertex 13.7217 -12.1451 0 + vertex 13.4022 -12.26 0 + endloop + endfacet + facet normal 0.33852 -0.940959 0 + outer loop + vertex 13.7217 -12.1451 0 + vertex 13.4022 -12.26 -0.1 + vertex 13.7217 -12.1451 -0.1 + endloop + endfacet + facet normal 0.283558 -0.958955 0 + outer loop + vertex 13.7217 -12.1451 -0.1 + vertex 16.811 -11.2316 0 + vertex 13.7217 -12.1451 0 + endloop + endfacet + facet normal 0.283558 -0.958955 0 + outer loop + vertex 16.811 -11.2316 0 + vertex 13.7217 -12.1451 -0.1 + vertex 16.811 -11.2316 -0.1 + endloop + endfacet + facet normal 0.280008 -0.959998 0 + outer loop + vertex 16.811 -11.2316 -0.1 + vertex 17.5824 -11.0066 0 + vertex 16.811 -11.2316 0 + endloop + endfacet + facet normal 0.280008 -0.959998 0 + outer loop + vertex 17.5824 -11.0066 0 + vertex 16.811 -11.2316 -0.1 + vertex 17.5824 -11.0066 -0.1 + endloop + endfacet + facet normal 0.251173 -0.967942 0 + outer loop + vertex 17.5824 -11.0066 -0.1 + vertex 18.2126 -10.843 0 + vertex 17.5824 -11.0066 0 + endloop + endfacet + facet normal 0.251173 -0.967942 0 + outer loop + vertex 18.2126 -10.843 0 + vertex 17.5824 -11.0066 -0.1 + vertex 18.2126 -10.843 -0.1 + endloop + endfacet + facet normal 0.200442 -0.979706 0 + outer loop + vertex 18.2126 -10.843 -0.1 + vertex 18.7132 -10.7406 0 + vertex 18.2126 -10.843 0 + endloop + endfacet + facet normal 0.200442 -0.979706 0 + outer loop + vertex 18.7132 -10.7406 0 + vertex 18.2126 -10.843 -0.1 + vertex 18.7132 -10.7406 -0.1 + endloop + endfacet + facet normal 0.10841 -0.994106 0 + outer loop + vertex 18.7132 -10.7406 -0.1 + vertex 19.0963 -10.6988 0 + vertex 18.7132 -10.7406 0 + endloop + endfacet + facet normal 0.10841 -0.994106 0 + outer loop + vertex 19.0963 -10.6988 0 + vertex 18.7132 -10.7406 -0.1 + vertex 19.0963 -10.6988 -0.1 + endloop + endfacet + facet normal -0.0664596 -0.997789 0 + outer loop + vertex 19.0963 -10.6988 -0.1 + vertex 19.3736 -10.7173 0 + vertex 19.0963 -10.6988 0 + endloop + endfacet + facet normal -0.0664596 -0.997789 -0 + outer loop + vertex 19.3736 -10.7173 0 + vertex 19.0963 -10.6988 -0.1 + vertex 19.3736 -10.7173 -0.1 + endloop + endfacet + facet normal -0.172939 0.984933 0 + outer loop + vertex 8.12348 -21.5274 -0.1 + vertex 7.71946 -21.5983 0 + vertex 8.12348 -21.5274 0 + endloop + endfacet + facet normal -0.172939 0.984933 0 + outer loop + vertex 7.71946 -21.5983 0 + vertex 8.12348 -21.5274 -0.1 + vertex 7.71946 -21.5983 -0.1 + endloop + endfacet + facet normal -0.287852 0.957675 0 + outer loop + vertex 7.71946 -21.5983 -0.1 + vertex 7.29763 -21.7251 0 + vertex 7.71946 -21.5983 0 + endloop + endfacet + facet normal -0.287852 0.957675 0 + outer loop + vertex 7.29763 -21.7251 0 + vertex 7.71946 -21.5983 -0.1 + vertex 7.29763 -21.7251 -0.1 + endloop + endfacet + facet normal -0.387479 0.921879 0 + outer loop + vertex 7.29763 -21.7251 -0.1 + vertex 6.8627 -21.9079 0 + vertex 7.29763 -21.7251 0 + endloop + endfacet + facet normal -0.387479 0.921879 0 + outer loop + vertex 6.8627 -21.9079 0 + vertex 7.29763 -21.7251 -0.1 + vertex 6.8627 -21.9079 -0.1 + endloop + endfacet + facet normal -0.474518 0.880246 0 + outer loop + vertex 6.8627 -21.9079 -0.1 + vertex 6.41939 -22.1469 0 + vertex 6.8627 -21.9079 0 + endloop + endfacet + facet normal -0.474518 0.880246 0 + outer loop + vertex 6.41939 -22.1469 0 + vertex 6.8627 -21.9079 -0.1 + vertex 6.41939 -22.1469 -0.1 + endloop + endfacet + facet normal -0.551235 0.83435 0 + outer loop + vertex 6.41939 -22.1469 -0.1 + vertex 5.97241 -22.4422 0 + vertex 6.41939 -22.1469 0 + endloop + endfacet + facet normal -0.551235 0.83435 0 + outer loop + vertex 5.97241 -22.4422 0 + vertex 6.41939 -22.1469 -0.1 + vertex 5.97241 -22.4422 -0.1 + endloop + endfacet + facet normal -0.619368 0.785101 0 + outer loop + vertex 5.97241 -22.4422 -0.1 + vertex 5.52647 -22.794 0 + vertex 5.97241 -22.4422 0 + endloop + endfacet + facet normal -0.619368 0.785101 0 + outer loop + vertex 5.52647 -22.794 0 + vertex 5.97241 -22.4422 -0.1 + vertex 5.52647 -22.794 -0.1 + endloop + endfacet + facet normal -0.680193 0.733033 0 + outer loop + vertex 5.52647 -22.794 -0.1 + vertex 5.08628 -23.2024 0 + vertex 5.52647 -22.794 0 + endloop + endfacet + facet normal -0.680193 0.733033 0 + outer loop + vertex 5.08628 -23.2024 0 + vertex 5.52647 -22.794 -0.1 + vertex 5.08628 -23.2024 -0.1 + endloop + endfacet + facet normal -0.733294 0.679911 0 + outer loop + vertex 4.45147 -23.8871 -0.1 + vertex 5.08628 -23.2024 0 + vertex 5.08628 -23.2024 -0.1 + endloop + endfacet + facet normal -0.733294 0.679911 0 + outer loop + vertex 5.08628 -23.2024 0 + vertex 4.45147 -23.8871 -0.1 + vertex 4.45147 -23.8871 0 + endloop + endfacet + facet normal -0.778151 0.628077 0 + outer loop + vertex 3.85887 -24.6213 -0.1 + vertex 4.45147 -23.8871 0 + vertex 4.45147 -23.8871 -0.1 + endloop + endfacet + facet normal -0.778151 0.628077 0 + outer loop + vertex 4.45147 -23.8871 0 + vertex 3.85887 -24.6213 -0.1 + vertex 3.85887 -24.6213 0 + endloop + endfacet + facet normal -0.816383 0.577511 0 + outer loop + vertex 3.31148 -25.3951 -0.1 + vertex 3.85887 -24.6213 0 + vertex 3.85887 -24.6213 -0.1 + endloop + endfacet + facet normal -0.816383 0.577511 0 + outer loop + vertex 3.85887 -24.6213 0 + vertex 3.31148 -25.3951 -0.1 + vertex 3.31148 -25.3951 0 + endloop + endfacet + facet normal -0.849413 0.527728 0 + outer loop + vertex 2.81229 -26.1986 -0.1 + vertex 3.31148 -25.3951 0 + vertex 3.31148 -25.3951 -0.1 + endloop + endfacet + facet normal -0.849413 0.527728 0 + outer loop + vertex 3.31148 -25.3951 0 + vertex 2.81229 -26.1986 -0.1 + vertex 2.81229 -26.1986 0 + endloop + endfacet + facet normal -0.878359 0.478001 0 + outer loop + vertex 2.36428 -27.0218 -0.1 + vertex 2.81229 -26.1986 0 + vertex 2.81229 -26.1986 -0.1 + endloop + endfacet + facet normal -0.878359 0.478001 0 + outer loop + vertex 2.81229 -26.1986 0 + vertex 2.36428 -27.0218 -0.1 + vertex 2.36428 -27.0218 0 + endloop + endfacet + facet normal -0.904067 0.427391 0 + outer loop + vertex 1.97046 -27.8549 -0.1 + vertex 2.36428 -27.0218 0 + vertex 2.36428 -27.0218 -0.1 + endloop + endfacet + facet normal -0.904067 0.427391 0 + outer loop + vertex 2.36428 -27.0218 0 + vertex 1.97046 -27.8549 -0.1 + vertex 1.97046 -27.8549 0 + endloop + endfacet + facet normal -0.927139 0.374717 0 + outer loop + vertex 1.63381 -28.6878 -0.1 + vertex 1.97046 -27.8549 0 + vertex 1.97046 -27.8549 -0.1 + endloop + endfacet + facet normal -0.927139 0.374717 0 + outer loop + vertex 1.97046 -27.8549 0 + vertex 1.63381 -28.6878 -0.1 + vertex 1.63381 -28.6878 0 + endloop + endfacet + facet normal -0.947927 0.318489 0 + outer loop + vertex 1.35733 -29.5107 -0.1 + vertex 1.63381 -28.6878 0 + vertex 1.63381 -28.6878 -0.1 + endloop + endfacet + facet normal -0.947927 0.318489 0 + outer loop + vertex 1.63381 -28.6878 0 + vertex 1.35733 -29.5107 -0.1 + vertex 1.35733 -29.5107 0 + endloop + endfacet + facet normal -0.966471 0.256775 0 + outer loop + vertex 1.144 -30.3137 -0.1 + vertex 1.35733 -29.5107 0 + vertex 1.35733 -29.5107 -0.1 + endloop + endfacet + facet normal -0.966471 0.256775 0 + outer loop + vertex 1.35733 -29.5107 0 + vertex 1.144 -30.3137 -0.1 + vertex 1.144 -30.3137 0 + endloop + endfacet + facet normal -0.982354 0.187033 0 + outer loop + vertex 0.99682 -31.0867 -0.1 + vertex 1.144 -30.3137 0 + vertex 1.144 -30.3137 -0.1 + endloop + endfacet + facet normal -0.982354 0.187033 0 + outer loop + vertex 1.144 -30.3137 0 + vertex 0.99682 -31.0867 -0.1 + vertex 0.99682 -31.0867 0 + endloop + endfacet + facet normal -0.994383 0.105841 0 + outer loop + vertex 0.918778 -31.8199 -0.1 + vertex 0.99682 -31.0867 0 + vertex 0.99682 -31.0867 -0.1 + endloop + endfacet + facet normal -0.994383 0.105841 0 + outer loop + vertex 0.99682 -31.0867 0 + vertex 0.918778 -31.8199 -0.1 + vertex 0.918778 -31.8199 0 + endloop + endfacet + facet normal -0.999392 0.0348629 0 + outer loop + vertex 0.906618 -32.1685 -0.1 + vertex 0.918778 -31.8199 0 + vertex 0.918778 -31.8199 -0.1 + endloop + endfacet + facet normal -0.999392 0.0348629 0 + outer loop + vertex 0.918778 -31.8199 0 + vertex 0.906618 -32.1685 -0.1 + vertex 0.906618 -32.1685 0 + endloop + endfacet + facet normal -0.999826 -0.0186499 0 + outer loop + vertex 0.912865 -32.5034 -0.1 + vertex 0.906618 -32.1685 0 + vertex 0.906618 -32.1685 -0.1 + endloop + endfacet + facet normal -0.999826 -0.0186499 0 + outer loop + vertex 0.906618 -32.1685 0 + vertex 0.912865 -32.5034 -0.1 + vertex 0.912865 -32.5034 0 + endloop + endfacet + facet normal -0.996955 -0.077982 0 + outer loop + vertex 0.937893 -32.8234 -0.1 + vertex 0.912865 -32.5034 0 + vertex 0.912865 -32.5034 -0.1 + endloop + endfacet + facet normal -0.996955 -0.077982 0 + outer loop + vertex 0.912865 -32.5034 0 + vertex 0.937893 -32.8234 -0.1 + vertex 0.937893 -32.8234 0 + endloop + endfacet + facet normal -0.98959 -0.143913 0 + outer loop + vertex 0.982074 -33.1272 -0.1 + vertex 0.937893 -32.8234 0 + vertex 0.937893 -32.8234 -0.1 + endloop + endfacet + facet normal -0.98959 -0.143913 0 + outer loop + vertex 0.937893 -32.8234 0 + vertex 0.982074 -33.1272 -0.1 + vertex 0.982074 -33.1272 0 + endloop + endfacet + facet normal -0.97614 -0.217144 0 + outer loop + vertex 1.04578 -33.4136 -0.1 + vertex 0.982074 -33.1272 0 + vertex 0.982074 -33.1272 -0.1 + endloop + endfacet + facet normal -0.97614 -0.217144 0 + outer loop + vertex 0.982074 -33.1272 0 + vertex 1.04578 -33.4136 -0.1 + vertex 1.04578 -33.4136 0 + endloop + endfacet + facet normal -0.954541 -0.298078 0 + outer loop + vertex 1.1294 -33.6813 -0.1 + vertex 1.04578 -33.4136 0 + vertex 1.04578 -33.4136 -0.1 + endloop + endfacet + facet normal -0.954541 -0.298078 0 + outer loop + vertex 1.04578 -33.4136 0 + vertex 1.1294 -33.6813 -0.1 + vertex 1.1294 -33.6813 0 + endloop + endfacet + facet normal -0.922268 -0.38655 0 + outer loop + vertex 1.23329 -33.9292 -0.1 + vertex 1.1294 -33.6813 0 + vertex 1.1294 -33.6813 -0.1 + endloop + endfacet + facet normal -0.922268 -0.38655 0 + outer loop + vertex 1.1294 -33.6813 0 + vertex 1.23329 -33.9292 -0.1 + vertex 1.23329 -33.9292 0 + endloop + endfacet + facet normal -0.876493 -0.481415 0 + outer loop + vertex 1.35782 -34.1559 -0.1 + vertex 1.23329 -33.9292 0 + vertex 1.23329 -33.9292 -0.1 + endloop + endfacet + facet normal -0.876493 -0.481415 0 + outer loop + vertex 1.23329 -33.9292 0 + vertex 1.35782 -34.1559 -0.1 + vertex 1.35782 -34.1559 0 + endloop + endfacet + facet normal -0.814521 -0.580134 0 + outer loop + vertex 1.50339 -34.3603 -0.1 + vertex 1.35782 -34.1559 0 + vertex 1.35782 -34.1559 -0.1 + endloop + endfacet + facet normal -0.814521 -0.580134 0 + outer loop + vertex 1.35782 -34.1559 0 + vertex 1.50339 -34.3603 -0.1 + vertex 1.50339 -34.3603 0 + endloop + endfacet + facet normal -0.734597 -0.678504 0 + outer loop + vertex 1.67035 -34.5411 -0.1 + vertex 1.50339 -34.3603 0 + vertex 1.50339 -34.3603 -0.1 + endloop + endfacet + facet normal -0.734597 -0.678504 0 + outer loop + vertex 1.50339 -34.3603 0 + vertex 1.67035 -34.5411 -0.1 + vertex 1.67035 -34.5411 0 + endloop + endfacet + facet normal -0.643892 -0.765116 0 + outer loop + vertex 1.67035 -34.5411 -0.1 + vertex 1.8149 -34.6627 0 + vertex 1.67035 -34.5411 0 + endloop + endfacet + facet normal -0.643892 -0.765116 -0 + outer loop + vertex 1.8149 -34.6627 0 + vertex 1.67035 -34.5411 -0.1 + vertex 1.8149 -34.6627 -0.1 + endloop + endfacet + facet normal -0.554297 -0.832319 0 + outer loop + vertex 1.8149 -34.6627 -0.1 + vertex 1.97535 -34.7696 0 + vertex 1.8149 -34.6627 0 + endloop + endfacet + facet normal -0.554297 -0.832319 -0 + outer loop + vertex 1.97535 -34.7696 0 + vertex 1.8149 -34.6627 -0.1 + vertex 1.97535 -34.7696 -0.1 + endloop + endfacet + facet normal -0.465589 -0.885001 0 + outer loop + vertex 1.97535 -34.7696 -0.1 + vertex 2.15022 -34.8616 0 + vertex 1.97535 -34.7696 0 + endloop + endfacet + facet normal -0.465589 -0.885001 -0 + outer loop + vertex 2.15022 -34.8616 0 + vertex 1.97535 -34.7696 -0.1 + vertex 2.15022 -34.8616 -0.1 + endloop + endfacet + facet normal -0.379703 -0.925108 0 + outer loop + vertex 2.15022 -34.8616 -0.1 + vertex 2.33801 -34.9386 0 + vertex 2.15022 -34.8616 0 + endloop + endfacet + facet normal -0.379703 -0.925108 -0 + outer loop + vertex 2.33801 -34.9386 0 + vertex 2.15022 -34.8616 -0.1 + vertex 2.33801 -34.9386 -0.1 + endloop + endfacet + facet normal -0.297589 -0.954694 0 + outer loop + vertex 2.33801 -34.9386 -0.1 + vertex 2.53723 -35.0007 0 + vertex 2.33801 -34.9386 0 + endloop + endfacet + facet normal -0.297589 -0.954694 -0 + outer loop + vertex 2.53723 -35.0007 0 + vertex 2.33801 -34.9386 -0.1 + vertex 2.53723 -35.0007 -0.1 + endloop + endfacet + facet normal -0.219494 -0.975614 0 + outer loop + vertex 2.53723 -35.0007 -0.1 + vertex 2.7464 -35.0478 0 + vertex 2.53723 -35.0007 0 + endloop + endfacet + facet normal -0.219494 -0.975614 -0 + outer loop + vertex 2.7464 -35.0478 0 + vertex 2.53723 -35.0007 -0.1 + vertex 2.7464 -35.0478 -0.1 + endloop + endfacet + facet normal -0.109599 -0.993976 0 + outer loop + vertex 2.7464 -35.0478 -0.1 + vertex 3.18861 -35.0966 0 + vertex 2.7464 -35.0478 0 + endloop + endfacet + facet normal -0.109599 -0.993976 -0 + outer loop + vertex 3.18861 -35.0966 0 + vertex 2.7464 -35.0478 -0.1 + vertex 3.18861 -35.0966 -0.1 + endloop + endfacet + facet normal 0.0261117 -0.999659 0 + outer loop + vertex 3.18861 -35.0966 -0.1 + vertex 3.65273 -35.0844 0 + vertex 3.18861 -35.0966 0 + endloop + endfacet + facet normal 0.0261117 -0.999659 0 + outer loop + vertex 3.65273 -35.0844 0 + vertex 3.18861 -35.0966 -0.1 + vertex 3.65273 -35.0844 -0.1 + endloop + endfacet + facet normal 0.153159 -0.988202 0 + outer loop + vertex 3.65273 -35.0844 -0.1 + vertex 4.12685 -35.011 0 + vertex 3.65273 -35.0844 0 + endloop + endfacet + facet normal 0.153159 -0.988202 0 + outer loop + vertex 4.12685 -35.011 0 + vertex 3.65273 -35.0844 -0.1 + vertex 4.12685 -35.011 -0.1 + endloop + endfacet + facet normal 0.275485 -0.961305 0 + outer loop + vertex 4.12685 -35.011 -0.1 + vertex 4.59905 -34.8756 0 + vertex 4.12685 -35.011 0 + endloop + endfacet + facet normal 0.275485 -0.961305 0 + outer loop + vertex 4.59905 -34.8756 0 + vertex 4.12685 -35.011 -0.1 + vertex 4.59905 -34.8756 -0.1 + endloop + endfacet + facet normal 0.39595 -0.918272 0 + outer loop + vertex 4.59905 -34.8756 -0.1 + vertex 5.05744 -34.678 0 + vertex 4.59905 -34.8756 0 + endloop + endfacet + facet normal 0.39595 -0.918272 0 + outer loop + vertex 5.05744 -34.678 0 + vertex 4.59905 -34.8756 -0.1 + vertex 5.05744 -34.678 -0.1 + endloop + endfacet + facet normal 0.498797 -0.866719 0 + outer loop + vertex 5.05744 -34.678 -0.1 + vertex 5.41146 -34.4742 0 + vertex 5.05744 -34.678 0 + endloop + endfacet + facet normal 0.498797 -0.866719 0 + outer loop + vertex 5.41146 -34.4742 0 + vertex 5.05744 -34.678 -0.1 + vertex 5.41146 -34.4742 -0.1 + endloop + endfacet + facet normal 0.615093 -0.788455 0 + outer loop + vertex 5.41146 -34.4742 -0.1 + vertex 5.72486 -34.2297 0 + vertex 5.41146 -34.4742 0 + endloop + endfacet + facet normal 0.615093 -0.788455 0 + outer loop + vertex 5.72486 -34.2297 0 + vertex 5.41146 -34.4742 -0.1 + vertex 5.72486 -34.2297 -0.1 + endloop + endfacet + facet normal 0.708025 -0.706188 0 + outer loop + vertex 5.72486 -34.2297 0 + vertex 5.87315 -34.0811 -0.1 + vertex 5.87315 -34.0811 0 + endloop + endfacet + facet normal 0.708025 -0.706188 0 + outer loop + vertex 5.87315 -34.0811 -0.1 + vertex 5.72486 -34.2297 0 + vertex 5.72486 -34.2297 -0.1 + endloop + endfacet + facet normal 0.762128 -0.647427 0 + outer loop + vertex 5.87315 -34.0811 0 + vertex 6.01946 -33.9088 -0.1 + vertex 6.01946 -33.9088 0 + endloop + endfacet + facet normal 0.762128 -0.647427 0 + outer loop + vertex 6.01946 -33.9088 -0.1 + vertex 5.87315 -34.0811 0 + vertex 5.87315 -34.0811 -0.1 + endloop + endfacet + facet normal 0.824099 -0.566446 0 + outer loop + vertex 6.01946 -33.9088 0 + vertex 6.31707 -33.4759 -0.1 + vertex 6.31707 -33.4759 0 + endloop + endfacet + facet normal 0.824099 -0.566446 0 + outer loop + vertex 6.31707 -33.4759 -0.1 + vertex 6.01946 -33.9088 0 + vertex 6.01946 -33.9088 -0.1 + endloop + endfacet + facet normal 0.874277 -0.485427 0 + outer loop + vertex 6.31707 -33.4759 0 + vertex 6.63949 -32.8952 -0.1 + vertex 6.63949 -32.8952 0 + endloop + endfacet + facet normal 0.874277 -0.485427 0 + outer loop + vertex 6.63949 -32.8952 -0.1 + vertex 6.31707 -33.4759 0 + vertex 6.31707 -33.4759 -0.1 + endloop + endfacet + facet normal 0.900468 -0.434923 0 + outer loop + vertex 6.63949 -32.8952 0 + vertex 7.00854 -32.1311 -0.1 + vertex 7.00854 -32.1311 0 + endloop + endfacet + facet normal 0.900468 -0.434923 0 + outer loop + vertex 7.00854 -32.1311 -0.1 + vertex 6.63949 -32.8952 0 + vertex 6.63949 -32.8952 -0.1 + endloop + endfacet + facet normal 0.913625 -0.406558 0 + outer loop + vertex 7.00854 -32.1311 0 + vertex 7.44603 -31.1479 -0.1 + vertex 7.44603 -31.1479 0 + endloop + endfacet + facet normal 0.913625 -0.406558 0 + outer loop + vertex 7.44603 -31.1479 -0.1 + vertex 7.00854 -32.1311 0 + vertex 7.00854 -32.1311 -0.1 + endloop + endfacet + facet normal 0.919886 -0.392186 0 + outer loop + vertex 7.44603 -31.1479 0 + vertex 7.97377 -29.9101 -0.1 + vertex 7.97377 -29.9101 0 + endloop + endfacet + facet normal 0.919886 -0.392186 0 + outer loop + vertex 7.97377 -29.9101 -0.1 + vertex 7.44603 -31.1479 0 + vertex 7.44603 -31.1479 -0.1 + endloop + endfacet + facet normal 0.924332 -0.381588 0 + outer loop + vertex 7.97377 -29.9101 0 + vertex 9.07864 -27.2338 -0.1 + vertex 9.07864 -27.2338 0 + endloop + endfacet + facet normal 0.924332 -0.381588 0 + outer loop + vertex 9.07864 -27.2338 -0.1 + vertex 7.97377 -29.9101 0 + vertex 7.97377 -29.9101 -0.1 + endloop + endfacet + facet normal 0.932155 -0.362059 0 + outer loop + vertex 9.07864 -27.2338 0 + vertex 9.46376 -26.2422 -0.1 + vertex 9.46376 -26.2422 0 + endloop + endfacet + facet normal 0.932155 -0.362059 0 + outer loop + vertex 9.46376 -26.2422 -0.1 + vertex 9.07864 -27.2338 0 + vertex 9.07864 -27.2338 -0.1 + endloop + endfacet + facet normal 0.941332 -0.337483 0 + outer loop + vertex 9.46376 -26.2422 0 + vertex 9.75283 -25.4359 -0.1 + vertex 9.75283 -25.4359 0 + endloop + endfacet + facet normal 0.941332 -0.337483 0 + outer loop + vertex 9.75283 -25.4359 -0.1 + vertex 9.46376 -26.2422 0 + vertex 9.46376 -26.2422 -0.1 + endloop + endfacet + facet normal 0.954562 -0.298012 0 + outer loop + vertex 9.75283 -25.4359 0 + vertex 9.95745 -24.7805 -0.1 + vertex 9.95745 -24.7805 0 + endloop + endfacet + facet normal 0.954562 -0.298012 0 + outer loop + vertex 9.95745 -24.7805 -0.1 + vertex 9.75283 -25.4359 0 + vertex 9.75283 -25.4359 -0.1 + endloop + endfacet + facet normal 0.971378 -0.237537 0 + outer loop + vertex 9.95745 -24.7805 0 + vertex 10.0892 -24.2416 -0.1 + vertex 10.0892 -24.2416 0 + endloop + endfacet + facet normal 0.971378 -0.237537 0 + outer loop + vertex 10.0892 -24.2416 -0.1 + vertex 9.95745 -24.7805 0 + vertex 9.95745 -24.7805 -0.1 + endloop + endfacet + facet normal 0.98828 -0.15265 0 + outer loop + vertex 10.0892 -24.2416 0 + vertex 10.1598 -23.7848 -0.1 + vertex 10.1598 -23.7848 0 + endloop + endfacet + facet normal 0.98828 -0.15265 0 + outer loop + vertex 10.1598 -23.7848 -0.1 + vertex 10.0892 -24.2416 0 + vertex 10.0892 -24.2416 -0.1 + endloop + endfacet + facet normal 0.998693 -0.0511194 0 + outer loop + vertex 10.1598 -23.7848 0 + vertex 10.1807 -23.3758 -0.1 + vertex 10.1807 -23.3758 0 + endloop + endfacet + facet normal 0.998693 -0.0511194 0 + outer loop + vertex 10.1807 -23.3758 -0.1 + vertex 10.1598 -23.7848 0 + vertex 10.1598 -23.7848 -0.1 + endloop + endfacet + facet normal 0.997227 0.0744219 0 + outer loop + vertex 10.1807 -23.3758 0 + vertex 10.149 -22.9513 -0.1 + vertex 10.149 -22.9513 0 + endloop + endfacet + facet normal 0.997227 0.0744219 0 + outer loop + vertex 10.149 -22.9513 -0.1 + vertex 10.1807 -23.3758 0 + vertex 10.1807 -23.3758 -0.1 + endloop + endfacet + facet normal 0.980241 0.197806 0 + outer loop + vertex 10.149 -22.9513 0 + vertex 10.1103 -22.7594 -0.1 + vertex 10.1103 -22.7594 0 + endloop + endfacet + facet normal 0.980241 0.197806 0 + outer loop + vertex 10.1103 -22.7594 -0.1 + vertex 10.149 -22.9513 0 + vertex 10.149 -22.9513 -0.1 + endloop + endfacet + facet normal 0.958253 0.285922 0 + outer loop + vertex 10.1103 -22.7594 0 + vertex 10.0571 -22.5812 -0.1 + vertex 10.0571 -22.5812 0 + endloop + endfacet + facet normal 0.958253 0.285922 0 + outer loop + vertex 10.0571 -22.5812 -0.1 + vertex 10.1103 -22.7594 0 + vertex 10.1103 -22.7594 -0.1 + endloop + endfacet + facet normal 0.926088 0.377307 0 + outer loop + vertex 10.0571 -22.5812 0 + vertex 9.99008 -22.4166 -0.1 + vertex 9.99008 -22.4166 0 + endloop + endfacet + facet normal 0.926088 0.377307 0 + outer loop + vertex 9.99008 -22.4166 -0.1 + vertex 10.0571 -22.5812 0 + vertex 10.0571 -22.5812 -0.1 + endloop + endfacet + facet normal 0.882715 0.469908 0 + outer loop + vertex 9.99008 -22.4166 0 + vertex 9.90973 -22.2656 -0.1 + vertex 9.90973 -22.2656 0 + endloop + endfacet + facet normal 0.882715 0.469908 0 + outer loop + vertex 9.90973 -22.2656 -0.1 + vertex 9.99008 -22.4166 0 + vertex 9.99008 -22.4166 -0.1 + endloop + endfacet + facet normal 0.827725 0.561134 0 + outer loop + vertex 9.90973 -22.2656 0 + vertex 9.81668 -22.1284 -0.1 + vertex 9.81668 -22.1284 0 + endloop + endfacet + facet normal 0.827725 0.561134 0 + outer loop + vertex 9.81668 -22.1284 -0.1 + vertex 9.90973 -22.2656 0 + vertex 9.90973 -22.2656 -0.1 + endloop + endfacet + facet normal 0.761518 0.648143 0 + outer loop + vertex 9.81668 -22.1284 0 + vertex 9.71152 -22.0048 -0.1 + vertex 9.71152 -22.0048 0 + endloop + endfacet + facet normal 0.761518 0.648143 0 + outer loop + vertex 9.71152 -22.0048 -0.1 + vertex 9.81668 -22.1284 0 + vertex 9.81668 -22.1284 -0.1 + endloop + endfacet + facet normal 0.685415 0.728153 -0 + outer loop + vertex 9.71152 -22.0048 -0.1 + vertex 9.59484 -21.895 0 + vertex 9.71152 -22.0048 0 + endloop + endfacet + facet normal 0.685415 0.728153 0 + outer loop + vertex 9.59484 -21.895 0 + vertex 9.71152 -22.0048 -0.1 + vertex 9.59484 -21.895 -0.1 + endloop + endfacet + facet normal 0.601514 0.798862 -0 + outer loop + vertex 9.59484 -21.895 -0.1 + vertex 9.46723 -21.7989 0 + vertex 9.59484 -21.895 0 + endloop + endfacet + facet normal 0.601514 0.798862 0 + outer loop + vertex 9.46723 -21.7989 0 + vertex 9.59484 -21.895 -0.1 + vertex 9.46723 -21.7989 -0.1 + endloop + endfacet + facet normal 0.467006 0.884254 -0 + outer loop + vertex 9.46723 -21.7989 -0.1 + vertex 9.18157 -21.6481 0 + vertex 9.46723 -21.7989 0 + endloop + endfacet + facet normal 0.467006 0.884254 0 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.46723 -21.7989 -0.1 + vertex 9.18157 -21.6481 -0.1 + endloop + endfacet + facet normal 0.284506 0.958674 -0 + outer loop + vertex 9.18157 -21.6481 -0.1 + vertex 8.85925 -21.5524 0 + vertex 9.18157 -21.6481 0 + endloop + endfacet + facet normal 0.284506 0.958674 0 + outer loop + vertex 8.85925 -21.5524 0 + vertex 9.18157 -21.6481 -0.1 + vertex 8.85925 -21.5524 -0.1 + endloop + endfacet + facet normal 0.112981 0.993597 -0 + outer loop + vertex 8.85925 -21.5524 -0.1 + vertex 8.50498 -21.5121 0 + vertex 8.85925 -21.5524 0 + endloop + endfacet + facet normal 0.112981 0.993597 0 + outer loop + vertex 8.50498 -21.5121 0 + vertex 8.85925 -21.5524 -0.1 + vertex 8.50498 -21.5121 -0.1 + endloop + endfacet + facet normal -0.039935 0.999202 0 + outer loop + vertex 8.50498 -21.5121 -0.1 + vertex 8.12348 -21.5274 0 + vertex 8.50498 -21.5121 0 + endloop + endfacet + facet normal -0.039935 0.999202 0 + outer loop + vertex 8.12348 -21.5274 0 + vertex 8.50498 -21.5121 -0.1 + vertex 8.12348 -21.5274 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1179 -30.7807 -0.1 + vertex 30.2299 -31.0524 -0.1 + vertex 30.2187 -30.9454 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1179 -30.7807 -0.1 + vertex 30.2187 -30.9454 -0.1 + vertex 30.1812 -30.855 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.2299 -31.0524 -0.1 + vertex 30.1179 -30.7807 -0.1 + vertex 30.2146 -31.1764 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.2146 -31.1764 -0.1 + vertex 30.1179 -30.7807 -0.1 + vertex 30.1726 -31.3179 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.9008 -30.6099 -0.1 + vertex 30.1726 -31.3179 -0.1 + vertex 30.1179 -30.7807 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1726 -31.3179 -0.1 + vertex 29.9008 -30.6099 -0.1 + vertex 30.1034 -31.4773 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.7002 -30.4984 -0.1 + vertex 30.1034 -31.4773 -0.1 + vertex 29.9008 -30.6099 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1034 -31.4773 -0.1 + vertex 29.7002 -30.4984 -0.1 + vertex 29.0845 -30.5466 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.8369 -30.6989 -0.1 + vertex 30.1034 -31.4773 -0.1 + vertex 29.0845 -30.5466 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.3033 -30.4642 -0.1 + vertex 29.7002 -30.4984 -0.1 + vertex 29.5048 -30.449 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.7002 -30.4984 -0.1 + vertex 29.3033 -30.4642 -0.1 + vertex 29.0845 -30.5466 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1034 -31.4773 -0.1 + vertex 28.8369 -30.6989 -0.1 + vertex 29.8827 -31.8517 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.5495 -30.9236 -0.1 + vertex 29.8827 -31.8517 -0.1 + vertex 28.8369 -30.6989 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.8827 -31.8517 -0.1 + vertex 28.5495 -30.9236 -0.1 + vertex 29.5499 -32.3032 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.2108 -31.2235 -0.1 + vertex 29.5499 -32.3032 -0.1 + vertex 28.5495 -30.9236 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.5499 -32.3032 -0.1 + vertex 28.2108 -31.2235 -0.1 + vertex 29.1028 -32.8352 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.276 -32.055 -0.1 + vertex 29.1028 -32.8352 -0.1 + vertex 28.2108 -31.2235 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.1028 -32.8352 -0.1 + vertex 27.276 -32.055 -0.1 + vertex 28.539 -33.4515 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.539 -33.4515 -0.1 + vertex 27.276 -32.055 -0.1 + vertex 27.856 -34.1555 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.4309 -32.7448 -0.1 + vertex 27.856 -34.1555 -0.1 + vertex 27.276 -32.055 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.856 -34.1555 -0.1 + vertex 26.4309 -32.7448 -0.1 + vertex 27.3514 -34.6537 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.6577 -33.3022 -0.1 + vertex 27.3514 -34.6537 -0.1 + vertex 26.4309 -32.7448 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3514 -34.6537 -0.1 + vertex 25.6577 -33.3022 -0.1 + vertex 26.8832 -35.0925 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.2926 -33.5342 -0.1 + vertex 26.8832 -35.0925 -0.1 + vertex 25.6577 -33.3022 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8832 -35.0925 -0.1 + vertex 25.2926 -33.5342 -0.1 + vertex 26.4377 -35.4824 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.9388 -33.7368 -0.1 + vertex 26.4377 -35.4824 -0.1 + vertex 25.2926 -33.5342 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.4377 -35.4824 -0.1 + vertex 24.9388 -33.7368 -0.1 + vertex 26.0012 -35.834 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.5942 -33.911 -0.1 + vertex 26.0012 -35.834 -0.1 + vertex 24.9388 -33.7368 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0012 -35.834 -0.1 + vertex 24.5942 -33.911 -0.1 + vertex 25.5601 -36.1579 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.2566 -34.0582 -0.1 + vertex 25.5601 -36.1579 -0.1 + vertex 24.5942 -33.911 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.5601 -36.1579 -0.1 + vertex 24.2566 -34.0582 -0.1 + vertex 25.1006 -36.4644 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.9237 -34.1793 -0.1 + vertex 25.1006 -36.4644 -0.1 + vertex 24.2566 -34.0582 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.1006 -36.4644 -0.1 + vertex 23.9237 -34.1793 -0.1 + vertex 24.6091 -36.7642 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.5933 -34.2758 -0.1 + vertex 24.6091 -36.7642 -0.1 + vertex 23.9237 -34.1793 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.2634 -34.3487 -0.1 + vertex 24.6091 -36.7642 -0.1 + vertex 23.5933 -34.2758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6091 -36.7642 -0.1 + vertex 23.2634 -34.3487 -0.1 + vertex 24.0719 -37.0678 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.9315 -34.3992 -0.1 + vertex 24.0719 -37.0678 -0.1 + vertex 23.2634 -34.3487 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.0719 -37.0678 -0.1 + vertex 22.9315 -34.3992 -0.1 + vertex 23.2902 -37.4839 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.5956 -34.4285 -0.1 + vertex 23.2902 -37.4839 -0.1 + vertex 22.9315 -34.3992 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.2534 -34.4379 -0.1 + vertex 23.2902 -37.4839 -0.1 + vertex 22.5956 -34.4285 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.2902 -37.4839 -0.1 + vertex 22.2534 -34.4379 -0.1 + vertex 22.6041 -37.8201 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.8355 -34.4151 -0.1 + vertex 22.6041 -37.8201 -0.1 + vertex 22.2534 -34.4379 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6041 -37.8201 -0.1 + vertex 21.8355 -34.4151 -0.1 + vertex 21.9889 -38.084 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.43 -34.349 -0.1 + vertex 21.9889 -38.084 -0.1 + vertex 21.8355 -34.4151 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.43 -34.349 -0.1 + vertex 21.4197 -38.2833 -0.1 + vertex 21.9889 -38.084 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0421 -34.2419 -0.1 + vertex 21.4197 -38.2833 -0.1 + vertex 21.43 -34.349 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0421 -34.2419 -0.1 + vertex 20.8717 -38.4255 -0.1 + vertex 21.4197 -38.2833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3202 -38.5182 -0.1 + vertex 21.0421 -34.2419 -0.1 + vertex 20.6768 -34.0963 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7403 -38.5689 -0.1 + vertex 20.6768 -34.0963 -0.1 + vertex 20.3392 -33.9144 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0421 -34.2419 -0.1 + vertex 20.3202 -38.5182 -0.1 + vertex 20.8717 -38.4255 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4669 -38.5591 -0.1 + vertex 20.3392 -33.9144 -0.1 + vertex 20.0345 -33.6987 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8529 -38.0675 -0.1 + vertex 20.0345 -33.6987 -0.1 + vertex 19.7677 -33.4516 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.6768 -34.0963 -0.1 + vertex 19.7403 -38.5689 -0.1 + vertex 20.3202 -38.5182 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.927 -35.9398 -0.1 + vertex 19.7677 -33.4516 -0.1 + vertex 19.5439 -33.1754 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6774 -34.4466 -0.1 + vertex 19.5439 -33.1754 -0.1 + vertex 19.466 -33.0295 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6656 -33.913 -0.1 + vertex 19.466 -33.0295 -0.1 + vertex 19.403 -32.8415 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.73 -32.8205 -0.1 + vertex 19.403 -32.8415 -0.1 + vertex 19.3545 -32.6156 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.8056 -32.2631 -0.1 + vertex 19.3545 -32.6156 -0.1 + vertex 19.3203 -32.3556 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3392 -33.9144 -0.1 + vertex 19.1073 -38.5852 -0.1 + vertex 19.7403 -38.5689 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9098 -31.6993 -0.1 + vertex 19.3203 -32.3556 -0.1 + vertex 19.2935 -31.7496 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4186 -23.1088 -0.1 + vertex 32.0619 -22.7991 -0.1 + vertex 32.0349 -22.2828 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.0619 -22.7991 -0.1 + vertex 27.4186 -23.1088 -0.1 + vertex 32.0372 -23.3848 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3785 -22.8574 -0.1 + vertex 32.0349 -22.2828 -0.1 + vertex 31.9549 -21.8223 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 27.4312 -23.3865 -0.1 + vertex 32.0372 -23.3848 -0.1 + vertex 27.4186 -23.1088 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3785 -22.8574 -0.1 + vertex 31.9549 -21.8223 -0.1 + vertex 31.8204 -21.404 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.4161 -23.6904 -0.1 + vertex 31.9625 -24.0535 -0.1 + vertex 27.4312 -23.3865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3785 -22.8574 -0.1 + vertex 31.8204 -21.404 -0.1 + vertex 31.6298 -21.0145 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.9625 -24.0535 -0.1 + vertex 27.4161 -23.6904 -0.1 + vertex 31.8392 -24.8188 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.373 -24.0204 -0.1 + vertex 31.8392 -24.8188 -0.1 + vertex 27.4161 -23.6904 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8392 -24.8188 -0.1 + vertex 27.2401 -24.8188 -0.1 + vertex 31.6784 -25.7224 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3785 -22.8574 -0.1 + vertex 31.6298 -21.0145 -0.1 + vertex 31.3816 -20.64 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2401 -24.8188 -0.1 + vertex 31.8392 -24.8188 -0.1 + vertex 27.373 -24.0204 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3111 -22.6325 -0.1 + vertex 31.3816 -20.64 -0.1 + vertex 31.074 -20.2742 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 29.58 -27.3827 -0.1 + vertex 31.6784 -25.7224 -0.1 + vertex 27.2401 -24.8188 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 30.0709 -27.3331 -0.1 + vertex 31.6784 -25.7224 -0.1 + vertex 29.58 -27.3827 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3111 -22.6325 -0.1 + vertex 31.074 -20.2742 -0.1 + vertex 30.7365 -19.9631 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 30.4717 -27.2602 -0.1 + vertex 31.6003 -26.0834 -0.1 + vertex 30.0709 -27.3331 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3111 -22.6325 -0.1 + vertex 30.7365 -19.9631 -0.1 + vertex 30.3649 -19.705 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 30.7934 -27.1595 -0.1 + vertex 31.5092 -26.3899 -0.1 + vertex 30.4717 -27.2602 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2166 -22.4344 -0.1 + vertex 30.3649 -19.705 -0.1 + vertex 29.9546 -19.4981 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 31.047 -27.0266 -0.1 + vertex 31.3939 -26.6463 -0.1 + vertex 30.7934 -27.1595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2166 -22.4344 -0.1 + vertex 29.9546 -19.4981 -0.1 + vertex 29.5013 -19.3404 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2166 -22.4344 -0.1 + vertex 29.5013 -19.3404 -0.1 + vertex 29.0007 -19.2301 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.3939 -26.6463 -0.1 + vertex 31.047 -27.0266 -0.1 + vertex 31.2435 -26.857 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0952 -22.2631 -0.1 + vertex 29.0007 -19.2301 -0.1 + vertex 28.4483 -19.1654 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9471 -22.1189 -0.1 + vertex 28.4483 -19.1654 -0.1 + vertex 27.8398 -19.1444 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.0372 -23.3848 -0.1 + vertex 27.4312 -23.3865 -0.1 + vertex 31.9625 -24.0535 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.6003 -26.0834 -0.1 + vertex 30.4717 -27.2602 -0.1 + vertex 31.5092 -26.3899 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.5092 -26.3899 -0.1 + vertex 30.7934 -27.1595 -0.1 + vertex 31.3939 -26.6463 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.0349 -22.2828 -0.1 + vertex 27.3785 -22.8574 -0.1 + vertex 27.4186 -23.1088 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.3816 -20.64 -0.1 + vertex 27.3111 -22.6325 -0.1 + vertex 27.3785 -22.8574 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.3649 -19.705 -0.1 + vertex 27.2166 -22.4344 -0.1 + vertex 27.3111 -22.6325 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7726 -22.0019 -0.1 + vertex 27.8398 -19.1444 -0.1 + vertex 27.1629 -19.1581 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.0007 -19.2301 -0.1 + vertex 27.0952 -22.2631 -0.1 + vertex 27.2166 -22.4344 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4483 -19.1654 -0.1 + vertex 26.9471 -22.1189 -0.1 + vertex 27.0952 -22.2631 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.8398 -19.1444 -0.1 + vertex 26.7726 -22.0019 -0.1 + vertex 26.9471 -22.1189 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1629 -19.1581 -0.1 + vertex 26.5717 -21.9122 -0.1 + vertex 26.7726 -22.0019 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.5531 -19.2026 -0.1 + vertex 26.5717 -21.9122 -0.1 + vertex 27.1629 -19.1581 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5531 -19.2026 -0.1 + vertex 26.3449 -21.8501 -0.1 + vertex 26.5717 -21.9122 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.9886 -19.284 -0.1 + vertex 26.3449 -21.8501 -0.1 + vertex 26.5531 -19.2026 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.3449 -21.8501 -0.1 + vertex 25.9886 -19.284 -0.1 + vertex 26.0922 -21.8157 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.4477 -19.4082 -0.1 + vertex 26.0922 -21.8157 -0.1 + vertex 25.9886 -19.284 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0922 -21.8157 -0.1 + vertex 25.4477 -19.4082 -0.1 + vertex 25.8138 -21.8092 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8138 -21.8092 -0.1 + vertex 25.4477 -19.4082 -0.1 + vertex 25.51 -21.8307 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.9086 -19.5812 -0.1 + vertex 25.51 -21.8307 -0.1 + vertex 25.4477 -19.4082 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.51 -21.8307 -0.1 + vertex 24.9086 -19.5812 -0.1 + vertex 25.181 -21.8805 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.3497 -19.8089 -0.1 + vertex 25.181 -21.8805 -0.1 + vertex 24.9086 -19.5812 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.181 -21.8805 -0.1 + vertex 24.3497 -19.8089 -0.1 + vertex 24.827 -21.9586 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.7493 -20.0973 -0.1 + vertex 24.827 -21.9586 -0.1 + vertex 24.3497 -19.8089 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.827 -21.9586 -0.1 + vertex 23.7493 -20.0973 -0.1 + vertex 24.5319 -22.0421 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5319 -22.0421 -0.1 + vertex 23.7493 -20.0973 -0.1 + vertex 24.2621 -22.1397 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.0854 -20.4525 -0.1 + vertex 24.2621 -22.1397 -0.1 + vertex 23.7493 -20.0973 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2621 -22.1397 -0.1 + vertex 23.0854 -20.4525 -0.1 + vertex 24.0091 -22.2567 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.0091 -22.2567 -0.1 + vertex 23.0854 -20.4525 -0.1 + vertex 23.7644 -22.3987 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.3543 -20.8886 -0.1 + vertex 23.7644 -22.3987 -0.1 + vertex 23.0854 -20.4525 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7644 -22.3987 -0.1 + vertex 22.3543 -20.8886 -0.1 + vertex 23.5194 -22.5712 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5194 -22.5712 -0.1 + vertex 22.3543 -20.8886 -0.1 + vertex 23.2657 -22.7795 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.6485 -21.3703 -0.1 + vertex 23.2657 -22.7795 -0.1 + vertex 22.3543 -20.8886 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.2657 -22.7795 -0.1 + vertex 21.6485 -21.3703 -0.1 + vertex 22.6979 -23.3258 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 20.9665 -21.899 -0.1 + vertex 22.6979 -23.3258 -0.1 + vertex 21.6485 -21.3703 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6979 -23.3258 -0.1 + vertex 20.9665 -21.899 -0.1 + vertex 22.2832 -23.7683 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 20.3071 -22.4759 -0.1 + vertex 22.2832 -23.7683 -0.1 + vertex 20.9665 -21.899 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2832 -23.7683 -0.1 + vertex 20.3071 -22.4759 -0.1 + vertex 21.9437 -24.1601 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.9437 -24.1601 -0.1 + vertex 20.3071 -22.4759 -0.1 + vertex 21.7143 -24.4589 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.6689 -23.1024 -0.1 + vertex 21.7143 -24.4589 -0.1 + vertex 20.3071 -22.4759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.6784 -25.7224 -0.1 + vertex 30.0709 -27.3331 -0.1 + vertex 31.6003 -26.0834 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.58 -27.3827 -0.1 + vertex 27.2401 -24.8188 -0.1 + vertex 28.988 -27.4135 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.988 -27.4135 -0.1 + vertex 27.2401 -24.8188 -0.1 + vertex 27.4568 -27.4364 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2401 -24.8188 -0.1 + vertex 25.3891 -27.4375 -0.1 + vertex 27.4568 -27.4364 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.435 -24.8188 -0.1 + vertex 25.3891 -27.4375 -0.1 + vertex 27.2401 -24.8188 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.3459 -24.8032 -0.1 + vertex 25.3891 -27.4375 -0.1 + vertex 24.435 -24.8188 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.454 -24.761 -0.1 + vertex 25.3891 -27.4375 -0.1 + vertex 23.3459 -24.8032 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1247 -27.4424 -0.1 + vertex 22.454 -24.761 -0.1 + vertex 21.8514 -24.6984 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1247 -27.4424 -0.1 + vertex 21.8514 -24.6984 -0.1 + vertex 21.6873 -24.6616 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1247 -27.4424 -0.1 + vertex 21.6873 -24.6616 -0.1 + vertex 21.63 -24.6221 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7143 -24.4589 -0.1 + vertex 19.6689 -23.1024 -0.1 + vertex 21.6518 -24.5601 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.454 -24.761 -0.1 + vertex 20.1247 -27.4424 -0.1 + vertex 25.3891 -27.4375 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6518 -24.5601 -0.1 + vertex 19.6689 -23.1024 -0.1 + vertex 21.63 -24.6221 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.0503 -23.7798 -0.1 + vertex 21.63 -24.6221 -0.1 + vertex 19.6689 -23.1024 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.4501 -24.5093 -0.1 + vertex 21.63 -24.6221 -0.1 + vertex 19.0503 -23.7798 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.63 -24.6221 -0.1 + vertex 18.4501 -24.5093 -0.1 + vertex 20.1247 -27.4424 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.8667 -25.2923 -0.1 + vertex 20.1247 -27.4424 -0.1 + vertex 18.4501 -24.5093 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.4656 -25.8764 -0.1 + vertex 20.1247 -27.4424 -0.1 + vertex 17.8667 -25.2923 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.0901 -26.4624 -0.1 + vertex 20.1247 -27.4424 -0.1 + vertex 17.4656 -25.8764 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1247 -27.4424 -0.1 + vertex 17.0901 -26.4624 -0.1 + vertex 19.9171 -28.0436 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 16.7406 -27.0496 -0.1 + vertex 19.9171 -28.0436 -0.1 + vertex 17.0901 -26.4624 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.9171 -28.0436 -0.1 + vertex 16.7406 -27.0496 -0.1 + vertex 19.6992 -28.7679 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 16.4172 -27.6373 -0.1 + vertex 19.6992 -28.7679 -0.1 + vertex 16.7406 -27.0496 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6992 -28.7679 -0.1 + vertex 16.4172 -27.6373 -0.1 + vertex 19.5256 -29.5327 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 16.1203 -28.2246 -0.1 + vertex 19.5256 -29.5327 -0.1 + vertex 16.4172 -27.6373 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.8502 -28.8109 -0.1 + vertex 19.5256 -29.5327 -0.1 + vertex 16.1203 -28.2246 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5256 -29.5327 -0.1 + vertex 15.8502 -28.8109 -0.1 + vertex 19.3985 -30.306 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.6071 -29.3953 -0.1 + vertex 19.3985 -30.306 -0.1 + vertex 15.8502 -28.8109 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.3912 -29.9771 -0.1 + vertex 19.3985 -30.306 -0.1 + vertex 15.6071 -29.3953 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3985 -30.306 -0.1 + vertex 15.3912 -29.9771 -0.1 + vertex 19.3204 -31.0557 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.2028 -30.5555 -0.1 + vertex 19.3204 -31.0557 -0.1 + vertex 15.3912 -29.9771 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3204 -31.0557 -0.1 + vertex 15.2028 -30.5555 -0.1 + vertex 19.2935 -31.7496 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.0423 -31.1299 -0.1 + vertex 19.2935 -31.7496 -0.1 + vertex 15.2028 -30.5555 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.9098 -31.6993 -0.1 + vertex 19.2935 -31.7496 -0.1 + vertex 15.0423 -31.1299 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3203 -32.3556 -0.1 + vertex 14.9098 -31.6993 -0.1 + vertex 14.8056 -32.2631 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3545 -32.6156 -0.1 + vertex 14.8056 -32.2631 -0.1 + vertex 14.73 -32.8205 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.403 -32.8415 -0.1 + vertex 14.73 -32.8205 -0.1 + vertex 14.6832 -33.3707 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.403 -32.8415 -0.1 + vertex 14.6832 -33.3707 -0.1 + vertex 14.6656 -33.913 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.466 -33.0295 -0.1 + vertex 14.6656 -33.913 -0.1 + vertex 14.6774 -34.4466 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5439 -33.1754 -0.1 + vertex 14.6774 -34.4466 -0.1 + vertex 14.7369 -35.0944 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3392 -33.9144 -0.1 + vertex 18.4669 -38.5591 -0.1 + vertex 19.1073 -38.5852 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 18.1792 -38.5233 -0.1 + vertex 18.4669 -38.5591 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 17.9062 -38.4707 -0.1 + vertex 18.1792 -38.5233 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 17.6424 -38.4 -0.1 + vertex 17.9062 -38.4707 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 17.3825 -38.3101 -0.1 + vertex 17.6424 -38.4 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 17.1211 -38.1997 -0.1 + vertex 17.3825 -38.3101 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 16.8529 -38.0675 -0.1 + vertex 17.1211 -38.1997 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5439 -33.1754 -0.1 + vertex 14.7369 -35.0944 -0.1 + vertex 14.8496 -35.6738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 16.342 -37.7658 -0.1 + vertex 16.8529 -38.0675 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5439 -33.1754 -0.1 + vertex 14.8496 -35.6738 -0.1 + vertex 14.927 -35.9398 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 16.1153 -37.6039 -0.1 + vertex 16.342 -37.7658 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.907 -37.4336 -0.1 + vertex 16.1153 -37.6039 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.7167 -37.2541 -0.1 + vertex 15.907 -37.4336 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.544 -37.0647 -0.1 + vertex 15.7167 -37.2541 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.3884 -36.8644 -0.1 + vertex 15.544 -37.0647 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.2493 -36.6526 -0.1 + vertex 15.3884 -36.8644 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.1264 -36.4284 -0.1 + vertex 15.2493 -36.6526 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 14.927 -35.9398 -0.1 + vertex 15.0191 -36.1911 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 15.0191 -36.1911 -0.1 + vertex 15.1264 -36.4284 -0.1 + endloop + endfacet + facet normal -0.116346 -0.993209 0 + outer loop + vertex 28.4483 -19.1654 -0.1 + vertex 29.0007 -19.2301 0 + vertex 28.4483 -19.1654 0 + endloop + endfacet + facet normal -0.116346 -0.993209 -0 + outer loop + vertex 29.0007 -19.2301 0 + vertex 28.4483 -19.1654 -0.1 + vertex 29.0007 -19.2301 -0.1 + endloop + endfacet + facet normal -0.215114 -0.976589 0 + outer loop + vertex 29.0007 -19.2301 -0.1 + vertex 29.5013 -19.3404 0 + vertex 29.0007 -19.2301 0 + endloop + endfacet + facet normal -0.215114 -0.976589 -0 + outer loop + vertex 29.5013 -19.3404 0 + vertex 29.0007 -19.2301 -0.1 + vertex 29.5013 -19.3404 -0.1 + endloop + endfacet + facet normal -0.328588 -0.944473 0 + outer loop + vertex 29.5013 -19.3404 -0.1 + vertex 29.9546 -19.4981 0 + vertex 29.5013 -19.3404 0 + endloop + endfacet + facet normal -0.328588 -0.944473 -0 + outer loop + vertex 29.9546 -19.4981 0 + vertex 29.5013 -19.3404 -0.1 + vertex 29.9546 -19.4981 -0.1 + endloop + endfacet + facet normal -0.450382 -0.892836 0 + outer loop + vertex 29.9546 -19.4981 -0.1 + vertex 30.3649 -19.705 0 + vertex 29.9546 -19.4981 0 + endloop + endfacet + facet normal -0.450382 -0.892836 -0 + outer loop + vertex 30.3649 -19.705 0 + vertex 29.9546 -19.4981 -0.1 + vertex 30.3649 -19.705 -0.1 + endloop + endfacet + facet normal -0.570354 -0.821399 0 + outer loop + vertex 30.3649 -19.705 -0.1 + vertex 30.7365 -19.9631 0 + vertex 30.3649 -19.705 0 + endloop + endfacet + facet normal -0.570354 -0.821399 -0 + outer loop + vertex 30.7365 -19.9631 0 + vertex 30.3649 -19.705 -0.1 + vertex 30.7365 -19.9631 -0.1 + endloop + endfacet + facet normal -0.677745 -0.735297 0 + outer loop + vertex 30.7365 -19.9631 -0.1 + vertex 31.074 -20.2742 0 + vertex 30.7365 -19.9631 0 + endloop + endfacet + facet normal -0.677745 -0.735297 -0 + outer loop + vertex 31.074 -20.2742 0 + vertex 30.7365 -19.9631 -0.1 + vertex 31.074 -20.2742 -0.1 + endloop + endfacet + facet normal -0.765393 -0.643563 0 + outer loop + vertex 31.3816 -20.64 -0.1 + vertex 31.074 -20.2742 0 + vertex 31.074 -20.2742 -0.1 + endloop + endfacet + facet normal -0.765393 -0.643563 0 + outer loop + vertex 31.074 -20.2742 0 + vertex 31.3816 -20.64 -0.1 + vertex 31.3816 -20.64 0 + endloop + endfacet + facet normal -0.833589 -0.552384 0 + outer loop + vertex 31.6298 -21.0145 -0.1 + vertex 31.3816 -20.64 0 + vertex 31.3816 -20.64 -0.1 + endloop + endfacet + facet normal -0.833589 -0.552384 0 + outer loop + vertex 31.3816 -20.64 0 + vertex 31.6298 -21.0145 -0.1 + vertex 31.6298 -21.0145 0 + endloop + endfacet + facet normal -0.898247 -0.439492 0 + outer loop + vertex 31.8204 -21.404 -0.1 + vertex 31.6298 -21.0145 0 + vertex 31.6298 -21.0145 -0.1 + endloop + endfacet + facet normal -0.898247 -0.439492 0 + outer loop + vertex 31.6298 -21.0145 0 + vertex 31.8204 -21.404 -0.1 + vertex 31.8204 -21.404 0 + endloop + endfacet + facet normal -0.951943 -0.306275 0 + outer loop + vertex 31.9549 -21.8223 -0.1 + vertex 31.8204 -21.404 0 + vertex 31.8204 -21.404 -0.1 + endloop + endfacet + facet normal -0.951943 -0.306275 0 + outer loop + vertex 31.8204 -21.404 0 + vertex 31.9549 -21.8223 -0.1 + vertex 31.9549 -21.8223 0 + endloop + endfacet + facet normal -0.985239 -0.171183 0 + outer loop + vertex 32.0349 -22.2828 -0.1 + vertex 31.9549 -21.8223 0 + vertex 31.9549 -21.8223 -0.1 + endloop + endfacet + facet normal -0.985239 -0.171183 0 + outer loop + vertex 31.9549 -21.8223 0 + vertex 32.0349 -22.2828 -0.1 + vertex 32.0349 -22.2828 0 + endloop + endfacet + facet normal -0.998641 -0.0521185 0 + outer loop + vertex 32.0619 -22.7991 -0.1 + vertex 32.0349 -22.2828 0 + vertex 32.0349 -22.2828 -0.1 + endloop + endfacet + facet normal -0.998641 -0.0521185 0 + outer loop + vertex 32.0349 -22.2828 0 + vertex 32.0619 -22.7991 -0.1 + vertex 32.0619 -22.7991 0 + endloop + endfacet + facet normal -0.999117 0.0420155 0 + outer loop + vertex 32.0372 -23.3848 -0.1 + vertex 32.0619 -22.7991 0 + vertex 32.0619 -22.7991 -0.1 + endloop + endfacet + facet normal -0.999117 0.0420155 0 + outer loop + vertex 32.0619 -22.7991 0 + vertex 32.0372 -23.3848 -0.1 + vertex 32.0372 -23.3848 0 + endloop + endfacet + facet normal -0.993814 0.111054 0 + outer loop + vertex 31.9625 -24.0535 -0.1 + vertex 32.0372 -23.3848 0 + vertex 32.0372 -23.3848 -0.1 + endloop + endfacet + facet normal -0.993814 0.111054 0 + outer loop + vertex 32.0372 -23.3848 0 + vertex 31.9625 -24.0535 -0.1 + vertex 31.9625 -24.0535 0 + endloop + endfacet + facet normal -0.98726 0.159117 0 + outer loop + vertex 31.8392 -24.8188 -0.1 + vertex 31.9625 -24.0535 0 + vertex 31.9625 -24.0535 -0.1 + endloop + endfacet + facet normal -0.98726 0.159117 0 + outer loop + vertex 31.9625 -24.0535 0 + vertex 31.8392 -24.8188 -0.1 + vertex 31.8392 -24.8188 0 + endloop + endfacet + facet normal -0.984533 0.175198 0 + outer loop + vertex 31.6784 -25.7224 -0.1 + vertex 31.8392 -24.8188 0 + vertex 31.8392 -24.8188 -0.1 + endloop + endfacet + facet normal -0.984533 0.175198 0 + outer loop + vertex 31.8392 -24.8188 0 + vertex 31.6784 -25.7224 -0.1 + vertex 31.6784 -25.7224 0 + endloop + endfacet + facet normal -0.977413 0.211338 0 + outer loop + vertex 31.6003 -26.0834 -0.1 + vertex 31.6784 -25.7224 0 + vertex 31.6784 -25.7224 -0.1 + endloop + endfacet + facet normal -0.977413 0.211338 0 + outer loop + vertex 31.6784 -25.7224 0 + vertex 31.6003 -26.0834 -0.1 + vertex 31.6003 -26.0834 0 + endloop + endfacet + facet normal -0.958488 0.285133 0 + outer loop + vertex 31.5092 -26.3899 -0.1 + vertex 31.6003 -26.0834 0 + vertex 31.6003 -26.0834 -0.1 + endloop + endfacet + facet normal -0.958488 0.285133 0 + outer loop + vertex 31.6003 -26.0834 0 + vertex 31.5092 -26.3899 -0.1 + vertex 31.5092 -26.3899 0 + endloop + endfacet + facet normal -0.912047 0.410085 0 + outer loop + vertex 31.3939 -26.6463 -0.1 + vertex 31.5092 -26.3899 0 + vertex 31.5092 -26.3899 -0.1 + endloop + endfacet + facet normal -0.912047 0.410085 0 + outer loop + vertex 31.5092 -26.3899 0 + vertex 31.3939 -26.6463 -0.1 + vertex 31.3939 -26.6463 0 + endloop + endfacet + facet normal -0.814021 0.580836 0 + outer loop + vertex 31.2435 -26.857 -0.1 + vertex 31.3939 -26.6463 0 + vertex 31.3939 -26.6463 -0.1 + endloop + endfacet + facet normal -0.814021 0.580836 0 + outer loop + vertex 31.3939 -26.6463 0 + vertex 31.2435 -26.857 -0.1 + vertex 31.2435 -26.857 0 + endloop + endfacet + facet normal -0.653404 0.75701 0 + outer loop + vertex 31.2435 -26.857 -0.1 + vertex 31.047 -27.0266 0 + vertex 31.2435 -26.857 0 + endloop + endfacet + facet normal -0.653404 0.75701 0 + outer loop + vertex 31.047 -27.0266 0 + vertex 31.2435 -26.857 -0.1 + vertex 31.047 -27.0266 -0.1 + endloop + endfacet + facet normal -0.464184 0.885739 0 + outer loop + vertex 31.047 -27.0266 -0.1 + vertex 30.7934 -27.1595 0 + vertex 31.047 -27.0266 0 + endloop + endfacet + facet normal -0.464184 0.885739 0 + outer loop + vertex 30.7934 -27.1595 0 + vertex 31.047 -27.0266 -0.1 + vertex 30.7934 -27.1595 -0.1 + endloop + endfacet + facet normal -0.298657 0.954361 0 + outer loop + vertex 30.7934 -27.1595 -0.1 + vertex 30.4717 -27.2602 0 + vertex 30.7934 -27.1595 0 + endloop + endfacet + facet normal -0.298657 0.954361 0 + outer loop + vertex 30.4717 -27.2602 0 + vertex 30.7934 -27.1595 -0.1 + vertex 30.4717 -27.2602 -0.1 + endloop + endfacet + facet normal -0.17896 0.983856 0 + outer loop + vertex 30.4717 -27.2602 -0.1 + vertex 30.0709 -27.3331 0 + vertex 30.4717 -27.2602 0 + endloop + endfacet + facet normal -0.17896 0.983856 0 + outer loop + vertex 30.0709 -27.3331 0 + vertex 30.4717 -27.2602 -0.1 + vertex 30.0709 -27.3331 -0.1 + endloop + endfacet + facet normal -0.100534 0.994934 0 + outer loop + vertex 30.0709 -27.3331 -0.1 + vertex 29.58 -27.3827 0 + vertex 30.0709 -27.3331 0 + endloop + endfacet + facet normal -0.100534 0.994934 0 + outer loop + vertex 29.58 -27.3827 0 + vertex 30.0709 -27.3331 -0.1 + vertex 29.58 -27.3827 -0.1 + endloop + endfacet + facet normal -0.0519093 0.998652 0 + outer loop + vertex 29.58 -27.3827 -0.1 + vertex 28.988 -27.4135 0 + vertex 29.58 -27.3827 0 + endloop + endfacet + facet normal -0.0519093 0.998652 0 + outer loop + vertex 28.988 -27.4135 0 + vertex 29.58 -27.3827 -0.1 + vertex 28.988 -27.4135 -0.1 + endloop + endfacet + facet normal -0.014953 0.999888 0 + outer loop + vertex 28.988 -27.4135 -0.1 + vertex 27.4568 -27.4364 0 + vertex 28.988 -27.4135 0 + endloop + endfacet + facet normal -0.014953 0.999888 0 + outer loop + vertex 27.4568 -27.4364 0 + vertex 28.988 -27.4135 -0.1 + vertex 27.4568 -27.4364 -0.1 + endloop + endfacet + facet normal -0.000556252 1 0 + outer loop + vertex 27.4568 -27.4364 -0.1 + vertex 25.3891 -27.4375 0 + vertex 27.4568 -27.4364 0 + endloop + endfacet + facet normal -0.000556252 1 0 + outer loop + vertex 25.3891 -27.4375 0 + vertex 27.4568 -27.4364 -0.1 + vertex 25.3891 -27.4375 -0.1 + endloop + endfacet + facet normal -0.00092424 1 0 + outer loop + vertex 25.3891 -27.4375 -0.1 + vertex 20.1247 -27.4424 0 + vertex 25.3891 -27.4375 0 + endloop + endfacet + facet normal -0.00092424 1 0 + outer loop + vertex 20.1247 -27.4424 0 + vertex 25.3891 -27.4375 -0.1 + vertex 20.1247 -27.4424 -0.1 + endloop + endfacet + facet normal -0.945282 0.326254 0 + outer loop + vertex 19.9171 -28.0436 -0.1 + vertex 20.1247 -27.4424 0 + vertex 20.1247 -27.4424 -0.1 + endloop + endfacet + facet normal -0.945282 0.326254 0 + outer loop + vertex 20.1247 -27.4424 0 + vertex 19.9171 -28.0436 -0.1 + vertex 19.9171 -28.0436 0 + endloop + endfacet + facet normal -0.957593 0.288124 0 + outer loop + vertex 19.6992 -28.7679 -0.1 + vertex 19.9171 -28.0436 0 + vertex 19.9171 -28.0436 -0.1 + endloop + endfacet + facet normal -0.957593 0.288124 0 + outer loop + vertex 19.9171 -28.0436 0 + vertex 19.6992 -28.7679 -0.1 + vertex 19.6992 -28.7679 0 + endloop + endfacet + facet normal -0.97518 0.221412 0 + outer loop + vertex 19.5256 -29.5327 -0.1 + vertex 19.6992 -28.7679 0 + vertex 19.6992 -28.7679 -0.1 + endloop + endfacet + facet normal -0.97518 0.221412 0 + outer loop + vertex 19.6992 -28.7679 0 + vertex 19.5256 -29.5327 -0.1 + vertex 19.5256 -29.5327 0 + endloop + endfacet + facet normal -0.986769 0.16213 0 + outer loop + vertex 19.3985 -30.306 -0.1 + vertex 19.5256 -29.5327 0 + vertex 19.5256 -29.5327 -0.1 + endloop + endfacet + facet normal -0.986769 0.16213 0 + outer loop + vertex 19.5256 -29.5327 0 + vertex 19.3985 -30.306 -0.1 + vertex 19.3985 -30.306 0 + endloop + endfacet + facet normal -0.994613 0.103657 0 + outer loop + vertex 19.3204 -31.0557 -0.1 + vertex 19.3985 -30.306 0 + vertex 19.3985 -30.306 -0.1 + endloop + endfacet + facet normal -0.994613 0.103657 0 + outer loop + vertex 19.3985 -30.306 0 + vertex 19.3204 -31.0557 -0.1 + vertex 19.3204 -31.0557 0 + endloop + endfacet + facet normal -0.999252 0.0386793 0 + outer loop + vertex 19.2935 -31.7496 -0.1 + vertex 19.3204 -31.0557 0 + vertex 19.3204 -31.0557 -0.1 + endloop + endfacet + facet normal -0.999252 0.0386793 0 + outer loop + vertex 19.3204 -31.0557 0 + vertex 19.2935 -31.7496 -0.1 + vertex 19.2935 -31.7496 0 + endloop + endfacet + facet normal -0.999028 -0.0440878 0 + outer loop + vertex 19.3203 -32.3556 -0.1 + vertex 19.2935 -31.7496 0 + vertex 19.2935 -31.7496 -0.1 + endloop + endfacet + facet normal -0.999028 -0.0440878 0 + outer loop + vertex 19.2935 -31.7496 0 + vertex 19.3203 -32.3556 -0.1 + vertex 19.3203 -32.3556 0 + endloop + endfacet + facet normal -0.991457 -0.130433 0 + outer loop + vertex 19.3545 -32.6156 -0.1 + vertex 19.3203 -32.3556 0 + vertex 19.3203 -32.3556 -0.1 + endloop + endfacet + facet normal -0.991457 -0.130433 0 + outer loop + vertex 19.3203 -32.3556 0 + vertex 19.3545 -32.6156 -0.1 + vertex 19.3545 -32.6156 0 + endloop + endfacet + facet normal -0.977754 -0.209757 0 + outer loop + vertex 19.403 -32.8415 -0.1 + vertex 19.3545 -32.6156 0 + vertex 19.3545 -32.6156 -0.1 + endloop + endfacet + facet normal -0.977754 -0.209757 0 + outer loop + vertex 19.3545 -32.6156 0 + vertex 19.403 -32.8415 -0.1 + vertex 19.403 -32.8415 0 + endloop + endfacet + facet normal -0.948071 -0.31806 0 + outer loop + vertex 19.466 -33.0295 -0.1 + vertex 19.403 -32.8415 0 + vertex 19.403 -32.8415 -0.1 + endloop + endfacet + facet normal -0.948071 -0.31806 0 + outer loop + vertex 19.403 -32.8415 0 + vertex 19.466 -33.0295 -0.1 + vertex 19.466 -33.0295 0 + endloop + endfacet + facet normal -0.882102 -0.471058 0 + outer loop + vertex 19.5439 -33.1754 -0.1 + vertex 19.466 -33.0295 0 + vertex 19.466 -33.0295 -0.1 + endloop + endfacet + facet normal -0.882102 -0.471058 0 + outer loop + vertex 19.466 -33.0295 0 + vertex 19.5439 -33.1754 -0.1 + vertex 19.5439 -33.1754 0 + endloop + endfacet + facet normal -0.777019 -0.629477 0 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 19.5439 -33.1754 0 + vertex 19.5439 -33.1754 -0.1 + endloop + endfacet + facet normal -0.777019 -0.629477 0 + outer loop + vertex 19.5439 -33.1754 0 + vertex 19.7677 -33.4516 -0.1 + vertex 19.7677 -33.4516 0 + endloop + endfacet + facet normal -0.679559 -0.73362 0 + outer loop + vertex 19.7677 -33.4516 -0.1 + vertex 20.0345 -33.6987 0 + vertex 19.7677 -33.4516 0 + endloop + endfacet + facet normal -0.679559 -0.73362 -0 + outer loop + vertex 20.0345 -33.6987 0 + vertex 19.7677 -33.4516 -0.1 + vertex 20.0345 -33.6987 -0.1 + endloop + endfacet + facet normal -0.577724 -0.816232 0 + outer loop + vertex 20.0345 -33.6987 -0.1 + vertex 20.3392 -33.9144 0 + vertex 20.0345 -33.6987 0 + endloop + endfacet + facet normal -0.577724 -0.816232 -0 + outer loop + vertex 20.3392 -33.9144 0 + vertex 20.0345 -33.6987 -0.1 + vertex 20.3392 -33.9144 -0.1 + endloop + endfacet + facet normal -0.474279 -0.880374 0 + outer loop + vertex 20.3392 -33.9144 -0.1 + vertex 20.6768 -34.0963 0 + vertex 20.3392 -33.9144 0 + endloop + endfacet + facet normal -0.474279 -0.880374 -0 + outer loop + vertex 20.6768 -34.0963 0 + vertex 20.3392 -33.9144 -0.1 + vertex 20.6768 -34.0963 -0.1 + endloop + endfacet + facet normal -0.370342 -0.928896 0 + outer loop + vertex 20.6768 -34.0963 -0.1 + vertex 21.0421 -34.2419 0 + vertex 20.6768 -34.0963 0 + endloop + endfacet + facet normal -0.370342 -0.928896 -0 + outer loop + vertex 21.0421 -34.2419 0 + vertex 20.6768 -34.0963 -0.1 + vertex 21.0421 -34.2419 -0.1 + endloop + endfacet + facet normal -0.266037 -0.963963 0 + outer loop + vertex 21.0421 -34.2419 -0.1 + vertex 21.43 -34.349 0 + vertex 21.0421 -34.2419 0 + endloop + endfacet + facet normal -0.266037 -0.963963 -0 + outer loop + vertex 21.43 -34.349 0 + vertex 21.0421 -34.2419 -0.1 + vertex 21.43 -34.349 -0.1 + endloop + endfacet + facet normal -0.160906 -0.98697 0 + outer loop + vertex 21.43 -34.349 -0.1 + vertex 21.8355 -34.4151 0 + vertex 21.43 -34.349 0 + endloop + endfacet + facet normal -0.160906 -0.98697 -0 + outer loop + vertex 21.8355 -34.4151 0 + vertex 21.43 -34.349 -0.1 + vertex 21.8355 -34.4151 -0.1 + endloop + endfacet + facet normal -0.0544036 -0.998519 0 + outer loop + vertex 21.8355 -34.4151 -0.1 + vertex 22.2534 -34.4379 0 + vertex 21.8355 -34.4151 0 + endloop + endfacet + facet normal -0.0544036 -0.998519 -0 + outer loop + vertex 22.2534 -34.4379 0 + vertex 21.8355 -34.4151 -0.1 + vertex 22.2534 -34.4379 -0.1 + endloop + endfacet + facet normal 0.0273252 -0.999627 0 + outer loop + vertex 22.2534 -34.4379 -0.1 + vertex 22.5956 -34.4285 0 + vertex 22.2534 -34.4379 0 + endloop + endfacet + facet normal 0.0273252 -0.999627 0 + outer loop + vertex 22.5956 -34.4285 0 + vertex 22.2534 -34.4379 -0.1 + vertex 22.5956 -34.4285 -0.1 + endloop + endfacet + facet normal 0.0869987 -0.996208 0 + outer loop + vertex 22.5956 -34.4285 -0.1 + vertex 22.9315 -34.3992 0 + vertex 22.5956 -34.4285 0 + endloop + endfacet + facet normal 0.0869987 -0.996208 0 + outer loop + vertex 22.9315 -34.3992 0 + vertex 22.5956 -34.4285 -0.1 + vertex 22.9315 -34.3992 -0.1 + endloop + endfacet + facet normal 0.150489 -0.988612 0 + outer loop + vertex 22.9315 -34.3992 -0.1 + vertex 23.2634 -34.3487 0 + vertex 22.9315 -34.3992 0 + endloop + endfacet + facet normal 0.150489 -0.988612 0 + outer loop + vertex 23.2634 -34.3487 0 + vertex 22.9315 -34.3992 -0.1 + vertex 23.2634 -34.3487 -0.1 + endloop + endfacet + facet normal 0.215659 -0.976469 0 + outer loop + vertex 23.2634 -34.3487 -0.1 + vertex 23.5933 -34.2758 0 + vertex 23.2634 -34.3487 0 + endloop + endfacet + facet normal 0.215659 -0.976469 0 + outer loop + vertex 23.5933 -34.2758 0 + vertex 23.2634 -34.3487 -0.1 + vertex 23.5933 -34.2758 -0.1 + endloop + endfacet + facet normal 0.280239 -0.95993 0 + outer loop + vertex 23.5933 -34.2758 -0.1 + vertex 23.9237 -34.1793 0 + vertex 23.5933 -34.2758 0 + endloop + endfacet + facet normal 0.280239 -0.95993 0 + outer loop + vertex 23.9237 -34.1793 0 + vertex 23.5933 -34.2758 -0.1 + vertex 23.9237 -34.1793 -0.1 + endloop + endfacet + facet normal 0.342076 -0.939672 0 + outer loop + vertex 23.9237 -34.1793 -0.1 + vertex 24.2566 -34.0582 0 + vertex 23.9237 -34.1793 0 + endloop + endfacet + facet normal 0.342076 -0.939672 0 + outer loop + vertex 24.2566 -34.0582 0 + vertex 23.9237 -34.1793 -0.1 + vertex 24.2566 -34.0582 -0.1 + endloop + endfacet + facet normal 0.399452 -0.916754 0 + outer loop + vertex 24.2566 -34.0582 -0.1 + vertex 24.5942 -33.911 0 + vertex 24.2566 -34.0582 0 + endloop + endfacet + facet normal 0.399452 -0.916754 0 + outer loop + vertex 24.5942 -33.911 0 + vertex 24.2566 -34.0582 -0.1 + vertex 24.5942 -33.911 -0.1 + endloop + endfacet + facet normal 0.451238 -0.892404 0 + outer loop + vertex 24.5942 -33.911 -0.1 + vertex 24.9388 -33.7368 0 + vertex 24.5942 -33.911 0 + endloop + endfacet + facet normal 0.451238 -0.892404 0 + outer loop + vertex 24.9388 -33.7368 0 + vertex 24.5942 -33.911 -0.1 + vertex 24.9388 -33.7368 -0.1 + endloop + endfacet + facet normal 0.496895 -0.867811 0 + outer loop + vertex 24.9388 -33.7368 -0.1 + vertex 25.2926 -33.5342 0 + vertex 24.9388 -33.7368 0 + endloop + endfacet + facet normal 0.496895 -0.867811 0 + outer loop + vertex 25.2926 -33.5342 0 + vertex 24.9388 -33.7368 -0.1 + vertex 25.2926 -33.5342 -0.1 + endloop + endfacet + facet normal 0.536389 -0.843971 0 + outer loop + vertex 25.2926 -33.5342 -0.1 + vertex 25.6577 -33.3022 0 + vertex 25.2926 -33.5342 0 + endloop + endfacet + facet normal 0.536389 -0.843971 0 + outer loop + vertex 25.6577 -33.3022 0 + vertex 25.2926 -33.5342 -0.1 + vertex 25.6577 -33.3022 -0.1 + endloop + endfacet + facet normal 0.584792 -0.811183 0 + outer loop + vertex 25.6577 -33.3022 -0.1 + vertex 26.4309 -32.7448 0 + vertex 25.6577 -33.3022 0 + endloop + endfacet + facet normal 0.584792 -0.811183 0 + outer loop + vertex 26.4309 -32.7448 0 + vertex 25.6577 -33.3022 -0.1 + vertex 26.4309 -32.7448 -0.1 + endloop + endfacet + facet normal 0.632266 -0.774751 0 + outer loop + vertex 26.4309 -32.7448 -0.1 + vertex 27.276 -32.055 0 + vertex 26.4309 -32.7448 0 + endloop + endfacet + facet normal 0.632266 -0.774751 0 + outer loop + vertex 27.276 -32.055 0 + vertex 26.4309 -32.7448 -0.1 + vertex 27.276 -32.055 -0.1 + endloop + endfacet + facet normal 0.66466 -0.747146 0 + outer loop + vertex 27.276 -32.055 -0.1 + vertex 28.2108 -31.2235 0 + vertex 27.276 -32.055 0 + endloop + endfacet + facet normal 0.66466 -0.747146 0 + outer loop + vertex 28.2108 -31.2235 0 + vertex 27.276 -32.055 -0.1 + vertex 28.2108 -31.2235 -0.1 + endloop + endfacet + facet normal 0.662871 -0.748733 0 + outer loop + vertex 28.2108 -31.2235 -0.1 + vertex 28.5495 -30.9236 0 + vertex 28.2108 -31.2235 0 + endloop + endfacet + facet normal 0.662871 -0.748733 0 + outer loop + vertex 28.5495 -30.9236 0 + vertex 28.2108 -31.2235 -0.1 + vertex 28.5495 -30.9236 -0.1 + endloop + endfacet + facet normal 0.615947 -0.787787 0 + outer loop + vertex 28.5495 -30.9236 -0.1 + vertex 28.8369 -30.6989 0 + vertex 28.5495 -30.9236 0 + endloop + endfacet + facet normal 0.615947 -0.787787 0 + outer loop + vertex 28.8369 -30.6989 0 + vertex 28.5495 -30.9236 -0.1 + vertex 28.8369 -30.6989 -0.1 + endloop + endfacet + facet normal 0.524001 -0.851718 0 + outer loop + vertex 28.8369 -30.6989 -0.1 + vertex 29.0845 -30.5466 0 + vertex 28.8369 -30.6989 0 + endloop + endfacet + facet normal 0.524001 -0.851718 0 + outer loop + vertex 29.0845 -30.5466 0 + vertex 28.8369 -30.6989 -0.1 + vertex 29.0845 -30.5466 -0.1 + endloop + endfacet + facet normal 0.352437 -0.935836 0 + outer loop + vertex 29.0845 -30.5466 -0.1 + vertex 29.3033 -30.4642 0 + vertex 29.0845 -30.5466 0 + endloop + endfacet + facet normal 0.352437 -0.935836 0 + outer loop + vertex 29.3033 -30.4642 0 + vertex 29.0845 -30.5466 -0.1 + vertex 29.3033 -30.4642 -0.1 + endloop + endfacet + facet normal 0.0751321 -0.997174 0 + outer loop + vertex 29.3033 -30.4642 -0.1 + vertex 29.5048 -30.449 0 + vertex 29.3033 -30.4642 0 + endloop + endfacet + facet normal 0.0751321 -0.997174 0 + outer loop + vertex 29.5048 -30.449 0 + vertex 29.3033 -30.4642 -0.1 + vertex 29.5048 -30.449 -0.1 + endloop + endfacet + facet normal -0.245256 -0.969458 0 + outer loop + vertex 29.5048 -30.449 -0.1 + vertex 29.7002 -30.4984 0 + vertex 29.5048 -30.449 0 + endloop + endfacet + facet normal -0.245256 -0.969458 -0 + outer loop + vertex 29.7002 -30.4984 0 + vertex 29.5048 -30.449 -0.1 + vertex 29.7002 -30.4984 -0.1 + endloop + endfacet + facet normal -0.485575 -0.874195 0 + outer loop + vertex 29.7002 -30.4984 -0.1 + vertex 29.9008 -30.6099 0 + vertex 29.7002 -30.4984 0 + endloop + endfacet + facet normal -0.485575 -0.874195 -0 + outer loop + vertex 29.9008 -30.6099 0 + vertex 29.7002 -30.4984 -0.1 + vertex 29.9008 -30.6099 -0.1 + endloop + endfacet + facet normal -0.618314 -0.785931 0 + outer loop + vertex 29.9008 -30.6099 -0.1 + vertex 30.1179 -30.7807 0 + vertex 29.9008 -30.6099 0 + endloop + endfacet + facet normal -0.618314 -0.785931 -0 + outer loop + vertex 30.1179 -30.7807 0 + vertex 29.9008 -30.6099 -0.1 + vertex 30.1179 -30.7807 -0.1 + endloop + endfacet + facet normal -0.761006 -0.648745 0 + outer loop + vertex 30.1812 -30.855 -0.1 + vertex 30.1179 -30.7807 0 + vertex 30.1179 -30.7807 -0.1 + endloop + endfacet + facet normal -0.761006 -0.648745 0 + outer loop + vertex 30.1179 -30.7807 0 + vertex 30.1812 -30.855 -0.1 + vertex 30.1812 -30.855 0 + endloop + endfacet + facet normal -0.923965 -0.382477 0 + outer loop + vertex 30.2187 -30.9454 -0.1 + vertex 30.1812 -30.855 0 + vertex 30.1812 -30.855 -0.1 + endloop + endfacet + facet normal -0.923965 -0.382477 0 + outer loop + vertex 30.1812 -30.855 0 + vertex 30.2187 -30.9454 -0.1 + vertex 30.2187 -30.9454 0 + endloop + endfacet + facet normal -0.994533 -0.104423 0 + outer loop + vertex 30.2299 -31.0524 -0.1 + vertex 30.2187 -30.9454 0 + vertex 30.2187 -30.9454 -0.1 + endloop + endfacet + facet normal -0.994533 -0.104423 0 + outer loop + vertex 30.2187 -30.9454 0 + vertex 30.2299 -31.0524 -0.1 + vertex 30.2299 -31.0524 0 + endloop + endfacet + facet normal -0.992515 0.122124 0 + outer loop + vertex 30.2146 -31.1764 -0.1 + vertex 30.2299 -31.0524 0 + vertex 30.2299 -31.0524 -0.1 + endloop + endfacet + facet normal -0.992515 0.122124 0 + outer loop + vertex 30.2299 -31.0524 0 + vertex 30.2146 -31.1764 -0.1 + vertex 30.2146 -31.1764 0 + endloop + endfacet + facet normal -0.95856 0.284892 0 + outer loop + vertex 30.1726 -31.3179 -0.1 + vertex 30.2146 -31.1764 0 + vertex 30.2146 -31.1764 -0.1 + endloop + endfacet + facet normal -0.95856 0.284892 0 + outer loop + vertex 30.2146 -31.1764 0 + vertex 30.1726 -31.3179 -0.1 + vertex 30.1726 -31.3179 0 + endloop + endfacet + facet normal -0.917421 0.397919 0 + outer loop + vertex 30.1034 -31.4773 -0.1 + vertex 30.1726 -31.3179 0 + vertex 30.1726 -31.3179 -0.1 + endloop + endfacet + facet normal -0.917421 0.397919 0 + outer loop + vertex 30.1726 -31.3179 0 + vertex 30.1034 -31.4773 -0.1 + vertex 30.1034 -31.4773 0 + endloop + endfacet + facet normal -0.861393 0.50794 0 + outer loop + vertex 29.8827 -31.8517 -0.1 + vertex 30.1034 -31.4773 0 + vertex 30.1034 -31.4773 -0.1 + endloop + endfacet + facet normal -0.861393 0.50794 0 + outer loop + vertex 30.1034 -31.4773 0 + vertex 29.8827 -31.8517 -0.1 + vertex 29.8827 -31.8517 0 + endloop + endfacet + facet normal -0.804973 0.593311 0 + outer loop + vertex 29.5499 -32.3032 -0.1 + vertex 29.8827 -31.8517 0 + vertex 29.8827 -31.8517 -0.1 + endloop + endfacet + facet normal -0.804973 0.593311 0 + outer loop + vertex 29.8827 -31.8517 0 + vertex 29.5499 -32.3032 -0.1 + vertex 29.5499 -32.3032 0 + endloop + endfacet + facet normal -0.76559 0.643329 0 + outer loop + vertex 29.1028 -32.8352 -0.1 + vertex 29.5499 -32.3032 0 + vertex 29.5499 -32.3032 -0.1 + endloop + endfacet + facet normal -0.76559 0.643329 0 + outer loop + vertex 29.5499 -32.3032 0 + vertex 29.1028 -32.8352 -0.1 + vertex 29.1028 -32.8352 0 + endloop + endfacet + facet normal -0.73778 0.675042 0 + outer loop + vertex 28.539 -33.4515 -0.1 + vertex 29.1028 -32.8352 0 + vertex 29.1028 -32.8352 -0.1 + endloop + endfacet + facet normal -0.73778 0.675042 0 + outer loop + vertex 29.1028 -32.8352 0 + vertex 28.539 -33.4515 -0.1 + vertex 28.539 -33.4515 0 + endloop + endfacet + facet normal -0.717743 0.696309 0 + outer loop + vertex 27.856 -34.1555 -0.1 + vertex 28.539 -33.4515 0 + vertex 28.539 -33.4515 -0.1 + endloop + endfacet + facet normal -0.717743 0.696309 0 + outer loop + vertex 28.539 -33.4515 0 + vertex 27.856 -34.1555 -0.1 + vertex 27.856 -34.1555 0 + endloop + endfacet + facet normal -0.702585 0.7116 0 + outer loop + vertex 27.856 -34.1555 -0.1 + vertex 27.3514 -34.6537 0 + vertex 27.856 -34.1555 0 + endloop + endfacet + facet normal -0.702585 0.7116 0 + outer loop + vertex 27.3514 -34.6537 0 + vertex 27.856 -34.1555 -0.1 + vertex 27.3514 -34.6537 -0.1 + endloop + endfacet + facet normal -0.683825 0.729646 0 + outer loop + vertex 27.3514 -34.6537 -0.1 + vertex 26.8832 -35.0925 0 + vertex 27.3514 -34.6537 0 + endloop + endfacet + facet normal -0.683825 0.729646 0 + outer loop + vertex 26.8832 -35.0925 0 + vertex 27.3514 -34.6537 -0.1 + vertex 26.8832 -35.0925 -0.1 + endloop + endfacet + facet normal -0.65863 0.752467 0 + outer loop + vertex 26.8832 -35.0925 -0.1 + vertex 26.4377 -35.4824 0 + vertex 26.8832 -35.0925 0 + endloop + endfacet + facet normal -0.65863 0.752467 0 + outer loop + vertex 26.4377 -35.4824 0 + vertex 26.8832 -35.0925 -0.1 + vertex 26.4377 -35.4824 -0.1 + endloop + endfacet + facet normal -0.627338 0.778747 0 + outer loop + vertex 26.4377 -35.4824 -0.1 + vertex 26.0012 -35.834 0 + vertex 26.4377 -35.4824 0 + endloop + endfacet + facet normal -0.627338 0.778747 0 + outer loop + vertex 26.0012 -35.834 0 + vertex 26.4377 -35.4824 -0.1 + vertex 26.0012 -35.834 -0.1 + endloop + endfacet + facet normal -0.591741 0.806128 0 + outer loop + vertex 26.0012 -35.834 -0.1 + vertex 25.5601 -36.1579 0 + vertex 26.0012 -35.834 0 + endloop + endfacet + facet normal -0.591741 0.806128 0 + outer loop + vertex 25.5601 -36.1579 0 + vertex 26.0012 -35.834 -0.1 + vertex 25.5601 -36.1579 -0.1 + endloop + endfacet + facet normal -0.554992 0.831856 0 + outer loop + vertex 25.5601 -36.1579 -0.1 + vertex 25.1006 -36.4644 0 + vertex 25.5601 -36.1579 0 + endloop + endfacet + facet normal -0.554992 0.831856 0 + outer loop + vertex 25.1006 -36.4644 0 + vertex 25.5601 -36.1579 -0.1 + vertex 25.1006 -36.4644 -0.1 + endloop + endfacet + facet normal -0.520754 0.853707 0 + outer loop + vertex 25.1006 -36.4644 -0.1 + vertex 24.6091 -36.7642 0 + vertex 25.1006 -36.4644 0 + endloop + endfacet + facet normal -0.520754 0.853707 0 + outer loop + vertex 24.6091 -36.7642 0 + vertex 25.1006 -36.4644 -0.1 + vertex 24.6091 -36.7642 -0.1 + endloop + endfacet + facet normal -0.492012 0.870588 0 + outer loop + vertex 24.6091 -36.7642 -0.1 + vertex 24.0719 -37.0678 0 + vertex 24.6091 -36.7642 0 + endloop + endfacet + facet normal -0.492012 0.870588 0 + outer loop + vertex 24.0719 -37.0678 0 + vertex 24.6091 -36.7642 -0.1 + vertex 24.0719 -37.0678 -0.1 + endloop + endfacet + facet normal -0.469837 0.882753 0 + outer loop + vertex 24.0719 -37.0678 -0.1 + vertex 23.2902 -37.4839 0 + vertex 24.0719 -37.0678 0 + endloop + endfacet + facet normal -0.469837 0.882753 0 + outer loop + vertex 23.2902 -37.4839 0 + vertex 24.0719 -37.0678 -0.1 + vertex 23.2902 -37.4839 -0.1 + endloop + endfacet + facet normal -0.440052 0.897972 0 + outer loop + vertex 23.2902 -37.4839 -0.1 + vertex 22.6041 -37.8201 0 + vertex 23.2902 -37.4839 0 + endloop + endfacet + facet normal -0.440052 0.897972 0 + outer loop + vertex 22.6041 -37.8201 0 + vertex 23.2902 -37.4839 -0.1 + vertex 22.6041 -37.8201 -0.1 + endloop + endfacet + facet normal -0.394271 0.918994 0 + outer loop + vertex 22.6041 -37.8201 -0.1 + vertex 21.9889 -38.084 0 + vertex 22.6041 -37.8201 0 + endloop + endfacet + facet normal -0.394271 0.918994 0 + outer loop + vertex 21.9889 -38.084 0 + vertex 22.6041 -37.8201 -0.1 + vertex 21.9889 -38.084 -0.1 + endloop + endfacet + facet normal -0.330435 0.943829 0 + outer loop + vertex 21.9889 -38.084 -0.1 + vertex 21.4197 -38.2833 0 + vertex 21.9889 -38.084 0 + endloop + endfacet + facet normal -0.330435 0.943829 0 + outer loop + vertex 21.4197 -38.2833 0 + vertex 21.9889 -38.084 -0.1 + vertex 21.4197 -38.2833 -0.1 + endloop + endfacet + facet normal -0.251155 0.967947 0 + outer loop + vertex 21.4197 -38.2833 -0.1 + vertex 20.8717 -38.4255 0 + vertex 21.4197 -38.2833 0 + endloop + endfacet + facet normal -0.251155 0.967947 0 + outer loop + vertex 20.8717 -38.4255 0 + vertex 21.4197 -38.2833 -0.1 + vertex 20.8717 -38.4255 -0.1 + endloop + endfacet + facet normal -0.165695 0.986177 0 + outer loop + vertex 20.8717 -38.4255 -0.1 + vertex 20.3202 -38.5182 0 + vertex 20.8717 -38.4255 0 + endloop + endfacet + facet normal -0.165695 0.986177 0 + outer loop + vertex 20.3202 -38.5182 0 + vertex 20.8717 -38.4255 -0.1 + vertex 20.3202 -38.5182 -0.1 + endloop + endfacet + facet normal -0.0871415 0.996196 0 + outer loop + vertex 20.3202 -38.5182 -0.1 + vertex 19.7403 -38.5689 0 + vertex 20.3202 -38.5182 0 + endloop + endfacet + facet normal -0.0871415 0.996196 0 + outer loop + vertex 19.7403 -38.5689 0 + vertex 20.3202 -38.5182 -0.1 + vertex 19.7403 -38.5689 -0.1 + endloop + endfacet + facet normal -0.0258263 0.999666 0 + outer loop + vertex 19.7403 -38.5689 -0.1 + vertex 19.1073 -38.5852 0 + vertex 19.7403 -38.5689 0 + endloop + endfacet + facet normal -0.0258263 0.999666 0 + outer loop + vertex 19.1073 -38.5852 0 + vertex 19.7403 -38.5689 -0.1 + vertex 19.1073 -38.5852 -0.1 + endloop + endfacet + facet normal 0.0407265 0.99917 -0 + outer loop + vertex 19.1073 -38.5852 -0.1 + vertex 18.4669 -38.5591 0 + vertex 19.1073 -38.5852 0 + endloop + endfacet + facet normal 0.0407265 0.99917 0 + outer loop + vertex 18.4669 -38.5591 0 + vertex 19.1073 -38.5852 -0.1 + vertex 18.4669 -38.5591 -0.1 + endloop + endfacet + facet normal 0.12356 0.992337 -0 + outer loop + vertex 18.4669 -38.5591 -0.1 + vertex 18.1792 -38.5233 0 + vertex 18.4669 -38.5591 0 + endloop + endfacet + facet normal 0.12356 0.992337 0 + outer loop + vertex 18.1792 -38.5233 0 + vertex 18.4669 -38.5591 -0.1 + vertex 18.1792 -38.5233 -0.1 + endloop + endfacet + facet normal 0.189246 0.98193 -0 + outer loop + vertex 18.1792 -38.5233 -0.1 + vertex 17.9062 -38.4707 0 + vertex 18.1792 -38.5233 0 + endloop + endfacet + facet normal 0.189246 0.98193 0 + outer loop + vertex 17.9062 -38.4707 0 + vertex 18.1792 -38.5233 -0.1 + vertex 17.9062 -38.4707 -0.1 + endloop + endfacet + facet normal 0.258743 0.965946 -0 + outer loop + vertex 17.9062 -38.4707 -0.1 + vertex 17.6424 -38.4 0 + vertex 17.9062 -38.4707 0 + endloop + endfacet + facet normal 0.258743 0.965946 0 + outer loop + vertex 17.6424 -38.4 0 + vertex 17.9062 -38.4707 -0.1 + vertex 17.6424 -38.4 -0.1 + endloop + endfacet + facet normal 0.326993 0.945027 -0 + outer loop + vertex 17.6424 -38.4 -0.1 + vertex 17.3825 -38.3101 0 + vertex 17.6424 -38.4 0 + endloop + endfacet + facet normal 0.326993 0.945027 0 + outer loop + vertex 17.3825 -38.3101 0 + vertex 17.6424 -38.4 -0.1 + vertex 17.3825 -38.3101 -0.1 + endloop + endfacet + facet normal 0.389172 0.921165 -0 + outer loop + vertex 17.3825 -38.3101 -0.1 + vertex 17.1211 -38.1997 0 + vertex 17.3825 -38.3101 0 + endloop + endfacet + facet normal 0.389172 0.921165 0 + outer loop + vertex 17.1211 -38.1997 0 + vertex 17.3825 -38.3101 -0.1 + vertex 17.1211 -38.1997 -0.1 + endloop + endfacet + facet normal 0.442006 0.897012 -0 + outer loop + vertex 17.1211 -38.1997 -0.1 + vertex 16.8529 -38.0675 0 + vertex 17.1211 -38.1997 0 + endloop + endfacet + facet normal 0.442006 0.897012 0 + outer loop + vertex 16.8529 -38.0675 0 + vertex 17.1211 -38.1997 -0.1 + vertex 16.8529 -38.0675 -0.1 + endloop + endfacet + facet normal 0.508496 0.861064 -0 + outer loop + vertex 16.8529 -38.0675 -0.1 + vertex 16.342 -37.7658 0 + vertex 16.8529 -38.0675 0 + endloop + endfacet + facet normal 0.508496 0.861064 0 + outer loop + vertex 16.342 -37.7658 0 + vertex 16.8529 -38.0675 -0.1 + vertex 16.342 -37.7658 -0.1 + endloop + endfacet + facet normal 0.581032 0.813881 -0 + outer loop + vertex 16.342 -37.7658 -0.1 + vertex 16.1153 -37.6039 0 + vertex 16.342 -37.7658 0 + endloop + endfacet + facet normal 0.581032 0.813881 0 + outer loop + vertex 16.1153 -37.6039 0 + vertex 16.342 -37.7658 -0.1 + vertex 16.1153 -37.6039 -0.1 + endloop + endfacet + facet normal 0.632987 0.774162 -0 + outer loop + vertex 16.1153 -37.6039 -0.1 + vertex 15.907 -37.4336 0 + vertex 16.1153 -37.6039 0 + endloop + endfacet + facet normal 0.632987 0.774162 0 + outer loop + vertex 15.907 -37.4336 0 + vertex 16.1153 -37.6039 -0.1 + vertex 15.907 -37.4336 -0.1 + endloop + endfacet + facet normal 0.68624 0.727375 -0 + outer loop + vertex 15.907 -37.4336 -0.1 + vertex 15.7167 -37.2541 0 + vertex 15.907 -37.4336 0 + endloop + endfacet + facet normal 0.68624 0.727375 0 + outer loop + vertex 15.7167 -37.2541 0 + vertex 15.907 -37.4336 -0.1 + vertex 15.7167 -37.2541 -0.1 + endloop + endfacet + facet normal 0.739053 0.673647 0 + outer loop + vertex 15.7167 -37.2541 0 + vertex 15.544 -37.0647 -0.1 + vertex 15.544 -37.0647 0 + endloop + endfacet + facet normal 0.739053 0.673647 0 + outer loop + vertex 15.544 -37.0647 -0.1 + vertex 15.7167 -37.2541 0 + vertex 15.7167 -37.2541 -0.1 + endloop + endfacet + facet normal 0.789576 0.613652 0 + outer loop + vertex 15.544 -37.0647 0 + vertex 15.3884 -36.8644 -0.1 + vertex 15.3884 -36.8644 0 + endloop + endfacet + facet normal 0.789576 0.613652 0 + outer loop + vertex 15.3884 -36.8644 -0.1 + vertex 15.544 -37.0647 0 + vertex 15.544 -37.0647 -0.1 + endloop + endfacet + facet normal 0.835985 0.548752 0 + outer loop + vertex 15.3884 -36.8644 0 + vertex 15.2493 -36.6526 -0.1 + vertex 15.2493 -36.6526 0 + endloop + endfacet + facet normal 0.835985 0.548752 0 + outer loop + vertex 15.2493 -36.6526 -0.1 + vertex 15.3884 -36.8644 0 + vertex 15.3884 -36.8644 -0.1 + endloop + endfacet + facet normal 0.876837 0.480788 0 + outer loop + vertex 15.2493 -36.6526 0 + vertex 15.1264 -36.4284 -0.1 + vertex 15.1264 -36.4284 0 + endloop + endfacet + facet normal 0.876837 0.480788 0 + outer loop + vertex 15.1264 -36.4284 -0.1 + vertex 15.2493 -36.6526 0 + vertex 15.2493 -36.6526 -0.1 + endloop + endfacet + facet normal 0.911228 0.411902 0 + outer loop + vertex 15.1264 -36.4284 0 + vertex 15.0191 -36.1911 -0.1 + vertex 15.0191 -36.1911 0 + endloop + endfacet + facet normal 0.911228 0.411902 0 + outer loop + vertex 15.0191 -36.1911 -0.1 + vertex 15.1264 -36.4284 0 + vertex 15.1264 -36.4284 -0.1 + endloop + endfacet + facet normal 0.938903 0.344183 0 + outer loop + vertex 15.0191 -36.1911 0 + vertex 14.927 -35.9398 -0.1 + vertex 14.927 -35.9398 0 + endloop + endfacet + facet normal 0.938903 0.344183 0 + outer loop + vertex 14.927 -35.9398 -0.1 + vertex 15.0191 -36.1911 0 + vertex 15.0191 -36.1911 -0.1 + endloop + endfacet + facet normal 0.960161 0.279447 0 + outer loop + vertex 14.927 -35.9398 0 + vertex 14.8496 -35.6738 -0.1 + vertex 14.8496 -35.6738 0 + endloop + endfacet + facet normal 0.960161 0.279447 0 + outer loop + vertex 14.8496 -35.6738 -0.1 + vertex 14.927 -35.9398 0 + vertex 14.927 -35.9398 -0.1 + endloop + endfacet + facet normal 0.981615 0.190873 0 + outer loop + vertex 14.8496 -35.6738 0 + vertex 14.7369 -35.0944 -0.1 + vertex 14.7369 -35.0944 0 + endloop + endfacet + facet normal 0.981615 0.190873 0 + outer loop + vertex 14.7369 -35.0944 -0.1 + vertex 14.8496 -35.6738 0 + vertex 14.8496 -35.6738 -0.1 + endloop + endfacet + facet normal 0.995797 0.0915901 0 + outer loop + vertex 14.7369 -35.0944 0 + vertex 14.6774 -34.4466 -0.1 + vertex 14.6774 -34.4466 0 + endloop + endfacet + facet normal 0.995797 0.0915901 0 + outer loop + vertex 14.6774 -34.4466 -0.1 + vertex 14.7369 -35.0944 0 + vertex 14.7369 -35.0944 -0.1 + endloop + endfacet + facet normal 0.999758 0.0220201 0 + outer loop + vertex 14.6774 -34.4466 0 + vertex 14.6656 -33.913 -0.1 + vertex 14.6656 -33.913 0 + endloop + endfacet + facet normal 0.999758 0.0220201 0 + outer loop + vertex 14.6656 -33.913 -0.1 + vertex 14.6774 -34.4466 0 + vertex 14.6774 -34.4466 -0.1 + endloop + endfacet + facet normal 0.999472 -0.03249 0 + outer loop + vertex 14.6656 -33.913 0 + vertex 14.6832 -33.3707 -0.1 + vertex 14.6832 -33.3707 0 + endloop + endfacet + facet normal 0.999472 -0.03249 0 + outer loop + vertex 14.6832 -33.3707 -0.1 + vertex 14.6656 -33.913 0 + vertex 14.6656 -33.913 -0.1 + endloop + endfacet + facet normal 0.996411 -0.0846524 0 + outer loop + vertex 14.6832 -33.3707 0 + vertex 14.73 -32.8205 -0.1 + vertex 14.73 -32.8205 0 + endloop + endfacet + facet normal 0.996411 -0.0846524 0 + outer loop + vertex 14.73 -32.8205 -0.1 + vertex 14.6832 -33.3707 0 + vertex 14.6832 -33.3707 -0.1 + endloop + endfacet + facet normal 0.990928 -0.134393 0 + outer loop + vertex 14.73 -32.8205 0 + vertex 14.8056 -32.2631 -0.1 + vertex 14.8056 -32.2631 0 + endloop + endfacet + facet normal 0.990928 -0.134393 0 + outer loop + vertex 14.8056 -32.2631 -0.1 + vertex 14.73 -32.8205 0 + vertex 14.73 -32.8205 -0.1 + endloop + endfacet + facet normal 0.983352 -0.181712 0 + outer loop + vertex 14.8056 -32.2631 0 + vertex 14.9098 -31.6993 -0.1 + vertex 14.9098 -31.6993 0 + endloop + endfacet + facet normal 0.983352 -0.181712 0 + outer loop + vertex 14.9098 -31.6993 -0.1 + vertex 14.8056 -32.2631 0 + vertex 14.8056 -32.2631 -0.1 + endloop + endfacet + facet normal 0.973979 -0.226639 0 + outer loop + vertex 14.9098 -31.6993 0 + vertex 15.0423 -31.1299 -0.1 + vertex 15.0423 -31.1299 0 + endloop + endfacet + facet normal 0.973979 -0.226639 0 + outer loop + vertex 15.0423 -31.1299 -0.1 + vertex 14.9098 -31.6993 0 + vertex 14.9098 -31.6993 -0.1 + endloop + endfacet + facet normal 0.963072 -0.269246 0 + outer loop + vertex 15.0423 -31.1299 0 + vertex 15.2028 -30.5555 -0.1 + vertex 15.2028 -30.5555 0 + endloop + endfacet + facet normal 0.963072 -0.269246 0 + outer loop + vertex 15.2028 -30.5555 -0.1 + vertex 15.0423 -31.1299 0 + vertex 15.0423 -31.1299 -0.1 + endloop + endfacet + facet normal 0.950861 -0.309619 0 + outer loop + vertex 15.2028 -30.5555 0 + vertex 15.3912 -29.9771 -0.1 + vertex 15.3912 -29.9771 0 + endloop + endfacet + facet normal 0.950861 -0.309619 0 + outer loop + vertex 15.3912 -29.9771 -0.1 + vertex 15.2028 -30.5555 0 + vertex 15.2028 -30.5555 -0.1 + endloop + endfacet + facet normal 0.93754 -0.347877 0 + outer loop + vertex 15.3912 -29.9771 0 + vertex 15.6071 -29.3953 -0.1 + vertex 15.6071 -29.3953 0 + endloop + endfacet + facet normal 0.93754 -0.347877 0 + outer loop + vertex 15.6071 -29.3953 -0.1 + vertex 15.3912 -29.9771 0 + vertex 15.3912 -29.9771 -0.1 + endloop + endfacet + facet normal 0.92328 -0.384128 0 + outer loop + vertex 15.6071 -29.3953 0 + vertex 15.8502 -28.8109 -0.1 + vertex 15.8502 -28.8109 0 + endloop + endfacet + facet normal 0.92328 -0.384128 0 + outer loop + vertex 15.8502 -28.8109 -0.1 + vertex 15.6071 -29.3953 0 + vertex 15.6071 -29.3953 -0.1 + endloop + endfacet + facet normal 0.908217 -0.418499 0 + outer loop + vertex 15.8502 -28.8109 0 + vertex 16.1203 -28.2246 -0.1 + vertex 16.1203 -28.2246 0 + endloop + endfacet + facet normal 0.908217 -0.418499 0 + outer loop + vertex 16.1203 -28.2246 -0.1 + vertex 15.8502 -28.8109 0 + vertex 15.8502 -28.8109 -0.1 + endloop + endfacet + facet normal 0.892471 -0.451106 0 + outer loop + vertex 16.1203 -28.2246 0 + vertex 16.4172 -27.6373 -0.1 + vertex 16.4172 -27.6373 0 + endloop + endfacet + facet normal 0.892471 -0.451106 0 + outer loop + vertex 16.4172 -27.6373 -0.1 + vertex 16.1203 -28.2246 0 + vertex 16.1203 -28.2246 -0.1 + endloop + endfacet + facet normal 0.876136 -0.482063 0 + outer loop + vertex 16.4172 -27.6373 0 + vertex 16.7406 -27.0496 -0.1 + vertex 16.7406 -27.0496 0 + endloop + endfacet + facet normal 0.876136 -0.482063 0 + outer loop + vertex 16.7406 -27.0496 -0.1 + vertex 16.4172 -27.6373 0 + vertex 16.4172 -27.6373 -0.1 + endloop + endfacet + facet normal 0.85929 -0.511489 0 + outer loop + vertex 16.7406 -27.0496 0 + vertex 17.0901 -26.4624 -0.1 + vertex 17.0901 -26.4624 0 + endloop + endfacet + facet normal 0.85929 -0.511489 0 + outer loop + vertex 17.0901 -26.4624 -0.1 + vertex 16.7406 -27.0496 0 + vertex 16.7406 -27.0496 -0.1 + endloop + endfacet + facet normal 0.841993 -0.539488 0 + outer loop + vertex 17.0901 -26.4624 0 + vertex 17.4656 -25.8764 -0.1 + vertex 17.4656 -25.8764 0 + endloop + endfacet + facet normal 0.841993 -0.539488 0 + outer loop + vertex 17.4656 -25.8764 -0.1 + vertex 17.0901 -26.4624 0 + vertex 17.0901 -26.4624 -0.1 + endloop + endfacet + facet normal 0.8243 -0.566153 0 + outer loop + vertex 17.4656 -25.8764 0 + vertex 17.8667 -25.2923 -0.1 + vertex 17.8667 -25.2923 0 + endloop + endfacet + facet normal 0.8243 -0.566153 0 + outer loop + vertex 17.8667 -25.2923 -0.1 + vertex 17.4656 -25.8764 0 + vertex 17.4656 -25.8764 -0.1 + endloop + endfacet + facet normal 0.801921 -0.59743 0 + outer loop + vertex 17.8667 -25.2923 0 + vertex 18.4501 -24.5093 -0.1 + vertex 18.4501 -24.5093 0 + endloop + endfacet + facet normal 0.801921 -0.59743 0 + outer loop + vertex 18.4501 -24.5093 -0.1 + vertex 17.8667 -25.2923 0 + vertex 17.8667 -25.2923 -0.1 + endloop + endfacet + facet normal 0.772213 -0.635364 0 + outer loop + vertex 18.4501 -24.5093 0 + vertex 19.0503 -23.7798 -0.1 + vertex 19.0503 -23.7798 0 + endloop + endfacet + facet normal 0.772213 -0.635364 0 + outer loop + vertex 19.0503 -23.7798 -0.1 + vertex 18.4501 -24.5093 0 + vertex 18.4501 -24.5093 -0.1 + endloop + endfacet + facet normal 0.738434 -0.674325 0 + outer loop + vertex 19.0503 -23.7798 0 + vertex 19.6689 -23.1024 -0.1 + vertex 19.6689 -23.1024 0 + endloop + endfacet + facet normal 0.738434 -0.674325 0 + outer loop + vertex 19.6689 -23.1024 -0.1 + vertex 19.0503 -23.7798 0 + vertex 19.0503 -23.7798 -0.1 + endloop + endfacet + facet normal 0.700496 -0.713656 0 + outer loop + vertex 19.6689 -23.1024 -0.1 + vertex 20.3071 -22.4759 0 + vertex 19.6689 -23.1024 0 + endloop + endfacet + facet normal 0.700496 -0.713656 0 + outer loop + vertex 20.3071 -22.4759 0 + vertex 19.6689 -23.1024 -0.1 + vertex 20.3071 -22.4759 -0.1 + endloop + endfacet + facet normal 0.658485 -0.752594 0 + outer loop + vertex 20.3071 -22.4759 -0.1 + vertex 20.9665 -21.899 0 + vertex 20.3071 -22.4759 0 + endloop + endfacet + facet normal 0.658485 -0.752594 0 + outer loop + vertex 20.9665 -21.899 0 + vertex 20.3071 -22.4759 -0.1 + vertex 20.9665 -21.899 -0.1 + endloop + endfacet + facet normal 0.612713 -0.790306 0 + outer loop + vertex 20.9665 -21.899 -0.1 + vertex 21.6485 -21.3703 0 + vertex 20.9665 -21.899 0 + endloop + endfacet + facet normal 0.612713 -0.790306 0 + outer loop + vertex 21.6485 -21.3703 0 + vertex 20.9665 -21.899 -0.1 + vertex 21.6485 -21.3703 -0.1 + endloop + endfacet + facet normal 0.563707 -0.825975 0 + outer loop + vertex 21.6485 -21.3703 -0.1 + vertex 22.3543 -20.8886 0 + vertex 21.6485 -21.3703 0 + endloop + endfacet + facet normal 0.563707 -0.825975 0 + outer loop + vertex 22.3543 -20.8886 0 + vertex 21.6485 -21.3703 -0.1 + vertex 22.3543 -20.8886 -0.1 + endloop + endfacet + facet normal 0.512208 -0.858861 0 + outer loop + vertex 22.3543 -20.8886 -0.1 + vertex 23.0854 -20.4525 0 + vertex 22.3543 -20.8886 0 + endloop + endfacet + facet normal 0.512208 -0.858861 0 + outer loop + vertex 23.0854 -20.4525 0 + vertex 22.3543 -20.8886 -0.1 + vertex 23.0854 -20.4525 -0.1 + endloop + endfacet + facet normal 0.471781 -0.881716 0 + outer loop + vertex 23.0854 -20.4525 -0.1 + vertex 23.7493 -20.0973 0 + vertex 23.0854 -20.4525 0 + endloop + endfacet + facet normal 0.471781 -0.881716 0 + outer loop + vertex 23.7493 -20.0973 0 + vertex 23.0854 -20.4525 -0.1 + vertex 23.7493 -20.0973 -0.1 + endloop + endfacet + facet normal 0.433016 -0.901386 0 + outer loop + vertex 23.7493 -20.0973 -0.1 + vertex 24.3497 -19.8089 0 + vertex 23.7493 -20.0973 0 + endloop + endfacet + facet normal 0.433016 -0.901386 0 + outer loop + vertex 24.3497 -19.8089 0 + vertex 23.7493 -20.0973 -0.1 + vertex 24.3497 -19.8089 -0.1 + endloop + endfacet + facet normal 0.377334 -0.926077 0 + outer loop + vertex 24.3497 -19.8089 -0.1 + vertex 24.9086 -19.5812 0 + vertex 24.3497 -19.8089 0 + endloop + endfacet + facet normal 0.377334 -0.926077 0 + outer loop + vertex 24.9086 -19.5812 0 + vertex 24.3497 -19.8089 -0.1 + vertex 24.9086 -19.5812 -0.1 + endloop + endfacet + facet normal 0.305529 -0.952183 0 + outer loop + vertex 24.9086 -19.5812 -0.1 + vertex 25.4477 -19.4082 0 + vertex 24.9086 -19.5812 0 + endloop + endfacet + facet normal 0.305529 -0.952183 0 + outer loop + vertex 25.4477 -19.4082 0 + vertex 24.9086 -19.5812 -0.1 + vertex 25.4477 -19.4082 -0.1 + endloop + endfacet + facet normal 0.223751 -0.974646 0 + outer loop + vertex 25.4477 -19.4082 -0.1 + vertex 25.9886 -19.284 0 + vertex 25.4477 -19.4082 0 + endloop + endfacet + facet normal 0.223751 -0.974646 0 + outer loop + vertex 25.9886 -19.284 0 + vertex 25.4477 -19.4082 -0.1 + vertex 25.9886 -19.284 -0.1 + endloop + endfacet + facet normal 0.142672 -0.98977 0 + outer loop + vertex 25.9886 -19.284 -0.1 + vertex 26.5531 -19.2026 0 + vertex 25.9886 -19.284 0 + endloop + endfacet + facet normal 0.142672 -0.98977 0 + outer loop + vertex 26.5531 -19.2026 0 + vertex 25.9886 -19.284 -0.1 + vertex 26.5531 -19.2026 -0.1 + endloop + endfacet + facet normal 0.072849 -0.997343 0 + outer loop + vertex 26.5531 -19.2026 -0.1 + vertex 27.1629 -19.1581 0 + vertex 26.5531 -19.2026 0 + endloop + endfacet + facet normal 0.072849 -0.997343 0 + outer loop + vertex 27.1629 -19.1581 0 + vertex 26.5531 -19.2026 -0.1 + vertex 27.1629 -19.1581 -0.1 + endloop + endfacet + facet normal 0.0202302 -0.999795 0 + outer loop + vertex 27.1629 -19.1581 -0.1 + vertex 27.8398 -19.1444 0 + vertex 27.1629 -19.1581 0 + endloop + endfacet + facet normal 0.0202302 -0.999795 0 + outer loop + vertex 27.8398 -19.1444 0 + vertex 27.1629 -19.1581 -0.1 + vertex 27.8398 -19.1444 -0.1 + endloop + endfacet + facet normal -0.0344796 -0.999405 0 + outer loop + vertex 27.8398 -19.1444 -0.1 + vertex 28.4483 -19.1654 0 + vertex 27.8398 -19.1444 0 + endloop + endfacet + facet normal -0.0344796 -0.999405 -0 + outer loop + vertex 28.4483 -19.1654 0 + vertex 27.8398 -19.1444 -0.1 + vertex 28.4483 -19.1654 -0.1 + endloop + endfacet + facet normal -0.149538 0.988756 0 + outer loop + vertex 25.51 -21.8307 -0.1 + vertex 25.181 -21.8805 0 + vertex 25.51 -21.8307 0 + endloop + endfacet + facet normal -0.149538 0.988756 0 + outer loop + vertex 25.181 -21.8805 0 + vertex 25.51 -21.8307 -0.1 + vertex 25.181 -21.8805 -0.1 + endloop + endfacet + facet normal -0.215553 0.976492 0 + outer loop + vertex 25.181 -21.8805 -0.1 + vertex 24.827 -21.9586 0 + vertex 25.181 -21.8805 0 + endloop + endfacet + facet normal -0.215553 0.976492 0 + outer loop + vertex 24.827 -21.9586 0 + vertex 25.181 -21.8805 -0.1 + vertex 24.827 -21.9586 -0.1 + endloop + endfacet + facet normal -0.27228 0.962218 0 + outer loop + vertex 24.827 -21.9586 -0.1 + vertex 24.5319 -22.0421 0 + vertex 24.827 -21.9586 0 + endloop + endfacet + facet normal -0.27228 0.962218 0 + outer loop + vertex 24.5319 -22.0421 0 + vertex 24.827 -21.9586 -0.1 + vertex 24.5319 -22.0421 -0.1 + endloop + endfacet + facet normal -0.339982 0.940432 0 + outer loop + vertex 24.5319 -22.0421 -0.1 + vertex 24.2621 -22.1397 0 + vertex 24.5319 -22.0421 0 + endloop + endfacet + facet normal -0.339982 0.940432 0 + outer loop + vertex 24.2621 -22.1397 0 + vertex 24.5319 -22.0421 -0.1 + vertex 24.2621 -22.1397 -0.1 + endloop + endfacet + facet normal -0.419841 0.907598 0 + outer loop + vertex 24.2621 -22.1397 -0.1 + vertex 24.0091 -22.2567 0 + vertex 24.2621 -22.1397 0 + endloop + endfacet + facet normal -0.419841 0.907598 0 + outer loop + vertex 24.0091 -22.2567 0 + vertex 24.2621 -22.1397 -0.1 + vertex 24.0091 -22.2567 -0.1 + endloop + endfacet + facet normal -0.501876 0.864939 0 + outer loop + vertex 24.0091 -22.2567 -0.1 + vertex 23.7644 -22.3987 0 + vertex 24.0091 -22.2567 0 + endloop + endfacet + facet normal -0.501876 0.864939 0 + outer loop + vertex 23.7644 -22.3987 0 + vertex 24.0091 -22.2567 -0.1 + vertex 23.7644 -22.3987 -0.1 + endloop + endfacet + facet normal -0.575619 0.817718 0 + outer loop + vertex 23.7644 -22.3987 -0.1 + vertex 23.5194 -22.5712 0 + vertex 23.7644 -22.3987 0 + endloop + endfacet + facet normal -0.575619 0.817718 0 + outer loop + vertex 23.5194 -22.5712 0 + vertex 23.7644 -22.3987 -0.1 + vertex 23.5194 -22.5712 -0.1 + endloop + endfacet + facet normal -0.634613 0.77283 0 + outer loop + vertex 23.5194 -22.5712 -0.1 + vertex 23.2657 -22.7795 0 + vertex 23.5194 -22.5712 0 + endloop + endfacet + facet normal -0.634613 0.77283 0 + outer loop + vertex 23.2657 -22.7795 0 + vertex 23.5194 -22.5712 -0.1 + vertex 23.2657 -22.7795 -0.1 + endloop + endfacet + facet normal -0.693326 0.720624 0 + outer loop + vertex 23.2657 -22.7795 -0.1 + vertex 22.6979 -23.3258 0 + vertex 23.2657 -22.7795 0 + endloop + endfacet + facet normal -0.693326 0.720624 0 + outer loop + vertex 22.6979 -23.3258 0 + vertex 23.2657 -22.7795 -0.1 + vertex 22.6979 -23.3258 -0.1 + endloop + endfacet + facet normal -0.729687 0.683781 0 + outer loop + vertex 22.2832 -23.7683 -0.1 + vertex 22.6979 -23.3258 0 + vertex 22.6979 -23.3258 -0.1 + endloop + endfacet + facet normal -0.729687 0.683781 0 + outer loop + vertex 22.6979 -23.3258 0 + vertex 22.2832 -23.7683 -0.1 + vertex 22.2832 -23.7683 0 + endloop + endfacet + facet normal -0.755777 0.65483 0 + outer loop + vertex 21.9437 -24.1601 -0.1 + vertex 22.2832 -23.7683 0 + vertex 22.2832 -23.7683 -0.1 + endloop + endfacet + facet normal -0.755777 0.65483 0 + outer loop + vertex 22.2832 -23.7683 0 + vertex 21.9437 -24.1601 -0.1 + vertex 21.9437 -24.1601 0 + endloop + endfacet + facet normal -0.793147 0.60903 0 + outer loop + vertex 21.7143 -24.4589 -0.1 + vertex 21.9437 -24.1601 0 + vertex 21.9437 -24.1601 -0.1 + endloop + endfacet + facet normal -0.793147 0.60903 0 + outer loop + vertex 21.9437 -24.1601 0 + vertex 21.7143 -24.4589 -0.1 + vertex 21.7143 -24.4589 0 + endloop + endfacet + facet normal -0.850912 0.525308 0 + outer loop + vertex 21.6518 -24.5601 -0.1 + vertex 21.7143 -24.4589 0 + vertex 21.7143 -24.4589 -0.1 + endloop + endfacet + facet normal -0.850912 0.525308 0 + outer loop + vertex 21.7143 -24.4589 0 + vertex 21.6518 -24.5601 -0.1 + vertex 21.6518 -24.5601 0 + endloop + endfacet + facet normal -0.943329 0.331858 0 + outer loop + vertex 21.63 -24.6221 -0.1 + vertex 21.6518 -24.5601 0 + vertex 21.6518 -24.5601 -0.1 + endloop + endfacet + facet normal -0.943329 0.331858 0 + outer loop + vertex 21.6518 -24.5601 0 + vertex 21.63 -24.6221 -0.1 + vertex 21.63 -24.6221 0 + endloop + endfacet + facet normal -0.568017 -0.823017 0 + outer loop + vertex 21.63 -24.6221 -0.1 + vertex 21.6873 -24.6616 0 + vertex 21.63 -24.6221 0 + endloop + endfacet + facet normal -0.568017 -0.823017 -0 + outer loop + vertex 21.6873 -24.6616 0 + vertex 21.63 -24.6221 -0.1 + vertex 21.6873 -24.6616 -0.1 + endloop + endfacet + facet normal -0.21919 -0.975682 0 + outer loop + vertex 21.6873 -24.6616 -0.1 + vertex 21.8514 -24.6984 0 + vertex 21.6873 -24.6616 0 + endloop + endfacet + facet normal -0.21919 -0.975682 -0 + outer loop + vertex 21.8514 -24.6984 0 + vertex 21.6873 -24.6616 -0.1 + vertex 21.8514 -24.6984 -0.1 + endloop + endfacet + facet normal -0.103226 -0.994658 0 + outer loop + vertex 21.8514 -24.6984 -0.1 + vertex 22.454 -24.761 0 + vertex 21.8514 -24.6984 0 + endloop + endfacet + facet normal -0.103226 -0.994658 -0 + outer loop + vertex 22.454 -24.761 0 + vertex 21.8514 -24.6984 -0.1 + vertex 22.454 -24.761 -0.1 + endloop + endfacet + facet normal -0.0473276 -0.998879 0 + outer loop + vertex 22.454 -24.761 -0.1 + vertex 23.3459 -24.8032 0 + vertex 22.454 -24.761 0 + endloop + endfacet + facet normal -0.0473276 -0.998879 -0 + outer loop + vertex 23.3459 -24.8032 0 + vertex 22.454 -24.761 -0.1 + vertex 23.3459 -24.8032 -0.1 + endloop + endfacet + facet normal -0.0142485 -0.999898 0 + outer loop + vertex 23.3459 -24.8032 -0.1 + vertex 24.435 -24.8188 0 + vertex 23.3459 -24.8032 0 + endloop + endfacet + facet normal -0.0142485 -0.999898 -0 + outer loop + vertex 24.435 -24.8188 0 + vertex 23.3459 -24.8032 -0.1 + vertex 24.435 -24.8188 -0.1 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 24.435 -24.8188 -0.1 + vertex 27.2401 -24.8188 0 + vertex 24.435 -24.8188 0 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 27.2401 -24.8188 0 + vertex 24.435 -24.8188 -0.1 + vertex 27.2401 -24.8188 -0.1 + endloop + endfacet + facet normal 0.986418 -0.164252 0 + outer loop + vertex 27.2401 -24.8188 0 + vertex 27.373 -24.0204 -0.1 + vertex 27.373 -24.0204 0 + endloop + endfacet + facet normal 0.986418 -0.164252 0 + outer loop + vertex 27.373 -24.0204 -0.1 + vertex 27.2401 -24.8188 0 + vertex 27.2401 -24.8188 -0.1 + endloop + endfacet + facet normal 0.99159 -0.129416 0 + outer loop + vertex 27.373 -24.0204 0 + vertex 27.4161 -23.6904 -0.1 + vertex 27.4161 -23.6904 0 + endloop + endfacet + facet normal 0.99159 -0.129416 0 + outer loop + vertex 27.4161 -23.6904 -0.1 + vertex 27.373 -24.0204 0 + vertex 27.373 -24.0204 -0.1 + endloop + endfacet + facet normal 0.998763 -0.0497285 0 + outer loop + vertex 27.4161 -23.6904 0 + vertex 27.4312 -23.3865 -0.1 + vertex 27.4312 -23.3865 0 + endloop + endfacet + facet normal 0.998763 -0.0497285 0 + outer loop + vertex 27.4312 -23.3865 -0.1 + vertex 27.4161 -23.6904 0 + vertex 27.4161 -23.6904 -0.1 + endloop + endfacet + facet normal 0.998974 0.0452785 0 + outer loop + vertex 27.4312 -23.3865 0 + vertex 27.4186 -23.1088 -0.1 + vertex 27.4186 -23.1088 0 + endloop + endfacet + facet normal 0.998974 0.0452785 0 + outer loop + vertex 27.4186 -23.1088 -0.1 + vertex 27.4312 -23.3865 0 + vertex 27.4312 -23.3865 -0.1 + endloop + endfacet + facet normal 0.987512 0.157546 0 + outer loop + vertex 27.4186 -23.1088 0 + vertex 27.3785 -22.8574 -0.1 + vertex 27.3785 -22.8574 0 + endloop + endfacet + facet normal 0.987512 0.157546 0 + outer loop + vertex 27.3785 -22.8574 -0.1 + vertex 27.4186 -23.1088 0 + vertex 27.4186 -23.1088 -0.1 + endloop + endfacet + facet normal 0.957877 0.287177 0 + outer loop + vertex 27.3785 -22.8574 0 + vertex 27.3111 -22.6325 -0.1 + vertex 27.3111 -22.6325 0 + endloop + endfacet + facet normal 0.957877 0.287177 0 + outer loop + vertex 27.3111 -22.6325 -0.1 + vertex 27.3785 -22.8574 0 + vertex 27.3785 -22.8574 -0.1 + endloop + endfacet + facet normal 0.902589 0.430503 0 + outer loop + vertex 27.3111 -22.6325 0 + vertex 27.2166 -22.4344 -0.1 + vertex 27.2166 -22.4344 0 + endloop + endfacet + facet normal 0.902589 0.430503 0 + outer loop + vertex 27.2166 -22.4344 -0.1 + vertex 27.3111 -22.6325 0 + vertex 27.3111 -22.6325 -0.1 + endloop + endfacet + facet normal 0.815851 0.578262 0 + outer loop + vertex 27.2166 -22.4344 0 + vertex 27.0952 -22.2631 -0.1 + vertex 27.0952 -22.2631 0 + endloop + endfacet + facet normal 0.815851 0.578262 0 + outer loop + vertex 27.0952 -22.2631 -0.1 + vertex 27.2166 -22.4344 0 + vertex 27.2166 -22.4344 -0.1 + endloop + endfacet + facet normal 0.697754 0.716337 -0 + outer loop + vertex 27.0952 -22.2631 -0.1 + vertex 26.9471 -22.1189 0 + vertex 27.0952 -22.2631 0 + endloop + endfacet + facet normal 0.697754 0.716337 0 + outer loop + vertex 26.9471 -22.1189 0 + vertex 27.0952 -22.2631 -0.1 + vertex 26.9471 -22.1189 -0.1 + endloop + endfacet + facet normal 0.556877 0.830595 -0 + outer loop + vertex 26.9471 -22.1189 -0.1 + vertex 26.7726 -22.0019 0 + vertex 26.9471 -22.1189 0 + endloop + endfacet + facet normal 0.556877 0.830595 0 + outer loop + vertex 26.7726 -22.0019 0 + vertex 26.9471 -22.1189 -0.1 + vertex 26.7726 -22.0019 -0.1 + endloop + endfacet + facet normal 0.40766 0.913134 -0 + outer loop + vertex 26.7726 -22.0019 -0.1 + vertex 26.5717 -21.9122 0 + vertex 26.7726 -22.0019 0 + endloop + endfacet + facet normal 0.40766 0.913134 0 + outer loop + vertex 26.5717 -21.9122 0 + vertex 26.7726 -22.0019 -0.1 + vertex 26.5717 -21.9122 -0.1 + endloop + endfacet + facet normal 0.264042 0.964511 -0 + outer loop + vertex 26.5717 -21.9122 -0.1 + vertex 26.3449 -21.8501 0 + vertex 26.5717 -21.9122 0 + endloop + endfacet + facet normal 0.264042 0.964511 0 + outer loop + vertex 26.3449 -21.8501 0 + vertex 26.5717 -21.9122 -0.1 + vertex 26.3449 -21.8501 -0.1 + endloop + endfacet + facet normal 0.134852 0.990866 -0 + outer loop + vertex 26.3449 -21.8501 -0.1 + vertex 26.0922 -21.8157 0 + vertex 26.3449 -21.8501 0 + endloop + endfacet + facet normal 0.134852 0.990866 0 + outer loop + vertex 26.0922 -21.8157 0 + vertex 26.3449 -21.8501 -0.1 + vertex 26.0922 -21.8157 -0.1 + endloop + endfacet + facet normal 0.0233803 0.999727 -0 + outer loop + vertex 26.0922 -21.8157 -0.1 + vertex 25.8138 -21.8092 0 + vertex 26.0922 -21.8157 0 + endloop + endfacet + facet normal 0.0233803 0.999727 0 + outer loop + vertex 25.8138 -21.8092 0 + vertex 26.0922 -21.8157 -0.1 + vertex 25.8138 -21.8092 -0.1 + endloop + endfacet + facet normal -0.0707205 0.997496 0 + outer loop + vertex 25.8138 -21.8092 -0.1 + vertex 25.51 -21.8307 0 + vertex 25.8138 -21.8092 0 + endloop + endfacet + facet normal -0.0707205 0.997496 0 + outer loop + vertex 25.51 -21.8307 0 + vertex 25.8138 -21.8092 -0.1 + vertex 25.51 -21.8307 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0431 -18.7102 -0.1 + vertex -32.1476 -18.5412 -0.1 + vertex -36.5163 -17.3821 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1476 -18.5412 -0.1 + vertex -37.0431 -18.7102 -0.1 + vertex -33.2902 -21.4299 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.2902 -21.4299 -0.1 + vertex -37.0431 -18.7102 -0.1 + vertex -33.4325 -21.7956 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3469 -21.8682 -0.1 + vertex -33.4325 -21.7956 -0.1 + vertex -37.0431 -18.7102 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.4325 -21.7956 -0.1 + vertex -38.3469 -21.8682 -0.1 + vertex -33.503 -22.0719 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.503 -22.0719 -0.1 + vertex -38.3469 -21.8682 -0.1 + vertex -34.9509 -25.4747 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.8955 -25.4747 -0.1 + vertex -34.9509 -25.4747 -0.1 + vertex -38.3469 -21.8682 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.9509 -25.4747 -0.1 + vertex -39.8955 -25.4747 -0.1 + vertex -35.4707 -26.6225 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4707 -26.6225 -0.1 + vertex -39.8955 -25.4747 -0.1 + vertex -36.4516 -28.8697 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -41.2695 -28.6585 -0.1 + vertex -36.4516 -28.8697 -0.1 + vertex -39.8955 -25.4747 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.4516 -28.8697 -0.1 + vertex -41.2695 -28.6585 -0.1 + vertex -37.5165 -31.4193 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -42.2252 -30.9405 -0.1 + vertex -37.5165 -31.4193 -0.1 + vertex -41.2695 -28.6585 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5165 -31.4193 -0.1 + vertex -42.2252 -30.9405 -0.1 + vertex -38.3711 -33.5534 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4764 -11.5321 -0.1 + vertex -17.4002 -11.6639 -0.1 + vertex -17.4268 -11.5861 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 -0.1 + vertex -17.5514 -11.4978 -0.1 + vertex -17.3941 -11.77 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 -0.1 + vertex -17.4764 -11.5321 -0.1 + vertex -17.5514 -11.4978 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -17.3941 -11.77 -0.1 + vertex -17.5514 -11.4978 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3941 -11.77 -0.1 + vertex -17.7876 -11.4712 -0.1 + vertex -17.4339 -12.0833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4339 -12.0833 -0.1 + vertex -17.7876 -11.4712 -0.1 + vertex -17.5116 -12.3759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5116 -12.3759 -0.1 + vertex -17.7876 -11.4712 -0.1 + vertex -17.6664 -12.8441 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.9412 -14.6683 -0.1 + vertex -17.6664 -12.8441 -0.1 + vertex -17.7876 -11.4712 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.6664 -12.8441 -0.1 + vertex -21.9412 -14.6683 -0.1 + vertex -18.1466 -14.1495 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -21.6284 -15.0493 -0.1 + vertex -18.1466 -14.1495 -0.1 + vertex -21.6966 -14.8935 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -21.5879 -15.2616 -0.1 + vertex -18.7537 -15.6836 -0.1 + vertex -21.6284 -15.0493 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -21.5693 -15.5508 -0.1 + vertex -18.7537 -15.6836 -0.1 + vertex -21.5879 -15.2616 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.5729 -16.4428 -0.1 + vertex -19.3667 -17.1305 -0.1 + vertex -21.5693 -15.5508 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.3667 -17.1305 -0.1 + vertex -21.5729 -16.4428 -0.1 + vertex -19.4996 -17.3696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.4996 -17.3696 -0.1 + vertex -21.5729 -16.4428 -0.1 + vertex -19.6713 -17.584 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.5774 -17.3273 -0.1 + vertex -19.8743 -17.7693 -0.1 + vertex -21.5729 -16.4428 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.8743 -17.7693 -0.1 + vertex -21.5774 -17.3273 -0.1 + vertex -20.1009 -17.9213 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.1009 -17.9213 -0.1 + vertex -21.5774 -17.3273 -0.1 + vertex -20.3435 -18.0357 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.5945 -18.108 -0.1 + vertex -21.5774 -17.3273 -0.1 + vertex -20.8463 -18.1339 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -21.5614 -17.6077 -0.1 + vertex -20.8463 -18.1339 -0.1 + vertex -21.5774 -17.3273 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.8463 -18.1339 -0.1 + vertex -21.5614 -17.6077 -0.1 + vertex -21.0912 -18.1093 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.0912 -18.1093 -0.1 + vertex -21.5614 -17.6077 -0.1 + vertex -21.2545 -18.0693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2545 -18.0693 -0.1 + vertex -21.5263 -17.8042 -0.1 + vertex -21.378 -18.0171 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.3435 -18.0357 -0.1 + vertex -21.5774 -17.3273 -0.1 + vertex -20.5945 -18.108 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.6713 -17.584 -0.1 + vertex -21.5729 -16.4428 -0.1 + vertex -19.8743 -17.7693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.7537 -15.6836 -0.1 + vertex -21.5693 -15.5508 -0.1 + vertex -19.3667 -17.1305 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1466 -14.1495 -0.1 + vertex -21.6284 -15.0493 -0.1 + vertex -18.7537 -15.6836 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1466 -14.1495 -0.1 + vertex -21.7989 -14.7733 -0.1 + vertex -21.6966 -14.8935 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1466 -14.1495 -0.1 + vertex -21.9412 -14.6683 -0.1 + vertex -21.7989 -14.7733 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -22.1296 -14.5577 -0.1 + vertex -21.9412 -14.6683 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -22.3213 -14.4724 -0.1 + vertex -22.1296 -14.5577 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -22.5778 -14.3998 -0.1 + vertex -22.3213 -14.4724 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -22.9103 -14.3386 -0.1 + vertex -22.5778 -14.3998 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -23.3301 -14.2877 -0.1 + vertex -22.9103 -14.3386 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 -0.1 + vertex -23.3301 -14.2877 -0.1 + vertex -17.7876 -11.4712 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.3301 -14.2877 -0.1 + vertex -27.175 -11.3523 -0.1 + vertex -24.4767 -14.2125 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4767 -14.2125 -0.1 + vertex -27.175 -11.3523 -0.1 + vertex -26.1077 -14.1654 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 -0.1 + vertex -28.2448 -14.1442 -0.1 + vertex -26.1077 -14.1654 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 -0.1 + vertex -28.9898 -14.1579 -0.1 + vertex -28.2448 -14.1442 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 -0.1 + vertex -29.549 -14.1906 -0.1 + vertex -28.9898 -14.1579 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 -0.1 + vertex -29.549 -14.1906 -0.1 + vertex -27.175 -11.3523 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.549 -14.1906 -0.1 + vertex -32.0944 -11.3029 -0.1 + vertex -29.9449 -14.2443 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9449 -14.2443 -0.1 + vertex -32.0944 -11.3029 -0.1 + vertex -30.1999 -14.321 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3673 -14.4836 -0.1 + vertex -30.4158 -14.7057 -0.1 + vertex -30.377 -14.5514 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3673 -14.4836 -0.1 + vertex -30.5215 -14.964 -0.1 + vertex -30.4158 -14.7057 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4754 -14.1281 -0.1 + vertex -30.5215 -14.964 -0.1 + vertex -30.3673 -14.4836 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5215 -14.964 -0.1 + vertex -35.4754 -14.1281 -0.1 + vertex -30.678 -15.2903 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.678 -15.2903 -0.1 + vertex -35.4754 -14.1281 -0.1 + vertex -30.8691 -15.6487 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -35.5123 -14.4274 -0.1 + vertex -30.8691 -15.6487 -0.1 + vertex -35.4754 -14.1281 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1999 -14.321 -0.1 + vertex -32.0944 -11.3029 -0.1 + vertex -30.2816 -14.3686 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 -0.1 + vertex -30.3364 -14.4227 -0.1 + vertex -30.2816 -14.3686 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 -0.1 + vertex -30.3673 -14.4836 -0.1 + vertex -30.3364 -14.4227 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -35.4904 -13.894 -0.1 + vertex -30.3673 -14.4836 -0.1 + vertex -32.0944 -11.3029 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8691 -15.6487 -0.1 + vertex -35.5123 -14.4274 -0.1 + vertex -31.1223 -16.1487 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -35.5964 -14.799 -0.1 + vertex -31.1223 -16.1487 -0.1 + vertex -35.5123 -14.4274 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1223 -16.1487 -0.1 + vertex -35.5964 -14.799 -0.1 + vertex -31.4477 -16.8607 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -35.7796 -15.3934 -0.1 + vertex -31.4477 -16.8607 -0.1 + vertex -35.5964 -14.799 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.4477 -16.8607 -0.1 + vertex -35.7796 -15.3934 -0.1 + vertex -31.8034 -17.6899 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4904 -13.894 -0.1 + vertex -32.0944 -11.3029 -0.1 + vertex -33.7011 -11.3017 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -21.5263 -17.8042 -0.1 + vertex -21.2545 -18.0693 -0.1 + vertex -21.5614 -17.6077 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.378 -18.0171 -0.1 + vertex -21.5263 -17.8042 -0.1 + vertex -21.4669 -17.9347 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.4624 -26.9141 -0.1 + vertex -27.8988 -26.2055 -0.1 + vertex -27.8924 -26.5154 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -27.9236 -26.0946 -0.1 + vertex -27.8988 -26.2055 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -27.9636 -26.0069 -0.1 + vertex -27.9236 -26.0946 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -28.0195 -25.9379 -0.1 + vertex -27.9636 -26.0069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -28.0919 -25.8829 -0.1 + vertex -28.0195 -25.9379 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2888 -25.7968 -0.1 + vertex -27.6923 -22.3658 -0.1 + vertex -28.1242 -22.4577 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.6923 -22.3658 -0.1 + vertex -28.2888 -25.7968 -0.1 + vertex -28.0919 -25.8829 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1242 -22.4577 -0.1 + vertex -28.5596 -25.7117 -0.1 + vertex -28.2888 -25.7968 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -28.5914 -22.5277 -0.1 + vertex -28.5596 -25.7117 -0.1 + vertex -28.1242 -22.4577 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5914 -22.5277 -0.1 + vertex -28.7678 -25.6646 -0.1 + vertex -28.5596 -25.7117 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5914 -22.5277 -0.1 + vertex -29.0734 -25.6205 -0.1 + vertex -28.7678 -25.6646 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.0966 -22.5767 -0.1 + vertex -29.0734 -25.6205 -0.1 + vertex -28.5914 -22.5277 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.6427 -22.606 -0.1 + vertex -29.0734 -25.6205 -0.1 + vertex -29.0966 -22.5767 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.6427 -22.606 -0.1 + vertex -29.9179 -25.5457 -0.1 + vertex -29.0734 -25.6205 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -30.2322 -22.6168 -0.1 + vertex -29.9179 -25.5457 -0.1 + vertex -29.6427 -22.606 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.9759 -25.4949 -0.1 + vertex -30.2322 -22.6168 -0.1 + vertex -30.868 -22.6102 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2322 -22.6168 -0.1 + vertex -30.9759 -25.4949 -0.1 + vertex -29.9179 -25.5457 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.8095 -22.5865 -0.1 + vertex -30.9759 -25.4949 -0.1 + vertex -30.868 -22.6102 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.8095 -22.5865 -0.1 + vertex -32.1303 -25.4759 -0.1 + vertex -30.9759 -25.4949 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.5132 -22.5543 -0.1 + vertex -32.1303 -25.4759 -0.1 + vertex -31.8095 -22.5865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.0067 -22.5002 -0.1 + vertex -32.1303 -25.4759 -0.1 + vertex -32.5132 -22.5543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.1833 -22.4608 -0.1 + vertex -32.1303 -25.4759 -0.1 + vertex -33.0067 -22.5002 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.9509 -25.4747 -0.1 + vertex -33.1833 -22.4608 -0.1 + vertex -33.3177 -22.4108 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.9509 -25.4747 -0.1 + vertex -33.3177 -22.4108 -0.1 + vertex -33.4135 -22.3486 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.9509 -25.4747 -0.1 + vertex -33.4135 -22.3486 -0.1 + vertex -33.4739 -22.2725 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.0907 -16.2655 -0.1 + vertex -31.8034 -17.6899 -0.1 + vertex -35.7796 -15.3934 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.5622 -13.718 -0.1 + vertex -33.7011 -11.3017 -0.1 + vertex -34.8583 -11.3197 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.1833 -22.4608 -0.1 + vertex -34.9509 -25.4747 -0.1 + vertex -32.1303 -25.4759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.5026 -22.1809 -0.1 + vertex -34.9509 -25.4747 -0.1 + vertex -33.4739 -22.2725 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.8034 -17.6899 -0.1 + vertex -36.0907 -16.2655 -0.1 + vertex -32.1476 -18.5412 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.503 -22.0719 -0.1 + vertex -34.9509 -25.4747 -0.1 + vertex -33.5026 -22.1809 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.5163 -17.3821 -0.1 + vertex -32.1476 -18.5412 -0.1 + vertex -36.0907 -16.2655 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3673 -14.4836 -0.1 + vertex -35.4904 -13.894 -0.1 + vertex -35.4754 -14.1281 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.7011 -11.3017 -0.1 + vertex -35.5189 -13.7992 -0.1 + vertex -35.4904 -13.894 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.7011 -11.3017 -0.1 + vertex -35.5622 -13.718 -0.1 + vertex -35.5189 -13.7992 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.8583 -11.3197 -0.1 + vertex -35.6209 -13.6496 -0.1 + vertex -35.5622 -13.718 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6956 -13.593 -0.1 + vertex -34.8583 -11.3197 -0.1 + vertex -35.6555 -11.3595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.8583 -11.3197 -0.1 + vertex -35.6956 -13.593 -0.1 + vertex -35.6209 -13.6496 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6555 -11.3595 -0.1 + vertex -35.8956 -13.512 -0.1 + vertex -35.6956 -13.593 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.1819 -11.4238 -0.1 + vertex -35.8956 -13.512 -0.1 + vertex -35.6555 -11.3595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.8956 -13.512 -0.1 + vertex -36.1819 -11.4238 -0.1 + vertex -36.1669 -13.4677 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.527 -11.5152 -0.1 + vertex -36.1669 -13.4677 -0.1 + vertex -36.1819 -11.4238 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.7802 -11.6364 -0.1 + vertex -36.1669 -13.4677 -0.1 + vertex -36.527 -11.5152 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.1669 -13.4677 -0.1 + vertex -36.7802 -11.6364 -0.1 + vertex -36.5145 -13.4531 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -36.9755 -11.7636 -0.1 + vertex -36.5145 -13.4531 -0.1 + vertex -36.7802 -11.6364 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.1409 -11.9004 -0.1 + vertex -36.5145 -13.4531 -0.1 + vertex -36.9755 -11.7636 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.5145 -13.4531 -0.1 + vertex -37.1409 -11.9004 -0.1 + vertex -36.7305 -13.4387 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.2767 -12.0443 -0.1 + vertex -36.7305 -13.4387 -0.1 + vertex -37.1409 -11.9004 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.7305 -13.4387 -0.1 + vertex -37.2767 -12.0443 -0.1 + vertex -36.9216 -13.3997 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.3834 -12.1929 -0.1 + vertex -36.9216 -13.3997 -0.1 + vertex -37.2767 -12.0443 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.4611 -12.3438 -0.1 + vertex -36.9216 -13.3997 -0.1 + vertex -37.3834 -12.1929 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.9216 -13.3997 -0.1 + vertex -37.4611 -12.3438 -0.1 + vertex -37.0874 -13.3385 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.5104 -12.4945 -0.1 + vertex -37.0874 -13.3385 -0.1 + vertex -37.4611 -12.3438 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0874 -13.3385 -0.1 + vertex -37.5104 -12.4945 -0.1 + vertex -37.2276 -13.2576 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.5315 -12.6425 -0.1 + vertex -37.2276 -13.2576 -0.1 + vertex -37.5104 -12.4945 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2276 -13.2576 -0.1 + vertex -37.5315 -12.6425 -0.1 + vertex -37.3418 -13.1594 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.3418 -13.1594 -0.1 + vertex -37.5315 -12.6425 -0.1 + vertex -37.4296 -13.0463 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4296 -13.0463 -0.1 + vertex -37.5315 -12.6425 -0.1 + vertex -37.4908 -12.9209 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4908 -12.9209 -0.1 + vertex -37.5315 -12.6425 -0.1 + vertex -37.5249 -12.7854 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.9739 -18.9651 -0.1 + vertex -22.585 -19.4947 -0.1 + vertex -22.594 -19.3555 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8524 -19.008 -0.1 + vertex -22.594 -19.3555 -0.1 + vertex -22.625 -19.2389 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.7539 -19.0668 -0.1 + vertex -22.625 -19.2389 -0.1 + vertex -22.6782 -19.1432 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.594 -19.3555 -0.1 + vertex -22.8524 -19.008 -0.1 + vertex -22.9739 -18.9651 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.625 -19.2389 -0.1 + vertex -22.7539 -19.0668 -0.1 + vertex -22.8524 -19.008 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1186 -18.9365 -0.1 + vertex -22.585 -19.4947 -0.1 + vertex -22.9739 -18.9651 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.585 -19.4947 -0.1 + vertex -23.1186 -18.9365 -0.1 + vertex -22.5978 -19.6581 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4791 -18.9156 -0.1 + vertex -22.5978 -19.6581 -0.1 + vertex -23.1186 -18.9365 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.5978 -19.6581 -0.1 + vertex -23.4791 -18.9156 -0.1 + vertex -22.6874 -20.0641 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.6632 -18.9241 -0.1 + vertex -22.6874 -20.0641 -0.1 + vertex -23.4791 -18.9156 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.3738 -19.4278 -0.1 + vertex -22.6874 -20.0641 -0.1 + vertex -24.2328 -19.2424 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6874 -20.0641 -0.1 + vertex -23.6632 -18.9241 -0.1 + vertex -24.2328 -19.2424 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0993 -19.1062 -0.1 + vertex -23.6632 -18.9241 -0.1 + vertex -23.8226 -18.954 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0993 -19.1062 -0.1 + vertex -23.8226 -18.954 -0.1 + vertex -23.9653 -19.0124 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.6632 -18.9241 -0.1 + vertex -24.0993 -19.1062 -0.1 + vertex -24.2328 -19.2424 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6874 -20.0641 -0.1 + vertex -24.3738 -19.4278 -0.1 + vertex -22.8608 -20.5868 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.7108 -19.9745 -0.1 + vertex -22.8608 -20.5868 -0.1 + vertex -24.3738 -19.4278 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8608 -20.5868 -0.1 + vertex -24.7108 -19.9745 -0.1 + vertex -23.116 -21.2395 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.9407 -20.3516 -0.1 + vertex -23.116 -21.2395 -0.1 + vertex -24.7108 -19.9745 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.1784 -20.695 -0.1 + vertex -23.116 -21.2395 -0.1 + vertex -24.9407 -20.3516 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.4267 -21.0057 -0.1 + vertex -23.116 -21.2395 -0.1 + vertex -25.1784 -20.695 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.6884 -21.2849 -0.1 + vertex -23.116 -21.2395 -0.1 + vertex -25.4267 -21.0057 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.116 -21.2395 -0.1 + vertex -25.6884 -21.2849 -0.1 + vertex -24.3958 -24.3815 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.9661 -21.5339 -0.1 + vertex -24.3958 -24.3815 -0.1 + vertex -25.6884 -21.2849 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.2627 -21.7538 -0.1 + vertex -24.3958 -24.3815 -0.1 + vertex -25.9661 -21.5339 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.5809 -21.9457 -0.1 + vertex -24.3958 -24.3815 -0.1 + vertex -26.2627 -21.7538 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.9234 -22.1109 -0.1 + vertex -24.3958 -24.3815 -0.1 + vertex -26.5809 -21.9457 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -24.3958 -24.3815 -0.1 + vertex -26.9234 -22.1109 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3958 -24.3815 -0.1 + vertex -27.2929 -22.2506 -0.1 + vertex -24.9793 -25.8003 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.4624 -26.9141 -0.1 + vertex -27.8924 -26.5154 -0.1 + vertex -25.8688 -27.7587 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.8688 -27.7587 -0.1 + vertex -27.9393 -26.9734 -0.1 + vertex -26.0506 -28.0911 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.0506 -28.0911 -0.1 + vertex -27.9393 -26.9734 -0.1 + vertex -26.2221 -28.3696 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.9393 -26.9734 -0.1 + vertex -25.8688 -27.7587 -0.1 + vertex -27.8924 -26.5154 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.2221 -28.3696 -0.1 + vertex -27.9393 -26.9734 -0.1 + vertex -26.3861 -28.5987 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -28.1721 -28.4809 -0.1 + vertex -26.3861 -28.5987 -0.1 + vertex -27.9393 -26.9734 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8988 -26.2055 -0.1 + vertex -24.9793 -25.8003 -0.1 + vertex -27.2929 -22.2506 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3861 -28.5987 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -26.5458 -28.7827 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.5458 -28.7827 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -26.7039 -28.9262 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.8988 -26.2055 -0.1 + vertex -25.4624 -26.9141 -0.1 + vertex -24.9793 -25.8003 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.7039 -28.9262 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -26.8635 -29.0336 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.8635 -29.0336 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -27.0275 -29.1093 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0919 -25.8829 -0.1 + vertex -27.2929 -22.2506 -0.1 + vertex -27.6923 -22.3658 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.0275 -29.1093 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -27.1989 -29.1579 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.1989 -29.1579 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -27.3805 -29.1838 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.3805 -29.1838 -0.1 + vertex -28.1721 -28.4809 -0.1 + vertex -27.5755 -29.1914 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -28.2235 -28.8853 -0.1 + vertex -27.5755 -29.1914 -0.1 + vertex -28.1721 -28.4809 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.5755 -29.1914 -0.1 + vertex -28.2235 -28.8853 -0.1 + vertex -27.9775 -29.1782 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.9775 -29.1782 -0.1 + vertex -28.2235 -28.8853 -0.1 + vertex -28.0989 -29.15 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -28.2154 -29.0113 -0.1 + vertex -28.0989 -29.15 -0.1 + vertex -28.2235 -28.8853 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0989 -29.15 -0.1 + vertex -28.2154 -29.0113 -0.1 + vertex -28.176 -29.097 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4571 -30.6716 -0.1 + vertex -23.4513 -30.847 -0.1 + vertex -23.4345 -30.738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.5012 -30.6026 -0.1 + vertex -23.4513 -30.847 -0.1 + vertex -23.4571 -30.6716 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.6433 -30.465 -0.1 + vertex -23.4513 -30.847 -0.1 + vertex -23.5012 -30.6026 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4513 -30.847 -0.1 + vertex -23.6433 -30.465 -0.1 + vertex -23.5218 -31.031 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8399 -30.3412 -0.1 + vertex -23.5218 -31.031 -0.1 + vertex -23.6433 -30.465 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0701 -30.2475 -0.1 + vertex -23.5218 -31.031 -0.1 + vertex -23.8399 -30.3412 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.5218 -31.031 -0.1 + vertex -24.0701 -30.2475 -0.1 + vertex -23.8031 -31.5911 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.8452 -30.2998 -0.1 + vertex -23.8031 -31.5911 -0.1 + vertex -24.0701 -30.2475 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8452 -30.2998 -0.1 + vertex -24.0701 -30.2475 -0.1 + vertex -24.2803 -30.1833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.6311 -30.1847 -0.1 + vertex -24.2803 -30.1833 -0.1 + vertex -24.455 -30.1541 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.6311 -30.1847 -0.1 + vertex -24.455 -30.1541 -0.1 + vertex -24.5406 -30.1604 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2803 -30.1833 -0.1 + vertex -24.6311 -30.1847 -0.1 + vertex -24.8452 -30.2998 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8031 -31.5911 -0.1 + vertex -24.8452 -30.2998 -0.1 + vertex -25.1341 -30.5242 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.5344 -30.8827 -0.1 + vertex -23.8031 -31.5911 -0.1 + vertex -25.1341 -30.5242 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8031 -31.5911 -0.1 + vertex -25.5344 -30.8827 -0.1 + vertex -24.2375 -32.3527 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2375 -32.3527 -0.1 + vertex -25.5344 -30.8827 -0.1 + vertex -24.7839 -33.2498 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.8166 -32.1012 -0.1 + vertex -24.7839 -33.2498 -0.1 + vertex -25.5344 -30.8827 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.7839 -33.2498 -0.1 + vertex -26.8166 -32.1012 -0.1 + vertex -25.4011 -34.2168 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.3602 -32.5933 -0.1 + vertex -25.4011 -34.2168 -0.1 + vertex -26.8166 -32.1012 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.924 -33.0516 -0.1 + vertex -25.4011 -34.2168 -0.1 + vertex -27.3602 -32.5933 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.4011 -34.2168 -0.1 + vertex -27.924 -33.0516 -0.1 + vertex -26.0482 -35.1877 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -28.5012 -33.4718 -0.1 + vertex -26.0482 -35.1877 -0.1 + vertex -27.924 -33.0516 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.0482 -35.1877 -0.1 + vertex -28.5012 -33.4718 -0.1 + vertex -26.6839 -36.0968 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.0852 -33.8499 -0.1 + vertex -26.6839 -36.0968 -0.1 + vertex -28.5012 -33.4718 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.6839 -36.0968 -0.1 + vertex -29.0852 -33.8499 -0.1 + vertex -27.2673 -36.8782 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.669 -34.1817 -0.1 + vertex -27.2673 -36.8782 -0.1 + vertex -29.0852 -33.8499 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -30.2461 -34.4632 -0.1 + vertex -27.2673 -36.8782 -0.1 + vertex -29.669 -34.1817 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2673 -36.8782 -0.1 + vertex -30.2461 -34.4632 -0.1 + vertex -28.2718 -38.1638 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -30.8095 -34.6902 -0.1 + vertex -28.2718 -38.1638 -0.1 + vertex -30.2461 -34.4632 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.3526 -34.8586 -0.1 + vertex -28.2718 -38.1638 -0.1 + vertex -30.8095 -34.6902 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.5797 -34.902 -0.1 + vertex -28.2718 -38.1638 -0.1 + vertex -31.3526 -34.8586 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.9023 -34.9414 -0.1 + vertex -28.2718 -38.1638 -0.1 + vertex -31.5797 -34.902 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -32.7769 -35.0076 -0.1 + vertex -28.2718 -38.1638 -0.1 + vertex -31.9023 -34.9414 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6203 -38.1325 -0.1 + vertex -32.7769 -35.0076 -0.1 + vertex -33.8615 -35.0556 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6203 -38.1325 -0.1 + vertex -33.8615 -35.0556 -0.1 + vertex -35.0412 -35.0835 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6203 -38.1325 -0.1 + vertex -35.0412 -35.0835 -0.1 + vertex -36.2012 -35.0898 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6203 -38.1325 -0.1 + vertex -36.2012 -35.0898 -0.1 + vertex -37.2267 -35.0727 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.7769 -35.0076 -0.1 + vertex -37.6203 -38.1325 -0.1 + vertex -28.2718 -38.1638 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.0027 -35.0306 -0.1 + vertex -37.6203 -38.1325 -0.1 + vertex -37.2267 -35.0727 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.2613 -34.9997 -0.1 + vertex -37.6203 -38.1325 -0.1 + vertex -38.0027 -35.0306 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.4144 -34.9619 -0.1 + vertex -37.6203 -38.1325 -0.1 + vertex -38.2613 -34.9997 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -41.2883 -38.1087 -0.1 + vertex -38.4144 -34.9619 -0.1 + vertex -38.5336 -34.8886 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -41.2883 -38.1087 -0.1 + vertex -38.5336 -34.8886 -0.1 + vertex -38.6312 -34.7874 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -41.2883 -38.1087 -0.1 + vertex -38.6312 -34.7874 -0.1 + vertex -38.6971 -34.6715 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -42.7651 -32.2453 -0.1 + vertex -38.3711 -33.5534 -0.1 + vertex -42.2252 -30.9405 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3711 -33.5534 -0.1 + vertex -42.7651 -32.2453 -0.1 + vertex -38.6277 -34.2404 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6277 -34.2404 -0.1 + vertex -42.7651 -32.2453 -0.1 + vertex -38.7214 -34.5543 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -43.2426 -33.2915 -0.1 + vertex -38.7214 -34.5543 -0.1 + vertex -42.7651 -32.2453 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -43.4655 -33.7273 -0.1 + vertex -38.7214 -34.5543 -0.1 + vertex -43.2426 -33.2915 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.7214 -34.5543 -0.1 + vertex -43.4655 -33.7273 -0.1 + vertex -38.6971 -34.6715 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.4144 -34.9619 -0.1 + vertex -41.2883 -38.1087 -0.1 + vertex -37.6203 -38.1325 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -43.682 -34.1098 -0.1 + vertex -38.6971 -34.6715 -0.1 + vertex -43.4655 -33.7273 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6971 -34.6715 -0.1 + vertex -43.682 -34.1098 -0.1 + vertex -41.2883 -38.1087 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -43.8952 -34.443 -0.1 + vertex -41.2883 -38.1087 -0.1 + vertex -43.682 -34.1098 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -44.108 -34.7306 -0.1 + vertex -41.2883 -38.1087 -0.1 + vertex -43.8952 -34.443 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -44.3237 -34.9765 -0.1 + vertex -41.2883 -38.1087 -0.1 + vertex -44.108 -34.7306 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.3237 -34.9765 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -41.2883 -38.1087 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -44.5451 -35.1844 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -44.3237 -34.9765 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -44.7755 -35.3583 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -44.5451 -35.1844 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -45.0179 -35.5019 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -44.7755 -35.3583 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -45.2753 -35.6191 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -45.0179 -35.5019 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -45.5508 -35.7136 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -45.2753 -35.6191 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -45.8475 -35.7893 -0.1 + vertex -44.3648 -38.0673 -0.1 + vertex -45.5508 -35.7136 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -46.5272 -38.014 -0.1 + vertex -45.8475 -35.7893 -0.1 + vertex -46.1684 -35.8499 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -46.5272 -38.014 -0.1 + vertex -46.1684 -35.8499 -0.1 + vertex -46.4544 -35.9117 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -45.8475 -35.7893 -0.1 + vertex -46.5272 -38.014 -0.1 + vertex -44.3648 -38.0673 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -46.7228 -35.999 -0.1 + vertex -46.5272 -38.014 -0.1 + vertex -46.4544 -35.9117 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -46.9715 -36.1082 -0.1 + vertex -46.5272 -38.014 -0.1 + vertex -46.7228 -35.999 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.1985 -36.2359 -0.1 + vertex -46.5272 -38.014 -0.1 + vertex -46.9715 -36.1082 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.4015 -36.3788 -0.1 + vertex -46.5272 -38.014 -0.1 + vertex -47.1985 -36.2359 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -46.5272 -38.014 -0.1 + vertex -47.4015 -36.3788 -0.1 + vertex -47.1648 -37.9848 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.5785 -36.5332 -0.1 + vertex -47.1648 -37.9848 -0.1 + vertex -47.4015 -36.3788 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.7274 -36.6957 -0.1 + vertex -47.1648 -37.9848 -0.1 + vertex -47.5785 -36.5332 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.846 -36.863 -0.1 + vertex -47.1648 -37.9848 -0.1 + vertex -47.7274 -36.6957 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.1648 -37.9848 -0.1 + vertex -47.846 -36.863 -0.1 + vertex -47.4529 -37.9547 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.9322 -37.0315 -0.1 + vertex -47.4529 -37.9547 -0.1 + vertex -47.846 -36.863 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.4529 -37.9547 -0.1 + vertex -47.9322 -37.0315 -0.1 + vertex -47.6522 -37.8745 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.984 -37.1977 -0.1 + vertex -47.6522 -37.8745 -0.1 + vertex -47.9322 -37.0315 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.6522 -37.8745 -0.1 + vertex -47.984 -37.1977 -0.1 + vertex -47.8044 -37.7712 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -47.9993 -37.3583 -0.1 + vertex -47.8044 -37.7712 -0.1 + vertex -47.984 -37.1977 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.8044 -37.7712 -0.1 + vertex -47.9993 -37.3583 -0.1 + vertex -47.9115 -37.6485 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9115 -37.6485 -0.1 + vertex -47.9993 -37.3583 -0.1 + vertex -47.9758 -37.5097 -0.1 + endloop + endfacet + facet normal -0.0100487 -0.99995 0 + outer loop + vertex -32.0944 -11.3029 -0.1 + vertex -27.175 -11.3523 0 + vertex -32.0944 -11.3029 0 + endloop + endfacet + facet normal -0.0100487 -0.99995 -0 + outer loop + vertex -27.175 -11.3523 0 + vertex -32.0944 -11.3029 -0.1 + vertex -27.175 -11.3523 -0.1 + endloop + endfacet + facet normal -0.0126654 -0.99992 0 + outer loop + vertex -27.175 -11.3523 -0.1 + vertex -17.7876 -11.4712 0 + vertex -27.175 -11.3523 0 + endloop + endfacet + facet normal -0.0126654 -0.99992 -0 + outer loop + vertex -17.7876 -11.4712 0 + vertex -27.175 -11.3523 -0.1 + vertex -17.7876 -11.4712 -0.1 + endloop + endfacet + facet normal -0.111827 -0.993728 0 + outer loop + vertex -17.7876 -11.4712 -0.1 + vertex -17.5514 -11.4978 0 + vertex -17.7876 -11.4712 0 + endloop + endfacet + facet normal -0.111827 -0.993728 -0 + outer loop + vertex -17.5514 -11.4978 0 + vertex -17.7876 -11.4712 -0.1 + vertex -17.5514 -11.4978 -0.1 + endloop + endfacet + facet normal -0.415864 -0.909427 0 + outer loop + vertex -17.5514 -11.4978 -0.1 + vertex -17.4764 -11.5321 0 + vertex -17.5514 -11.4978 0 + endloop + endfacet + facet normal -0.415864 -0.909427 -0 + outer loop + vertex -17.4764 -11.5321 0 + vertex -17.5514 -11.4978 -0.1 + vertex -17.4764 -11.5321 -0.1 + endloop + endfacet + facet normal -0.736355 -0.676596 0 + outer loop + vertex -17.4268 -11.5861 -0.1 + vertex -17.4764 -11.5321 0 + vertex -17.4764 -11.5321 -0.1 + endloop + endfacet + facet normal -0.736355 -0.676596 0 + outer loop + vertex -17.4764 -11.5321 0 + vertex -17.4268 -11.5861 -0.1 + vertex -17.4268 -11.5861 0 + endloop + endfacet + facet normal -0.946306 -0.323273 0 + outer loop + vertex -17.4002 -11.6639 -0.1 + vertex -17.4268 -11.5861 0 + vertex -17.4268 -11.5861 -0.1 + endloop + endfacet + facet normal -0.946306 -0.323273 0 + outer loop + vertex -17.4268 -11.5861 0 + vertex -17.4002 -11.6639 -0.1 + vertex -17.4002 -11.6639 0 + endloop + endfacet + facet normal -0.998372 -0.057036 0 + outer loop + vertex -17.3941 -11.77 -0.1 + vertex -17.4002 -11.6639 0 + vertex -17.4002 -11.6639 -0.1 + endloop + endfacet + facet normal -0.998372 -0.057036 0 + outer loop + vertex -17.4002 -11.6639 0 + vertex -17.3941 -11.77 -0.1 + vertex -17.3941 -11.77 0 + endloop + endfacet + facet normal -0.992058 0.125781 0 + outer loop + vertex -17.4339 -12.0833 -0.1 + vertex -17.3941 -11.77 0 + vertex -17.3941 -11.77 -0.1 + endloop + endfacet + facet normal -0.992058 0.125781 0 + outer loop + vertex -17.3941 -11.77 0 + vertex -17.4339 -12.0833 -0.1 + vertex -17.4339 -12.0833 0 + endloop + endfacet + facet normal -0.966487 0.256715 0 + outer loop + vertex -17.5116 -12.3759 -0.1 + vertex -17.4339 -12.0833 0 + vertex -17.4339 -12.0833 -0.1 + endloop + endfacet + facet normal -0.966487 0.256715 0 + outer loop + vertex -17.4339 -12.0833 0 + vertex -17.5116 -12.3759 -0.1 + vertex -17.5116 -12.3759 0 + endloop + endfacet + facet normal -0.949465 0.313873 0 + outer loop + vertex -17.6664 -12.8441 -0.1 + vertex -17.5116 -12.3759 0 + vertex -17.5116 -12.3759 -0.1 + endloop + endfacet + facet normal -0.949465 0.313873 0 + outer loop + vertex -17.5116 -12.3759 0 + vertex -17.6664 -12.8441 -0.1 + vertex -17.6664 -12.8441 0 + endloop + endfacet + facet normal -0.938494 0.345297 0 + outer loop + vertex -18.1466 -14.1495 -0.1 + vertex -17.6664 -12.8441 0 + vertex -17.6664 -12.8441 -0.1 + endloop + endfacet + facet normal -0.938494 0.345297 0 + outer loop + vertex -17.6664 -12.8441 0 + vertex -18.1466 -14.1495 -0.1 + vertex -18.1466 -14.1495 0 + endloop + endfacet + facet normal -0.929834 0.367979 0 + outer loop + vertex -18.7537 -15.6836 -0.1 + vertex -18.1466 -14.1495 0 + vertex -18.1466 -14.1495 -0.1 + endloop + endfacet + facet normal -0.929834 0.367979 0 + outer loop + vertex -18.1466 -14.1495 0 + vertex -18.7537 -15.6836 -0.1 + vertex -18.7537 -15.6836 0 + endloop + endfacet + facet normal -0.920782 0.390077 0 + outer loop + vertex -19.3667 -17.1305 -0.1 + vertex -18.7537 -15.6836 0 + vertex -18.7537 -15.6836 -0.1 + endloop + endfacet + facet normal -0.920782 0.390077 0 + outer loop + vertex -18.7537 -15.6836 0 + vertex -19.3667 -17.1305 -0.1 + vertex -19.3667 -17.1305 0 + endloop + endfacet + facet normal -0.87414 0.485675 0 + outer loop + vertex -19.4996 -17.3696 -0.1 + vertex -19.3667 -17.1305 0 + vertex -19.3667 -17.1305 -0.1 + endloop + endfacet + facet normal -0.87414 0.485675 0 + outer loop + vertex -19.3667 -17.1305 0 + vertex -19.4996 -17.3696 -0.1 + vertex -19.4996 -17.3696 0 + endloop + endfacet + facet normal -0.780486 0.625173 0 + outer loop + vertex -19.6713 -17.584 -0.1 + vertex -19.4996 -17.3696 0 + vertex -19.4996 -17.3696 -0.1 + endloop + endfacet + facet normal -0.780486 0.625173 0 + outer loop + vertex -19.4996 -17.3696 0 + vertex -19.6713 -17.584 -0.1 + vertex -19.6713 -17.584 0 + endloop + endfacet + facet normal -0.674318 0.738441 0 + outer loop + vertex -19.6713 -17.584 -0.1 + vertex -19.8743 -17.7693 0 + vertex -19.6713 -17.584 0 + endloop + endfacet + facet normal -0.674318 0.738441 0 + outer loop + vertex -19.8743 -17.7693 0 + vertex -19.6713 -17.584 -0.1 + vertex -19.8743 -17.7693 -0.1 + endloop + endfacet + facet normal -0.55704 0.830486 0 + outer loop + vertex -19.8743 -17.7693 -0.1 + vertex -20.1009 -17.9213 0 + vertex -19.8743 -17.7693 0 + endloop + endfacet + facet normal -0.55704 0.830486 0 + outer loop + vertex -20.1009 -17.9213 0 + vertex -19.8743 -17.7693 -0.1 + vertex -20.1009 -17.9213 -0.1 + endloop + endfacet + facet normal -0.42623 0.904615 0 + outer loop + vertex -20.1009 -17.9213 -0.1 + vertex -20.3435 -18.0357 0 + vertex -20.1009 -17.9213 0 + endloop + endfacet + facet normal -0.42623 0.904615 0 + outer loop + vertex -20.3435 -18.0357 0 + vertex -20.1009 -17.9213 -0.1 + vertex -20.3435 -18.0357 -0.1 + endloop + endfacet + facet normal -0.276826 0.96092 0 + outer loop + vertex -20.3435 -18.0357 -0.1 + vertex -20.5945 -18.108 0 + vertex -20.3435 -18.0357 0 + endloop + endfacet + facet normal -0.276826 0.96092 0 + outer loop + vertex -20.5945 -18.108 0 + vertex -20.3435 -18.0357 -0.1 + vertex -20.5945 -18.108 -0.1 + endloop + endfacet + facet normal -0.102621 0.994721 0 + outer loop + vertex -20.5945 -18.108 -0.1 + vertex -20.8463 -18.1339 0 + vertex -20.5945 -18.108 0 + endloop + endfacet + facet normal -0.102621 0.994721 0 + outer loop + vertex -20.8463 -18.1339 0 + vertex -20.5945 -18.108 -0.1 + vertex -20.8463 -18.1339 -0.1 + endloop + endfacet + facet normal 0.100283 0.994959 -0 + outer loop + vertex -20.8463 -18.1339 -0.1 + vertex -21.0912 -18.1093 0 + vertex -20.8463 -18.1339 0 + endloop + endfacet + facet normal 0.100283 0.994959 0 + outer loop + vertex -21.0912 -18.1093 0 + vertex -20.8463 -18.1339 -0.1 + vertex -21.0912 -18.1093 -0.1 + endloop + endfacet + facet normal 0.237758 0.971324 -0 + outer loop + vertex -21.0912 -18.1093 -0.1 + vertex -21.2545 -18.0693 0 + vertex -21.0912 -18.1093 0 + endloop + endfacet + facet normal 0.237758 0.971324 0 + outer loop + vertex -21.2545 -18.0693 0 + vertex -21.0912 -18.1093 -0.1 + vertex -21.2545 -18.0693 -0.1 + endloop + endfacet + facet normal 0.389432 0.921055 -0 + outer loop + vertex -21.2545 -18.0693 -0.1 + vertex -21.378 -18.0171 0 + vertex -21.2545 -18.0693 0 + endloop + endfacet + facet normal 0.389432 0.921055 0 + outer loop + vertex -21.378 -18.0171 0 + vertex -21.2545 -18.0693 -0.1 + vertex -21.378 -18.0171 -0.1 + endloop + endfacet + facet normal 0.679889 0.733315 -0 + outer loop + vertex -21.378 -18.0171 -0.1 + vertex -21.4669 -17.9347 0 + vertex -21.378 -18.0171 0 + endloop + endfacet + facet normal 0.679889 0.733315 0 + outer loop + vertex -21.4669 -17.9347 0 + vertex -21.378 -18.0171 -0.1 + vertex -21.4669 -17.9347 -0.1 + endloop + endfacet + facet normal 0.910139 0.414303 0 + outer loop + vertex -21.4669 -17.9347 0 + vertex -21.5263 -17.8042 -0.1 + vertex -21.5263 -17.8042 0 + endloop + endfacet + facet normal 0.910139 0.414303 0 + outer loop + vertex -21.5263 -17.8042 -0.1 + vertex -21.4669 -17.9347 0 + vertex -21.4669 -17.9347 -0.1 + endloop + endfacet + facet normal 0.984407 0.175905 0 + outer loop + vertex -21.5263 -17.8042 0 + vertex -21.5614 -17.6077 -0.1 + vertex -21.5614 -17.6077 0 + endloop + endfacet + facet normal 0.984407 0.175905 0 + outer loop + vertex -21.5614 -17.6077 -0.1 + vertex -21.5263 -17.8042 0 + vertex -21.5263 -17.8042 -0.1 + endloop + endfacet + facet normal 0.998374 0.057002 0 + outer loop + vertex -21.5614 -17.6077 0 + vertex -21.5774 -17.3273 -0.1 + vertex -21.5774 -17.3273 0 + endloop + endfacet + facet normal 0.998374 0.057002 0 + outer loop + vertex -21.5774 -17.3273 -0.1 + vertex -21.5614 -17.6077 0 + vertex -21.5614 -17.6077 -0.1 + endloop + endfacet + facet normal 0.999987 -0.00513458 0 + outer loop + vertex -21.5774 -17.3273 0 + vertex -21.5729 -16.4428 -0.1 + vertex -21.5729 -16.4428 0 + endloop + endfacet + facet normal 0.999987 -0.00513458 0 + outer loop + vertex -21.5729 -16.4428 -0.1 + vertex -21.5774 -17.3273 0 + vertex -21.5774 -17.3273 -0.1 + endloop + endfacet + facet normal 0.999992 -0.00401347 0 + outer loop + vertex -21.5729 -16.4428 0 + vertex -21.5693 -15.5508 -0.1 + vertex -21.5693 -15.5508 0 + endloop + endfacet + facet normal 0.999992 -0.00401347 0 + outer loop + vertex -21.5693 -15.5508 -0.1 + vertex -21.5729 -16.4428 0 + vertex -21.5729 -16.4428 -0.1 + endloop + endfacet + facet normal 0.997925 0.0643945 0 + outer loop + vertex -21.5693 -15.5508 0 + vertex -21.5879 -15.2616 -0.1 + vertex -21.5879 -15.2616 0 + endloop + endfacet + facet normal 0.997925 0.0643945 0 + outer loop + vertex -21.5879 -15.2616 -0.1 + vertex -21.5693 -15.5508 0 + vertex -21.5693 -15.5508 -0.1 + endloop + endfacet + facet normal 0.982338 0.187114 0 + outer loop + vertex -21.5879 -15.2616 0 + vertex -21.6284 -15.0493 -0.1 + vertex -21.6284 -15.0493 0 + endloop + endfacet + facet normal 0.982338 0.187114 0 + outer loop + vertex -21.6284 -15.0493 -0.1 + vertex -21.5879 -15.2616 0 + vertex -21.5879 -15.2616 -0.1 + endloop + endfacet + facet normal 0.915958 0.401274 0 + outer loop + vertex -21.6284 -15.0493 0 + vertex -21.6966 -14.8935 -0.1 + vertex -21.6966 -14.8935 0 + endloop + endfacet + facet normal 0.915958 0.401274 0 + outer loop + vertex -21.6966 -14.8935 -0.1 + vertex -21.6284 -15.0493 0 + vertex -21.6284 -15.0493 -0.1 + endloop + endfacet + facet normal 0.761577 0.648074 0 + outer loop + vertex -21.6966 -14.8935 0 + vertex -21.7989 -14.7733 -0.1 + vertex -21.7989 -14.7733 0 + endloop + endfacet + facet normal 0.761577 0.648074 0 + outer loop + vertex -21.7989 -14.7733 -0.1 + vertex -21.6966 -14.8935 0 + vertex -21.6966 -14.8935 -0.1 + endloop + endfacet + facet normal 0.593991 0.804472 -0 + outer loop + vertex -21.7989 -14.7733 -0.1 + vertex -21.9412 -14.6683 0 + vertex -21.7989 -14.7733 0 + endloop + endfacet + facet normal 0.593991 0.804472 0 + outer loop + vertex -21.9412 -14.6683 0 + vertex -21.7989 -14.7733 -0.1 + vertex -21.9412 -14.6683 -0.1 + endloop + endfacet + facet normal 0.506241 0.862392 -0 + outer loop + vertex -21.9412 -14.6683 -0.1 + vertex -22.1296 -14.5577 0 + vertex -21.9412 -14.6683 0 + endloop + endfacet + facet normal 0.506241 0.862392 0 + outer loop + vertex -22.1296 -14.5577 0 + vertex -21.9412 -14.6683 -0.1 + vertex -22.1296 -14.5577 -0.1 + endloop + endfacet + facet normal 0.406178 0.913794 -0 + outer loop + vertex -22.1296 -14.5577 -0.1 + vertex -22.3213 -14.4724 0 + vertex -22.1296 -14.5577 0 + endloop + endfacet + facet normal 0.406178 0.913794 0 + outer loop + vertex -22.3213 -14.4724 0 + vertex -22.1296 -14.5577 -0.1 + vertex -22.3213 -14.4724 -0.1 + endloop + endfacet + facet normal 0.272589 0.962131 -0 + outer loop + vertex -22.3213 -14.4724 -0.1 + vertex -22.5778 -14.3998 0 + vertex -22.3213 -14.4724 0 + endloop + endfacet + facet normal 0.272589 0.962131 0 + outer loop + vertex -22.5778 -14.3998 0 + vertex -22.3213 -14.4724 -0.1 + vertex -22.5778 -14.3998 -0.1 + endloop + endfacet + facet normal 0.181059 0.983472 -0 + outer loop + vertex -22.5778 -14.3998 -0.1 + vertex -22.9103 -14.3386 0 + vertex -22.5778 -14.3998 0 + endloop + endfacet + facet normal 0.181059 0.983472 0 + outer loop + vertex -22.9103 -14.3386 0 + vertex -22.5778 -14.3998 -0.1 + vertex -22.9103 -14.3386 -0.1 + endloop + endfacet + facet normal 0.120311 0.992736 -0 + outer loop + vertex -22.9103 -14.3386 -0.1 + vertex -23.3301 -14.2877 0 + vertex -22.9103 -14.3386 0 + endloop + endfacet + facet normal 0.120311 0.992736 0 + outer loop + vertex -23.3301 -14.2877 0 + vertex -22.9103 -14.3386 -0.1 + vertex -23.3301 -14.2877 -0.1 + endloop + endfacet + facet normal 0.0654234 0.997858 -0 + outer loop + vertex -23.3301 -14.2877 -0.1 + vertex -24.4767 -14.2125 0 + vertex -23.3301 -14.2877 0 + endloop + endfacet + facet normal 0.0654234 0.997858 0 + outer loop + vertex -24.4767 -14.2125 0 + vertex -23.3301 -14.2877 -0.1 + vertex -24.4767 -14.2125 -0.1 + endloop + endfacet + facet normal 0.0288976 0.999582 -0 + outer loop + vertex -24.4767 -14.2125 -0.1 + vertex -26.1077 -14.1654 0 + vertex -24.4767 -14.2125 0 + endloop + endfacet + facet normal 0.0288976 0.999582 0 + outer loop + vertex -26.1077 -14.1654 0 + vertex -24.4767 -14.2125 -0.1 + vertex -26.1077 -14.1654 -0.1 + endloop + endfacet + facet normal 0.0099076 0.999951 -0 + outer loop + vertex -26.1077 -14.1654 -0.1 + vertex -28.2448 -14.1442 0 + vertex -26.1077 -14.1654 0 + endloop + endfacet + facet normal 0.0099076 0.999951 0 + outer loop + vertex -28.2448 -14.1442 0 + vertex -26.1077 -14.1654 -0.1 + vertex -28.2448 -14.1442 -0.1 + endloop + endfacet + facet normal -0.0184714 0.999829 0 + outer loop + vertex -28.2448 -14.1442 -0.1 + vertex -28.9898 -14.1579 0 + vertex -28.2448 -14.1442 0 + endloop + endfacet + facet normal -0.0184714 0.999829 0 + outer loop + vertex -28.9898 -14.1579 0 + vertex -28.2448 -14.1442 -0.1 + vertex -28.9898 -14.1579 -0.1 + endloop + endfacet + facet normal -0.0583775 0.998295 0 + outer loop + vertex -28.9898 -14.1579 -0.1 + vertex -29.549 -14.1906 0 + vertex -28.9898 -14.1579 0 + endloop + endfacet + facet normal -0.0583775 0.998295 0 + outer loop + vertex -29.549 -14.1906 0 + vertex -28.9898 -14.1579 -0.1 + vertex -29.549 -14.1906 -0.1 + endloop + endfacet + facet normal -0.134346 0.990934 0 + outer loop + vertex -29.549 -14.1906 -0.1 + vertex -29.9449 -14.2443 0 + vertex -29.549 -14.1906 0 + endloop + endfacet + facet normal -0.134346 0.990934 0 + outer loop + vertex -29.9449 -14.2443 0 + vertex -29.549 -14.1906 -0.1 + vertex -29.9449 -14.2443 -0.1 + endloop + endfacet + facet normal -0.287948 0.957646 0 + outer loop + vertex -29.9449 -14.2443 -0.1 + vertex -30.1999 -14.321 0 + vertex -29.9449 -14.2443 0 + endloop + endfacet + facet normal -0.287948 0.957646 0 + outer loop + vertex -30.1999 -14.321 0 + vertex -29.9449 -14.2443 -0.1 + vertex -30.1999 -14.321 -0.1 + endloop + endfacet + facet normal -0.503498 0.863996 0 + outer loop + vertex -30.1999 -14.321 -0.1 + vertex -30.2816 -14.3686 0 + vertex -30.1999 -14.321 0 + endloop + endfacet + facet normal -0.503498 0.863996 0 + outer loop + vertex -30.2816 -14.3686 0 + vertex -30.1999 -14.321 -0.1 + vertex -30.2816 -14.3686 -0.1 + endloop + endfacet + facet normal -0.702151 0.712028 0 + outer loop + vertex -30.2816 -14.3686 -0.1 + vertex -30.3364 -14.4227 0 + vertex -30.2816 -14.3686 0 + endloop + endfacet + facet normal -0.702151 0.712028 0 + outer loop + vertex -30.3364 -14.4227 0 + vertex -30.2816 -14.3686 -0.1 + vertex -30.3364 -14.4227 -0.1 + endloop + endfacet + facet normal -0.891918 0.452198 0 + outer loop + vertex -30.3673 -14.4836 -0.1 + vertex -30.3364 -14.4227 0 + vertex -30.3364 -14.4227 -0.1 + endloop + endfacet + facet normal -0.891918 0.452198 0 + outer loop + vertex -30.3364 -14.4227 0 + vertex -30.3673 -14.4836 -0.1 + vertex -30.3673 -14.4836 0 + endloop + endfacet + facet normal -0.990022 0.140913 0 + outer loop + vertex -30.377 -14.5514 -0.1 + vertex -30.3673 -14.4836 0 + vertex -30.3673 -14.4836 -0.1 + endloop + endfacet + facet normal -0.990022 0.140913 0 + outer loop + vertex -30.3673 -14.4836 0 + vertex -30.377 -14.5514 -0.1 + vertex -30.377 -14.5514 0 + endloop + endfacet + facet normal -0.969743 0.244126 0 + outer loop + vertex -30.4158 -14.7057 -0.1 + vertex -30.377 -14.5514 0 + vertex -30.377 -14.5514 -0.1 + endloop + endfacet + facet normal -0.969743 0.244126 0 + outer loop + vertex -30.377 -14.5514 0 + vertex -30.4158 -14.7057 -0.1 + vertex -30.4158 -14.7057 0 + endloop + endfacet + facet normal -0.925454 0.378859 0 + outer loop + vertex -30.5215 -14.964 -0.1 + vertex -30.4158 -14.7057 0 + vertex -30.4158 -14.7057 -0.1 + endloop + endfacet + facet normal -0.925454 0.378859 0 + outer loop + vertex -30.4158 -14.7057 0 + vertex -30.5215 -14.964 -0.1 + vertex -30.5215 -14.964 0 + endloop + endfacet + facet normal -0.901668 0.432429 0 + outer loop + vertex -30.678 -15.2903 -0.1 + vertex -30.5215 -14.964 0 + vertex -30.5215 -14.964 -0.1 + endloop + endfacet + facet normal -0.901668 0.432429 0 + outer loop + vertex -30.5215 -14.964 0 + vertex -30.678 -15.2903 -0.1 + vertex -30.678 -15.2903 0 + endloop + endfacet + facet normal -0.882363 0.47057 0 + outer loop + vertex -30.8691 -15.6487 -0.1 + vertex -30.678 -15.2903 0 + vertex -30.678 -15.2903 -0.1 + endloop + endfacet + facet normal -0.882363 0.47057 0 + outer loop + vertex -30.678 -15.2903 0 + vertex -30.8691 -15.6487 -0.1 + vertex -30.8691 -15.6487 0 + endloop + endfacet + facet normal -0.892172 0.451696 0 + outer loop + vertex -31.1223 -16.1487 -0.1 + vertex -30.8691 -15.6487 0 + vertex -30.8691 -15.6487 -0.1 + endloop + endfacet + facet normal -0.892172 0.451696 0 + outer loop + vertex -30.8691 -15.6487 0 + vertex -31.1223 -16.1487 -0.1 + vertex -31.1223 -16.1487 0 + endloop + endfacet + facet normal -0.909515 0.415671 0 + outer loop + vertex -31.4477 -16.8607 -0.1 + vertex -31.1223 -16.1487 0 + vertex -31.1223 -16.1487 -0.1 + endloop + endfacet + facet normal -0.909515 0.415671 0 + outer loop + vertex -31.1223 -16.1487 0 + vertex -31.4477 -16.8607 -0.1 + vertex -31.4477 -16.8607 0 + endloop + endfacet + facet normal -0.918988 0.394285 0 + outer loop + vertex -31.8034 -17.6899 -0.1 + vertex -31.4477 -16.8607 0 + vertex -31.4477 -16.8607 -0.1 + endloop + endfacet + facet normal -0.918988 0.394285 0 + outer loop + vertex -31.4477 -16.8607 0 + vertex -31.8034 -17.6899 -0.1 + vertex -31.8034 -17.6899 0 + endloop + endfacet + facet normal -0.927129 0.374741 0 + outer loop + vertex -32.1476 -18.5412 -0.1 + vertex -31.8034 -17.6899 0 + vertex -31.8034 -17.6899 -0.1 + endloop + endfacet + facet normal -0.927129 0.374741 0 + outer loop + vertex -31.8034 -17.6899 0 + vertex -32.1476 -18.5412 -0.1 + vertex -32.1476 -18.5412 0 + endloop + endfacet + facet normal -0.929897 0.36782 0 + outer loop + vertex -33.2902 -21.4299 -0.1 + vertex -32.1476 -18.5412 0 + vertex -32.1476 -18.5412 -0.1 + endloop + endfacet + facet normal -0.929897 0.36782 0 + outer loop + vertex -32.1476 -18.5412 0 + vertex -33.2902 -21.4299 -0.1 + vertex -33.2902 -21.4299 0 + endloop + endfacet + facet normal -0.931897 0.362724 0 + outer loop + vertex -33.4325 -21.7956 -0.1 + vertex -33.2902 -21.4299 0 + vertex -33.2902 -21.4299 -0.1 + endloop + endfacet + facet normal -0.931897 0.362724 0 + outer loop + vertex -33.2902 -21.4299 0 + vertex -33.4325 -21.7956 -0.1 + vertex -33.4325 -21.7956 0 + endloop + endfacet + facet normal -0.968991 0.247098 0 + outer loop + vertex -33.503 -22.0719 -0.1 + vertex -33.4325 -21.7956 0 + vertex -33.4325 -21.7956 -0.1 + endloop + endfacet + facet normal -0.968991 0.247098 0 + outer loop + vertex -33.4325 -21.7956 0 + vertex -33.503 -22.0719 -0.1 + vertex -33.503 -22.0719 0 + endloop + endfacet + facet normal -0.999995 -0.00318704 0 + outer loop + vertex -33.5026 -22.1809 -0.1 + vertex -33.503 -22.0719 0 + vertex -33.503 -22.0719 -0.1 + endloop + endfacet + facet normal -0.999995 -0.00318704 0 + outer loop + vertex -33.503 -22.0719 0 + vertex -33.5026 -22.1809 -0.1 + vertex -33.5026 -22.1809 0 + endloop + endfacet + facet normal -0.954349 -0.298693 0 + outer loop + vertex -33.4739 -22.2725 -0.1 + vertex -33.5026 -22.1809 0 + vertex -33.5026 -22.1809 -0.1 + endloop + endfacet + facet normal -0.954349 -0.298693 0 + outer loop + vertex -33.5026 -22.1809 0 + vertex -33.4739 -22.2725 -0.1 + vertex -33.4739 -22.2725 0 + endloop + endfacet + facet normal -0.782807 -0.622265 0 + outer loop + vertex -33.4135 -22.3486 -0.1 + vertex -33.4739 -22.2725 0 + vertex -33.4739 -22.2725 -0.1 + endloop + endfacet + facet normal -0.782807 -0.622265 0 + outer loop + vertex -33.4739 -22.2725 0 + vertex -33.4135 -22.3486 -0.1 + vertex -33.4135 -22.3486 0 + endloop + endfacet + facet normal -0.544751 -0.838598 0 + outer loop + vertex -33.4135 -22.3486 -0.1 + vertex -33.3177 -22.4108 0 + vertex -33.4135 -22.3486 0 + endloop + endfacet + facet normal -0.544751 -0.838598 -0 + outer loop + vertex -33.3177 -22.4108 0 + vertex -33.4135 -22.3486 -0.1 + vertex -33.3177 -22.4108 -0.1 + endloop + endfacet + facet normal -0.348432 -0.937334 0 + outer loop + vertex -33.3177 -22.4108 -0.1 + vertex -33.1833 -22.4608 0 + vertex -33.3177 -22.4108 0 + endloop + endfacet + facet normal -0.348432 -0.937334 -0 + outer loop + vertex -33.1833 -22.4608 0 + vertex -33.3177 -22.4108 -0.1 + vertex -33.1833 -22.4608 -0.1 + endloop + endfacet + facet normal -0.218014 -0.975946 0 + outer loop + vertex -33.1833 -22.4608 -0.1 + vertex -33.0067 -22.5002 0 + vertex -33.1833 -22.4608 0 + endloop + endfacet + facet normal -0.218014 -0.975946 -0 + outer loop + vertex -33.0067 -22.5002 0 + vertex -33.1833 -22.4608 -0.1 + vertex -33.0067 -22.5002 -0.1 + endloop + endfacet + facet normal -0.108894 -0.994053 0 + outer loop + vertex -33.0067 -22.5002 -0.1 + vertex -32.5132 -22.5543 0 + vertex -33.0067 -22.5002 0 + endloop + endfacet + facet normal -0.108894 -0.994053 -0 + outer loop + vertex -32.5132 -22.5543 0 + vertex -33.0067 -22.5002 -0.1 + vertex -32.5132 -22.5543 -0.1 + endloop + endfacet + facet normal -0.0456949 -0.998955 0 + outer loop + vertex -32.5132 -22.5543 -0.1 + vertex -31.8095 -22.5865 0 + vertex -32.5132 -22.5543 0 + endloop + endfacet + facet normal -0.0456949 -0.998955 -0 + outer loop + vertex -31.8095 -22.5865 0 + vertex -32.5132 -22.5543 -0.1 + vertex -31.8095 -22.5865 -0.1 + endloop + endfacet + facet normal -0.0252584 -0.999681 0 + outer loop + vertex -31.8095 -22.5865 -0.1 + vertex -30.868 -22.6102 0 + vertex -31.8095 -22.5865 0 + endloop + endfacet + facet normal -0.0252584 -0.999681 -0 + outer loop + vertex -30.868 -22.6102 0 + vertex -31.8095 -22.5865 -0.1 + vertex -30.868 -22.6102 -0.1 + endloop + endfacet + facet normal -0.0103281 -0.999947 0 + outer loop + vertex -30.868 -22.6102 -0.1 + vertex -30.2322 -22.6168 0 + vertex -30.868 -22.6102 0 + endloop + endfacet + facet normal -0.0103281 -0.999947 -0 + outer loop + vertex -30.2322 -22.6168 0 + vertex -30.868 -22.6102 -0.1 + vertex -30.2322 -22.6168 -0.1 + endloop + endfacet + facet normal 0.0183057 -0.999832 0 + outer loop + vertex -30.2322 -22.6168 -0.1 + vertex -29.6427 -22.606 0 + vertex -30.2322 -22.6168 0 + endloop + endfacet + facet normal 0.0183057 -0.999832 0 + outer loop + vertex -29.6427 -22.606 0 + vertex -30.2322 -22.6168 -0.1 + vertex -29.6427 -22.606 -0.1 + endloop + endfacet + facet normal 0.0536309 -0.998561 0 + outer loop + vertex -29.6427 -22.606 -0.1 + vertex -29.0966 -22.5767 0 + vertex -29.6427 -22.606 0 + endloop + endfacet + facet normal 0.0536309 -0.998561 0 + outer loop + vertex -29.0966 -22.5767 0 + vertex -29.6427 -22.606 -0.1 + vertex -29.0966 -22.5767 -0.1 + endloop + endfacet + facet normal 0.0966018 -0.995323 0 + outer loop + vertex -29.0966 -22.5767 -0.1 + vertex -28.5914 -22.5277 0 + vertex -29.0966 -22.5767 0 + endloop + endfacet + facet normal 0.0966018 -0.995323 0 + outer loop + vertex -28.5914 -22.5277 0 + vertex -29.0966 -22.5767 -0.1 + vertex -28.5914 -22.5277 -0.1 + endloop + endfacet + facet normal 0.148005 -0.988987 0 + outer loop + vertex -28.5914 -22.5277 -0.1 + vertex -28.1242 -22.4577 0 + vertex -28.5914 -22.5277 0 + endloop + endfacet + facet normal 0.148005 -0.988987 0 + outer loop + vertex -28.1242 -22.4577 0 + vertex -28.5914 -22.5277 -0.1 + vertex -28.1242 -22.4577 -0.1 + endloop + endfacet + facet normal 0.208284 -0.978068 0 + outer loop + vertex -28.1242 -22.4577 -0.1 + vertex -27.6923 -22.3658 0 + vertex -28.1242 -22.4577 0 + endloop + endfacet + facet normal 0.208284 -0.978068 0 + outer loop + vertex -27.6923 -22.3658 0 + vertex -28.1242 -22.4577 -0.1 + vertex -27.6923 -22.3658 -0.1 + endloop + endfacet + facet normal 0.277178 -0.960818 0 + outer loop + vertex -27.6923 -22.3658 -0.1 + vertex -27.2929 -22.2506 0 + vertex -27.6923 -22.3658 0 + endloop + endfacet + facet normal 0.277178 -0.960818 0 + outer loop + vertex -27.2929 -22.2506 0 + vertex -27.6923 -22.3658 -0.1 + vertex -27.2929 -22.2506 -0.1 + endloop + endfacet + facet normal 0.353412 -0.935468 0 + outer loop + vertex -27.2929 -22.2506 -0.1 + vertex -26.9234 -22.1109 0 + vertex -27.2929 -22.2506 0 + endloop + endfacet + facet normal 0.353412 -0.935468 0 + outer loop + vertex -26.9234 -22.1109 0 + vertex -27.2929 -22.2506 -0.1 + vertex -26.9234 -22.1109 -0.1 + endloop + endfacet + facet normal 0.434442 -0.9007 0 + outer loop + vertex -26.9234 -22.1109 -0.1 + vertex -26.5809 -21.9457 0 + vertex -26.9234 -22.1109 0 + endloop + endfacet + facet normal 0.434442 -0.9007 0 + outer loop + vertex -26.5809 -21.9457 0 + vertex -26.9234 -22.1109 -0.1 + vertex -26.5809 -21.9457 -0.1 + endloop + endfacet + facet normal 0.516567 -0.856247 0 + outer loop + vertex -26.5809 -21.9457 -0.1 + vertex -26.2627 -21.7538 0 + vertex -26.5809 -21.9457 0 + endloop + endfacet + facet normal 0.516567 -0.856247 0 + outer loop + vertex -26.2627 -21.7538 0 + vertex -26.5809 -21.9457 -0.1 + vertex -26.2627 -21.7538 -0.1 + endloop + endfacet + facet normal 0.595538 -0.803327 0 + outer loop + vertex -26.2627 -21.7538 -0.1 + vertex -25.9661 -21.5339 0 + vertex -26.2627 -21.7538 0 + endloop + endfacet + facet normal 0.595538 -0.803327 0 + outer loop + vertex -25.9661 -21.5339 0 + vertex -26.2627 -21.7538 -0.1 + vertex -25.9661 -21.5339 -0.1 + endloop + endfacet + facet normal 0.667477 -0.744631 0 + outer loop + vertex -25.9661 -21.5339 -0.1 + vertex -25.6884 -21.2849 0 + vertex -25.9661 -21.5339 0 + endloop + endfacet + facet normal 0.667477 -0.744631 0 + outer loop + vertex -25.6884 -21.2849 0 + vertex -25.9661 -21.5339 -0.1 + vertex -25.6884 -21.2849 -0.1 + endloop + endfacet + facet normal 0.729709 -0.683757 0 + outer loop + vertex -25.6884 -21.2849 0 + vertex -25.4267 -21.0057 -0.1 + vertex -25.4267 -21.0057 0 + endloop + endfacet + facet normal 0.729709 -0.683757 0 + outer loop + vertex -25.4267 -21.0057 -0.1 + vertex -25.6884 -21.2849 0 + vertex -25.6884 -21.2849 -0.1 + endloop + endfacet + facet normal 0.781167 -0.624322 0 + outer loop + vertex -25.4267 -21.0057 0 + vertex -25.1784 -20.695 -0.1 + vertex -25.1784 -20.695 0 + endloop + endfacet + facet normal 0.781167 -0.624322 0 + outer loop + vertex -25.1784 -20.695 -0.1 + vertex -25.4267 -21.0057 0 + vertex -25.4267 -21.0057 -0.1 + endloop + endfacet + facet normal 0.82216 -0.569257 0 + outer loop + vertex -25.1784 -20.695 0 + vertex -24.9407 -20.3516 -0.1 + vertex -24.9407 -20.3516 0 + endloop + endfacet + facet normal 0.82216 -0.569257 0 + outer loop + vertex -24.9407 -20.3516 -0.1 + vertex -25.1784 -20.695 0 + vertex -25.1784 -20.695 -0.1 + endloop + endfacet + facet normal 0.853894 -0.520447 0 + outer loop + vertex -24.9407 -20.3516 0 + vertex -24.7108 -19.9745 -0.1 + vertex -24.7108 -19.9745 0 + endloop + endfacet + facet normal 0.853894 -0.520447 0 + outer loop + vertex -24.7108 -19.9745 -0.1 + vertex -24.9407 -20.3516 0 + vertex -24.9407 -20.3516 -0.1 + endloop + endfacet + facet normal 0.85126 -0.524745 0 + outer loop + vertex -24.7108 -19.9745 0 + vertex -24.3738 -19.4278 -0.1 + vertex -24.3738 -19.4278 0 + endloop + endfacet + facet normal 0.85126 -0.524745 0 + outer loop + vertex -24.3738 -19.4278 -0.1 + vertex -24.7108 -19.9745 0 + vertex -24.7108 -19.9745 -0.1 + endloop + endfacet + facet normal 0.796036 -0.60525 0 + outer loop + vertex -24.3738 -19.4278 0 + vertex -24.2328 -19.2424 -0.1 + vertex -24.2328 -19.2424 0 + endloop + endfacet + facet normal 0.796036 -0.60525 0 + outer loop + vertex -24.2328 -19.2424 -0.1 + vertex -24.3738 -19.4278 0 + vertex -24.3738 -19.4278 -0.1 + endloop + endfacet + facet normal 0.714094 -0.70005 0 + outer loop + vertex -24.2328 -19.2424 0 + vertex -24.0993 -19.1062 -0.1 + vertex -24.0993 -19.1062 0 + endloop + endfacet + facet normal 0.714094 -0.70005 0 + outer loop + vertex -24.0993 -19.1062 -0.1 + vertex -24.2328 -19.2424 0 + vertex -24.2328 -19.2424 -0.1 + endloop + endfacet + facet normal 0.573399 -0.819276 0 + outer loop + vertex -24.0993 -19.1062 -0.1 + vertex -23.9653 -19.0124 0 + vertex -24.0993 -19.1062 0 + endloop + endfacet + facet normal 0.573399 -0.819276 0 + outer loop + vertex -23.9653 -19.0124 0 + vertex -24.0993 -19.1062 -0.1 + vertex -23.9653 -19.0124 -0.1 + endloop + endfacet + facet normal 0.378849 -0.925458 0 + outer loop + vertex -23.9653 -19.0124 -0.1 + vertex -23.8226 -18.954 0 + vertex -23.9653 -19.0124 0 + endloop + endfacet + facet normal 0.378849 -0.925458 0 + outer loop + vertex -23.8226 -18.954 0 + vertex -23.9653 -19.0124 -0.1 + vertex -23.8226 -18.954 -0.1 + endloop + endfacet + facet normal 0.184661 -0.982802 0 + outer loop + vertex -23.8226 -18.954 -0.1 + vertex -23.6632 -18.9241 0 + vertex -23.8226 -18.954 0 + endloop + endfacet + facet normal 0.184661 -0.982802 0 + outer loop + vertex -23.6632 -18.9241 0 + vertex -23.8226 -18.954 -0.1 + vertex -23.6632 -18.9241 -0.1 + endloop + endfacet + facet normal 0.0457652 -0.998952 0 + outer loop + vertex -23.6632 -18.9241 -0.1 + vertex -23.4791 -18.9156 0 + vertex -23.6632 -18.9241 0 + endloop + endfacet + facet normal 0.0457652 -0.998952 0 + outer loop + vertex -23.4791 -18.9156 0 + vertex -23.6632 -18.9241 -0.1 + vertex -23.4791 -18.9156 -0.1 + endloop + endfacet + facet normal -0.0578368 -0.998326 0 + outer loop + vertex -23.4791 -18.9156 -0.1 + vertex -23.1186 -18.9365 0 + vertex -23.4791 -18.9156 0 + endloop + endfacet + facet normal -0.0578368 -0.998326 -0 + outer loop + vertex -23.1186 -18.9365 0 + vertex -23.4791 -18.9156 -0.1 + vertex -23.1186 -18.9365 -0.1 + endloop + endfacet + facet normal -0.193675 -0.981066 0 + outer loop + vertex -23.1186 -18.9365 -0.1 + vertex -22.9739 -18.9651 0 + vertex -23.1186 -18.9365 0 + endloop + endfacet + facet normal -0.193675 -0.981066 -0 + outer loop + vertex -22.9739 -18.9651 0 + vertex -23.1186 -18.9365 -0.1 + vertex -22.9739 -18.9651 -0.1 + endloop + endfacet + facet normal -0.332798 -0.942998 0 + outer loop + vertex -22.9739 -18.9651 -0.1 + vertex -22.8524 -19.008 0 + vertex -22.9739 -18.9651 0 + endloop + endfacet + facet normal -0.332798 -0.942998 -0 + outer loop + vertex -22.8524 -19.008 0 + vertex -22.9739 -18.9651 -0.1 + vertex -22.8524 -19.008 -0.1 + endloop + endfacet + facet normal -0.512852 -0.858477 0 + outer loop + vertex -22.8524 -19.008 -0.1 + vertex -22.7539 -19.0668 0 + vertex -22.8524 -19.008 0 + endloop + endfacet + facet normal -0.512852 -0.858477 -0 + outer loop + vertex -22.7539 -19.0668 0 + vertex -22.8524 -19.008 -0.1 + vertex -22.7539 -19.0668 -0.1 + endloop + endfacet + facet normal -0.710432 -0.703766 0 + outer loop + vertex -22.6782 -19.1432 -0.1 + vertex -22.7539 -19.0668 0 + vertex -22.7539 -19.0668 -0.1 + endloop + endfacet + facet normal -0.710432 -0.703766 0 + outer loop + vertex -22.7539 -19.0668 0 + vertex -22.6782 -19.1432 -0.1 + vertex -22.6782 -19.1432 0 + endloop + endfacet + facet normal -0.873955 -0.486007 0 + outer loop + vertex -22.625 -19.2389 -0.1 + vertex -22.6782 -19.1432 0 + vertex -22.6782 -19.1432 -0.1 + endloop + endfacet + facet normal -0.873955 -0.486007 0 + outer loop + vertex -22.6782 -19.1432 0 + vertex -22.625 -19.2389 -0.1 + vertex -22.625 -19.2389 0 + endloop + endfacet + facet normal -0.966491 -0.256701 0 + outer loop + vertex -22.594 -19.3555 -0.1 + vertex -22.625 -19.2389 0 + vertex -22.625 -19.2389 -0.1 + endloop + endfacet + facet normal -0.966491 -0.256701 0 + outer loop + vertex -22.625 -19.2389 0 + vertex -22.594 -19.3555 -0.1 + vertex -22.594 -19.3555 0 + endloop + endfacet + facet normal -0.997923 -0.0644192 0 + outer loop + vertex -22.585 -19.4947 -0.1 + vertex -22.594 -19.3555 0 + vertex -22.594 -19.3555 -0.1 + endloop + endfacet + facet normal -0.997923 -0.0644192 0 + outer loop + vertex -22.594 -19.3555 0 + vertex -22.585 -19.4947 -0.1 + vertex -22.585 -19.4947 0 + endloop + endfacet + facet normal -0.996972 0.0777592 0 + outer loop + vertex -22.5978 -19.6581 -0.1 + vertex -22.585 -19.4947 0 + vertex -22.585 -19.4947 -0.1 + endloop + endfacet + facet normal -0.996972 0.0777592 0 + outer loop + vertex -22.585 -19.4947 0 + vertex -22.5978 -19.6581 -0.1 + vertex -22.5978 -19.6581 0 + endloop + endfacet + facet normal -0.976488 0.215571 0 + outer loop + vertex -22.6874 -20.0641 -0.1 + vertex -22.5978 -19.6581 0 + vertex -22.5978 -19.6581 -0.1 + endloop + endfacet + facet normal -0.976488 0.215571 0 + outer loop + vertex -22.5978 -19.6581 0 + vertex -22.6874 -20.0641 -0.1 + vertex -22.6874 -20.0641 0 + endloop + endfacet + facet normal -0.949119 0.314918 0 + outer loop + vertex -22.8608 -20.5868 -0.1 + vertex -22.6874 -20.0641 0 + vertex -22.6874 -20.0641 -0.1 + endloop + endfacet + facet normal -0.949119 0.314918 0 + outer loop + vertex -22.6874 -20.0641 0 + vertex -22.8608 -20.5868 -0.1 + vertex -22.8608 -20.5868 0 + endloop + endfacet + facet normal -0.931342 0.364145 0 + outer loop + vertex -23.116 -21.2395 -0.1 + vertex -22.8608 -20.5868 0 + vertex -22.8608 -20.5868 -0.1 + endloop + endfacet + facet normal -0.931342 0.364145 0 + outer loop + vertex -22.8608 -20.5868 0 + vertex -23.116 -21.2395 -0.1 + vertex -23.116 -21.2395 0 + endloop + endfacet + facet normal -0.926122 0.377225 0 + outer loop + vertex -24.3958 -24.3815 -0.1 + vertex -23.116 -21.2395 0 + vertex -23.116 -21.2395 -0.1 + endloop + endfacet + facet normal -0.926122 0.377225 0 + outer loop + vertex -23.116 -21.2395 0 + vertex -24.3958 -24.3815 -0.1 + vertex -24.3958 -24.3815 0 + endloop + endfacet + facet normal -0.92485 0.380332 0 + outer loop + vertex -24.9793 -25.8003 -0.1 + vertex -24.3958 -24.3815 0 + vertex -24.3958 -24.3815 -0.1 + endloop + endfacet + facet normal -0.92485 0.380332 0 + outer loop + vertex -24.3958 -24.3815 0 + vertex -24.9793 -25.8003 -0.1 + vertex -24.9793 -25.8003 0 + endloop + endfacet + facet normal -0.917414 0.397935 0 + outer loop + vertex -25.4624 -26.9141 -0.1 + vertex -24.9793 -25.8003 0 + vertex -24.9793 -25.8003 -0.1 + endloop + endfacet + facet normal -0.917414 0.397935 0 + outer loop + vertex -24.9793 -25.8003 0 + vertex -25.4624 -26.9141 -0.1 + vertex -25.4624 -26.9141 0 + endloop + endfacet + facet normal -0.901103 0.433605 0 + outer loop + vertex -25.8688 -27.7587 -0.1 + vertex -25.4624 -26.9141 0 + vertex -25.4624 -26.9141 -0.1 + endloop + endfacet + facet normal -0.901103 0.433605 0 + outer loop + vertex -25.4624 -26.9141 0 + vertex -25.8688 -27.7587 -0.1 + vertex -25.8688 -27.7587 0 + endloop + endfacet + facet normal -0.87739 0.479778 0 + outer loop + vertex -26.0506 -28.0911 -0.1 + vertex -25.8688 -27.7587 0 + vertex -25.8688 -27.7587 -0.1 + endloop + endfacet + facet normal -0.87739 0.479778 0 + outer loop + vertex -25.8688 -27.7587 0 + vertex -26.0506 -28.0911 -0.1 + vertex -26.0506 -28.0911 0 + endloop + endfacet + facet normal -0.851572 0.524237 0 + outer loop + vertex -26.2221 -28.3696 -0.1 + vertex -26.0506 -28.0911 0 + vertex -26.0506 -28.0911 -0.1 + endloop + endfacet + facet normal -0.851572 0.524237 0 + outer loop + vertex -26.0506 -28.0911 0 + vertex -26.2221 -28.3696 -0.1 + vertex -26.2221 -28.3696 0 + endloop + endfacet + facet normal -0.812951 0.582331 0 + outer loop + vertex -26.3861 -28.5987 -0.1 + vertex -26.2221 -28.3696 0 + vertex -26.2221 -28.3696 -0.1 + endloop + endfacet + facet normal -0.812951 0.582331 0 + outer loop + vertex -26.2221 -28.3696 0 + vertex -26.3861 -28.5987 -0.1 + vertex -26.3861 -28.5987 0 + endloop + endfacet + facet normal -0.755407 0.655255 0 + outer loop + vertex -26.5458 -28.7827 -0.1 + vertex -26.3861 -28.5987 0 + vertex -26.3861 -28.5987 -0.1 + endloop + endfacet + facet normal -0.755407 0.655255 0 + outer loop + vertex -26.3861 -28.5987 0 + vertex -26.5458 -28.7827 -0.1 + vertex -26.5458 -28.7827 0 + endloop + endfacet + facet normal -0.671936 0.740609 0 + outer loop + vertex -26.5458 -28.7827 -0.1 + vertex -26.7039 -28.9262 0 + vertex -26.5458 -28.7827 0 + endloop + endfacet + facet normal -0.671936 0.740609 0 + outer loop + vertex -26.7039 -28.9262 0 + vertex -26.5458 -28.7827 -0.1 + vertex -26.7039 -28.9262 -0.1 + endloop + endfacet + facet normal -0.558253 0.829671 0 + outer loop + vertex -26.7039 -28.9262 -0.1 + vertex -26.8635 -29.0336 0 + vertex -26.7039 -28.9262 0 + endloop + endfacet + facet normal -0.558253 0.829671 0 + outer loop + vertex -26.8635 -29.0336 0 + vertex -26.7039 -28.9262 -0.1 + vertex -26.8635 -29.0336 -0.1 + endloop + endfacet + facet normal -0.419339 0.90783 0 + outer loop + vertex -26.8635 -29.0336 -0.1 + vertex -27.0275 -29.1093 0 + vertex -26.8635 -29.0336 0 + endloop + endfacet + facet normal -0.419339 0.90783 0 + outer loop + vertex -27.0275 -29.1093 0 + vertex -26.8635 -29.0336 -0.1 + vertex -27.0275 -29.1093 -0.1 + endloop + endfacet + facet normal -0.272797 0.962072 0 + outer loop + vertex -27.0275 -29.1093 -0.1 + vertex -27.1989 -29.1579 0 + vertex -27.0275 -29.1093 0 + endloop + endfacet + facet normal -0.272797 0.962072 0 + outer loop + vertex -27.1989 -29.1579 0 + vertex -27.0275 -29.1093 -0.1 + vertex -27.1989 -29.1579 -0.1 + endloop + endfacet + facet normal -0.141044 0.990003 0 + outer loop + vertex -27.1989 -29.1579 -0.1 + vertex -27.3805 -29.1838 0 + vertex -27.1989 -29.1579 0 + endloop + endfacet + facet normal -0.141044 0.990003 0 + outer loop + vertex -27.3805 -29.1838 0 + vertex -27.1989 -29.1579 -0.1 + vertex -27.3805 -29.1838 -0.1 + endloop + endfacet + facet normal -0.0391387 0.999234 0 + outer loop + vertex -27.3805 -29.1838 -0.1 + vertex -27.5755 -29.1914 0 + vertex -27.3805 -29.1838 0 + endloop + endfacet + facet normal -0.0391387 0.999234 0 + outer loop + vertex -27.5755 -29.1914 0 + vertex -27.3805 -29.1838 -0.1 + vertex -27.5755 -29.1914 -0.1 + endloop + endfacet + facet normal 0.0328742 0.999459 -0 + outer loop + vertex -27.5755 -29.1914 -0.1 + vertex -27.9775 -29.1782 0 + vertex -27.5755 -29.1914 0 + endloop + endfacet + facet normal 0.0328742 0.999459 0 + outer loop + vertex -27.9775 -29.1782 0 + vertex -27.5755 -29.1914 -0.1 + vertex -27.9775 -29.1782 -0.1 + endloop + endfacet + facet normal 0.226397 0.974035 -0 + outer loop + vertex -27.9775 -29.1782 -0.1 + vertex -28.0989 -29.15 0 + vertex -27.9775 -29.1782 0 + endloop + endfacet + facet normal 0.226397 0.974035 0 + outer loop + vertex -28.0989 -29.15 0 + vertex -27.9775 -29.1782 -0.1 + vertex -28.0989 -29.15 -0.1 + endloop + endfacet + facet normal 0.566674 0.823942 -0 + outer loop + vertex -28.0989 -29.15 -0.1 + vertex -28.176 -29.097 0 + vertex -28.0989 -29.15 0 + endloop + endfacet + facet normal 0.566674 0.823942 0 + outer loop + vertex -28.176 -29.097 0 + vertex -28.0989 -29.15 -0.1 + vertex -28.176 -29.097 -0.1 + endloop + endfacet + facet normal 0.908757 0.417326 0 + outer loop + vertex -28.176 -29.097 0 + vertex -28.2154 -29.0113 -0.1 + vertex -28.2154 -29.0113 0 + endloop + endfacet + facet normal 0.908757 0.417326 0 + outer loop + vertex -28.2154 -29.0113 -0.1 + vertex -28.176 -29.097 0 + vertex -28.176 -29.097 -0.1 + endloop + endfacet + facet normal 0.997947 0.0640397 0 + outer loop + vertex -28.2154 -29.0113 0 + vertex -28.2235 -28.8853 -0.1 + vertex -28.2235 -28.8853 0 + endloop + endfacet + facet normal 0.997947 0.0640397 0 + outer loop + vertex -28.2235 -28.8853 -0.1 + vertex -28.2154 -29.0113 0 + vertex -28.2154 -29.0113 -0.1 + endloop + endfacet + facet normal 0.992038 -0.125943 0 + outer loop + vertex -28.2235 -28.8853 0 + vertex -28.1721 -28.4809 -0.1 + vertex -28.1721 -28.4809 0 + endloop + endfacet + facet normal 0.992038 -0.125943 0 + outer loop + vertex -28.1721 -28.4809 -0.1 + vertex -28.2235 -28.8853 0 + vertex -28.2235 -28.8853 -0.1 + endloop + endfacet + facet normal 0.988281 -0.152644 0 + outer loop + vertex -28.1721 -28.4809 0 + vertex -27.9393 -26.9734 -0.1 + vertex -27.9393 -26.9734 0 + endloop + endfacet + facet normal 0.988281 -0.152644 0 + outer loop + vertex -27.9393 -26.9734 -0.1 + vertex -28.1721 -28.4809 0 + vertex -28.1721 -28.4809 -0.1 + endloop + endfacet + facet normal 0.994809 -0.101759 0 + outer loop + vertex -27.9393 -26.9734 0 + vertex -27.8924 -26.5154 -0.1 + vertex -27.8924 -26.5154 0 + endloop + endfacet + facet normal 0.994809 -0.101759 0 + outer loop + vertex -27.8924 -26.5154 -0.1 + vertex -27.9393 -26.9734 0 + vertex -27.9393 -26.9734 -0.1 + endloop + endfacet + facet normal 0.999788 0.0205947 0 + outer loop + vertex -27.8924 -26.5154 0 + vertex -27.8988 -26.2055 -0.1 + vertex -27.8988 -26.2055 0 + endloop + endfacet + facet normal 0.999788 0.0205947 0 + outer loop + vertex -27.8988 -26.2055 -0.1 + vertex -27.8924 -26.5154 0 + vertex -27.8924 -26.5154 -0.1 + endloop + endfacet + facet normal 0.975965 0.217927 0 + outer loop + vertex -27.8988 -26.2055 0 + vertex -27.9236 -26.0946 -0.1 + vertex -27.9236 -26.0946 0 + endloop + endfacet + facet normal 0.975965 0.217927 0 + outer loop + vertex -27.9236 -26.0946 -0.1 + vertex -27.8988 -26.2055 0 + vertex -27.8988 -26.2055 -0.1 + endloop + endfacet + facet normal 0.909758 0.415139 0 + outer loop + vertex -27.9236 -26.0946 0 + vertex -27.9636 -26.0069 -0.1 + vertex -27.9636 -26.0069 0 + endloop + endfacet + facet normal 0.909758 0.415139 0 + outer loop + vertex -27.9636 -26.0069 -0.1 + vertex -27.9236 -26.0946 0 + vertex -27.9236 -26.0946 -0.1 + endloop + endfacet + facet normal 0.777135 0.629334 0 + outer loop + vertex -27.9636 -26.0069 0 + vertex -28.0195 -25.9379 -0.1 + vertex -28.0195 -25.9379 0 + endloop + endfacet + facet normal 0.777135 0.629334 0 + outer loop + vertex -28.0195 -25.9379 -0.1 + vertex -27.9636 -26.0069 0 + vertex -27.9636 -26.0069 -0.1 + endloop + endfacet + facet normal 0.604573 0.79655 -0 + outer loop + vertex -28.0195 -25.9379 -0.1 + vertex -28.0919 -25.8829 0 + vertex -28.0195 -25.9379 0 + endloop + endfacet + facet normal 0.604573 0.79655 0 + outer loop + vertex -28.0919 -25.8829 0 + vertex -28.0195 -25.9379 -0.1 + vertex -28.0919 -25.8829 -0.1 + endloop + endfacet + facet normal 0.400676 0.91622 -0 + outer loop + vertex -28.0919 -25.8829 -0.1 + vertex -28.2888 -25.7968 0 + vertex -28.0919 -25.8829 0 + endloop + endfacet + facet normal 0.400676 0.91622 0 + outer loop + vertex -28.2888 -25.7968 0 + vertex -28.0919 -25.8829 -0.1 + vertex -28.2888 -25.7968 -0.1 + endloop + endfacet + facet normal 0.299723 0.954026 -0 + outer loop + vertex -28.2888 -25.7968 -0.1 + vertex -28.5596 -25.7117 0 + vertex -28.2888 -25.7968 0 + endloop + endfacet + facet normal 0.299723 0.954026 0 + outer loop + vertex -28.5596 -25.7117 0 + vertex -28.2888 -25.7968 -0.1 + vertex -28.5596 -25.7117 -0.1 + endloop + endfacet + facet normal 0.220879 0.975301 -0 + outer loop + vertex -28.5596 -25.7117 -0.1 + vertex -28.7678 -25.6646 0 + vertex -28.5596 -25.7117 0 + endloop + endfacet + facet normal 0.220879 0.975301 0 + outer loop + vertex -28.7678 -25.6646 0 + vertex -28.5596 -25.7117 -0.1 + vertex -28.7678 -25.6646 -0.1 + endloop + endfacet + facet normal 0.142669 0.98977 -0 + outer loop + vertex -28.7678 -25.6646 -0.1 + vertex -29.0734 -25.6205 0 + vertex -28.7678 -25.6646 0 + endloop + endfacet + facet normal 0.142669 0.98977 0 + outer loop + vertex -29.0734 -25.6205 0 + vertex -28.7678 -25.6646 -0.1 + vertex -29.0734 -25.6205 -0.1 + endloop + endfacet + facet normal 0.0883121 0.996093 -0 + outer loop + vertex -29.0734 -25.6205 -0.1 + vertex -29.9179 -25.5457 0 + vertex -29.0734 -25.6205 0 + endloop + endfacet + facet normal 0.0883121 0.996093 0 + outer loop + vertex -29.9179 -25.5457 0 + vertex -29.0734 -25.6205 -0.1 + vertex -29.9179 -25.5457 -0.1 + endloop + endfacet + facet normal 0.0479595 0.998849 -0 + outer loop + vertex -29.9179 -25.5457 -0.1 + vertex -30.9759 -25.4949 0 + vertex -29.9179 -25.5457 0 + endloop + endfacet + facet normal 0.0479595 0.998849 0 + outer loop + vertex -30.9759 -25.4949 0 + vertex -29.9179 -25.5457 -0.1 + vertex -30.9759 -25.4949 -0.1 + endloop + endfacet + facet normal 0.0164478 0.999865 -0 + outer loop + vertex -30.9759 -25.4949 -0.1 + vertex -32.1303 -25.4759 0 + vertex -30.9759 -25.4949 0 + endloop + endfacet + facet normal 0.0164478 0.999865 0 + outer loop + vertex -32.1303 -25.4759 0 + vertex -30.9759 -25.4949 -0.1 + vertex -32.1303 -25.4759 -0.1 + endloop + endfacet + facet normal 0.000432102 1 -0 + outer loop + vertex -32.1303 -25.4759 -0.1 + vertex -34.9509 -25.4747 0 + vertex -32.1303 -25.4759 0 + endloop + endfacet + facet normal 0.000432102 1 0 + outer loop + vertex -34.9509 -25.4747 0 + vertex -32.1303 -25.4759 -0.1 + vertex -34.9509 -25.4747 -0.1 + endloop + endfacet + facet normal -0.910935 0.41255 0 + outer loop + vertex -35.4707 -26.6225 -0.1 + vertex -34.9509 -25.4747 0 + vertex -34.9509 -25.4747 -0.1 + endloop + endfacet + facet normal -0.910935 0.41255 0 + outer loop + vertex -34.9509 -25.4747 0 + vertex -35.4707 -26.6225 -0.1 + vertex -35.4707 -26.6225 0 + endloop + endfacet + facet normal -0.916492 0.400054 0 + outer loop + vertex -36.4516 -28.8697 -0.1 + vertex -35.4707 -26.6225 0 + vertex -35.4707 -26.6225 -0.1 + endloop + endfacet + facet normal -0.916492 0.400054 0 + outer loop + vertex -35.4707 -26.6225 0 + vertex -36.4516 -28.8697 -0.1 + vertex -36.4516 -28.8697 0 + endloop + endfacet + facet normal -0.92275 0.385399 0 + outer loop + vertex -37.5165 -31.4193 -0.1 + vertex -36.4516 -28.8697 0 + vertex -36.4516 -28.8697 -0.1 + endloop + endfacet + facet normal -0.92275 0.385399 0 + outer loop + vertex -36.4516 -28.8697 0 + vertex -37.5165 -31.4193 -0.1 + vertex -37.5165 -31.4193 0 + endloop + endfacet + facet normal -0.928331 0.371754 0 + outer loop + vertex -38.3711 -33.5534 -0.1 + vertex -37.5165 -31.4193 0 + vertex -37.5165 -31.4193 -0.1 + endloop + endfacet + facet normal -0.928331 0.371754 0 + outer loop + vertex -37.5165 -31.4193 0 + vertex -38.3711 -33.5534 -0.1 + vertex -38.3711 -33.5534 0 + endloop + endfacet + facet normal -0.936805 0.349851 0 + outer loop + vertex -38.6277 -34.2404 -0.1 + vertex -38.3711 -33.5534 0 + vertex -38.3711 -33.5534 -0.1 + endloop + endfacet + facet normal -0.936805 0.349851 0 + outer loop + vertex -38.3711 -33.5534 0 + vertex -38.6277 -34.2404 -0.1 + vertex -38.6277 -34.2404 0 + endloop + endfacet + facet normal -0.958246 0.285946 0 + outer loop + vertex -38.7214 -34.5543 -0.1 + vertex -38.6277 -34.2404 0 + vertex -38.6277 -34.2404 -0.1 + endloop + endfacet + facet normal -0.958246 0.285946 0 + outer loop + vertex -38.6277 -34.2404 0 + vertex -38.7214 -34.5543 -0.1 + vertex -38.7214 -34.5543 0 + endloop + endfacet + facet normal -0.979296 -0.202433 0 + outer loop + vertex -38.6971 -34.6715 -0.1 + vertex -38.7214 -34.5543 0 + vertex -38.7214 -34.5543 -0.1 + endloop + endfacet + facet normal -0.979296 -0.202433 0 + outer loop + vertex -38.7214 -34.5543 0 + vertex -38.6971 -34.6715 -0.1 + vertex -38.6971 -34.6715 0 + endloop + endfacet + facet normal -0.869155 -0.494539 0 + outer loop + vertex -38.6312 -34.7874 -0.1 + vertex -38.6971 -34.6715 0 + vertex -38.6971 -34.6715 -0.1 + endloop + endfacet + facet normal -0.869155 -0.494539 0 + outer loop + vertex -38.6971 -34.6715 0 + vertex -38.6312 -34.7874 -0.1 + vertex -38.6312 -34.7874 0 + endloop + endfacet + facet normal -0.719928 -0.694049 0 + outer loop + vertex -38.5336 -34.8886 -0.1 + vertex -38.6312 -34.7874 0 + vertex -38.6312 -34.7874 -0.1 + endloop + endfacet + facet normal -0.719928 -0.694049 0 + outer loop + vertex -38.6312 -34.7874 0 + vertex -38.5336 -34.8886 -0.1 + vertex -38.5336 -34.8886 0 + endloop + endfacet + facet normal -0.523423 -0.852073 0 + outer loop + vertex -38.5336 -34.8886 -0.1 + vertex -38.4144 -34.9619 0 + vertex -38.5336 -34.8886 0 + endloop + endfacet + facet normal -0.523423 -0.852073 -0 + outer loop + vertex -38.4144 -34.9619 0 + vertex -38.5336 -34.8886 -0.1 + vertex -38.4144 -34.9619 -0.1 + endloop + endfacet + facet normal -0.239855 -0.970809 0 + outer loop + vertex -38.4144 -34.9619 -0.1 + vertex -38.2613 -34.9997 0 + vertex -38.4144 -34.9619 0 + endloop + endfacet + facet normal -0.239855 -0.970809 -0 + outer loop + vertex -38.2613 -34.9997 0 + vertex -38.4144 -34.9619 -0.1 + vertex -38.2613 -34.9997 -0.1 + endloop + endfacet + facet normal -0.118843 -0.992913 0 + outer loop + vertex -38.2613 -34.9997 -0.1 + vertex -38.0027 -35.0306 0 + vertex -38.2613 -34.9997 0 + endloop + endfacet + facet normal -0.118843 -0.992913 -0 + outer loop + vertex -38.0027 -35.0306 0 + vertex -38.2613 -34.9997 -0.1 + vertex -38.0027 -35.0306 -0.1 + endloop + endfacet + facet normal -0.0541463 -0.998533 0 + outer loop + vertex -38.0027 -35.0306 -0.1 + vertex -37.2267 -35.0727 0 + vertex -38.0027 -35.0306 0 + endloop + endfacet + facet normal -0.0541463 -0.998533 -0 + outer loop + vertex -37.2267 -35.0727 0 + vertex -38.0027 -35.0306 -0.1 + vertex -37.2267 -35.0727 -0.1 + endloop + endfacet + facet normal -0.0166336 -0.999862 0 + outer loop + vertex -37.2267 -35.0727 -0.1 + vertex -36.2012 -35.0898 0 + vertex -37.2267 -35.0727 0 + endloop + endfacet + facet normal -0.0166336 -0.999862 -0 + outer loop + vertex -36.2012 -35.0898 0 + vertex -37.2267 -35.0727 -0.1 + vertex -36.2012 -35.0898 -0.1 + endloop + endfacet + facet normal 0.00541272 -0.999985 0 + outer loop + vertex -36.2012 -35.0898 -0.1 + vertex -35.0412 -35.0835 0 + vertex -36.2012 -35.0898 0 + endloop + endfacet + facet normal 0.00541272 -0.999985 0 + outer loop + vertex -35.0412 -35.0835 0 + vertex -36.2012 -35.0898 -0.1 + vertex -35.0412 -35.0835 -0.1 + endloop + endfacet + facet normal 0.0236788 -0.99972 0 + outer loop + vertex -35.0412 -35.0835 -0.1 + vertex -33.8615 -35.0556 0 + vertex -35.0412 -35.0835 0 + endloop + endfacet + facet normal 0.0236788 -0.99972 0 + outer loop + vertex -33.8615 -35.0556 0 + vertex -35.0412 -35.0835 -0.1 + vertex -33.8615 -35.0556 -0.1 + endloop + endfacet + facet normal 0.0441434 -0.999025 0 + outer loop + vertex -33.8615 -35.0556 -0.1 + vertex -32.7769 -35.0076 0 + vertex -33.8615 -35.0556 0 + endloop + endfacet + facet normal 0.0441434 -0.999025 0 + outer loop + vertex -32.7769 -35.0076 0 + vertex -33.8615 -35.0556 -0.1 + vertex -32.7769 -35.0076 -0.1 + endloop + endfacet + facet normal 0.0755008 -0.997146 0 + outer loop + vertex -32.7769 -35.0076 -0.1 + vertex -31.9023 -34.9414 0 + vertex -32.7769 -35.0076 0 + endloop + endfacet + facet normal 0.0755008 -0.997146 0 + outer loop + vertex -31.9023 -34.9414 0 + vertex -32.7769 -35.0076 -0.1 + vertex -31.9023 -34.9414 -0.1 + endloop + endfacet + facet normal 0.121377 -0.992606 0 + outer loop + vertex -31.9023 -34.9414 -0.1 + vertex -31.5797 -34.902 0 + vertex -31.9023 -34.9414 0 + endloop + endfacet + facet normal 0.121377 -0.992606 0 + outer loop + vertex -31.5797 -34.902 0 + vertex -31.9023 -34.9414 -0.1 + vertex -31.5797 -34.902 -0.1 + endloop + endfacet + facet normal 0.187713 -0.982224 0 + outer loop + vertex -31.5797 -34.902 -0.1 + vertex -31.3526 -34.8586 0 + vertex -31.5797 -34.902 0 + endloop + endfacet + facet normal 0.187713 -0.982224 0 + outer loop + vertex -31.3526 -34.8586 0 + vertex -31.5797 -34.902 -0.1 + vertex -31.3526 -34.8586 -0.1 + endloop + endfacet + facet normal 0.296204 -0.955125 0 + outer loop + vertex -31.3526 -34.8586 -0.1 + vertex -30.8095 -34.6902 0 + vertex -31.3526 -34.8586 0 + endloop + endfacet + facet normal 0.296204 -0.955125 0 + outer loop + vertex -30.8095 -34.6902 0 + vertex -31.3526 -34.8586 -0.1 + vertex -30.8095 -34.6902 -0.1 + endloop + endfacet + facet normal 0.373689 -0.927554 0 + outer loop + vertex -30.8095 -34.6902 -0.1 + vertex -30.2461 -34.4632 0 + vertex -30.8095 -34.6902 0 + endloop + endfacet + facet normal 0.373689 -0.927554 0 + outer loop + vertex -30.2461 -34.4632 0 + vertex -30.8095 -34.6902 -0.1 + vertex -30.2461 -34.4632 -0.1 + endloop + endfacet + facet normal 0.438403 -0.898778 0 + outer loop + vertex -30.2461 -34.4632 -0.1 + vertex -29.669 -34.1817 0 + vertex -30.2461 -34.4632 0 + endloop + endfacet + facet normal 0.438403 -0.898778 0 + outer loop + vertex -29.669 -34.1817 0 + vertex -30.2461 -34.4632 -0.1 + vertex -29.669 -34.1817 -0.1 + endloop + endfacet + facet normal 0.494095 -0.869408 0 + outer loop + vertex -29.669 -34.1817 -0.1 + vertex -29.0852 -33.8499 0 + vertex -29.669 -34.1817 0 + endloop + endfacet + facet normal 0.494095 -0.869408 0 + outer loop + vertex -29.0852 -33.8499 0 + vertex -29.669 -34.1817 -0.1 + vertex -29.0852 -33.8499 -0.1 + endloop + endfacet + facet normal 0.543479 -0.839423 0 + outer loop + vertex -29.0852 -33.8499 -0.1 + vertex -28.5012 -33.4718 0 + vertex -29.0852 -33.8499 0 + endloop + endfacet + facet normal 0.543479 -0.839423 0 + outer loop + vertex -28.5012 -33.4718 0 + vertex -29.0852 -33.8499 -0.1 + vertex -28.5012 -33.4718 -0.1 + endloop + endfacet + facet normal 0.588526 -0.808478 0 + outer loop + vertex -28.5012 -33.4718 -0.1 + vertex -27.924 -33.0516 0 + vertex -28.5012 -33.4718 0 + endloop + endfacet + facet normal 0.588526 -0.808478 0 + outer loop + vertex -27.924 -33.0516 0 + vertex -28.5012 -33.4718 -0.1 + vertex -27.924 -33.0516 -0.1 + endloop + endfacet + facet normal 0.630713 -0.776016 0 + outer loop + vertex -27.924 -33.0516 -0.1 + vertex -27.3602 -32.5933 0 + vertex -27.924 -33.0516 0 + endloop + endfacet + facet normal 0.630713 -0.776016 0 + outer loop + vertex -27.3602 -32.5933 0 + vertex -27.924 -33.0516 -0.1 + vertex -27.3602 -32.5933 -0.1 + endloop + endfacet + facet normal 0.671162 -0.741311 0 + outer loop + vertex -27.3602 -32.5933 -0.1 + vertex -26.8166 -32.1012 0 + vertex -27.3602 -32.5933 0 + endloop + endfacet + facet normal 0.671162 -0.741311 0 + outer loop + vertex -26.8166 -32.1012 0 + vertex -27.3602 -32.5933 -0.1 + vertex -26.8166 -32.1012 -0.1 + endloop + endfacet + facet normal 0.688884 -0.724872 0 + outer loop + vertex -26.8166 -32.1012 -0.1 + vertex -25.5344 -30.8827 0 + vertex -26.8166 -32.1012 0 + endloop + endfacet + facet normal 0.688884 -0.724872 0 + outer loop + vertex -25.5344 -30.8827 0 + vertex -26.8166 -32.1012 -0.1 + vertex -25.5344 -30.8827 -0.1 + endloop + endfacet + facet normal 0.667079 -0.744987 0 + outer loop + vertex -25.5344 -30.8827 -0.1 + vertex -25.1341 -30.5242 0 + vertex -25.5344 -30.8827 0 + endloop + endfacet + facet normal 0.667079 -0.744987 0 + outer loop + vertex -25.1341 -30.5242 0 + vertex -25.5344 -30.8827 -0.1 + vertex -25.1341 -30.5242 -0.1 + endloop + endfacet + facet normal 0.613469 -0.789718 0 + outer loop + vertex -25.1341 -30.5242 -0.1 + vertex -24.8452 -30.2998 0 + vertex -25.1341 -30.5242 0 + endloop + endfacet + facet normal 0.613469 -0.789718 0 + outer loop + vertex -24.8452 -30.2998 0 + vertex -25.1341 -30.5242 -0.1 + vertex -24.8452 -30.2998 -0.1 + endloop + endfacet + facet normal 0.473466 -0.880812 0 + outer loop + vertex -24.8452 -30.2998 -0.1 + vertex -24.6311 -30.1847 0 + vertex -24.8452 -30.2998 0 + endloop + endfacet + facet normal 0.473466 -0.880812 0 + outer loop + vertex -24.6311 -30.1847 0 + vertex -24.8452 -30.2998 -0.1 + vertex -24.6311 -30.1847 -0.1 + endloop + endfacet + facet normal 0.259354 -0.965782 0 + outer loop + vertex -24.6311 -30.1847 -0.1 + vertex -24.5406 -30.1604 0 + vertex -24.6311 -30.1847 0 + endloop + endfacet + facet normal 0.259354 -0.965782 0 + outer loop + vertex -24.5406 -30.1604 0 + vertex -24.6311 -30.1847 -0.1 + vertex -24.5406 -30.1604 -0.1 + endloop + endfacet + facet normal 0.0730053 -0.997332 0 + outer loop + vertex -24.5406 -30.1604 -0.1 + vertex -24.455 -30.1541 0 + vertex -24.5406 -30.1604 0 + endloop + endfacet + facet normal 0.0730053 -0.997332 0 + outer loop + vertex -24.455 -30.1541 0 + vertex -24.5406 -30.1604 -0.1 + vertex -24.455 -30.1541 -0.1 + endloop + endfacet + facet normal -0.164732 -0.986338 0 + outer loop + vertex -24.455 -30.1541 -0.1 + vertex -24.2803 -30.1833 0 + vertex -24.455 -30.1541 0 + endloop + endfacet + facet normal -0.164732 -0.986338 -0 + outer loop + vertex -24.2803 -30.1833 0 + vertex -24.455 -30.1541 -0.1 + vertex -24.2803 -30.1833 -0.1 + endloop + endfacet + facet normal -0.291983 -0.956423 0 + outer loop + vertex -24.2803 -30.1833 -0.1 + vertex -24.0701 -30.2475 0 + vertex -24.2803 -30.1833 0 + endloop + endfacet + facet normal -0.291983 -0.956423 -0 + outer loop + vertex -24.0701 -30.2475 0 + vertex -24.2803 -30.1833 -0.1 + vertex -24.0701 -30.2475 -0.1 + endloop + endfacet + facet normal -0.377094 -0.926175 0 + outer loop + vertex -24.0701 -30.2475 -0.1 + vertex -23.8399 -30.3412 0 + vertex -24.0701 -30.2475 0 + endloop + endfacet + facet normal -0.377094 -0.926175 -0 + outer loop + vertex -23.8399 -30.3412 0 + vertex -24.0701 -30.2475 -0.1 + vertex -23.8399 -30.3412 -0.1 + endloop + endfacet + facet normal -0.532683 -0.846315 0 + outer loop + vertex -23.8399 -30.3412 -0.1 + vertex -23.6433 -30.465 0 + vertex -23.8399 -30.3412 0 + endloop + endfacet + facet normal -0.532683 -0.846315 -0 + outer loop + vertex -23.6433 -30.465 0 + vertex -23.8399 -30.3412 -0.1 + vertex -23.6433 -30.465 -0.1 + endloop + endfacet + facet normal -0.695789 -0.718246 0 + outer loop + vertex -23.6433 -30.465 -0.1 + vertex -23.5012 -30.6026 0 + vertex -23.6433 -30.465 0 + endloop + endfacet + facet normal -0.695789 -0.718246 -0 + outer loop + vertex -23.5012 -30.6026 0 + vertex -23.6433 -30.465 -0.1 + vertex -23.5012 -30.6026 -0.1 + endloop + endfacet + facet normal -0.84273 -0.538337 0 + outer loop + vertex -23.4571 -30.6716 -0.1 + vertex -23.5012 -30.6026 0 + vertex -23.5012 -30.6026 -0.1 + endloop + endfacet + facet normal -0.84273 -0.538337 0 + outer loop + vertex -23.5012 -30.6026 0 + vertex -23.4571 -30.6716 -0.1 + vertex -23.4571 -30.6716 0 + endloop + endfacet + facet normal -0.946617 -0.322361 0 + outer loop + vertex -23.4345 -30.738 -0.1 + vertex -23.4571 -30.6716 0 + vertex -23.4571 -30.6716 -0.1 + endloop + endfacet + facet normal -0.946617 -0.322361 0 + outer loop + vertex -23.4571 -30.6716 0 + vertex -23.4345 -30.738 -0.1 + vertex -23.4345 -30.738 0 + endloop + endfacet + facet normal -0.988328 0.152339 0 + outer loop + vertex -23.4513 -30.847 -0.1 + vertex -23.4345 -30.738 0 + vertex -23.4345 -30.738 -0.1 + endloop + endfacet + facet normal -0.988328 0.152339 0 + outer loop + vertex -23.4345 -30.738 0 + vertex -23.4513 -30.847 -0.1 + vertex -23.4513 -30.847 0 + endloop + endfacet + facet normal -0.933862 0.357635 0 + outer loop + vertex -23.5218 -31.031 -0.1 + vertex -23.4513 -30.847 0 + vertex -23.4513 -30.847 -0.1 + endloop + endfacet + facet normal -0.933862 0.357635 0 + outer loop + vertex -23.4513 -30.847 0 + vertex -23.5218 -31.031 -0.1 + vertex -23.5218 -31.031 0 + endloop + endfacet + facet normal -0.893602 0.44886 0 + outer loop + vertex -23.8031 -31.5911 -0.1 + vertex -23.5218 -31.031 0 + vertex -23.5218 -31.031 -0.1 + endloop + endfacet + facet normal -0.893602 0.44886 0 + outer loop + vertex -23.5218 -31.031 0 + vertex -23.8031 -31.5911 -0.1 + vertex -23.8031 -31.5911 0 + endloop + endfacet + facet normal -0.86862 0.495478 0 + outer loop + vertex -24.2375 -32.3527 -0.1 + vertex -23.8031 -31.5911 0 + vertex -23.8031 -31.5911 -0.1 + endloop + endfacet + facet normal -0.86862 0.495478 0 + outer loop + vertex -23.8031 -31.5911 0 + vertex -24.2375 -32.3527 -0.1 + vertex -24.2375 -32.3527 0 + endloop + endfacet + facet normal -0.854086 0.520132 0 + outer loop + vertex -24.7839 -33.2498 -0.1 + vertex -24.2375 -32.3527 0 + vertex -24.2375 -32.3527 -0.1 + endloop + endfacet + facet normal -0.854086 0.520132 0 + outer loop + vertex -24.2375 -32.3527 0 + vertex -24.7839 -33.2498 -0.1 + vertex -24.7839 -33.2498 0 + endloop + endfacet + facet normal -0.842904 0.538064 0 + outer loop + vertex -25.4011 -34.2168 -0.1 + vertex -24.7839 -33.2498 0 + vertex -24.7839 -33.2498 -0.1 + endloop + endfacet + facet normal -0.842904 0.538064 0 + outer loop + vertex -24.7839 -33.2498 0 + vertex -25.4011 -34.2168 -0.1 + vertex -25.4011 -34.2168 0 + endloop + endfacet + facet normal -0.832144 0.55456 0 + outer loop + vertex -26.0482 -35.1877 -0.1 + vertex -25.4011 -34.2168 0 + vertex -25.4011 -34.2168 -0.1 + endloop + endfacet + facet normal -0.832144 0.55456 0 + outer loop + vertex -25.4011 -34.2168 0 + vertex -26.0482 -35.1877 -0.1 + vertex -26.0482 -35.1877 0 + endloop + endfacet + facet normal -0.819486 0.573099 0 + outer loop + vertex -26.6839 -36.0968 -0.1 + vertex -26.0482 -35.1877 0 + vertex -26.0482 -35.1877 -0.1 + endloop + endfacet + facet normal -0.819486 0.573099 0 + outer loop + vertex -26.0482 -35.1877 0 + vertex -26.6839 -36.0968 -0.1 + vertex -26.6839 -36.0968 0 + endloop + endfacet + facet normal -0.801319 0.598238 0 + outer loop + vertex -27.2673 -36.8782 -0.1 + vertex -26.6839 -36.0968 0 + vertex -26.6839 -36.0968 -0.1 + endloop + endfacet + facet normal -0.801319 0.598238 0 + outer loop + vertex -26.6839 -36.0968 0 + vertex -27.2673 -36.8782 -0.1 + vertex -27.2673 -36.8782 0 + endloop + endfacet + facet normal -0.788011 0.615661 0 + outer loop + vertex -28.2718 -38.1638 -0.1 + vertex -27.2673 -36.8782 0 + vertex -27.2673 -36.8782 -0.1 + endloop + endfacet + facet normal -0.788011 0.615661 0 + outer loop + vertex -27.2673 -36.8782 0 + vertex -28.2718 -38.1638 -0.1 + vertex -28.2718 -38.1638 0 + endloop + endfacet + facet normal 0.00335501 0.999994 -0 + outer loop + vertex -28.2718 -38.1638 -0.1 + vertex -37.6203 -38.1325 0 + vertex -28.2718 -38.1638 0 + endloop + endfacet + facet normal 0.00335501 0.999994 0 + outer loop + vertex -37.6203 -38.1325 0 + vertex -28.2718 -38.1638 -0.1 + vertex -37.6203 -38.1325 -0.1 + endloop + endfacet + facet normal 0.00646856 0.999979 -0 + outer loop + vertex -37.6203 -38.1325 -0.1 + vertex -41.2883 -38.1087 0 + vertex -37.6203 -38.1325 0 + endloop + endfacet + facet normal 0.00646856 0.999979 0 + outer loop + vertex -41.2883 -38.1087 0 + vertex -37.6203 -38.1325 -0.1 + vertex -41.2883 -38.1087 -0.1 + endloop + endfacet + facet normal 0.013462 0.999909 -0 + outer loop + vertex -41.2883 -38.1087 -0.1 + vertex -44.3648 -38.0673 0 + vertex -41.2883 -38.1087 0 + endloop + endfacet + facet normal 0.013462 0.999909 0 + outer loop + vertex -44.3648 -38.0673 0 + vertex -41.2883 -38.1087 -0.1 + vertex -44.3648 -38.0673 -0.1 + endloop + endfacet + facet normal 0.0246353 0.999697 -0 + outer loop + vertex -44.3648 -38.0673 -0.1 + vertex -46.5272 -38.014 0 + vertex -44.3648 -38.0673 0 + endloop + endfacet + facet normal 0.0246353 0.999697 0 + outer loop + vertex -46.5272 -38.014 0 + vertex -44.3648 -38.0673 -0.1 + vertex -46.5272 -38.014 -0.1 + endloop + endfacet + facet normal 0.0458604 0.998948 -0 + outer loop + vertex -46.5272 -38.014 -0.1 + vertex -47.1648 -37.9848 0 + vertex -46.5272 -38.014 0 + endloop + endfacet + facet normal 0.0458604 0.998948 0 + outer loop + vertex -47.1648 -37.9848 0 + vertex -46.5272 -38.014 -0.1 + vertex -47.1648 -37.9848 -0.1 + endloop + endfacet + facet normal 0.103752 0.994603 -0 + outer loop + vertex -47.1648 -37.9848 -0.1 + vertex -47.4529 -37.9547 0 + vertex -47.1648 -37.9848 0 + endloop + endfacet + facet normal 0.103752 0.994603 0 + outer loop + vertex -47.4529 -37.9547 0 + vertex -47.1648 -37.9848 -0.1 + vertex -47.4529 -37.9547 -0.1 + endloop + endfacet + facet normal 0.373487 0.927636 -0 + outer loop + vertex -47.4529 -37.9547 -0.1 + vertex -47.6522 -37.8745 0 + vertex -47.4529 -37.9547 0 + endloop + endfacet + facet normal 0.373487 0.927636 0 + outer loop + vertex -47.6522 -37.8745 0 + vertex -47.4529 -37.9547 -0.1 + vertex -47.6522 -37.8745 -0.1 + endloop + endfacet + facet normal 0.561365 0.827568 -0 + outer loop + vertex -47.6522 -37.8745 -0.1 + vertex -47.8044 -37.7712 0 + vertex -47.6522 -37.8745 0 + endloop + endfacet + facet normal 0.561365 0.827568 0 + outer loop + vertex -47.8044 -37.7712 0 + vertex -47.6522 -37.8745 -0.1 + vertex -47.8044 -37.7712 -0.1 + endloop + endfacet + facet normal 0.753293 0.657685 0 + outer loop + vertex -47.8044 -37.7712 0 + vertex -47.9115 -37.6485 -0.1 + vertex -47.9115 -37.6485 0 + endloop + endfacet + facet normal 0.753293 0.657685 0 + outer loop + vertex -47.9115 -37.6485 -0.1 + vertex -47.8044 -37.7712 0 + vertex -47.8044 -37.7712 -0.1 + endloop + endfacet + facet normal 0.907474 0.420108 0 + outer loop + vertex -47.9115 -37.6485 0 + vertex -47.9758 -37.5097 -0.1 + vertex -47.9758 -37.5097 0 + endloop + endfacet + facet normal 0.907474 0.420108 0 + outer loop + vertex -47.9758 -37.5097 -0.1 + vertex -47.9115 -37.6485 0 + vertex -47.9115 -37.6485 -0.1 + endloop + endfacet + facet normal 0.988205 0.153137 0 + outer loop + vertex -47.9758 -37.5097 0 + vertex -47.9993 -37.3583 -0.1 + vertex -47.9993 -37.3583 0 + endloop + endfacet + facet normal 0.988205 0.153137 0 + outer loop + vertex -47.9993 -37.3583 -0.1 + vertex -47.9758 -37.5097 0 + vertex -47.9758 -37.5097 -0.1 + endloop + endfacet + facet normal 0.995535 -0.0943972 0 + outer loop + vertex -47.9993 -37.3583 0 + vertex -47.984 -37.1977 -0.1 + vertex -47.984 -37.1977 0 + endloop + endfacet + facet normal 0.995535 -0.0943972 0 + outer loop + vertex -47.984 -37.1977 -0.1 + vertex -47.9993 -37.3583 0 + vertex -47.9993 -37.3583 -0.1 + endloop + endfacet + facet normal 0.954736 -0.297455 0 + outer loop + vertex -47.984 -37.1977 0 + vertex -47.9322 -37.0315 -0.1 + vertex -47.9322 -37.0315 0 + endloop + endfacet + facet normal 0.954736 -0.297455 0 + outer loop + vertex -47.9322 -37.0315 -0.1 + vertex -47.984 -37.1977 0 + vertex -47.984 -37.1977 -0.1 + endloop + endfacet + facet normal 0.890101 -0.455763 0 + outer loop + vertex -47.9322 -37.0315 0 + vertex -47.846 -36.863 -0.1 + vertex -47.846 -36.863 0 + endloop + endfacet + facet normal 0.890101 -0.455763 0 + outer loop + vertex -47.846 -36.863 -0.1 + vertex -47.9322 -37.0315 0 + vertex -47.9322 -37.0315 -0.1 + endloop + endfacet + facet normal 0.815677 -0.578507 0 + outer loop + vertex -47.846 -36.863 0 + vertex -47.7274 -36.6957 -0.1 + vertex -47.7274 -36.6957 0 + endloop + endfacet + facet normal 0.815677 -0.578507 0 + outer loop + vertex -47.7274 -36.6957 -0.1 + vertex -47.846 -36.863 0 + vertex -47.846 -36.863 -0.1 + endloop + endfacet + facet normal 0.737497 -0.67535 0 + outer loop + vertex -47.7274 -36.6957 0 + vertex -47.5785 -36.5332 -0.1 + vertex -47.5785 -36.5332 0 + endloop + endfacet + facet normal 0.737497 -0.67535 0 + outer loop + vertex -47.5785 -36.5332 -0.1 + vertex -47.7274 -36.6957 0 + vertex -47.7274 -36.6957 -0.1 + endloop + endfacet + facet normal 0.65739 -0.753551 0 + outer loop + vertex -47.5785 -36.5332 -0.1 + vertex -47.4015 -36.3788 0 + vertex -47.5785 -36.5332 0 + endloop + endfacet + facet normal 0.65739 -0.753551 0 + outer loop + vertex -47.4015 -36.3788 0 + vertex -47.5785 -36.5332 -0.1 + vertex -47.4015 -36.3788 -0.1 + endloop + endfacet + facet normal 0.575341 -0.817914 0 + outer loop + vertex -47.4015 -36.3788 -0.1 + vertex -47.1985 -36.2359 0 + vertex -47.4015 -36.3788 0 + endloop + endfacet + facet normal 0.575341 -0.817914 0 + outer loop + vertex -47.1985 -36.2359 0 + vertex -47.4015 -36.3788 -0.1 + vertex -47.1985 -36.2359 -0.1 + endloop + endfacet + facet normal 0.490533 -0.871423 0 + outer loop + vertex -47.1985 -36.2359 -0.1 + vertex -46.9715 -36.1082 0 + vertex -47.1985 -36.2359 0 + endloop + endfacet + facet normal 0.490533 -0.871423 0 + outer loop + vertex -46.9715 -36.1082 0 + vertex -47.1985 -36.2359 -0.1 + vertex -46.9715 -36.1082 -0.1 + endloop + endfacet + facet normal 0.402049 -0.915618 0 + outer loop + vertex -46.9715 -36.1082 -0.1 + vertex -46.7228 -35.999 0 + vertex -46.9715 -36.1082 0 + endloop + endfacet + facet normal 0.402049 -0.915618 0 + outer loop + vertex -46.7228 -35.999 0 + vertex -46.9715 -36.1082 -0.1 + vertex -46.7228 -35.999 -0.1 + endloop + endfacet + facet normal 0.309107 -0.951027 0 + outer loop + vertex -46.7228 -35.999 -0.1 + vertex -46.4544 -35.9117 0 + vertex -46.7228 -35.999 0 + endloop + endfacet + facet normal 0.309107 -0.951027 0 + outer loop + vertex -46.4544 -35.9117 0 + vertex -46.7228 -35.999 -0.1 + vertex -46.4544 -35.9117 -0.1 + endloop + endfacet + facet normal 0.211211 -0.977441 0 + outer loop + vertex -46.4544 -35.9117 -0.1 + vertex -46.1684 -35.8499 0 + vertex -46.4544 -35.9117 0 + endloop + endfacet + facet normal 0.211211 -0.977441 0 + outer loop + vertex -46.1684 -35.8499 0 + vertex -46.4544 -35.9117 -0.1 + vertex -46.1684 -35.8499 -0.1 + endloop + endfacet + facet normal 0.185786 -0.98259 0 + outer loop + vertex -46.1684 -35.8499 -0.1 + vertex -45.8475 -35.7893 0 + vertex -46.1684 -35.8499 0 + endloop + endfacet + facet normal 0.185786 -0.98259 0 + outer loop + vertex -45.8475 -35.7893 0 + vertex -46.1684 -35.8499 -0.1 + vertex -45.8475 -35.7893 -0.1 + endloop + endfacet + facet normal 0.247179 -0.96897 0 + outer loop + vertex -45.8475 -35.7893 -0.1 + vertex -45.5508 -35.7136 0 + vertex -45.8475 -35.7893 0 + endloop + endfacet + facet normal 0.247179 -0.96897 0 + outer loop + vertex -45.5508 -35.7136 0 + vertex -45.8475 -35.7893 -0.1 + vertex -45.5508 -35.7136 -0.1 + endloop + endfacet + facet normal 0.324475 -0.945894 0 + outer loop + vertex -45.5508 -35.7136 -0.1 + vertex -45.2753 -35.6191 0 + vertex -45.5508 -35.7136 0 + endloop + endfacet + facet normal 0.324475 -0.945894 0 + outer loop + vertex -45.2753 -35.6191 0 + vertex -45.5508 -35.7136 -0.1 + vertex -45.2753 -35.6191 -0.1 + endloop + endfacet + facet normal 0.414245 -0.910165 0 + outer loop + vertex -45.2753 -35.6191 -0.1 + vertex -45.0179 -35.5019 0 + vertex -45.2753 -35.6191 0 + endloop + endfacet + facet normal 0.414245 -0.910165 0 + outer loop + vertex -45.0179 -35.5019 0 + vertex -45.2753 -35.6191 -0.1 + vertex -45.0179 -35.5019 -0.1 + endloop + endfacet + facet normal 0.509766 -0.860313 0 + outer loop + vertex -45.0179 -35.5019 -0.1 + vertex -44.7755 -35.3583 0 + vertex -45.0179 -35.5019 0 + endloop + endfacet + facet normal 0.509766 -0.860313 0 + outer loop + vertex -44.7755 -35.3583 0 + vertex -45.0179 -35.5019 -0.1 + vertex -44.7755 -35.3583 -0.1 + endloop + endfacet + facet normal 0.602421 -0.798179 0 + outer loop + vertex -44.7755 -35.3583 -0.1 + vertex -44.5451 -35.1844 0 + vertex -44.7755 -35.3583 0 + endloop + endfacet + facet normal 0.602421 -0.798179 0 + outer loop + vertex -44.5451 -35.1844 0 + vertex -44.7755 -35.3583 -0.1 + vertex -44.5451 -35.1844 -0.1 + endloop + endfacet + facet normal 0.684546 -0.728969 0 + outer loop + vertex -44.5451 -35.1844 -0.1 + vertex -44.3237 -34.9765 0 + vertex -44.5451 -35.1844 0 + endloop + endfacet + facet normal 0.684546 -0.728969 0 + outer loop + vertex -44.3237 -34.9765 0 + vertex -44.5451 -35.1844 -0.1 + vertex -44.3237 -34.9765 -0.1 + endloop + endfacet + facet normal 0.751841 -0.659345 0 + outer loop + vertex -44.3237 -34.9765 0 + vertex -44.108 -34.7306 -0.1 + vertex -44.108 -34.7306 0 + endloop + endfacet + facet normal 0.751841 -0.659345 0 + outer loop + vertex -44.108 -34.7306 -0.1 + vertex -44.3237 -34.9765 0 + vertex -44.3237 -34.9765 -0.1 + endloop + endfacet + facet normal 0.803805 -0.594893 0 + outer loop + vertex -44.108 -34.7306 0 + vertex -43.8952 -34.443 -0.1 + vertex -43.8952 -34.443 0 + endloop + endfacet + facet normal 0.803805 -0.594893 0 + outer loop + vertex -43.8952 -34.443 -0.1 + vertex -44.108 -34.7306 0 + vertex -44.108 -34.7306 -0.1 + endloop + endfacet + facet normal 0.842352 -0.538928 0 + outer loop + vertex -43.8952 -34.443 0 + vertex -43.682 -34.1098 -0.1 + vertex -43.682 -34.1098 0 + endloop + endfacet + facet normal 0.842352 -0.538928 0 + outer loop + vertex -43.682 -34.1098 -0.1 + vertex -43.8952 -34.443 0 + vertex -43.8952 -34.443 -0.1 + endloop + endfacet + facet normal 0.870266 -0.492581 0 + outer loop + vertex -43.682 -34.1098 0 + vertex -43.4655 -33.7273 -0.1 + vertex -43.4655 -33.7273 0 + endloop + endfacet + facet normal 0.870266 -0.492581 0 + outer loop + vertex -43.4655 -33.7273 -0.1 + vertex -43.682 -34.1098 0 + vertex -43.682 -34.1098 -0.1 + endloop + endfacet + facet normal 0.890236 -0.4555 0 + outer loop + vertex -43.4655 -33.7273 0 + vertex -43.2426 -33.2915 -0.1 + vertex -43.2426 -33.2915 0 + endloop + endfacet + facet normal 0.890236 -0.4555 0 + outer loop + vertex -43.2426 -33.2915 -0.1 + vertex -43.4655 -33.7273 0 + vertex -43.4655 -33.7273 -0.1 + endloop + endfacet + facet normal 0.909757 -0.41514 0 + outer loop + vertex -43.2426 -33.2915 0 + vertex -42.7651 -32.2453 -0.1 + vertex -42.7651 -32.2453 0 + endloop + endfacet + facet normal 0.909757 -0.41514 0 + outer loop + vertex -42.7651 -32.2453 -0.1 + vertex -43.2426 -33.2915 0 + vertex -43.2426 -33.2915 -0.1 + endloop + endfacet + facet normal 0.924016 -0.382355 0 + outer loop + vertex -42.7651 -32.2453 0 + vertex -42.2252 -30.9405 -0.1 + vertex -42.2252 -30.9405 0 + endloop + endfacet + facet normal 0.924016 -0.382355 0 + outer loop + vertex -42.2252 -30.9405 -0.1 + vertex -42.7651 -32.2453 0 + vertex -42.7651 -32.2453 -0.1 + endloop + endfacet + facet normal 0.922377 -0.38629 0 + outer loop + vertex -42.2252 -30.9405 0 + vertex -41.2695 -28.6585 -0.1 + vertex -41.2695 -28.6585 0 + endloop + endfacet + facet normal 0.922377 -0.38629 0 + outer loop + vertex -41.2695 -28.6585 -0.1 + vertex -42.2252 -30.9405 0 + vertex -42.2252 -30.9405 -0.1 + endloop + endfacet + facet normal 0.918146 -0.396243 0 + outer loop + vertex -41.2695 -28.6585 0 + vertex -39.8955 -25.4747 -0.1 + vertex -39.8955 -25.4747 0 + endloop + endfacet + facet normal 0.918146 -0.396243 0 + outer loop + vertex -39.8955 -25.4747 -0.1 + vertex -41.2695 -28.6585 0 + vertex -41.2695 -28.6585 -0.1 + endloop + endfacet + facet normal 0.918872 -0.394555 0 + outer loop + vertex -39.8955 -25.4747 0 + vertex -38.3469 -21.8682 -0.1 + vertex -38.3469 -21.8682 0 + endloop + endfacet + facet normal 0.918872 -0.394555 0 + outer loop + vertex -38.3469 -21.8682 -0.1 + vertex -39.8955 -25.4747 0 + vertex -39.8955 -25.4747 -0.1 + endloop + endfacet + facet normal 0.92432 -0.381618 0 + outer loop + vertex -38.3469 -21.8682 0 + vertex -37.0431 -18.7102 -0.1 + vertex -37.0431 -18.7102 0 + endloop + endfacet + facet normal 0.92432 -0.381618 0 + outer loop + vertex -37.0431 -18.7102 -0.1 + vertex -38.3469 -21.8682 0 + vertex -38.3469 -21.8682 -0.1 + endloop + endfacet + facet normal 0.929541 -0.368719 0 + outer loop + vertex -37.0431 -18.7102 0 + vertex -36.5163 -17.3821 -0.1 + vertex -36.5163 -17.3821 0 + endloop + endfacet + facet normal 0.929541 -0.368719 0 + outer loop + vertex -36.5163 -17.3821 -0.1 + vertex -37.0431 -18.7102 0 + vertex -37.0431 -18.7102 -0.1 + endloop + endfacet + facet normal 0.934424 -0.356162 0 + outer loop + vertex -36.5163 -17.3821 0 + vertex -36.0907 -16.2655 -0.1 + vertex -36.0907 -16.2655 0 + endloop + endfacet + facet normal 0.934424 -0.356162 0 + outer loop + vertex -36.0907 -16.2655 -0.1 + vertex -36.5163 -17.3821 0 + vertex -36.5163 -17.3821 -0.1 + endloop + endfacet + facet normal 0.941869 -0.335981 0 + outer loop + vertex -36.0907 -16.2655 0 + vertex -35.7796 -15.3934 -0.1 + vertex -35.7796 -15.3934 0 + endloop + endfacet + facet normal 0.941869 -0.335981 0 + outer loop + vertex -35.7796 -15.3934 -0.1 + vertex -36.0907 -16.2655 0 + vertex -36.0907 -16.2655 -0.1 + endloop + endfacet + facet normal 0.955627 -0.294578 0 + outer loop + vertex -35.7796 -15.3934 0 + vertex -35.5964 -14.799 -0.1 + vertex -35.5964 -14.799 0 + endloop + endfacet + facet normal 0.955627 -0.294578 0 + outer loop + vertex -35.5964 -14.799 -0.1 + vertex -35.7796 -15.3934 0 + vertex -35.7796 -15.3934 -0.1 + endloop + endfacet + facet normal 0.97537 -0.220574 0 + outer loop + vertex -35.5964 -14.799 0 + vertex -35.5123 -14.4274 -0.1 + vertex -35.5123 -14.4274 0 + endloop + endfacet + facet normal 0.97537 -0.220574 0 + outer loop + vertex -35.5123 -14.4274 -0.1 + vertex -35.5964 -14.799 0 + vertex -35.5964 -14.799 -0.1 + endloop + endfacet + facet normal 0.992467 -0.122514 0 + outer loop + vertex -35.5123 -14.4274 0 + vertex -35.4754 -14.1281 -0.1 + vertex -35.4754 -14.1281 0 + endloop + endfacet + facet normal 0.992467 -0.122514 0 + outer loop + vertex -35.4754 -14.1281 -0.1 + vertex -35.5123 -14.4274 0 + vertex -35.5123 -14.4274 -0.1 + endloop + endfacet + facet normal 0.997952 0.0639612 0 + outer loop + vertex -35.4754 -14.1281 0 + vertex -35.4904 -13.894 -0.1 + vertex -35.4904 -13.894 0 + endloop + endfacet + facet normal 0.997952 0.0639612 0 + outer loop + vertex -35.4904 -13.894 -0.1 + vertex -35.4754 -14.1281 0 + vertex -35.4754 -14.1281 -0.1 + endloop + endfacet + facet normal 0.957653 0.287925 0 + outer loop + vertex -35.4904 -13.894 0 + vertex -35.5189 -13.7992 -0.1 + vertex -35.5189 -13.7992 0 + endloop + endfacet + facet normal 0.957653 0.287925 0 + outer loop + vertex -35.5189 -13.7992 -0.1 + vertex -35.4904 -13.894 0 + vertex -35.4904 -13.894 -0.1 + endloop + endfacet + facet normal 0.882255 0.470771 0 + outer loop + vertex -35.5189 -13.7992 0 + vertex -35.5622 -13.718 -0.1 + vertex -35.5622 -13.718 0 + endloop + endfacet + facet normal 0.882255 0.470771 0 + outer loop + vertex -35.5622 -13.718 -0.1 + vertex -35.5189 -13.7992 0 + vertex -35.5189 -13.7992 -0.1 + endloop + endfacet + facet normal 0.758808 0.651314 0 + outer loop + vertex -35.5622 -13.718 0 + vertex -35.6209 -13.6496 -0.1 + vertex -35.6209 -13.6496 0 + endloop + endfacet + facet normal 0.758808 0.651314 0 + outer loop + vertex -35.6209 -13.6496 -0.1 + vertex -35.5622 -13.718 0 + vertex -35.5622 -13.718 -0.1 + endloop + endfacet + facet normal 0.603335 0.797487 -0 + outer loop + vertex -35.6209 -13.6496 -0.1 + vertex -35.6956 -13.593 0 + vertex -35.6209 -13.6496 0 + endloop + endfacet + facet normal 0.603335 0.797487 0 + outer loop + vertex -35.6956 -13.593 0 + vertex -35.6209 -13.6496 -0.1 + vertex -35.6956 -13.593 -0.1 + endloop + endfacet + facet normal 0.375678 0.92675 -0 + outer loop + vertex -35.6956 -13.593 -0.1 + vertex -35.8956 -13.512 0 + vertex -35.6956 -13.593 0 + endloop + endfacet + facet normal 0.375678 0.92675 0 + outer loop + vertex -35.8956 -13.512 0 + vertex -35.6956 -13.593 -0.1 + vertex -35.8956 -13.512 -0.1 + endloop + endfacet + facet normal 0.161053 0.986946 -0 + outer loop + vertex -35.8956 -13.512 -0.1 + vertex -36.1669 -13.4677 0 + vertex -35.8956 -13.512 0 + endloop + endfacet + facet normal 0.161053 0.986946 0 + outer loop + vertex -36.1669 -13.4677 0 + vertex -35.8956 -13.512 -0.1 + vertex -36.1669 -13.4677 -0.1 + endloop + endfacet + facet normal 0.0419804 0.999118 -0 + outer loop + vertex -36.1669 -13.4677 -0.1 + vertex -36.5145 -13.4531 0 + vertex -36.1669 -13.4677 0 + endloop + endfacet + facet normal 0.0419804 0.999118 0 + outer loop + vertex -36.5145 -13.4531 0 + vertex -36.1669 -13.4677 -0.1 + vertex -36.5145 -13.4531 -0.1 + endloop + endfacet + facet normal 0.0664354 0.997791 -0 + outer loop + vertex -36.5145 -13.4531 -0.1 + vertex -36.7305 -13.4387 0 + vertex -36.5145 -13.4531 0 + endloop + endfacet + facet normal 0.0664354 0.997791 0 + outer loop + vertex -36.7305 -13.4387 0 + vertex -36.5145 -13.4531 -0.1 + vertex -36.7305 -13.4387 -0.1 + endloop + endfacet + facet normal 0.199985 0.979799 -0 + outer loop + vertex -36.7305 -13.4387 -0.1 + vertex -36.9216 -13.3997 0 + vertex -36.7305 -13.4387 0 + endloop + endfacet + facet normal 0.199985 0.979799 0 + outer loop + vertex -36.9216 -13.3997 0 + vertex -36.7305 -13.4387 -0.1 + vertex -36.9216 -13.3997 -0.1 + endloop + endfacet + facet normal 0.346161 0.938175 -0 + outer loop + vertex -36.9216 -13.3997 -0.1 + vertex -37.0874 -13.3385 0 + vertex -36.9216 -13.3997 0 + endloop + endfacet + facet normal 0.346161 0.938175 0 + outer loop + vertex -37.0874 -13.3385 0 + vertex -36.9216 -13.3997 -0.1 + vertex -37.0874 -13.3385 -0.1 + endloop + endfacet + facet normal 0.49992 0.866072 -0 + outer loop + vertex -37.0874 -13.3385 -0.1 + vertex -37.2276 -13.2576 0 + vertex -37.0874 -13.3385 0 + endloop + endfacet + facet normal 0.49992 0.866072 0 + outer loop + vertex -37.2276 -13.2576 0 + vertex -37.0874 -13.3385 -0.1 + vertex -37.2276 -13.2576 -0.1 + endloop + endfacet + facet normal 0.652051 0.758175 -0 + outer loop + vertex -37.2276 -13.2576 -0.1 + vertex -37.3418 -13.1594 0 + vertex -37.2276 -13.2576 0 + endloop + endfacet + facet normal 0.652051 0.758175 0 + outer loop + vertex -37.3418 -13.1594 0 + vertex -37.2276 -13.2576 -0.1 + vertex -37.3418 -13.1594 -0.1 + endloop + endfacet + facet normal 0.789664 0.613539 0 + outer loop + vertex -37.3418 -13.1594 0 + vertex -37.4296 -13.0463 -0.1 + vertex -37.4296 -13.0463 0 + endloop + endfacet + facet normal 0.789664 0.613539 0 + outer loop + vertex -37.4296 -13.0463 -0.1 + vertex -37.3418 -13.1594 0 + vertex -37.3418 -13.1594 -0.1 + endloop + endfacet + facet normal 0.898957 0.438037 0 + outer loop + vertex -37.4296 -13.0463 0 + vertex -37.4908 -12.9209 -0.1 + vertex -37.4908 -12.9209 0 + endloop + endfacet + facet normal 0.898957 0.438037 0 + outer loop + vertex -37.4908 -12.9209 -0.1 + vertex -37.4296 -13.0463 0 + vertex -37.4296 -13.0463 -0.1 + endloop + endfacet + facet normal 0.969773 0.244009 0 + outer loop + vertex -37.4908 -12.9209 0 + vertex -37.5249 -12.7854 -0.1 + vertex -37.5249 -12.7854 0 + endloop + endfacet + facet normal 0.969773 0.244009 0 + outer loop + vertex -37.5249 -12.7854 -0.1 + vertex -37.4908 -12.9209 0 + vertex -37.4908 -12.9209 -0.1 + endloop + endfacet + facet normal 0.99892 0.0464614 0 + outer loop + vertex -37.5249 -12.7854 0 + vertex -37.5315 -12.6425 -0.1 + vertex -37.5315 -12.6425 0 + endloop + endfacet + facet normal 0.99892 0.0464614 0 + outer loop + vertex -37.5315 -12.6425 -0.1 + vertex -37.5249 -12.7854 0 + vertex -37.5249 -12.7854 -0.1 + endloop + endfacet + facet normal 0.989966 -0.141306 0 + outer loop + vertex -37.5315 -12.6425 0 + vertex -37.5104 -12.4945 -0.1 + vertex -37.5104 -12.4945 0 + endloop + endfacet + facet normal 0.989966 -0.141306 0 + outer loop + vertex -37.5104 -12.4945 -0.1 + vertex -37.5315 -12.6425 0 + vertex -37.5315 -12.6425 -0.1 + endloop + endfacet + facet normal 0.950483 -0.310777 0 + outer loop + vertex -37.5104 -12.4945 0 + vertex -37.4611 -12.3438 -0.1 + vertex -37.4611 -12.3438 0 + endloop + endfacet + facet normal 0.950483 -0.310777 0 + outer loop + vertex -37.4611 -12.3438 -0.1 + vertex -37.5104 -12.4945 0 + vertex -37.5104 -12.4945 -0.1 + endloop + endfacet + facet normal 0.888869 -0.458162 0 + outer loop + vertex -37.4611 -12.3438 0 + vertex -37.3834 -12.1929 -0.1 + vertex -37.3834 -12.1929 0 + endloop + endfacet + facet normal 0.888869 -0.458162 0 + outer loop + vertex -37.3834 -12.1929 -0.1 + vertex -37.4611 -12.3438 0 + vertex -37.4611 -12.3438 -0.1 + endloop + endfacet + facet normal 0.812527 -0.582923 0 + outer loop + vertex -37.3834 -12.1929 0 + vertex -37.2767 -12.0443 -0.1 + vertex -37.2767 -12.0443 0 + endloop + endfacet + facet normal 0.812527 -0.582923 0 + outer loop + vertex -37.2767 -12.0443 -0.1 + vertex -37.3834 -12.1929 0 + vertex -37.3834 -12.1929 -0.1 + endloop + endfacet + facet normal 0.727267 -0.686355 0 + outer loop + vertex -37.2767 -12.0443 0 + vertex -37.1409 -11.9004 -0.1 + vertex -37.1409 -11.9004 0 + endloop + endfacet + facet normal 0.727267 -0.686355 0 + outer loop + vertex -37.1409 -11.9004 -0.1 + vertex -37.2767 -12.0443 0 + vertex -37.2767 -12.0443 -0.1 + endloop + endfacet + facet normal 0.637301 -0.770615 0 + outer loop + vertex -37.1409 -11.9004 -0.1 + vertex -36.9755 -11.7636 0 + vertex -37.1409 -11.9004 0 + endloop + endfacet + facet normal 0.637301 -0.770615 0 + outer loop + vertex -36.9755 -11.7636 0 + vertex -37.1409 -11.9004 -0.1 + vertex -36.9755 -11.7636 -0.1 + endloop + endfacet + facet normal 0.545722 -0.837967 0 + outer loop + vertex -36.9755 -11.7636 -0.1 + vertex -36.7802 -11.6364 0 + vertex -36.9755 -11.7636 0 + endloop + endfacet + facet normal 0.545722 -0.837967 0 + outer loop + vertex -36.7802 -11.6364 0 + vertex -36.9755 -11.7636 -0.1 + vertex -36.7802 -11.6364 -0.1 + endloop + endfacet + facet normal 0.431805 -0.901967 0 + outer loop + vertex -36.7802 -11.6364 -0.1 + vertex -36.527 -11.5152 0 + vertex -36.7802 -11.6364 0 + endloop + endfacet + facet normal 0.431805 -0.901967 0 + outer loop + vertex -36.527 -11.5152 0 + vertex -36.7802 -11.6364 -0.1 + vertex -36.527 -11.5152 -0.1 + endloop + endfacet + facet normal 0.256105 -0.966649 0 + outer loop + vertex -36.527 -11.5152 -0.1 + vertex -36.1819 -11.4238 0 + vertex -36.527 -11.5152 0 + endloop + endfacet + facet normal 0.256105 -0.966649 0 + outer loop + vertex -36.1819 -11.4238 0 + vertex -36.527 -11.5152 -0.1 + vertex -36.1819 -11.4238 -0.1 + endloop + endfacet + facet normal 0.121259 -0.992621 0 + outer loop + vertex -36.1819 -11.4238 -0.1 + vertex -35.6555 -11.3595 0 + vertex -36.1819 -11.4238 0 + endloop + endfacet + facet normal 0.121259 -0.992621 0 + outer loop + vertex -35.6555 -11.3595 0 + vertex -36.1819 -11.4238 -0.1 + vertex -35.6555 -11.3595 -0.1 + endloop + endfacet + facet normal 0.0498988 -0.998754 0 + outer loop + vertex -35.6555 -11.3595 -0.1 + vertex -34.8583 -11.3197 0 + vertex -35.6555 -11.3595 0 + endloop + endfacet + facet normal 0.0498988 -0.998754 0 + outer loop + vertex -34.8583 -11.3197 0 + vertex -35.6555 -11.3595 -0.1 + vertex -34.8583 -11.3197 -0.1 + endloop + endfacet + facet normal 0.0155398 -0.999879 0 + outer loop + vertex -34.8583 -11.3197 -0.1 + vertex -33.7011 -11.3017 0 + vertex -34.8583 -11.3197 0 + endloop + endfacet + facet normal 0.0155398 -0.999879 0 + outer loop + vertex -33.7011 -11.3017 0 + vertex -34.8583 -11.3197 -0.1 + vertex -33.7011 -11.3017 -0.1 + endloop + endfacet + facet normal -0.000753226 -1 0 + outer loop + vertex -33.7011 -11.3017 -0.1 + vertex -32.0944 -11.3029 0 + vertex -33.7011 -11.3017 0 + endloop + endfacet + facet normal -0.000753226 -1 -0 + outer loop + vertex -32.0944 -11.3029 0 + vertex -33.7011 -11.3017 -0.1 + vertex -32.0944 -11.3029 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0792 -19.1571 -0.1 + vertex -11.6557 -19.6804 -0.1 + vertex -11.6899 -19.4898 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.302 -19.1333 -0.1 + vertex -11.6557 -19.6804 -0.1 + vertex -12.0792 -19.1571 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.9023 -19.2259 -0.1 + vertex -11.6899 -19.4898 -0.1 + vertex -11.7723 -19.3375 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.6557 -19.6804 -0.1 + vertex -12.302 -19.1333 -0.1 + vertex -11.6707 -19.9072 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.6899 -19.4898 -0.1 + vertex -11.9023 -19.2259 -0.1 + vertex -12.0792 -19.1571 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.6849 -19.1929 -0.1 + vertex -11.6707 -19.9072 -0.1 + vertex -12.302 -19.1333 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.7355 -20.1677 -0.1 + vertex -12.6849 -19.1929 -0.1 + vertex -11.851 -20.4599 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.6707 -19.9072 -0.1 + vertex -12.6849 -19.1929 -0.1 + vertex -11.7355 -20.1677 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.01943 -23.5295 -0.1 + vertex -8.48242 -23.1923 -0.1 + vertex -8.45645 -23.4267 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.06691 -19.2358 -0.1 + vertex -8.54451 -22.9989 -0.1 + vertex -8.48242 -23.1923 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.06691 -19.2358 -0.1 + vertex -8.64279 -22.8439 -0.1 + vertex -8.54451 -22.9989 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.94827 -22.6394 -0.1 + vertex -8.43701 -19.2929 -0.1 + vertex -8.77447 -19.378 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.06691 -19.2358 -0.1 + vertex -8.77736 -22.7249 -0.1 + vertex -8.64279 -22.8439 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.43701 -19.2929 -0.1 + vertex -8.94827 -22.6394 -0.1 + vertex -8.77736 -22.7249 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.10766 -19.4997 -0.1 + vertex -8.94827 -22.6394 -0.1 + vertex -8.77447 -19.378 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.46489 -19.667 -0.1 + vertex -8.94827 -22.6394 -0.1 + vertex -9.10766 -19.4997 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.94827 -22.6394 -0.1 + vertex -9.46489 -19.667 -0.1 + vertex -9.15561 -22.5851 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.87453 -19.8884 -0.1 + vertex -9.15561 -22.5851 -0.1 + vertex -9.46489 -19.667 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.15561 -22.5851 -0.1 + vertex -9.87453 -19.8884 -0.1 + vertex -9.39946 -22.5595 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.3649 -20.1728 -0.1 + vertex -9.39946 -22.5595 -0.1 + vertex -9.87453 -19.8884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.39946 -22.5595 -0.1 + vertex -10.3649 -20.1728 -0.1 + vertex -9.67988 -22.56 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.67988 -22.56 -0.1 + vertex -10.3649 -20.1728 -0.1 + vertex -10.0796 -22.6123 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.5073 -20.829 -0.1 + vertex -10.0796 -22.6123 -0.1 + vertex -10.3649 -20.1728 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.0796 -22.6123 -0.1 + vertex -11.5073 -20.829 -0.1 + vertex -10.5344 -22.7271 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5344 -22.7271 -0.1 + vertex -11.5073 -20.829 -0.1 + vertex -10.9881 -22.8877 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.8784 -21.0286 -0.1 + vertex -10.9881 -22.8877 -0.1 + vertex -11.5073 -20.829 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.0427 -21.102 -0.1 + vertex -10.9881 -22.8877 -0.1 + vertex -11.8784 -21.0286 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.9881 -22.8877 -0.1 + vertex -12.0427 -21.102 -0.1 + vertex -11.3849 -23.0769 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.3849 -23.0769 -0.1 + vertex -12.0427 -21.102 -0.1 + vertex -11.9359 -23.4045 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.4007 -23.7203 -0.1 + vertex -12.0427 -21.102 -0.1 + vertex -12.0573 -21.0889 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1989 -19.5967 -0.1 + vertex -12.0573 -21.0889 -0.1 + vertex -12.0594 -21.0513 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.3483 -19.3556 -0.1 + vertex -11.851 -20.4599 -0.1 + vertex -12.6849 -19.1929 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.851 -20.4599 -0.1 + vertex -13.3483 -19.3556 -0.1 + vertex -12.0288 -20.9134 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0288 -20.9134 -0.1 + vertex -13.3483 -19.3556 -0.1 + vertex -12.0594 -21.0513 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.1989 -19.5967 -0.1 + vertex -12.0594 -21.0513 -0.1 + vertex -13.3483 -19.3556 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0573 -21.0889 -0.1 + vertex -14.1989 -19.5967 -0.1 + vertex -15.1436 -19.8912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0427 -21.102 -0.1 + vertex -12.4007 -23.7203 -0.1 + vertex -11.9359 -23.4045 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0573 -21.0889 -0.1 + vertex -15.1436 -19.8912 -0.1 + vertex -12.7941 -24.0414 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0573 -21.0889 -0.1 + vertex -12.7941 -24.0414 -0.1 + vertex -12.4007 -23.7203 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.2249 -22.8126 -0.1 + vertex -12.7941 -24.0414 -0.1 + vertex -15.1436 -19.8912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.7941 -24.0414 -0.1 + vertex -17.2249 -22.8126 -0.1 + vertex -13.131 -24.3848 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -17.2226 -22.9371 -0.1 + vertex -13.131 -24.3848 -0.1 + vertex -17.2249 -22.8126 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.131 -24.3848 -0.1 + vertex -17.2226 -22.9371 -0.1 + vertex -13.4262 -24.7676 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.2873 -23.335 -0.1 + vertex -13.4262 -24.7676 -0.1 + vertex -17.2226 -22.9371 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.4084 -23.7485 -0.1 + vertex -13.6945 -25.2068 -0.1 + vertex -17.2873 -23.335 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.6656 -24.469 -0.1 + vertex -13.9508 -25.7195 -0.1 + vertex -17.4084 -23.7485 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2578 -22.7276 -0.1 + vertex -15.1436 -19.8912 -0.1 + vertex -16.9393 -20.461 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.6945 -25.2068 -0.1 + vertex -17.4084 -23.7485 -0.1 + vertex -13.9508 -25.7195 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.9508 -25.7195 -0.1 + vertex -17.6656 -24.469 -0.1 + vertex -14.2098 -26.3227 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.4262 -24.7676 -0.1 + vertex -17.2873 -23.335 -0.1 + vertex -13.6945 -25.2068 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.1436 -19.8912 -0.1 + vertex -17.2578 -22.7276 -0.1 + vertex -17.2249 -22.8126 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9393 -20.461 -0.1 + vertex -17.3267 -22.6747 -0.1 + vertex -17.2578 -22.7276 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9393 -20.461 -0.1 + vertex -17.4374 -22.6462 -0.1 + vertex -17.3267 -22.6747 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.9865 -20.7653 -0.1 + vertex -17.4374 -22.6462 -0.1 + vertex -16.9393 -20.461 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4374 -22.6462 -0.1 + vertex -17.9865 -20.7653 -0.1 + vertex -17.8061 -22.6324 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.5788 -21.2283 -0.1 + vertex -17.8061 -22.6324 -0.1 + vertex -17.9865 -20.7653 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5053 -21.1105 -0.1 + vertex -17.9865 -20.7653 -0.1 + vertex -18.1109 -20.8023 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5053 -21.1105 -0.1 + vertex -18.1109 -20.8023 -0.1 + vertex -18.2248 -20.8552 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5053 -21.1105 -0.1 + vertex -18.2248 -20.8552 -0.1 + vertex -18.3284 -20.924 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.6967 -21.5139 -0.1 + vertex -17.8061 -22.6324 -0.1 + vertex -18.5788 -21.2283 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5053 -21.1105 -0.1 + vertex -18.3284 -20.924 -0.1 + vertex -18.4218 -21.0091 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.9865 -20.7653 -0.1 + vertex -18.5053 -21.1105 -0.1 + vertex -18.5788 -21.2283 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.8061 -22.6324 -0.1 + vertex -18.6967 -21.5139 -0.1 + vertex -18.1091 -22.6172 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.766 -21.7922 -0.1 + vertex -18.1091 -22.6172 -0.1 + vertex -18.6967 -21.5139 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1091 -22.6172 -0.1 + vertex -18.766 -21.7922 -0.1 + vertex -18.3541 -22.5704 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.7869 -22.0269 -0.1 + vertex -18.3541 -22.5704 -0.1 + vertex -18.766 -21.7922 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.3541 -22.5704 -0.1 + vertex -18.7869 -22.0269 -0.1 + vertex -18.5429 -22.4899 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -18.7577 -22.2202 -0.1 + vertex -18.5429 -22.4899 -0.1 + vertex -18.7869 -22.0269 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5429 -22.4899 -0.1 + vertex -18.7577 -22.2202 -0.1 + vertex -18.6769 -22.3738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.82849 -22.2203 -0.1 + vertex -3.84473 -21.6547 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.84473 -21.6547 -0.1 + vertex -3.87719 -21.3353 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.84589 -22.5177 -0.1 + vertex -3.82849 -22.2203 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.47107 -20.0532 -0.1 + vertex -3.87719 -21.3353 -0.1 + vertex -3.91934 -21.0662 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.88244 -22.8317 -0.1 + vertex -3.84589 -22.5177 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.29663 -20.2518 -0.1 + vertex -3.91934 -21.0662 -0.1 + vertex -3.97677 -20.8354 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.93975 -23.1672 -0.1 + vertex -3.88244 -22.8317 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.15983 -20.4402 -0.1 + vertex -3.97677 -20.8354 -0.1 + vertex -4.05507 -20.6308 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97677 -20.8354 -0.1 + vertex -4.15983 -20.4402 -0.1 + vertex -4.29663 -20.2518 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -4.01943 -23.5295 -0.1 + vertex -3.93975 -23.1672 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.91934 -21.0662 -0.1 + vertex -4.29663 -20.2518 -0.1 + vertex -4.47107 -20.0532 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.68872 -19.8327 -0.1 + vertex -3.87719 -21.3353 -0.1 + vertex -4.47107 -20.0532 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.01943 -23.5295 -0.1 + vertex -8.45645 -23.4267 -0.1 + vertex -4.25232 -24.3543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -3.87719 -21.3353 -0.1 + vertex -4.68872 -19.8327 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.14058 -19.1411 -0.1 + vertex -4.68872 -19.8327 -0.1 + vertex -4.93899 -19.592 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.46654 -23.7044 -0.1 + vertex -4.25232 -24.3543 -0.1 + vertex -8.45645 -23.4267 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8145 -19.1562 -0.1 + vertex -4.93899 -19.592 -0.1 + vertex -5.14898 -19.4116 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.55901 -19.2012 -0.1 + vertex -5.14898 -19.4116 -0.1 + vertex -5.34642 -19.2839 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.14898 -19.4116 -0.1 + vertex -5.55901 -19.2012 -0.1 + vertex -5.8145 -19.1562 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.25232 -24.3543 -0.1 + vertex -8.46654 -23.7044 -0.1 + vertex -4.59396 -25.347 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.93899 -19.592 -0.1 + vertex -5.8145 -19.1562 -0.1 + vertex -6.14058 -19.1411 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -4.68872 -19.8327 -0.1 + vertex -6.14058 -19.1411 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.51259 -24.0278 -0.1 + vertex -4.59396 -25.347 -0.1 + vertex -8.46654 -23.7044 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -6.14058 -19.1411 -0.1 + vertex -7.11547 -19.1706 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -7.11547 -19.1706 -0.1 + vertex -7.63584 -19.198 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.59455 -24.3995 -0.1 + vertex -4.59396 -25.347 -0.1 + vertex -8.51259 -24.0278 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -7.63584 -19.198 -0.1 + vertex -8.06691 -19.2358 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.59396 -25.347 -0.1 + vertex -8.71232 -24.8218 -0.1 + vertex -5.05721 -26.548 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.05502 -25.8283 -0.1 + vertex -5.05721 -26.548 -0.1 + vertex -8.71232 -24.8218 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.77736 -22.7249 -0.1 + vertex -8.06691 -19.2358 -0.1 + vertex -8.43701 -19.2929 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.71232 -24.8218 -0.1 + vertex -4.59396 -25.347 -0.1 + vertex -8.59455 -24.3995 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.05721 -26.548 -0.1 + vertex -9.05502 -25.8283 -0.1 + vertex -5.65492 -27.9982 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.5401 -27.0667 -0.1 + vertex -5.65492 -27.9982 -0.1 + vertex -9.05502 -25.8283 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.65492 -27.9982 -0.1 + vertex -9.5401 -27.0667 -0.1 + vertex -6.39994 -29.738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5815 -32.143 -0.1 + vertex -6.39994 -29.738 -0.1 + vertex -9.5401 -27.0667 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.39994 -29.738 -0.1 + vertex -11.5815 -32.143 -0.1 + vertex -7.70823 -32.8163 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 -0.1 + vertex -7.30695 -36.9638 -0.1 + vertex -7.29619 -36.8569 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.32635 -36.6539 -0.1 + vertex -7.30695 -36.9638 -0.1 + vertex -7.30266 -36.7536 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.36727 -36.5579 -0.1 + vertex -7.30695 -36.9638 -0.1 + vertex -7.32635 -36.6539 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.50076 -36.3769 -0.1 + vertex -7.30695 -36.9638 -0.1 + vertex -7.36727 -36.5579 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30695 -36.9638 -0.1 + vertex -7.50076 -36.3769 -0.1 + vertex -7.38017 -37.1883 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.70312 -36.2106 -0.1 + vertex -7.38017 -37.1883 -0.1 + vertex -7.50076 -36.3769 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.38017 -37.1883 -0.1 + vertex -7.70312 -36.2106 -0.1 + vertex -7.52232 -37.4271 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.97432 -36.0592 -0.1 + vertex -7.52232 -37.4271 -0.1 + vertex -7.70312 -36.2106 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.52232 -37.4271 -0.1 + vertex -7.97432 -36.0592 -0.1 + vertex -7.73344 -37.6801 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.73344 -37.6801 -0.1 + vertex -7.97432 -36.0592 -0.1 + vertex -7.8903 -37.8311 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30871 -38.0303 -0.1 + vertex -7.8903 -37.8311 -0.1 + vertex -7.97432 -36.0592 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30871 -38.0303 -0.1 + vertex -7.97432 -36.0592 -0.1 + vertex -8.30497 -35.8814 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.8903 -37.8311 -0.1 + vertex -8.30871 -38.0303 -0.1 + vertex -8.0676 -37.9462 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.15585 -38.1249 -0.1 + vertex -8.30497 -35.8814 -0.1 + vertex -8.41808 -35.7975 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.15585 -38.1249 -0.1 + vertex -8.41808 -35.7975 -0.1 + vertex -8.49955 -35.7129 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.84865 -38.1451 -0.1 + vertex -8.49955 -35.7129 -0.1 + vertex -8.55176 -35.6244 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.84865 -38.1451 -0.1 + vertex -8.55176 -35.6244 -0.1 + vertex -8.57707 -35.529 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30497 -35.8814 -0.1 + vertex -8.657 -38.0883 -0.1 + vertex -8.30871 -38.0303 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6843 -34.4922 -0.1 + vertex -8.57707 -35.529 -0.1 + vertex -8.57785 -35.4236 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.70823 -32.8163 -0.1 + vertex -11.5815 -32.143 -0.1 + vertex -8.13453 -33.8652 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.9595 -33.0513 -0.1 + vertex -8.13453 -33.8652 -0.1 + vertex -11.5815 -32.143 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.13453 -33.8652 -0.1 + vertex -11.9595 -33.0513 -0.1 + vertex -8.32474 -34.384 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.3268 -33.8339 -0.1 + vertex -8.32474 -34.384 -0.1 + vertex -11.9595 -33.0513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.32474 -34.384 -0.1 + vertex -12.3268 -33.8339 -0.1 + vertex -8.55649 -35.3052 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.55649 -35.3052 -0.1 + vertex -12.3268 -33.8339 -0.1 + vertex -8.57785 -35.4236 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30497 -35.8814 -0.1 + vertex -9.15585 -38.1249 -0.1 + vertex -8.657 -38.0883 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.6843 -34.4922 -0.1 + vertex -8.57785 -35.4236 -0.1 + vertex -12.3268 -33.8339 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.49955 -35.7129 -0.1 + vertex -9.84865 -38.1451 -0.1 + vertex -9.15585 -38.1249 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.57707 -35.529 -0.1 + vertex -12.6843 -34.4922 -0.1 + vertex -9.84865 -38.1451 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.0331 -35.0276 -0.1 + vertex -9.84865 -38.1451 -0.1 + vertex -12.6843 -34.4922 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.84865 -38.1451 -0.1 + vertex -13.0331 -35.0276 -0.1 + vertex -11.9896 -38.1555 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.2045 -35.2497 -0.1 + vertex -11.9896 -38.1555 -0.1 + vertex -13.0331 -35.0276 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.3741 -35.4417 -0.1 + vertex -11.9896 -38.1555 -0.1 + vertex -13.2045 -35.2497 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.5421 -35.6036 -0.1 + vertex -11.9896 -38.1555 -0.1 + vertex -13.3741 -35.4417 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.7085 -35.7356 -0.1 + vertex -11.9896 -38.1555 -0.1 + vertex -13.5421 -35.6036 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.8736 -35.838 -0.1 + vertex -11.9896 -38.1555 -0.1 + vertex -13.7085 -35.7356 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1677 -38.1469 -0.1 + vertex -13.8736 -35.838 -0.1 + vertex -14.0373 -35.911 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.8736 -35.838 -0.1 + vertex -14.1677 -38.1469 -0.1 + vertex -11.9896 -38.1555 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.1999 -35.9546 -0.1 + vertex -14.1677 -38.1469 -0.1 + vertex -14.0373 -35.911 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.3614 -35.9691 -0.1 + vertex -14.1677 -38.1469 -0.1 + vertex -14.1999 -35.9546 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.5979 -36.0176 -0.1 + vertex -14.3614 -35.9691 -0.1 + vertex -14.4713 -35.9816 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.3614 -35.9691 -0.1 + vertex -14.5979 -36.0176 -0.1 + vertex -14.1677 -38.1469 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.8831 -36.1495 -0.1 + vertex -14.1677 -38.1469 -0.1 + vertex -14.5979 -36.0176 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.1813 -36.3448 -0.1 + vertex -14.1677 -38.1469 -0.1 + vertex -14.8831 -36.1495 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1677 -38.1469 -0.1 + vertex -15.1813 -36.3448 -0.1 + vertex -14.8486 -38.1282 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.4564 -36.5832 -0.1 + vertex -14.8486 -38.1282 -0.1 + vertex -15.1813 -36.3448 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.7439 -36.902 -0.1 + vertex -14.8486 -38.1282 -0.1 + vertex -15.4564 -36.5832 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.8486 -38.1282 -0.1 + vertex -15.7439 -36.902 -0.1 + vertex -15.316 -38.0928 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.8411 -37.0399 -0.1 + vertex -15.316 -38.0928 -0.1 + vertex -15.7439 -36.902 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.9096 -37.1689 -0.1 + vertex -15.316 -38.0928 -0.1 + vertex -15.8411 -37.0399 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.9604 -37.5428 -0.1 + vertex -15.316 -38.0928 -0.1 + vertex -15.9096 -37.1689 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.316 -38.0928 -0.1 + vertex -15.9604 -37.5428 -0.1 + vertex -15.614 -38.0352 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.614 -38.0352 -0.1 + vertex -15.8777 -37.8324 -0.1 + vertex -15.7132 -37.9965 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.7132 -37.9965 -0.1 + vertex -15.8777 -37.8324 -0.1 + vertex -15.7865 -37.9502 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -15.9316 -37.6764 -0.1 + vertex -15.614 -38.0352 -0.1 + vertex -15.9604 -37.5428 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.7865 -37.9502 -0.1 + vertex -15.8777 -37.8324 -0.1 + vertex -15.8396 -37.8957 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9604 -37.5428 -0.1 + vertex -15.9096 -37.1689 -0.1 + vertex -15.9511 -37.293 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -15.8777 -37.8324 -0.1 + vertex -15.614 -38.0352 -0.1 + vertex -15.9316 -37.6764 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -15.9604 -37.5428 -0.1 + vertex -15.9511 -37.293 -0.1 + vertex -15.9675 -37.4163 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5311 -26.6889 -0.1 + vertex -14.2098 -26.3227 -0.1 + vertex -17.6656 -24.469 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.2098 -26.3227 -0.1 + vertex -18.5311 -26.6889 -0.1 + vertex -15.3777 -29.1914 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7699 -29.7113 -0.1 + vertex -15.3777 -29.1914 -0.1 + vertex -18.5311 -26.6889 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.3777 -29.1914 -0.1 + vertex -19.7699 -29.7113 -0.1 + vertex -16.8163 -32.7116 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2682 -33.2523 -0.1 + vertex -16.8163 -32.7116 -0.1 + vertex -19.7699 -29.7113 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.8163 -32.7116 -0.1 + vertex -21.2682 -33.2523 -0.1 + vertex -17.1674 -33.591 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.1674 -33.591 -0.1 + vertex -21.2682 -33.2523 -0.1 + vertex -17.4329 -34.3072 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4329 -34.3072 -0.1 + vertex -21.2682 -33.2523 -0.1 + vertex -17.6153 -34.8741 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.6072 -34.0169 -0.1 + vertex -17.6153 -34.8741 -0.1 + vertex -21.2682 -33.2523 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.6153 -34.8741 -0.1 + vertex -21.6072 -34.0169 -0.1 + vertex -17.7168 -35.3062 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7168 -35.3062 -0.1 + vertex -21.6072 -34.0169 -0.1 + vertex -17.738 -35.4761 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.9074 -34.6287 -0.1 + vertex -17.738 -35.4761 -0.1 + vertex -21.6072 -34.0169 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7399 -35.6175 -0.1 + vertex -18.7028 -38.1359 -0.1 + vertex -18.0369 -38.1201 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.738 -35.4761 -0.1 + vertex -21.9074 -34.6287 -0.1 + vertex -17.7399 -35.6175 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -20.8109 -38.1301 -0.1 + vertex -17.7399 -35.6175 -0.1 + vertex -21.9074 -34.6287 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7399 -35.6175 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -18.7028 -38.1359 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.1824 -35.1035 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -21.9074 -34.6287 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.4463 -35.4568 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -22.1824 -35.1035 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.5782 -35.5929 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -22.4463 -35.4568 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.7126 -35.7044 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -22.5782 -35.5929 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.8511 -35.7934 -0.1 + vertex -20.8109 -38.1301 -0.1 + vertex -22.7126 -35.7044 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4866 -38.0828 -0.1 + vertex -22.8511 -35.7934 -0.1 + vertex -22.9953 -35.8619 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4866 -38.0828 -0.1 + vertex -22.9953 -35.8619 -0.1 + vertex -23.1471 -35.9117 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4866 -38.0828 -0.1 + vertex -23.1471 -35.9117 -0.1 + vertex -23.3082 -35.9449 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8511 -35.7934 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -20.8109 -38.1301 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.665 -35.9691 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -23.3082 -35.9449 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.8593 -35.9891 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -23.665 -35.9691 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.0497 -36.0458 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -23.8593 -35.9891 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.2334 -36.1344 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -24.0497 -36.0458 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.4077 -36.2501 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -24.2334 -36.1344 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.57 -36.3881 -0.1 + vertex -23.4866 -38.0828 -0.1 + vertex -24.4077 -36.2501 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4866 -38.0828 -0.1 + vertex -24.57 -36.3881 -0.1 + vertex -24.3782 -38.0456 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.7177 -36.5437 -0.1 + vertex -24.3782 -38.0456 -0.1 + vertex -24.57 -36.3881 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.8479 -36.7119 -0.1 + vertex -24.3782 -38.0456 -0.1 + vertex -24.7177 -36.5437 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.9582 -36.888 -0.1 + vertex -24.3782 -38.0456 -0.1 + vertex -24.8479 -36.7119 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.0457 -37.0673 -0.1 + vertex -24.3782 -38.0456 -0.1 + vertex -24.9582 -36.888 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.1078 -37.2448 -0.1 + vertex -24.3782 -38.0456 -0.1 + vertex -25.0457 -37.0673 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3782 -38.0456 -0.1 + vertex -25.1078 -37.2448 -0.1 + vertex -24.7978 -38.0047 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.1419 -37.4158 -0.1 + vertex -24.7978 -38.0047 -0.1 + vertex -25.1078 -37.2448 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.1453 -37.5754 -0.1 + vertex -24.7978 -38.0047 -0.1 + vertex -25.1419 -37.4158 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.7978 -38.0047 -0.1 + vertex -25.1453 -37.5754 -0.1 + vertex -24.9442 -37.9384 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -25.1152 -37.719 -0.1 + vertex -24.9442 -37.9384 -0.1 + vertex -25.1453 -37.5754 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.9442 -37.9384 -0.1 + vertex -25.1152 -37.719 -0.1 + vertex -25.0491 -37.8416 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.237 -36.6071 -0.1 + vertex -16.2485 -36.9225 -0.1 + vertex -16.2109 -36.752 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.3106 -36.4662 -0.1 + vertex -16.2485 -36.9225 -0.1 + vertex -16.237 -36.6071 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.4249 -36.334 -0.1 + vertex -16.2485 -36.9225 -0.1 + vertex -16.3106 -36.4662 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.2485 -36.9225 -0.1 + vertex -16.4249 -36.334 -0.1 + vertex -16.3508 -37.1428 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.5729 -36.2152 -0.1 + vertex -16.3508 -37.1428 -0.1 + vertex -16.4249 -36.334 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.7476 -36.1146 -0.1 + vertex -16.3508 -37.1428 -0.1 + vertex -16.5729 -36.2152 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.3508 -37.1428 -0.1 + vertex -16.7476 -36.1146 -0.1 + vertex -16.5023 -37.3844 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.942 -36.0369 -0.1 + vertex -16.5023 -37.3844 -0.1 + vertex -16.7476 -36.1146 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.1493 -35.9869 -0.1 + vertex -16.5023 -37.3844 -0.1 + vertex -16.942 -36.0369 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.5023 -37.3844 -0.1 + vertex -17.1493 -35.9869 -0.1 + vertex -16.6872 -37.6188 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3625 -35.9691 -0.1 + vertex -16.6872 -37.6188 -0.1 + vertex -17.1493 -35.9869 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4702 -35.9608 -0.1 + vertex -16.6872 -37.6188 -0.1 + vertex -17.3625 -35.9691 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.6872 -37.6188 -0.1 + vertex -17.4702 -35.9608 -0.1 + vertex -16.8516 -37.795 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -17.2437 -38.0218 -0.1 + vertex -16.8516 -37.795 -0.1 + vertex -17.4702 -35.9608 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.8516 -37.795 -0.1 + vertex -17.2437 -38.0218 -0.1 + vertex -17.0213 -37.9274 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5664 -38.0841 -0.1 + vertex -17.4702 -35.9608 -0.1 + vertex -17.5603 -35.9348 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4702 -35.9608 -0.1 + vertex -17.5664 -38.0841 -0.1 + vertex -17.2437 -38.0218 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0369 -38.1201 -0.1 + vertex -17.5603 -35.9348 -0.1 + vertex -17.6327 -35.8892 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0369 -38.1201 -0.1 + vertex -17.6327 -35.8892 -0.1 + vertex -17.6869 -35.8223 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0369 -38.1201 -0.1 + vertex -17.6869 -35.8223 -0.1 + vertex -17.7228 -35.7323 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0369 -38.1201 -0.1 + vertex -17.7228 -35.7323 -0.1 + vertex -17.7399 -35.6175 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5603 -35.9348 -0.1 + vertex -18.0369 -38.1201 -0.1 + vertex -17.5664 -38.0841 -0.1 + endloop + endfacet + facet normal -0.362708 -0.931903 0 + outer loop + vertex -12.0792 -19.1571 -0.1 + vertex -11.9023 -19.2259 0 + vertex -12.0792 -19.1571 0 + endloop + endfacet + facet normal -0.362708 -0.931903 -0 + outer loop + vertex -11.9023 -19.2259 0 + vertex -12.0792 -19.1571 -0.1 + vertex -11.9023 -19.2259 -0.1 + endloop + endfacet + facet normal -0.651552 -0.758604 0 + outer loop + vertex -11.9023 -19.2259 -0.1 + vertex -11.7723 -19.3375 0 + vertex -11.9023 -19.2259 0 + endloop + endfacet + facet normal -0.651552 -0.758604 -0 + outer loop + vertex -11.7723 -19.3375 0 + vertex -11.9023 -19.2259 -0.1 + vertex -11.7723 -19.3375 -0.1 + endloop + endfacet + facet normal -0.879356 -0.476164 0 + outer loop + vertex -11.6899 -19.4898 -0.1 + vertex -11.7723 -19.3375 0 + vertex -11.7723 -19.3375 -0.1 + endloop + endfacet + facet normal -0.879356 -0.476164 0 + outer loop + vertex -11.7723 -19.3375 0 + vertex -11.6899 -19.4898 -0.1 + vertex -11.6899 -19.4898 0 + endloop + endfacet + facet normal -0.98435 -0.176224 0 + outer loop + vertex -11.6557 -19.6804 -0.1 + vertex -11.6899 -19.4898 0 + vertex -11.6899 -19.4898 -0.1 + endloop + endfacet + facet normal -0.98435 -0.176224 0 + outer loop + vertex -11.6899 -19.4898 0 + vertex -11.6557 -19.6804 -0.1 + vertex -11.6557 -19.6804 0 + endloop + endfacet + facet normal -0.997828 0.0658663 0 + outer loop + vertex -11.6707 -19.9072 -0.1 + vertex -11.6557 -19.6804 0 + vertex -11.6557 -19.6804 -0.1 + endloop + endfacet + facet normal -0.997828 0.0658663 0 + outer loop + vertex -11.6557 -19.6804 0 + vertex -11.6707 -19.9072 -0.1 + vertex -11.6707 -19.9072 0 + endloop + endfacet + facet normal -0.970423 0.241411 0 + outer loop + vertex -11.7355 -20.1677 -0.1 + vertex -11.6707 -19.9072 0 + vertex -11.6707 -19.9072 -0.1 + endloop + endfacet + facet normal -0.970423 0.241411 0 + outer loop + vertex -11.6707 -19.9072 0 + vertex -11.7355 -20.1677 -0.1 + vertex -11.7355 -20.1677 0 + endloop + endfacet + facet normal -0.930032 0.367479 0 + outer loop + vertex -11.851 -20.4599 -0.1 + vertex -11.7355 -20.1677 0 + vertex -11.7355 -20.1677 -0.1 + endloop + endfacet + facet normal -0.930032 0.367479 0 + outer loop + vertex -11.7355 -20.1677 0 + vertex -11.851 -20.4599 -0.1 + vertex -11.851 -20.4599 0 + endloop + endfacet + facet normal -0.930941 0.365169 0 + outer loop + vertex -12.0288 -20.9134 -0.1 + vertex -11.851 -20.4599 0 + vertex -11.851 -20.4599 -0.1 + endloop + endfacet + facet normal -0.930941 0.365169 0 + outer loop + vertex -11.851 -20.4599 0 + vertex -12.0288 -20.9134 -0.1 + vertex -12.0288 -20.9134 0 + endloop + endfacet + facet normal -0.976329 0.216289 0 + outer loop + vertex -12.0594 -21.0513 -0.1 + vertex -12.0288 -20.9134 0 + vertex -12.0288 -20.9134 -0.1 + endloop + endfacet + facet normal -0.976329 0.216289 0 + outer loop + vertex -12.0288 -20.9134 0 + vertex -12.0594 -21.0513 -0.1 + vertex -12.0594 -21.0513 0 + endloop + endfacet + facet normal -0.998491 -0.0549167 0 + outer loop + vertex -12.0573 -21.0889 -0.1 + vertex -12.0594 -21.0513 0 + vertex -12.0594 -21.0513 -0.1 + endloop + endfacet + facet normal -0.998491 -0.0549167 0 + outer loop + vertex -12.0594 -21.0513 0 + vertex -12.0573 -21.0889 -0.1 + vertex -12.0573 -21.0889 0 + endloop + endfacet + facet normal -0.666017 -0.745937 0 + outer loop + vertex -12.0573 -21.0889 -0.1 + vertex -12.0427 -21.102 0 + vertex -12.0573 -21.0889 0 + endloop + endfacet + facet normal -0.666017 -0.745937 -0 + outer loop + vertex -12.0427 -21.102 0 + vertex -12.0573 -21.0889 -0.1 + vertex -12.0427 -21.102 -0.1 + endloop + endfacet + facet normal 0.407619 -0.913152 0 + outer loop + vertex -12.0427 -21.102 -0.1 + vertex -11.8784 -21.0286 0 + vertex -12.0427 -21.102 0 + endloop + endfacet + facet normal 0.407619 -0.913152 0 + outer loop + vertex -11.8784 -21.0286 0 + vertex -12.0427 -21.102 -0.1 + vertex -11.8784 -21.0286 -0.1 + endloop + endfacet + facet normal 0.473772 -0.880648 0 + outer loop + vertex -11.8784 -21.0286 -0.1 + vertex -11.5073 -20.829 0 + vertex -11.8784 -21.0286 0 + endloop + endfacet + facet normal 0.473772 -0.880648 0 + outer loop + vertex -11.5073 -20.829 0 + vertex -11.8784 -21.0286 -0.1 + vertex -11.5073 -20.829 -0.1 + endloop + endfacet + facet normal 0.498101 -0.867119 0 + outer loop + vertex -11.5073 -20.829 -0.1 + vertex -10.3649 -20.1728 0 + vertex -11.5073 -20.829 0 + endloop + endfacet + facet normal 0.498101 -0.867119 0 + outer loop + vertex -10.3649 -20.1728 0 + vertex -11.5073 -20.829 -0.1 + vertex -10.3649 -20.1728 -0.1 + endloop + endfacet + facet normal 0.501647 -0.865072 0 + outer loop + vertex -10.3649 -20.1728 -0.1 + vertex -9.87453 -19.8884 0 + vertex -10.3649 -20.1728 0 + endloop + endfacet + facet normal 0.501647 -0.865072 0 + outer loop + vertex -9.87453 -19.8884 0 + vertex -10.3649 -20.1728 -0.1 + vertex -9.87453 -19.8884 -0.1 + endloop + endfacet + facet normal 0.475521 -0.879704 0 + outer loop + vertex -9.87453 -19.8884 -0.1 + vertex -9.46489 -19.667 0 + vertex -9.87453 -19.8884 0 + endloop + endfacet + facet normal 0.475521 -0.879704 0 + outer loop + vertex -9.46489 -19.667 0 + vertex -9.87453 -19.8884 -0.1 + vertex -9.46489 -19.667 -0.1 + endloop + endfacet + facet normal 0.423964 -0.905679 0 + outer loop + vertex -9.46489 -19.667 -0.1 + vertex -9.10766 -19.4997 0 + vertex -9.46489 -19.667 0 + endloop + endfacet + facet normal 0.423964 -0.905679 0 + outer loop + vertex -9.10766 -19.4997 0 + vertex -9.46489 -19.667 -0.1 + vertex -9.10766 -19.4997 -0.1 + endloop + endfacet + facet normal 0.343275 -0.939235 0 + outer loop + vertex -9.10766 -19.4997 -0.1 + vertex -8.77447 -19.378 0 + vertex -9.10766 -19.4997 0 + endloop + endfacet + facet normal 0.343275 -0.939235 0 + outer loop + vertex -8.77447 -19.378 0 + vertex -9.10766 -19.4997 -0.1 + vertex -8.77447 -19.378 -0.1 + endloop + endfacet + facet normal 0.244399 -0.969675 0 + outer loop + vertex -8.77447 -19.378 -0.1 + vertex -8.43701 -19.2929 0 + vertex -8.77447 -19.378 0 + endloop + endfacet + facet normal 0.244399 -0.969675 0 + outer loop + vertex -8.43701 -19.2929 0 + vertex -8.77447 -19.378 -0.1 + vertex -8.43701 -19.2929 -0.1 + endloop + endfacet + facet normal 0.152431 -0.988314 0 + outer loop + vertex -8.43701 -19.2929 -0.1 + vertex -8.06691 -19.2358 0 + vertex -8.43701 -19.2929 0 + endloop + endfacet + facet normal 0.152431 -0.988314 0 + outer loop + vertex -8.06691 -19.2358 0 + vertex -8.43701 -19.2929 -0.1 + vertex -8.06691 -19.2358 -0.1 + endloop + endfacet + facet normal 0.0874592 -0.996168 0 + outer loop + vertex -8.06691 -19.2358 -0.1 + vertex -7.63584 -19.198 0 + vertex -8.06691 -19.2358 0 + endloop + endfacet + facet normal 0.0874592 -0.996168 0 + outer loop + vertex -7.63584 -19.198 0 + vertex -8.06691 -19.2358 -0.1 + vertex -7.63584 -19.198 -0.1 + endloop + endfacet + facet normal 0.0524883 -0.998622 0 + outer loop + vertex -7.63584 -19.198 -0.1 + vertex -7.11547 -19.1706 0 + vertex -7.63584 -19.198 0 + endloop + endfacet + facet normal 0.0524883 -0.998622 0 + outer loop + vertex -7.11547 -19.1706 0 + vertex -7.63584 -19.198 -0.1 + vertex -7.11547 -19.1706 -0.1 + endloop + endfacet + facet normal 0.0303019 -0.999541 0 + outer loop + vertex -7.11547 -19.1706 -0.1 + vertex -6.14058 -19.1411 0 + vertex -7.11547 -19.1706 0 + endloop + endfacet + facet normal 0.0303019 -0.999541 0 + outer loop + vertex -6.14058 -19.1411 0 + vertex -7.11547 -19.1706 -0.1 + vertex -6.14058 -19.1411 -0.1 + endloop + endfacet + facet normal -0.0462057 -0.998932 0 + outer loop + vertex -6.14058 -19.1411 -0.1 + vertex -5.8145 -19.1562 0 + vertex -6.14058 -19.1411 0 + endloop + endfacet + facet normal -0.0462057 -0.998932 -0 + outer loop + vertex -5.8145 -19.1562 0 + vertex -6.14058 -19.1411 -0.1 + vertex -5.8145 -19.1562 -0.1 + endloop + endfacet + facet normal -0.173732 -0.984793 0 + outer loop + vertex -5.8145 -19.1562 -0.1 + vertex -5.55901 -19.2012 0 + vertex -5.8145 -19.1562 0 + endloop + endfacet + facet normal -0.173732 -0.984793 -0 + outer loop + vertex -5.55901 -19.2012 0 + vertex -5.8145 -19.1562 -0.1 + vertex -5.55901 -19.2012 -0.1 + endloop + endfacet + facet normal -0.362239 -0.932085 0 + outer loop + vertex -5.55901 -19.2012 -0.1 + vertex -5.34642 -19.2839 0 + vertex -5.55901 -19.2012 0 + endloop + endfacet + facet normal -0.362239 -0.932085 -0 + outer loop + vertex -5.34642 -19.2839 0 + vertex -5.55901 -19.2012 -0.1 + vertex -5.34642 -19.2839 -0.1 + endloop + endfacet + facet normal -0.543204 -0.8396 0 + outer loop + vertex -5.34642 -19.2839 -0.1 + vertex -5.14898 -19.4116 0 + vertex -5.34642 -19.2839 0 + endloop + endfacet + facet normal -0.543204 -0.8396 -0 + outer loop + vertex -5.14898 -19.4116 0 + vertex -5.34642 -19.2839 -0.1 + vertex -5.14898 -19.4116 -0.1 + endloop + endfacet + facet normal -0.651669 -0.758504 0 + outer loop + vertex -5.14898 -19.4116 -0.1 + vertex -4.93899 -19.592 0 + vertex -5.14898 -19.4116 0 + endloop + endfacet + facet normal -0.651669 -0.758504 -0 + outer loop + vertex -4.93899 -19.592 0 + vertex -5.14898 -19.4116 -0.1 + vertex -4.93899 -19.592 -0.1 + endloop + endfacet + facet normal -0.693118 -0.720824 0 + outer loop + vertex -4.93899 -19.592 -0.1 + vertex -4.68872 -19.8327 0 + vertex -4.93899 -19.592 0 + endloop + endfacet + facet normal -0.693118 -0.720824 -0 + outer loop + vertex -4.68872 -19.8327 0 + vertex -4.93899 -19.592 -0.1 + vertex -4.68872 -19.8327 -0.1 + endloop + endfacet + facet normal -0.711815 -0.702367 0 + outer loop + vertex -4.47107 -20.0532 -0.1 + vertex -4.68872 -19.8327 0 + vertex -4.68872 -19.8327 -0.1 + endloop + endfacet + facet normal -0.711815 -0.702367 0 + outer loop + vertex -4.68872 -19.8327 0 + vertex -4.47107 -20.0532 -0.1 + vertex -4.47107 -20.0532 0 + endloop + endfacet + facet normal -0.751184 -0.660092 0 + outer loop + vertex -4.29663 -20.2518 -0.1 + vertex -4.47107 -20.0532 0 + vertex -4.47107 -20.0532 -0.1 + endloop + endfacet + facet normal -0.751184 -0.660092 0 + outer loop + vertex -4.47107 -20.0532 0 + vertex -4.29663 -20.2518 -0.1 + vertex -4.29663 -20.2518 0 + endloop + endfacet + facet normal -0.80931 -0.587382 0 + outer loop + vertex -4.15983 -20.4402 -0.1 + vertex -4.29663 -20.2518 0 + vertex -4.29663 -20.2518 -0.1 + endloop + endfacet + facet normal -0.80931 -0.587382 0 + outer loop + vertex -4.29663 -20.2518 0 + vertex -4.15983 -20.4402 -0.1 + vertex -4.15983 -20.4402 0 + endloop + endfacet + facet normal -0.876288 -0.481787 0 + outer loop + vertex -4.05507 -20.6308 -0.1 + vertex -4.15983 -20.4402 0 + vertex -4.15983 -20.4402 -0.1 + endloop + endfacet + facet normal -0.876288 -0.481787 0 + outer loop + vertex -4.15983 -20.4402 0 + vertex -4.05507 -20.6308 -0.1 + vertex -4.05507 -20.6308 0 + endloop + endfacet + facet normal -0.93397 -0.357351 0 + outer loop + vertex -3.97677 -20.8354 -0.1 + vertex -4.05507 -20.6308 0 + vertex -4.05507 -20.6308 -0.1 + endloop + endfacet + facet normal -0.93397 -0.357351 0 + outer loop + vertex -4.05507 -20.6308 0 + vertex -3.97677 -20.8354 -0.1 + vertex -3.97677 -20.8354 0 + endloop + endfacet + facet normal -0.970412 -0.241456 0 + outer loop + vertex -3.91934 -21.0662 -0.1 + vertex -3.97677 -20.8354 0 + vertex -3.97677 -20.8354 -0.1 + endloop + endfacet + facet normal -0.970412 -0.241456 0 + outer loop + vertex -3.97677 -20.8354 0 + vertex -3.91934 -21.0662 -0.1 + vertex -3.91934 -21.0662 0 + endloop + endfacet + facet normal -0.987949 -0.154777 0 + outer loop + vertex -3.87719 -21.3353 -0.1 + vertex -3.91934 -21.0662 0 + vertex -3.91934 -21.0662 -0.1 + endloop + endfacet + facet normal -0.987949 -0.154777 0 + outer loop + vertex -3.91934 -21.0662 0 + vertex -3.87719 -21.3353 -0.1 + vertex -3.87719 -21.3353 0 + endloop + endfacet + facet normal -0.994874 -0.10112 0 + outer loop + vertex -3.84473 -21.6547 -0.1 + vertex -3.87719 -21.3353 0 + vertex -3.87719 -21.3353 -0.1 + endloop + endfacet + facet normal -0.994874 -0.10112 0 + outer loop + vertex -3.87719 -21.3353 0 + vertex -3.84473 -21.6547 -0.1 + vertex -3.84473 -21.6547 0 + endloop + endfacet + facet normal -0.999588 -0.0286991 0 + outer loop + vertex -3.82849 -22.2203 -0.1 + vertex -3.84473 -21.6547 0 + vertex -3.84473 -21.6547 -0.1 + endloop + endfacet + facet normal -0.999588 -0.0286991 0 + outer loop + vertex -3.84473 -21.6547 0 + vertex -3.82849 -22.2203 -0.1 + vertex -3.82849 -22.2203 0 + endloop + endfacet + facet normal -0.998294 0.058395 0 + outer loop + vertex -3.84589 -22.5177 -0.1 + vertex -3.82849 -22.2203 0 + vertex -3.82849 -22.2203 -0.1 + endloop + endfacet + facet normal -0.998294 0.058395 0 + outer loop + vertex -3.82849 -22.2203 0 + vertex -3.84589 -22.5177 -0.1 + vertex -3.84589 -22.5177 0 + endloop + endfacet + facet normal -0.99329 0.115647 0 + outer loop + vertex -3.88244 -22.8317 -0.1 + vertex -3.84589 -22.5177 0 + vertex -3.84589 -22.5177 -0.1 + endloop + endfacet + facet normal -0.99329 0.115647 0 + outer loop + vertex -3.84589 -22.5177 0 + vertex -3.88244 -22.8317 -0.1 + vertex -3.88244 -22.8317 0 + endloop + endfacet + facet normal -0.985725 0.168361 0 + outer loop + vertex -3.93975 -23.1672 -0.1 + vertex -3.88244 -22.8317 0 + vertex -3.88244 -22.8317 -0.1 + endloop + endfacet + facet normal -0.985725 0.168361 0 + outer loop + vertex -3.88244 -22.8317 0 + vertex -3.93975 -23.1672 -0.1 + vertex -3.93975 -23.1672 0 + endloop + endfacet + facet normal -0.976652 0.214827 0 + outer loop + vertex -4.01943 -23.5295 -0.1 + vertex -3.93975 -23.1672 0 + vertex -3.93975 -23.1672 -0.1 + endloop + endfacet + facet normal -0.976652 0.214827 0 + outer loop + vertex -3.93975 -23.1672 0 + vertex -4.01943 -23.5295 -0.1 + vertex -4.01943 -23.5295 0 + endloop + endfacet + facet normal -0.962379 0.27171 0 + outer loop + vertex -4.25232 -24.3543 -0.1 + vertex -4.01943 -23.5295 0 + vertex -4.01943 -23.5295 -0.1 + endloop + endfacet + facet normal -0.962379 0.27171 0 + outer loop + vertex -4.01943 -23.5295 0 + vertex -4.25232 -24.3543 -0.1 + vertex -4.25232 -24.3543 0 + endloop + endfacet + facet normal -0.945562 0.325441 0 + outer loop + vertex -4.59396 -25.347 -0.1 + vertex -4.25232 -24.3543 0 + vertex -4.25232 -24.3543 -0.1 + endloop + endfacet + facet normal -0.945562 0.325441 0 + outer loop + vertex -4.25232 -24.3543 0 + vertex -4.59396 -25.347 -0.1 + vertex -4.59396 -25.347 0 + endloop + endfacet + facet normal -0.933005 0.359863 0 + outer loop + vertex -5.05721 -26.548 -0.1 + vertex -4.59396 -25.347 0 + vertex -4.59396 -25.347 -0.1 + endloop + endfacet + facet normal -0.933005 0.359863 0 + outer loop + vertex -4.59396 -25.347 0 + vertex -5.05721 -26.548 -0.1 + vertex -5.05721 -26.548 0 + endloop + endfacet + facet normal -0.924544 0.381075 0 + outer loop + vertex -5.65492 -27.9982 -0.1 + vertex -5.05721 -26.548 0 + vertex -5.05721 -26.548 -0.1 + endloop + endfacet + facet normal -0.924544 0.381075 0 + outer loop + vertex -5.05721 -26.548 0 + vertex -5.65492 -27.9982 -0.1 + vertex -5.65492 -27.9982 0 + endloop + endfacet + facet normal -0.919267 0.393635 0 + outer loop + vertex -6.39994 -29.738 -0.1 + vertex -5.65492 -27.9982 0 + vertex -5.65492 -27.9982 -0.1 + endloop + endfacet + facet normal -0.919267 0.393635 0 + outer loop + vertex -5.65492 -27.9982 0 + vertex -6.39994 -29.738 -0.1 + vertex -6.39994 -29.738 0 + endloop + endfacet + facet normal -0.920331 0.391141 0 + outer loop + vertex -7.70823 -32.8163 -0.1 + vertex -6.39994 -29.738 0 + vertex -6.39994 -29.738 -0.1 + endloop + endfacet + facet normal -0.920331 0.391141 0 + outer loop + vertex -6.39994 -29.738 0 + vertex -7.70823 -32.8163 -0.1 + vertex -7.70823 -32.8163 0 + endloop + endfacet + facet normal -0.926406 0.376526 0 + outer loop + vertex -8.13453 -33.8652 -0.1 + vertex -7.70823 -32.8163 0 + vertex -7.70823 -32.8163 -0.1 + endloop + endfacet + facet normal -0.926406 0.376526 0 + outer loop + vertex -7.70823 -32.8163 0 + vertex -8.13453 -33.8652 -0.1 + vertex -8.13453 -33.8652 0 + endloop + endfacet + facet normal -0.938884 0.344234 0 + outer loop + vertex -8.32474 -34.384 -0.1 + vertex -8.13453 -33.8652 0 + vertex -8.13453 -33.8652 -0.1 + endloop + endfacet + facet normal -0.938884 0.344234 0 + outer loop + vertex -8.13453 -33.8652 0 + vertex -8.32474 -34.384 -0.1 + vertex -8.32474 -34.384 0 + endloop + endfacet + facet normal -0.969782 0.243972 0 + outer loop + vertex -8.55649 -35.3052 -0.1 + vertex -8.32474 -34.384 0 + vertex -8.32474 -34.384 -0.1 + endloop + endfacet + facet normal -0.969782 0.243972 0 + outer loop + vertex -8.32474 -34.384 0 + vertex -8.55649 -35.3052 -0.1 + vertex -8.55649 -35.3052 0 + endloop + endfacet + facet normal -0.98411 0.17756 0 + outer loop + vertex -8.57785 -35.4236 -0.1 + vertex -8.55649 -35.3052 0 + vertex -8.55649 -35.3052 -0.1 + endloop + endfacet + facet normal -0.98411 0.17756 0 + outer loop + vertex -8.55649 -35.3052 0 + vertex -8.57785 -35.4236 -0.1 + vertex -8.57785 -35.4236 0 + endloop + endfacet + facet normal -0.999972 -0.00745735 0 + outer loop + vertex -8.57707 -35.529 -0.1 + vertex -8.57785 -35.4236 0 + vertex -8.57785 -35.4236 -0.1 + endloop + endfacet + facet normal -0.999972 -0.00745735 0 + outer loop + vertex -8.57785 -35.4236 0 + vertex -8.57707 -35.529 -0.1 + vertex -8.57707 -35.529 0 + endloop + endfacet + facet normal -0.966564 -0.256425 0 + outer loop + vertex -8.55176 -35.6244 -0.1 + vertex -8.57707 -35.529 0 + vertex -8.57707 -35.529 -0.1 + endloop + endfacet + facet normal -0.966564 -0.256425 0 + outer loop + vertex -8.57707 -35.529 0 + vertex -8.55176 -35.6244 -0.1 + vertex -8.55176 -35.6244 0 + endloop + endfacet + facet normal -0.861289 -0.508115 0 + outer loop + vertex -8.49955 -35.7129 -0.1 + vertex -8.55176 -35.6244 0 + vertex -8.55176 -35.6244 -0.1 + endloop + endfacet + facet normal -0.861289 -0.508115 0 + outer loop + vertex -8.55176 -35.6244 0 + vertex -8.49955 -35.7129 -0.1 + vertex -8.49955 -35.7129 0 + endloop + endfacet + facet normal -0.720516 -0.693438 0 + outer loop + vertex -8.41808 -35.7975 -0.1 + vertex -8.49955 -35.7129 0 + vertex -8.49955 -35.7129 -0.1 + endloop + endfacet + facet normal -0.720516 -0.693438 0 + outer loop + vertex -8.49955 -35.7129 0 + vertex -8.41808 -35.7975 -0.1 + vertex -8.41808 -35.7975 0 + endloop + endfacet + facet normal -0.595759 -0.803164 0 + outer loop + vertex -8.41808 -35.7975 -0.1 + vertex -8.30497 -35.8814 0 + vertex -8.41808 -35.7975 0 + endloop + endfacet + facet normal -0.595759 -0.803164 -0 + outer loop + vertex -8.30497 -35.8814 0 + vertex -8.41808 -35.7975 -0.1 + vertex -8.30497 -35.8814 -0.1 + endloop + endfacet + facet normal -0.473656 -0.88071 0 + outer loop + vertex -8.30497 -35.8814 -0.1 + vertex -7.97432 -36.0592 0 + vertex -8.30497 -35.8814 0 + endloop + endfacet + facet normal -0.473656 -0.88071 -0 + outer loop + vertex -7.97432 -36.0592 0 + vertex -8.30497 -35.8814 -0.1 + vertex -7.97432 -36.0592 -0.1 + endloop + endfacet + facet normal -0.487345 -0.873209 0 + outer loop + vertex -7.97432 -36.0592 -0.1 + vertex -7.70312 -36.2106 0 + vertex -7.97432 -36.0592 0 + endloop + endfacet + facet normal -0.487345 -0.873209 -0 + outer loop + vertex -7.70312 -36.2106 0 + vertex -7.97432 -36.0592 -0.1 + vertex -7.70312 -36.2106 -0.1 + endloop + endfacet + facet normal -0.634834 -0.772648 0 + outer loop + vertex -7.70312 -36.2106 -0.1 + vertex -7.50076 -36.3769 0 + vertex -7.70312 -36.2106 0 + endloop + endfacet + facet normal -0.634834 -0.772648 -0 + outer loop + vertex -7.50076 -36.3769 0 + vertex -7.70312 -36.2106 -0.1 + vertex -7.50076 -36.3769 -0.1 + endloop + endfacet + facet normal -0.80484 -0.593492 0 + outer loop + vertex -7.36727 -36.5579 -0.1 + vertex -7.50076 -36.3769 0 + vertex -7.50076 -36.3769 -0.1 + endloop + endfacet + facet normal -0.80484 -0.593492 0 + outer loop + vertex -7.50076 -36.3769 0 + vertex -7.36727 -36.5579 -0.1 + vertex -7.36727 -36.5579 0 + endloop + endfacet + facet normal -0.919952 -0.39203 0 + outer loop + vertex -7.32635 -36.6539 -0.1 + vertex -7.36727 -36.5579 0 + vertex -7.36727 -36.5579 -0.1 + endloop + endfacet + facet normal -0.919952 -0.39203 0 + outer loop + vertex -7.36727 -36.5579 0 + vertex -7.32635 -36.6539 -0.1 + vertex -7.32635 -36.6539 0 + endloop + endfacet + facet normal -0.972883 -0.231299 0 + outer loop + vertex -7.30266 -36.7536 -0.1 + vertex -7.32635 -36.6539 0 + vertex -7.32635 -36.6539 -0.1 + endloop + endfacet + facet normal -0.972883 -0.231299 0 + outer loop + vertex -7.32635 -36.6539 0 + vertex -7.30266 -36.7536 -0.1 + vertex -7.30266 -36.7536 0 + endloop + endfacet + facet normal -0.998045 -0.0625022 0 + outer loop + vertex -7.29619 -36.8569 -0.1 + vertex -7.30266 -36.7536 0 + vertex -7.30266 -36.7536 -0.1 + endloop + endfacet + facet normal -0.998045 -0.0625022 0 + outer loop + vertex -7.30266 -36.7536 0 + vertex -7.29619 -36.8569 -0.1 + vertex -7.29619 -36.8569 0 + endloop + endfacet + facet normal -0.994972 0.100157 0 + outer loop + vertex -7.30695 -36.9638 -0.1 + vertex -7.29619 -36.8569 0 + vertex -7.29619 -36.8569 -0.1 + endloop + endfacet + facet normal -0.994972 0.100157 0 + outer loop + vertex -7.29619 -36.8569 0 + vertex -7.30695 -36.9638 -0.1 + vertex -7.30695 -36.9638 0 + endloop + endfacet + facet normal -0.950745 0.309974 0 + outer loop + vertex -7.38017 -37.1883 -0.1 + vertex -7.30695 -36.9638 0 + vertex -7.30695 -36.9638 -0.1 + endloop + endfacet + facet normal -0.950745 0.309974 0 + outer loop + vertex -7.30695 -36.9638 0 + vertex -7.38017 -37.1883 -0.1 + vertex -7.38017 -37.1883 0 + endloop + endfacet + facet normal -0.859288 0.511491 0 + outer loop + vertex -7.52232 -37.4271 -0.1 + vertex -7.38017 -37.1883 0 + vertex -7.38017 -37.1883 -0.1 + endloop + endfacet + facet normal -0.859288 0.511491 0 + outer loop + vertex -7.38017 -37.1883 0 + vertex -7.52232 -37.4271 -0.1 + vertex -7.52232 -37.4271 0 + endloop + endfacet + facet normal -0.767721 0.640785 0 + outer loop + vertex -7.73344 -37.6801 -0.1 + vertex -7.52232 -37.4271 0 + vertex -7.52232 -37.4271 -0.1 + endloop + endfacet + facet normal -0.767721 0.640785 0 + outer loop + vertex -7.52232 -37.4271 0 + vertex -7.73344 -37.6801 -0.1 + vertex -7.73344 -37.6801 0 + endloop + endfacet + facet normal -0.693467 0.720489 0 + outer loop + vertex -7.73344 -37.6801 -0.1 + vertex -7.8903 -37.8311 0 + vertex -7.73344 -37.6801 0 + endloop + endfacet + facet normal -0.693467 0.720489 0 + outer loop + vertex -7.8903 -37.8311 0 + vertex -7.73344 -37.6801 -0.1 + vertex -7.8903 -37.8311 -0.1 + endloop + endfacet + facet normal -0.544632 0.838675 0 + outer loop + vertex -7.8903 -37.8311 -0.1 + vertex -8.0676 -37.9462 0 + vertex -7.8903 -37.8311 0 + endloop + endfacet + facet normal -0.544632 0.838675 0 + outer loop + vertex -8.0676 -37.9462 0 + vertex -7.8903 -37.8311 -0.1 + vertex -8.0676 -37.9462 -0.1 + endloop + endfacet + facet normal -0.329452 0.944172 0 + outer loop + vertex -8.0676 -37.9462 -0.1 + vertex -8.30871 -38.0303 0 + vertex -8.0676 -37.9462 0 + endloop + endfacet + facet normal -0.329452 0.944172 0 + outer loop + vertex -8.30871 -38.0303 0 + vertex -8.0676 -37.9462 -0.1 + vertex -8.30871 -38.0303 -0.1 + endloop + endfacet + facet normal -0.164178 0.986431 0 + outer loop + vertex -8.30871 -38.0303 -0.1 + vertex -8.657 -38.0883 0 + vertex -8.30871 -38.0303 0 + endloop + endfacet + facet normal -0.164178 0.986431 0 + outer loop + vertex -8.657 -38.0883 0 + vertex -8.30871 -38.0303 -0.1 + vertex -8.657 -38.0883 -0.1 + endloop + endfacet + facet normal -0.0732736 0.997312 0 + outer loop + vertex -8.657 -38.0883 -0.1 + vertex -9.15585 -38.1249 0 + vertex -8.657 -38.0883 0 + endloop + endfacet + facet normal -0.0732736 0.997312 0 + outer loop + vertex -9.15585 -38.1249 0 + vertex -8.657 -38.0883 -0.1 + vertex -9.15585 -38.1249 -0.1 + endloop + endfacet + facet normal -0.0291211 0.999576 0 + outer loop + vertex -9.15585 -38.1249 -0.1 + vertex -9.84865 -38.1451 0 + vertex -9.15585 -38.1249 0 + endloop + endfacet + facet normal -0.0291211 0.999576 0 + outer loop + vertex -9.84865 -38.1451 0 + vertex -9.15585 -38.1249 -0.1 + vertex -9.84865 -38.1451 -0.1 + endloop + endfacet + facet normal -0.00482502 0.999988 0 + outer loop + vertex -9.84865 -38.1451 -0.1 + vertex -11.9896 -38.1555 0 + vertex -9.84865 -38.1451 0 + endloop + endfacet + facet normal -0.00482502 0.999988 0 + outer loop + vertex -11.9896 -38.1555 0 + vertex -9.84865 -38.1451 -0.1 + vertex -11.9896 -38.1555 -0.1 + endloop + endfacet + facet normal 0.0039213 0.999992 -0 + outer loop + vertex -11.9896 -38.1555 -0.1 + vertex -14.1677 -38.1469 0 + vertex -11.9896 -38.1555 0 + endloop + endfacet + facet normal 0.0039213 0.999992 0 + outer loop + vertex -14.1677 -38.1469 0 + vertex -11.9896 -38.1555 -0.1 + vertex -14.1677 -38.1469 -0.1 + endloop + endfacet + facet normal 0.0274602 0.999623 -0 + outer loop + vertex -14.1677 -38.1469 -0.1 + vertex -14.8486 -38.1282 0 + vertex -14.1677 -38.1469 0 + endloop + endfacet + facet normal 0.0274602 0.999623 0 + outer loop + vertex -14.8486 -38.1282 0 + vertex -14.1677 -38.1469 -0.1 + vertex -14.8486 -38.1282 -0.1 + endloop + endfacet + facet normal 0.0756421 0.997135 -0 + outer loop + vertex -14.8486 -38.1282 -0.1 + vertex -15.316 -38.0928 0 + vertex -14.8486 -38.1282 0 + endloop + endfacet + facet normal 0.0756421 0.997135 0 + outer loop + vertex -15.316 -38.0928 0 + vertex -14.8486 -38.1282 -0.1 + vertex -15.316 -38.0928 -0.1 + endloop + endfacet + facet normal 0.189644 0.981853 -0 + outer loop + vertex -15.316 -38.0928 -0.1 + vertex -15.614 -38.0352 0 + vertex -15.316 -38.0928 0 + endloop + endfacet + facet normal 0.189644 0.981853 0 + outer loop + vertex -15.614 -38.0352 0 + vertex -15.316 -38.0928 -0.1 + vertex -15.614 -38.0352 -0.1 + endloop + endfacet + facet normal 0.363705 0.931514 -0 + outer loop + vertex -15.614 -38.0352 -0.1 + vertex -15.7132 -37.9965 0 + vertex -15.614 -38.0352 0 + endloop + endfacet + facet normal 0.363705 0.931514 0 + outer loop + vertex -15.7132 -37.9965 0 + vertex -15.614 -38.0352 -0.1 + vertex -15.7132 -37.9965 -0.1 + endloop + endfacet + facet normal 0.533432 0.845843 -0 + outer loop + vertex -15.7132 -37.9965 -0.1 + vertex -15.7865 -37.9502 0 + vertex -15.7132 -37.9965 0 + endloop + endfacet + facet normal 0.533432 0.845843 0 + outer loop + vertex -15.7865 -37.9502 0 + vertex -15.7132 -37.9965 -0.1 + vertex -15.7865 -37.9502 -0.1 + endloop + endfacet + facet normal 0.71659 0.697495 0 + outer loop + vertex -15.7865 -37.9502 0 + vertex -15.8396 -37.8957 -0.1 + vertex -15.8396 -37.8957 0 + endloop + endfacet + facet normal 0.71659 0.697495 0 + outer loop + vertex -15.8396 -37.8957 -0.1 + vertex -15.7865 -37.9502 0 + vertex -15.7865 -37.9502 -0.1 + endloop + endfacet + facet normal 0.856476 0.516186 0 + outer loop + vertex -15.8396 -37.8957 0 + vertex -15.8777 -37.8324 -0.1 + vertex -15.8777 -37.8324 0 + endloop + endfacet + facet normal 0.856476 0.516186 0 + outer loop + vertex -15.8777 -37.8324 -0.1 + vertex -15.8396 -37.8957 0 + vertex -15.8396 -37.8957 -0.1 + endloop + endfacet + facet normal 0.945292 0.326225 0 + outer loop + vertex -15.8777 -37.8324 0 + vertex -15.9316 -37.6764 -0.1 + vertex -15.9316 -37.6764 0 + endloop + endfacet + facet normal 0.945292 0.326225 0 + outer loop + vertex -15.9316 -37.6764 -0.1 + vertex -15.8777 -37.8324 0 + vertex -15.8777 -37.8324 -0.1 + endloop + endfacet + facet normal 0.977576 0.210582 0 + outer loop + vertex -15.9316 -37.6764 0 + vertex -15.9604 -37.5428 -0.1 + vertex -15.9604 -37.5428 0 + endloop + endfacet + facet normal 0.977576 0.210582 0 + outer loop + vertex -15.9604 -37.5428 -0.1 + vertex -15.9316 -37.6764 0 + vertex -15.9316 -37.6764 -0.1 + endloop + endfacet + facet normal 0.998424 0.0561231 0 + outer loop + vertex -15.9604 -37.5428 0 + vertex -15.9675 -37.4163 -0.1 + vertex -15.9675 -37.4163 0 + endloop + endfacet + facet normal 0.998424 0.0561231 0 + outer loop + vertex -15.9675 -37.4163 -0.1 + vertex -15.9604 -37.5428 0 + vertex -15.9604 -37.5428 -0.1 + endloop + endfacet + facet normal 0.991334 -0.131364 0 + outer loop + vertex -15.9675 -37.4163 0 + vertex -15.9511 -37.293 -0.1 + vertex -15.9511 -37.293 0 + endloop + endfacet + facet normal 0.991334 -0.131364 0 + outer loop + vertex -15.9511 -37.293 -0.1 + vertex -15.9675 -37.4163 0 + vertex -15.9675 -37.4163 -0.1 + endloop + endfacet + facet normal 0.94832 -0.317316 0 + outer loop + vertex -15.9511 -37.293 0 + vertex -15.9096 -37.1689 -0.1 + vertex -15.9096 -37.1689 0 + endloop + endfacet + facet normal 0.94832 -0.317316 0 + outer loop + vertex -15.9096 -37.1689 -0.1 + vertex -15.9511 -37.293 0 + vertex -15.9511 -37.293 -0.1 + endloop + endfacet + facet normal 0.883259 -0.468885 0 + outer loop + vertex -15.9096 -37.1689 0 + vertex -15.8411 -37.0399 -0.1 + vertex -15.8411 -37.0399 0 + endloop + endfacet + facet normal 0.883259 -0.468885 0 + outer loop + vertex -15.8411 -37.0399 -0.1 + vertex -15.9096 -37.1689 0 + vertex -15.9096 -37.1689 -0.1 + endloop + endfacet + facet normal 0.817454 -0.575994 0 + outer loop + vertex -15.8411 -37.0399 0 + vertex -15.7439 -36.902 -0.1 + vertex -15.7439 -36.902 0 + endloop + endfacet + facet normal 0.817454 -0.575994 0 + outer loop + vertex -15.7439 -36.902 -0.1 + vertex -15.8411 -37.0399 0 + vertex -15.8411 -37.0399 -0.1 + endloop + endfacet + facet normal 0.742584 -0.669753 0 + outer loop + vertex -15.7439 -36.902 0 + vertex -15.4564 -36.5832 -0.1 + vertex -15.4564 -36.5832 0 + endloop + endfacet + facet normal 0.742584 -0.669753 0 + outer loop + vertex -15.4564 -36.5832 -0.1 + vertex -15.7439 -36.902 0 + vertex -15.7439 -36.902 -0.1 + endloop + endfacet + facet normal 0.654929 -0.755691 0 + outer loop + vertex -15.4564 -36.5832 -0.1 + vertex -15.1813 -36.3448 0 + vertex -15.4564 -36.5832 0 + endloop + endfacet + facet normal 0.654929 -0.755691 0 + outer loop + vertex -15.1813 -36.3448 0 + vertex -15.4564 -36.5832 -0.1 + vertex -15.1813 -36.3448 -0.1 + endloop + endfacet + facet normal 0.547883 -0.836555 0 + outer loop + vertex -15.1813 -36.3448 -0.1 + vertex -14.8831 -36.1495 0 + vertex -15.1813 -36.3448 0 + endloop + endfacet + facet normal 0.547883 -0.836555 0 + outer loop + vertex -14.8831 -36.1495 0 + vertex -15.1813 -36.3448 -0.1 + vertex -14.8831 -36.1495 -0.1 + endloop + endfacet + facet normal 0.419801 -0.907616 0 + outer loop + vertex -14.8831 -36.1495 -0.1 + vertex -14.5979 -36.0176 0 + vertex -14.8831 -36.1495 0 + endloop + endfacet + facet normal 0.419801 -0.907616 0 + outer loop + vertex -14.5979 -36.0176 0 + vertex -14.8831 -36.1495 -0.1 + vertex -14.5979 -36.0176 -0.1 + endloop + endfacet + facet normal 0.273076 -0.961992 0 + outer loop + vertex -14.5979 -36.0176 -0.1 + vertex -14.4713 -35.9816 0 + vertex -14.5979 -36.0176 0 + endloop + endfacet + facet normal 0.273076 -0.961992 0 + outer loop + vertex -14.4713 -35.9816 0 + vertex -14.5979 -36.0176 -0.1 + vertex -14.4713 -35.9816 -0.1 + endloop + endfacet + facet normal 0.113362 -0.993554 0 + outer loop + vertex -14.4713 -35.9816 -0.1 + vertex -14.3614 -35.9691 0 + vertex -14.4713 -35.9816 0 + endloop + endfacet + facet normal 0.113362 -0.993554 0 + outer loop + vertex -14.3614 -35.9691 0 + vertex -14.4713 -35.9816 -0.1 + vertex -14.3614 -35.9691 -0.1 + endloop + endfacet + facet normal 0.0894161 -0.995994 0 + outer loop + vertex -14.3614 -35.9691 -0.1 + vertex -14.1999 -35.9546 0 + vertex -14.3614 -35.9691 0 + endloop + endfacet + facet normal 0.0894161 -0.995994 0 + outer loop + vertex -14.1999 -35.9546 0 + vertex -14.3614 -35.9691 -0.1 + vertex -14.1999 -35.9546 -0.1 + endloop + endfacet + facet normal 0.259204 -0.965823 0 + outer loop + vertex -14.1999 -35.9546 -0.1 + vertex -14.0373 -35.911 0 + vertex -14.1999 -35.9546 0 + endloop + endfacet + facet normal 0.259204 -0.965823 0 + outer loop + vertex -14.0373 -35.911 0 + vertex -14.1999 -35.9546 -0.1 + vertex -14.0373 -35.911 -0.1 + endloop + endfacet + facet normal 0.406893 -0.913476 0 + outer loop + vertex -14.0373 -35.911 -0.1 + vertex -13.8736 -35.838 0 + vertex -14.0373 -35.911 0 + endloop + endfacet + facet normal 0.406893 -0.913476 0 + outer loop + vertex -13.8736 -35.838 0 + vertex -14.0373 -35.911 -0.1 + vertex -13.8736 -35.838 -0.1 + endloop + endfacet + facet normal 0.527319 -0.849667 0 + outer loop + vertex -13.8736 -35.838 -0.1 + vertex -13.7085 -35.7356 0 + vertex -13.8736 -35.838 0 + endloop + endfacet + facet normal 0.527319 -0.849667 0 + outer loop + vertex -13.7085 -35.7356 0 + vertex -13.8736 -35.838 -0.1 + vertex -13.7085 -35.7356 -0.1 + endloop + endfacet + facet normal 0.621601 -0.783334 0 + outer loop + vertex -13.7085 -35.7356 -0.1 + vertex -13.5421 -35.6036 0 + vertex -13.7085 -35.7356 0 + endloop + endfacet + facet normal 0.621601 -0.783334 0 + outer loop + vertex -13.5421 -35.6036 0 + vertex -13.7085 -35.7356 -0.1 + vertex -13.5421 -35.6036 -0.1 + endloop + endfacet + facet normal 0.693973 -0.720001 0 + outer loop + vertex -13.5421 -35.6036 -0.1 + vertex -13.3741 -35.4417 0 + vertex -13.5421 -35.6036 0 + endloop + endfacet + facet normal 0.693973 -0.720001 0 + outer loop + vertex -13.3741 -35.4417 0 + vertex -13.5421 -35.6036 -0.1 + vertex -13.3741 -35.4417 -0.1 + endloop + endfacet + facet normal 0.74925 -0.662287 0 + outer loop + vertex -13.3741 -35.4417 0 + vertex -13.2045 -35.2497 -0.1 + vertex -13.2045 -35.2497 0 + endloop + endfacet + facet normal 0.74925 -0.662287 0 + outer loop + vertex -13.2045 -35.2497 -0.1 + vertex -13.3741 -35.4417 0 + vertex -13.3741 -35.4417 -0.1 + endloop + endfacet + facet normal 0.791599 -0.611041 0 + outer loop + vertex -13.2045 -35.2497 0 + vertex -13.0331 -35.0276 -0.1 + vertex -13.0331 -35.0276 0 + endloop + endfacet + facet normal 0.791599 -0.611041 0 + outer loop + vertex -13.0331 -35.0276 -0.1 + vertex -13.2045 -35.2497 0 + vertex -13.2045 -35.2497 -0.1 + endloop + endfacet + facet normal 0.837921 -0.545792 0 + outer loop + vertex -13.0331 -35.0276 0 + vertex -12.6843 -34.4922 -0.1 + vertex -12.6843 -34.4922 0 + endloop + endfacet + facet normal 0.837921 -0.545792 0 + outer loop + vertex -12.6843 -34.4922 -0.1 + vertex -13.0331 -35.0276 0 + vertex -13.0331 -35.0276 -0.1 + endloop + endfacet + facet normal 0.878782 -0.477224 0 + outer loop + vertex -12.6843 -34.4922 0 + vertex -12.3268 -33.8339 -0.1 + vertex -12.3268 -33.8339 0 + endloop + endfacet + facet normal 0.878782 -0.477224 0 + outer loop + vertex -12.3268 -33.8339 -0.1 + vertex -12.6843 -34.4922 0 + vertex -12.6843 -34.4922 -0.1 + endloop + endfacet + facet normal 0.905274 -0.424829 0 + outer loop + vertex -12.3268 -33.8339 0 + vertex -11.9595 -33.0513 -0.1 + vertex -11.9595 -33.0513 0 + endloop + endfacet + facet normal 0.905274 -0.424829 0 + outer loop + vertex -11.9595 -33.0513 -0.1 + vertex -12.3268 -33.8339 0 + vertex -12.3268 -33.8339 -0.1 + endloop + endfacet + facet normal 0.923227 -0.384256 0 + outer loop + vertex -11.9595 -33.0513 0 + vertex -11.5815 -32.143 -0.1 + vertex -11.5815 -32.143 0 + endloop + endfacet + facet normal 0.923227 -0.384256 0 + outer loop + vertex -11.5815 -32.143 -0.1 + vertex -11.9595 -33.0513 0 + vertex -11.9595 -33.0513 -0.1 + endloop + endfacet + facet normal 0.927789 -0.373105 0 + outer loop + vertex -11.5815 -32.143 0 + vertex -9.5401 -27.0667 -0.1 + vertex -9.5401 -27.0667 0 + endloop + endfacet + facet normal 0.927789 -0.373105 0 + outer loop + vertex -9.5401 -27.0667 -0.1 + vertex -11.5815 -32.143 0 + vertex -11.5815 -32.143 -0.1 + endloop + endfacet + facet normal 0.931122 -0.364709 0 + outer loop + vertex -9.5401 -27.0667 0 + vertex -9.05502 -25.8283 -0.1 + vertex -9.05502 -25.8283 0 + endloop + endfacet + facet normal 0.931122 -0.364709 0 + outer loop + vertex -9.05502 -25.8283 -0.1 + vertex -9.5401 -27.0667 0 + vertex -9.5401 -27.0667 -0.1 + endloop + endfacet + facet normal 0.946626 -0.322334 0 + outer loop + vertex -9.05502 -25.8283 0 + vertex -8.71232 -24.8218 -0.1 + vertex -8.71232 -24.8218 0 + endloop + endfacet + facet normal 0.946626 -0.322334 0 + outer loop + vertex -8.71232 -24.8218 -0.1 + vertex -9.05502 -25.8283 0 + vertex -9.05502 -25.8283 -0.1 + endloop + endfacet + facet normal 0.963249 -0.26861 0 + outer loop + vertex -8.71232 -24.8218 0 + vertex -8.59455 -24.3995 -0.1 + vertex -8.59455 -24.3995 0 + endloop + endfacet + facet normal 0.963249 -0.26861 0 + outer loop + vertex -8.59455 -24.3995 -0.1 + vertex -8.71232 -24.8218 0 + vertex -8.71232 -24.8218 -0.1 + endloop + endfacet + facet normal 0.976543 -0.215323 0 + outer loop + vertex -8.59455 -24.3995 0 + vertex -8.51259 -24.0278 -0.1 + vertex -8.51259 -24.0278 0 + endloop + endfacet + facet normal 0.976543 -0.215323 0 + outer loop + vertex -8.51259 -24.0278 -0.1 + vertex -8.59455 -24.3995 0 + vertex -8.59455 -24.3995 -0.1 + endloop + endfacet + facet normal 0.990015 -0.140965 0 + outer loop + vertex -8.51259 -24.0278 0 + vertex -8.46654 -23.7044 -0.1 + vertex -8.46654 -23.7044 0 + endloop + endfacet + facet normal 0.990015 -0.140965 0 + outer loop + vertex -8.46654 -23.7044 -0.1 + vertex -8.51259 -24.0278 0 + vertex -8.51259 -24.0278 -0.1 + endloop + endfacet + facet normal 0.999341 -0.0362924 0 + outer loop + vertex -8.46654 -23.7044 0 + vertex -8.45645 -23.4267 -0.1 + vertex -8.45645 -23.4267 0 + endloop + endfacet + facet normal 0.999341 -0.0362924 0 + outer loop + vertex -8.45645 -23.4267 -0.1 + vertex -8.46654 -23.7044 0 + vertex -8.46654 -23.7044 -0.1 + endloop + endfacet + facet normal 0.993917 0.110127 0 + outer loop + vertex -8.45645 -23.4267 0 + vertex -8.48242 -23.1923 -0.1 + vertex -8.48242 -23.1923 0 + endloop + endfacet + facet normal 0.993917 0.110127 0 + outer loop + vertex -8.48242 -23.1923 -0.1 + vertex -8.45645 -23.4267 0 + vertex -8.45645 -23.4267 -0.1 + endloop + endfacet + facet normal 0.952162 0.305593 0 + outer loop + vertex -8.48242 -23.1923 0 + vertex -8.54451 -22.9989 -0.1 + vertex -8.54451 -22.9989 0 + endloop + endfacet + facet normal 0.952162 0.305593 0 + outer loop + vertex -8.54451 -22.9989 -0.1 + vertex -8.48242 -23.1923 0 + vertex -8.48242 -23.1923 -0.1 + endloop + endfacet + facet normal 0.844525 0.535516 0 + outer loop + vertex -8.54451 -22.9989 0 + vertex -8.64279 -22.8439 -0.1 + vertex -8.64279 -22.8439 0 + endloop + endfacet + facet normal 0.844525 0.535516 0 + outer loop + vertex -8.64279 -22.8439 -0.1 + vertex -8.54451 -22.9989 0 + vertex -8.54451 -22.9989 -0.1 + endloop + endfacet + facet normal 0.662463 0.749095 -0 + outer loop + vertex -8.64279 -22.8439 -0.1 + vertex -8.77736 -22.7249 0 + vertex -8.64279 -22.8439 0 + endloop + endfacet + facet normal 0.662463 0.749095 0 + outer loop + vertex -8.77736 -22.7249 0 + vertex -8.64279 -22.8439 -0.1 + vertex -8.77736 -22.7249 -0.1 + endloop + endfacet + facet normal 0.447148 0.89446 -0 + outer loop + vertex -8.77736 -22.7249 -0.1 + vertex -8.94827 -22.6394 0 + vertex -8.77736 -22.7249 0 + endloop + endfacet + facet normal 0.447148 0.89446 0 + outer loop + vertex -8.94827 -22.6394 0 + vertex -8.77736 -22.7249 -0.1 + vertex -8.94827 -22.6394 -0.1 + endloop + endfacet + facet normal 0.253452 0.967348 -0 + outer loop + vertex -8.94827 -22.6394 -0.1 + vertex -9.15561 -22.5851 0 + vertex -8.94827 -22.6394 0 + endloop + endfacet + facet normal 0.253452 0.967348 0 + outer loop + vertex -9.15561 -22.5851 0 + vertex -8.94827 -22.6394 -0.1 + vertex -9.15561 -22.5851 -0.1 + endloop + endfacet + facet normal 0.104613 0.994513 -0 + outer loop + vertex -9.15561 -22.5851 -0.1 + vertex -9.39946 -22.5595 0 + vertex -9.15561 -22.5851 0 + endloop + endfacet + facet normal 0.104613 0.994513 0 + outer loop + vertex -9.39946 -22.5595 0 + vertex -9.15561 -22.5851 -0.1 + vertex -9.39946 -22.5595 -0.1 + endloop + endfacet + facet normal -0.0020677 0.999998 0 + outer loop + vertex -9.39946 -22.5595 -0.1 + vertex -9.67988 -22.56 0 + vertex -9.39946 -22.5595 0 + endloop + endfacet + facet normal -0.0020677 0.999998 0 + outer loop + vertex -9.67988 -22.56 0 + vertex -9.39946 -22.5595 -0.1 + vertex -9.67988 -22.56 -0.1 + endloop + endfacet + facet normal -0.129535 0.991575 0 + outer loop + vertex -9.67988 -22.56 -0.1 + vertex -10.0796 -22.6123 0 + vertex -9.67988 -22.56 0 + endloop + endfacet + facet normal -0.129535 0.991575 0 + outer loop + vertex -10.0796 -22.6123 0 + vertex -9.67988 -22.56 -0.1 + vertex -10.0796 -22.6123 -0.1 + endloop + endfacet + facet normal -0.24491 0.969546 0 + outer loop + vertex -10.0796 -22.6123 -0.1 + vertex -10.5344 -22.7271 0 + vertex -10.0796 -22.6123 0 + endloop + endfacet + facet normal -0.24491 0.969546 0 + outer loop + vertex -10.5344 -22.7271 0 + vertex -10.0796 -22.6123 -0.1 + vertex -10.5344 -22.7271 -0.1 + endloop + endfacet + facet normal -0.333557 0.94273 0 + outer loop + vertex -10.5344 -22.7271 -0.1 + vertex -10.9881 -22.8877 0 + vertex -10.5344 -22.7271 0 + endloop + endfacet + facet normal -0.333557 0.94273 0 + outer loop + vertex -10.9881 -22.8877 0 + vertex -10.5344 -22.7271 -0.1 + vertex -10.9881 -22.8877 -0.1 + endloop + endfacet + facet normal -0.430494 0.902594 0 + outer loop + vertex -10.9881 -22.8877 -0.1 + vertex -11.3849 -23.0769 0 + vertex -10.9881 -22.8877 0 + endloop + endfacet + facet normal -0.430494 0.902594 0 + outer loop + vertex -11.3849 -23.0769 0 + vertex -10.9881 -22.8877 -0.1 + vertex -11.3849 -23.0769 -0.1 + endloop + endfacet + facet normal -0.511004 0.859578 0 + outer loop + vertex -11.3849 -23.0769 -0.1 + vertex -11.9359 -23.4045 0 + vertex -11.3849 -23.0769 0 + endloop + endfacet + facet normal -0.511004 0.859578 0 + outer loop + vertex -11.9359 -23.4045 0 + vertex -11.3849 -23.0769 -0.1 + vertex -11.9359 -23.4045 -0.1 + endloop + endfacet + facet normal -0.561997 0.827139 0 + outer loop + vertex -11.9359 -23.4045 -0.1 + vertex -12.4007 -23.7203 0 + vertex -11.9359 -23.4045 0 + endloop + endfacet + facet normal -0.561997 0.827139 0 + outer loop + vertex -12.4007 -23.7203 0 + vertex -11.9359 -23.4045 -0.1 + vertex -12.4007 -23.7203 -0.1 + endloop + endfacet + facet normal -0.632295 0.774728 0 + outer loop + vertex -12.4007 -23.7203 -0.1 + vertex -12.7941 -24.0414 0 + vertex -12.4007 -23.7203 0 + endloop + endfacet + facet normal -0.632295 0.774728 0 + outer loop + vertex -12.7941 -24.0414 0 + vertex -12.4007 -23.7203 -0.1 + vertex -12.7941 -24.0414 -0.1 + endloop + endfacet + facet normal -0.713871 0.700277 0 + outer loop + vertex -13.131 -24.3848 -0.1 + vertex -12.7941 -24.0414 0 + vertex -12.7941 -24.0414 -0.1 + endloop + endfacet + facet normal -0.713871 0.700277 0 + outer loop + vertex -12.7941 -24.0414 0 + vertex -13.131 -24.3848 -0.1 + vertex -13.131 -24.3848 0 + endloop + endfacet + facet normal -0.791901 0.61065 0 + outer loop + vertex -13.4262 -24.7676 -0.1 + vertex -13.131 -24.3848 0 + vertex -13.131 -24.3848 -0.1 + endloop + endfacet + facet normal -0.791901 0.61065 0 + outer loop + vertex -13.131 -24.3848 0 + vertex -13.4262 -24.7676 -0.1 + vertex -13.4262 -24.7676 0 + endloop + endfacet + facet normal -0.853364 0.521315 0 + outer loop + vertex -13.6945 -25.2068 -0.1 + vertex -13.4262 -24.7676 0 + vertex -13.4262 -24.7676 -0.1 + endloop + endfacet + facet normal -0.853364 0.521315 0 + outer loop + vertex -13.4262 -24.7676 0 + vertex -13.6945 -25.2068 -0.1 + vertex -13.6945 -25.2068 0 + endloop + endfacet + facet normal -0.894467 0.447134 0 + outer loop + vertex -13.9508 -25.7195 -0.1 + vertex -13.6945 -25.2068 0 + vertex -13.6945 -25.2068 -0.1 + endloop + endfacet + facet normal -0.894467 0.447134 0 + outer loop + vertex -13.6945 -25.2068 0 + vertex -13.9508 -25.7195 -0.1 + vertex -13.9508 -25.7195 0 + endloop + endfacet + facet normal -0.918824 0.394667 0 + outer loop + vertex -14.2098 -26.3227 -0.1 + vertex -13.9508 -25.7195 0 + vertex -13.9508 -25.7195 -0.1 + endloop + endfacet + facet normal -0.918824 0.394667 0 + outer loop + vertex -13.9508 -25.7195 0 + vertex -14.2098 -26.3227 -0.1 + vertex -14.2098 -26.3227 0 + endloop + endfacet + facet normal -0.926196 0.377042 0 + outer loop + vertex -15.3777 -29.1914 -0.1 + vertex -14.2098 -26.3227 0 + vertex -14.2098 -26.3227 -0.1 + endloop + endfacet + facet normal -0.926196 0.377042 0 + outer loop + vertex -14.2098 -26.3227 0 + vertex -15.3777 -29.1914 -0.1 + vertex -15.3777 -29.1914 0 + endloop + endfacet + facet normal -0.925675 0.37832 0 + outer loop + vertex -16.8163 -32.7116 -0.1 + vertex -15.3777 -29.1914 0 + vertex -15.3777 -29.1914 -0.1 + endloop + endfacet + facet normal -0.925675 0.37832 0 + outer loop + vertex -15.3777 -29.1914 0 + vertex -16.8163 -32.7116 -0.1 + vertex -16.8163 -32.7116 0 + endloop + endfacet + facet normal -0.928735 0.370745 0 + outer loop + vertex -17.1674 -33.591 -0.1 + vertex -16.8163 -32.7116 0 + vertex -16.8163 -32.7116 -0.1 + endloop + endfacet + facet normal -0.928735 0.370745 0 + outer loop + vertex -16.8163 -32.7116 0 + vertex -17.1674 -33.591 -0.1 + vertex -17.1674 -33.591 0 + endloop + endfacet + facet normal -0.937631 0.347632 0 + outer loop + vertex -17.4329 -34.3072 -0.1 + vertex -17.1674 -33.591 0 + vertex -17.1674 -33.591 -0.1 + endloop + endfacet + facet normal -0.937631 0.347632 0 + outer loop + vertex -17.1674 -33.591 0 + vertex -17.4329 -34.3072 -0.1 + vertex -17.4329 -34.3072 0 + endloop + endfacet + facet normal -0.951989 0.306132 0 + outer loop + vertex -17.6153 -34.8741 -0.1 + vertex -17.4329 -34.3072 0 + vertex -17.4329 -34.3072 -0.1 + endloop + endfacet + facet normal -0.951989 0.306132 0 + outer loop + vertex -17.4329 -34.3072 0 + vertex -17.6153 -34.8741 -0.1 + vertex -17.6153 -34.8741 0 + endloop + endfacet + facet normal -0.973485 0.228749 0 + outer loop + vertex -17.7168 -35.3062 -0.1 + vertex -17.6153 -34.8741 0 + vertex -17.6153 -34.8741 -0.1 + endloop + endfacet + facet normal -0.973485 0.228749 0 + outer loop + vertex -17.6153 -34.8741 0 + vertex -17.7168 -35.3062 -0.1 + vertex -17.7168 -35.3062 0 + endloop + endfacet + facet normal -0.992299 0.123865 0 + outer loop + vertex -17.738 -35.4761 -0.1 + vertex -17.7168 -35.3062 0 + vertex -17.7168 -35.3062 -0.1 + endloop + endfacet + facet normal -0.992299 0.123865 0 + outer loop + vertex -17.7168 -35.3062 0 + vertex -17.738 -35.4761 -0.1 + vertex -17.738 -35.4761 0 + endloop + endfacet + facet normal -0.99991 0.0134015 0 + outer loop + vertex -17.7399 -35.6175 -0.1 + vertex -17.738 -35.4761 0 + vertex -17.738 -35.4761 -0.1 + endloop + endfacet + facet normal -0.99991 0.0134015 0 + outer loop + vertex -17.738 -35.4761 0 + vertex -17.7399 -35.6175 -0.1 + vertex -17.7399 -35.6175 0 + endloop + endfacet + facet normal -0.989073 -0.147424 0 + outer loop + vertex -17.7228 -35.7323 -0.1 + vertex -17.7399 -35.6175 0 + vertex -17.7399 -35.6175 -0.1 + endloop + endfacet + facet normal -0.989073 -0.147424 0 + outer loop + vertex -17.7399 -35.6175 0 + vertex -17.7228 -35.7323 -0.1 + vertex -17.7228 -35.7323 0 + endloop + endfacet + facet normal -0.929053 -0.369947 0 + outer loop + vertex -17.6869 -35.8223 -0.1 + vertex -17.7228 -35.7323 0 + vertex -17.7228 -35.7323 -0.1 + endloop + endfacet + facet normal -0.929053 -0.369947 0 + outer loop + vertex -17.7228 -35.7323 0 + vertex -17.6869 -35.8223 -0.1 + vertex -17.6869 -35.8223 0 + endloop + endfacet + facet normal -0.776679 -0.629897 0 + outer loop + vertex -17.6327 -35.8892 -0.1 + vertex -17.6869 -35.8223 0 + vertex -17.6869 -35.8223 -0.1 + endloop + endfacet + facet normal -0.776679 -0.629897 0 + outer loop + vertex -17.6869 -35.8223 0 + vertex -17.6327 -35.8892 -0.1 + vertex -17.6327 -35.8892 0 + endloop + endfacet + facet normal -0.532937 -0.846155 0 + outer loop + vertex -17.6327 -35.8892 -0.1 + vertex -17.5603 -35.9348 0 + vertex -17.6327 -35.8892 0 + endloop + endfacet + facet normal -0.532937 -0.846155 -0 + outer loop + vertex -17.5603 -35.9348 0 + vertex -17.6327 -35.8892 -0.1 + vertex -17.5603 -35.9348 -0.1 + endloop + endfacet + facet normal -0.277484 -0.96073 0 + outer loop + vertex -17.5603 -35.9348 -0.1 + vertex -17.4702 -35.9608 0 + vertex -17.5603 -35.9348 0 + endloop + endfacet + facet normal -0.277484 -0.96073 -0 + outer loop + vertex -17.4702 -35.9608 0 + vertex -17.5603 -35.9348 -0.1 + vertex -17.4702 -35.9608 -0.1 + endloop + endfacet + facet normal -0.0767033 -0.997054 0 + outer loop + vertex -17.4702 -35.9608 -0.1 + vertex -17.3625 -35.9691 0 + vertex -17.4702 -35.9608 0 + endloop + endfacet + facet normal -0.0767033 -0.997054 -0 + outer loop + vertex -17.3625 -35.9691 0 + vertex -17.4702 -35.9608 -0.1 + vertex -17.3625 -35.9691 -0.1 + endloop + endfacet + facet normal -0.0829709 -0.996552 0 + outer loop + vertex -17.3625 -35.9691 -0.1 + vertex -17.1493 -35.9869 0 + vertex -17.3625 -35.9691 0 + endloop + endfacet + facet normal -0.0829709 -0.996552 -0 + outer loop + vertex -17.1493 -35.9869 0 + vertex -17.3625 -35.9691 -0.1 + vertex -17.1493 -35.9869 -0.1 + endloop + endfacet + facet normal -0.234852 -0.972031 0 + outer loop + vertex -17.1493 -35.9869 -0.1 + vertex -16.942 -36.0369 0 + vertex -17.1493 -35.9869 0 + endloop + endfacet + facet normal -0.234852 -0.972031 -0 + outer loop + vertex -16.942 -36.0369 0 + vertex -17.1493 -35.9869 -0.1 + vertex -16.942 -36.0369 -0.1 + endloop + endfacet + facet normal -0.371048 -0.928614 0 + outer loop + vertex -16.942 -36.0369 -0.1 + vertex -16.7476 -36.1146 0 + vertex -16.942 -36.0369 0 + endloop + endfacet + facet normal -0.371048 -0.928614 -0 + outer loop + vertex -16.7476 -36.1146 0 + vertex -16.942 -36.0369 -0.1 + vertex -16.7476 -36.1146 -0.1 + endloop + endfacet + facet normal -0.499006 -0.866599 0 + outer loop + vertex -16.7476 -36.1146 -0.1 + vertex -16.5729 -36.2152 0 + vertex -16.7476 -36.1146 0 + endloop + endfacet + facet normal -0.499006 -0.866599 -0 + outer loop + vertex -16.5729 -36.2152 0 + vertex -16.7476 -36.1146 -0.1 + vertex -16.5729 -36.2152 -0.1 + endloop + endfacet + facet normal -0.625925 -0.779883 0 + outer loop + vertex -16.5729 -36.2152 -0.1 + vertex -16.4249 -36.334 0 + vertex -16.5729 -36.2152 0 + endloop + endfacet + facet normal -0.625925 -0.779883 -0 + outer loop + vertex -16.4249 -36.334 0 + vertex -16.5729 -36.2152 -0.1 + vertex -16.4249 -36.334 -0.1 + endloop + endfacet + facet normal -0.756453 -0.654048 0 + outer loop + vertex -16.3106 -36.4662 -0.1 + vertex -16.4249 -36.334 0 + vertex -16.4249 -36.334 -0.1 + endloop + endfacet + facet normal -0.756453 -0.654048 0 + outer loop + vertex -16.4249 -36.334 0 + vertex -16.3106 -36.4662 -0.1 + vertex -16.3106 -36.4662 0 + endloop + endfacet + facet normal -0.886186 -0.46333 0 + outer loop + vertex -16.237 -36.6071 -0.1 + vertex -16.3106 -36.4662 0 + vertex -16.3106 -36.4662 -0.1 + endloop + endfacet + facet normal -0.886186 -0.46333 0 + outer loop + vertex -16.3106 -36.4662 0 + vertex -16.237 -36.6071 -0.1 + vertex -16.237 -36.6071 0 + endloop + endfacet + facet normal -0.984159 -0.177288 0 + outer loop + vertex -16.2109 -36.752 -0.1 + vertex -16.237 -36.6071 0 + vertex -16.237 -36.6071 -0.1 + endloop + endfacet + facet normal -0.984159 -0.177288 0 + outer loop + vertex -16.237 -36.6071 0 + vertex -16.2109 -36.752 -0.1 + vertex -16.2109 -36.752 0 + endloop + endfacet + facet normal -0.97657 0.215201 0 + outer loop + vertex -16.2485 -36.9225 -0.1 + vertex -16.2109 -36.752 0 + vertex -16.2109 -36.752 -0.1 + endloop + endfacet + facet normal -0.97657 0.215201 0 + outer loop + vertex -16.2109 -36.752 0 + vertex -16.2485 -36.9225 -0.1 + vertex -16.2485 -36.9225 0 + endloop + endfacet + facet normal -0.906917 0.42131 0 + outer loop + vertex -16.3508 -37.1428 -0.1 + vertex -16.2485 -36.9225 0 + vertex -16.2485 -36.9225 -0.1 + endloop + endfacet + facet normal -0.906917 0.42131 0 + outer loop + vertex -16.2485 -36.9225 0 + vertex -16.3508 -37.1428 -0.1 + vertex -16.3508 -37.1428 0 + endloop + endfacet + facet normal -0.847258 0.531182 0 + outer loop + vertex -16.5023 -37.3844 -0.1 + vertex -16.3508 -37.1428 0 + vertex -16.3508 -37.1428 -0.1 + endloop + endfacet + facet normal -0.847258 0.531182 0 + outer loop + vertex -16.3508 -37.1428 0 + vertex -16.5023 -37.3844 -0.1 + vertex -16.5023 -37.3844 0 + endloop + endfacet + facet normal -0.785088 0.619384 0 + outer loop + vertex -16.6872 -37.6188 -0.1 + vertex -16.5023 -37.3844 0 + vertex -16.5023 -37.3844 -0.1 + endloop + endfacet + facet normal -0.785088 0.619384 0 + outer loop + vertex -16.5023 -37.3844 0 + vertex -16.6872 -37.6188 -0.1 + vertex -16.6872 -37.6188 0 + endloop + endfacet + facet normal -0.731213 0.68215 0 + outer loop + vertex -16.8516 -37.795 -0.1 + vertex -16.6872 -37.6188 0 + vertex -16.6872 -37.6188 -0.1 + endloop + endfacet + facet normal -0.731213 0.68215 0 + outer loop + vertex -16.6872 -37.6188 0 + vertex -16.8516 -37.795 -0.1 + vertex -16.8516 -37.795 0 + endloop + endfacet + facet normal -0.615138 0.78842 0 + outer loop + vertex -16.8516 -37.795 -0.1 + vertex -17.0213 -37.9274 0 + vertex -16.8516 -37.795 0 + endloop + endfacet + facet normal -0.615138 0.78842 0 + outer loop + vertex -17.0213 -37.9274 0 + vertex -16.8516 -37.795 -0.1 + vertex -17.0213 -37.9274 -0.1 + endloop + endfacet + facet normal -0.390611 0.920556 0 + outer loop + vertex -17.0213 -37.9274 -0.1 + vertex -17.2437 -38.0218 0 + vertex -17.0213 -37.9274 0 + endloop + endfacet + facet normal -0.390611 0.920556 0 + outer loop + vertex -17.2437 -38.0218 0 + vertex -17.0213 -37.9274 -0.1 + vertex -17.2437 -38.0218 -0.1 + endloop + endfacet + facet normal -0.189492 0.981882 0 + outer loop + vertex -17.2437 -38.0218 -0.1 + vertex -17.5664 -38.0841 0 + vertex -17.2437 -38.0218 0 + endloop + endfacet + facet normal -0.189492 0.981882 0 + outer loop + vertex -17.5664 -38.0841 0 + vertex -17.2437 -38.0218 -0.1 + vertex -17.5664 -38.0841 -0.1 + endloop + endfacet + facet normal -0.0764443 0.997074 0 + outer loop + vertex -17.5664 -38.0841 -0.1 + vertex -18.0369 -38.1201 0 + vertex -17.5664 -38.0841 0 + endloop + endfacet + facet normal -0.0764443 0.997074 0 + outer loop + vertex -18.0369 -38.1201 0 + vertex -17.5664 -38.0841 -0.1 + vertex -18.0369 -38.1201 -0.1 + endloop + endfacet + facet normal -0.0236695 0.99972 0 + outer loop + vertex -18.0369 -38.1201 -0.1 + vertex -18.7028 -38.1359 0 + vertex -18.0369 -38.1201 0 + endloop + endfacet + facet normal -0.0236695 0.99972 0 + outer loop + vertex -18.7028 -38.1359 0 + vertex -18.0369 -38.1201 -0.1 + vertex -18.7028 -38.1359 -0.1 + endloop + endfacet + facet normal 0.00275597 0.999996 -0 + outer loop + vertex -18.7028 -38.1359 -0.1 + vertex -20.8109 -38.1301 0 + vertex -18.7028 -38.1359 0 + endloop + endfacet + facet normal 0.00275597 0.999996 0 + outer loop + vertex -20.8109 -38.1301 0 + vertex -18.7028 -38.1359 -0.1 + vertex -20.8109 -38.1301 -0.1 + endloop + endfacet + facet normal 0.0176671 0.999844 -0 + outer loop + vertex -20.8109 -38.1301 -0.1 + vertex -23.4866 -38.0828 0 + vertex -20.8109 -38.1301 0 + endloop + endfacet + facet normal 0.0176671 0.999844 0 + outer loop + vertex -23.4866 -38.0828 0 + vertex -20.8109 -38.1301 -0.1 + vertex -23.4866 -38.0828 -0.1 + endloop + endfacet + facet normal 0.0417305 0.999129 -0 + outer loop + vertex -23.4866 -38.0828 -0.1 + vertex -24.3782 -38.0456 0 + vertex -23.4866 -38.0828 0 + endloop + endfacet + facet normal 0.0417305 0.999129 0 + outer loop + vertex -24.3782 -38.0456 0 + vertex -23.4866 -38.0828 -0.1 + vertex -24.3782 -38.0456 -0.1 + endloop + endfacet + facet normal 0.0968237 0.995302 -0 + outer loop + vertex -24.3782 -38.0456 -0.1 + vertex -24.7978 -38.0047 0 + vertex -24.3782 -38.0456 0 + endloop + endfacet + facet normal 0.0968237 0.995302 0 + outer loop + vertex -24.7978 -38.0047 0 + vertex -24.3782 -38.0456 -0.1 + vertex -24.7978 -38.0047 -0.1 + endloop + endfacet + facet normal 0.412814 0.910815 -0 + outer loop + vertex -24.7978 -38.0047 -0.1 + vertex -24.9442 -37.9384 0 + vertex -24.7978 -38.0047 0 + endloop + endfacet + facet normal 0.412814 0.910815 0 + outer loop + vertex -24.9442 -37.9384 0 + vertex -24.7978 -38.0047 -0.1 + vertex -24.9442 -37.9384 -0.1 + endloop + endfacet + facet normal 0.678412 0.734682 -0 + outer loop + vertex -24.9442 -37.9384 -0.1 + vertex -25.0491 -37.8416 0 + vertex -24.9442 -37.9384 0 + endloop + endfacet + facet normal 0.678412 0.734682 0 + outer loop + vertex -25.0491 -37.8416 0 + vertex -24.9442 -37.9384 -0.1 + vertex -25.0491 -37.8416 -0.1 + endloop + endfacet + facet normal 0.880101 0.474787 0 + outer loop + vertex -25.0491 -37.8416 0 + vertex -25.1152 -37.719 -0.1 + vertex -25.1152 -37.719 0 + endloop + endfacet + facet normal 0.880101 0.474787 0 + outer loop + vertex -25.1152 -37.719 -0.1 + vertex -25.0491 -37.8416 0 + vertex -25.0491 -37.8416 -0.1 + endloop + endfacet + facet normal 0.978769 0.204965 0 + outer loop + vertex -25.1152 -37.719 0 + vertex -25.1453 -37.5754 -0.1 + vertex -25.1453 -37.5754 0 + endloop + endfacet + facet normal 0.978769 0.204965 0 + outer loop + vertex -25.1453 -37.5754 -0.1 + vertex -25.1152 -37.719 0 + vertex -25.1152 -37.719 -0.1 + endloop + endfacet + facet normal 0.99978 -0.0209726 0 + outer loop + vertex -25.1453 -37.5754 0 + vertex -25.1419 -37.4158 -0.1 + vertex -25.1419 -37.4158 0 + endloop + endfacet + facet normal 0.99978 -0.0209726 0 + outer loop + vertex -25.1419 -37.4158 -0.1 + vertex -25.1453 -37.5754 0 + vertex -25.1453 -37.5754 -0.1 + endloop + endfacet + facet normal 0.980708 -0.195479 0 + outer loop + vertex -25.1419 -37.4158 0 + vertex -25.1078 -37.2448 -0.1 + vertex -25.1078 -37.2448 0 + endloop + endfacet + facet normal 0.980708 -0.195479 0 + outer loop + vertex -25.1078 -37.2448 -0.1 + vertex -25.1419 -37.4158 0 + vertex -25.1419 -37.4158 -0.1 + endloop + endfacet + facet normal 0.94384 -0.330404 0 + outer loop + vertex -25.1078 -37.2448 0 + vertex -25.0457 -37.0673 -0.1 + vertex -25.0457 -37.0673 0 + endloop + endfacet + facet normal 0.94384 -0.330404 0 + outer loop + vertex -25.0457 -37.0673 -0.1 + vertex -25.1078 -37.2448 0 + vertex -25.1078 -37.2448 -0.1 + endloop + endfacet + facet normal 0.898573 -0.438825 0 + outer loop + vertex -25.0457 -37.0673 0 + vertex -24.9582 -36.888 -0.1 + vertex -24.9582 -36.888 0 + endloop + endfacet + facet normal 0.898573 -0.438825 0 + outer loop + vertex -24.9582 -36.888 -0.1 + vertex -25.0457 -37.0673 0 + vertex -25.0457 -37.0673 -0.1 + endloop + endfacet + facet normal 0.847669 -0.530525 0 + outer loop + vertex -24.9582 -36.888 0 + vertex -24.8479 -36.7119 -0.1 + vertex -24.8479 -36.7119 0 + endloop + endfacet + facet normal 0.847669 -0.530525 0 + outer loop + vertex -24.8479 -36.7119 -0.1 + vertex -24.9582 -36.888 0 + vertex -24.9582 -36.888 -0.1 + endloop + endfacet + facet normal 0.790663 -0.612252 0 + outer loop + vertex -24.8479 -36.7119 0 + vertex -24.7177 -36.5437 -0.1 + vertex -24.7177 -36.5437 0 + endloop + endfacet + facet normal 0.790663 -0.612252 0 + outer loop + vertex -24.7177 -36.5437 -0.1 + vertex -24.8479 -36.7119 0 + vertex -24.8479 -36.7119 -0.1 + endloop + endfacet + facet normal 0.7253 -0.688433 0 + outer loop + vertex -24.7177 -36.5437 0 + vertex -24.57 -36.3881 -0.1 + vertex -24.57 -36.3881 0 + endloop + endfacet + facet normal 0.7253 -0.688433 0 + outer loop + vertex -24.57 -36.3881 -0.1 + vertex -24.7177 -36.5437 0 + vertex -24.7177 -36.5437 -0.1 + endloop + endfacet + facet normal 0.647808 -0.761803 0 + outer loop + vertex -24.57 -36.3881 -0.1 + vertex -24.4077 -36.2501 0 + vertex -24.57 -36.3881 0 + endloop + endfacet + facet normal 0.647808 -0.761803 0 + outer loop + vertex -24.4077 -36.2501 0 + vertex -24.57 -36.3881 -0.1 + vertex -24.4077 -36.2501 -0.1 + endloop + endfacet + facet normal 0.553033 -0.833159 0 + outer loop + vertex -24.4077 -36.2501 -0.1 + vertex -24.2334 -36.1344 0 + vertex -24.4077 -36.2501 0 + endloop + endfacet + facet normal 0.553033 -0.833159 0 + outer loop + vertex -24.2334 -36.1344 0 + vertex -24.4077 -36.2501 -0.1 + vertex -24.2334 -36.1344 -0.1 + endloop + endfacet + facet normal 0.434505 -0.900669 0 + outer loop + vertex -24.2334 -36.1344 -0.1 + vertex -24.0497 -36.0458 0 + vertex -24.2334 -36.1344 0 + endloop + endfacet + facet normal 0.434505 -0.900669 0 + outer loop + vertex -24.0497 -36.0458 0 + vertex -24.2334 -36.1344 -0.1 + vertex -24.0497 -36.0458 -0.1 + endloop + endfacet + facet normal 0.285417 -0.958403 0 + outer loop + vertex -24.0497 -36.0458 -0.1 + vertex -23.8593 -35.9891 0 + vertex -24.0497 -36.0458 0 + endloop + endfacet + facet normal 0.285417 -0.958403 0 + outer loop + vertex -23.8593 -35.9891 0 + vertex -24.0497 -36.0458 -0.1 + vertex -23.8593 -35.9891 -0.1 + endloop + endfacet + facet normal 0.1022 -0.994764 0 + outer loop + vertex -23.8593 -35.9891 -0.1 + vertex -23.665 -35.9691 0 + vertex -23.8593 -35.9891 0 + endloop + endfacet + facet normal 0.1022 -0.994764 0 + outer loop + vertex -23.665 -35.9691 0 + vertex -23.8593 -35.9891 -0.1 + vertex -23.665 -35.9691 -0.1 + endloop + endfacet + facet normal 0.0676467 -0.997709 0 + outer loop + vertex -23.665 -35.9691 -0.1 + vertex -23.3082 -35.9449 0 + vertex -23.665 -35.9691 0 + endloop + endfacet + facet normal 0.0676467 -0.997709 0 + outer loop + vertex -23.3082 -35.9449 0 + vertex -23.665 -35.9691 -0.1 + vertex -23.3082 -35.9449 -0.1 + endloop + endfacet + facet normal 0.201749 -0.979437 0 + outer loop + vertex -23.3082 -35.9449 -0.1 + vertex -23.1471 -35.9117 0 + vertex -23.3082 -35.9449 0 + endloop + endfacet + facet normal 0.201749 -0.979437 0 + outer loop + vertex -23.1471 -35.9117 0 + vertex -23.3082 -35.9449 -0.1 + vertex -23.1471 -35.9117 -0.1 + endloop + endfacet + facet normal 0.311945 -0.9501 0 + outer loop + vertex -23.1471 -35.9117 -0.1 + vertex -22.9953 -35.8619 0 + vertex -23.1471 -35.9117 0 + endloop + endfacet + facet normal 0.311945 -0.9501 0 + outer loop + vertex -22.9953 -35.8619 0 + vertex -23.1471 -35.9117 -0.1 + vertex -22.9953 -35.8619 -0.1 + endloop + endfacet + facet normal 0.428709 -0.903443 0 + outer loop + vertex -22.9953 -35.8619 -0.1 + vertex -22.8511 -35.7934 0 + vertex -22.9953 -35.8619 0 + endloop + endfacet + facet normal 0.428709 -0.903443 0 + outer loop + vertex -22.8511 -35.7934 0 + vertex -22.9953 -35.8619 -0.1 + vertex -22.8511 -35.7934 -0.1 + endloop + endfacet + facet normal 0.540869 -0.841107 0 + outer loop + vertex -22.8511 -35.7934 -0.1 + vertex -22.7126 -35.7044 0 + vertex -22.8511 -35.7934 0 + endloop + endfacet + facet normal 0.540869 -0.841107 0 + outer loop + vertex -22.7126 -35.7044 0 + vertex -22.8511 -35.7934 -0.1 + vertex -22.7126 -35.7044 -0.1 + endloop + endfacet + facet normal 0.638801 -0.769372 0 + outer loop + vertex -22.7126 -35.7044 -0.1 + vertex -22.5782 -35.5929 0 + vertex -22.7126 -35.7044 0 + endloop + endfacet + facet normal 0.638801 -0.769372 0 + outer loop + vertex -22.5782 -35.5929 0 + vertex -22.7126 -35.7044 -0.1 + vertex -22.5782 -35.5929 -0.1 + endloop + endfacet + facet normal 0.717693 -0.69636 0 + outer loop + vertex -22.5782 -35.5929 0 + vertex -22.4463 -35.4568 -0.1 + vertex -22.4463 -35.4568 0 + endloop + endfacet + facet normal 0.717693 -0.69636 0 + outer loop + vertex -22.4463 -35.4568 -0.1 + vertex -22.5782 -35.5929 0 + vertex -22.5782 -35.5929 -0.1 + endloop + endfacet + facet normal 0.801318 -0.598238 0 + outer loop + vertex -22.4463 -35.4568 0 + vertex -22.1824 -35.1035 -0.1 + vertex -22.1824 -35.1035 0 + endloop + endfacet + facet normal 0.801318 -0.598238 0 + outer loop + vertex -22.1824 -35.1035 -0.1 + vertex -22.4463 -35.4568 0 + vertex -22.4463 -35.4568 -0.1 + endloop + endfacet + facet normal 0.865265 -0.501314 0 + outer loop + vertex -22.1824 -35.1035 0 + vertex -21.9074 -34.6287 -0.1 + vertex -21.9074 -34.6287 0 + endloop + endfacet + facet normal 0.865265 -0.501314 0 + outer loop + vertex -21.9074 -34.6287 -0.1 + vertex -22.1824 -35.1035 0 + vertex -22.1824 -35.1035 -0.1 + endloop + endfacet + facet normal 0.897795 -0.440414 0 + outer loop + vertex -21.9074 -34.6287 0 + vertex -21.6072 -34.0169 -0.1 + vertex -21.6072 -34.0169 0 + endloop + endfacet + facet normal 0.897795 -0.440414 0 + outer loop + vertex -21.6072 -34.0169 -0.1 + vertex -21.9074 -34.6287 0 + vertex -21.9074 -34.6287 -0.1 + endloop + endfacet + facet normal 0.914162 -0.405349 0 + outer loop + vertex -21.6072 -34.0169 0 + vertex -21.2682 -33.2523 -0.1 + vertex -21.2682 -33.2523 0 + endloop + endfacet + facet normal 0.914162 -0.405349 0 + outer loop + vertex -21.2682 -33.2523 -0.1 + vertex -21.6072 -34.0169 0 + vertex -21.6072 -34.0169 -0.1 + endloop + endfacet + facet normal 0.920953 -0.389675 0 + outer loop + vertex -21.2682 -33.2523 0 + vertex -19.7699 -29.7113 -0.1 + vertex -19.7699 -29.7113 0 + endloop + endfacet + facet normal 0.920953 -0.389675 0 + outer loop + vertex -19.7699 -29.7113 -0.1 + vertex -21.2682 -33.2523 0 + vertex -21.2682 -33.2523 -0.1 + endloop + endfacet + facet normal 0.925287 -0.379267 0 + outer loop + vertex -19.7699 -29.7113 0 + vertex -18.5311 -26.6889 -0.1 + vertex -18.5311 -26.6889 0 + endloop + endfacet + facet normal 0.925287 -0.379267 0 + outer loop + vertex -18.5311 -26.6889 -0.1 + vertex -19.7699 -29.7113 0 + vertex -19.7699 -29.7113 -0.1 + endloop + endfacet + facet normal 0.931695 -0.363243 0 + outer loop + vertex -18.5311 -26.6889 0 + vertex -17.6656 -24.469 -0.1 + vertex -17.6656 -24.469 0 + endloop + endfacet + facet normal 0.931695 -0.363243 0 + outer loop + vertex -17.6656 -24.469 -0.1 + vertex -18.5311 -26.6889 0 + vertex -18.5311 -26.6889 -0.1 + endloop + endfacet + facet normal 0.941797 -0.336183 0 + outer loop + vertex -17.6656 -24.469 0 + vertex -17.4084 -23.7485 -0.1 + vertex -17.4084 -23.7485 0 + endloop + endfacet + facet normal 0.941797 -0.336183 0 + outer loop + vertex -17.4084 -23.7485 -0.1 + vertex -17.6656 -24.469 0 + vertex -17.6656 -24.469 -0.1 + endloop + endfacet + facet normal 0.959662 -0.281158 0 + outer loop + vertex -17.4084 -23.7485 0 + vertex -17.2873 -23.335 -0.1 + vertex -17.2873 -23.335 0 + endloop + endfacet + facet normal 0.959662 -0.281158 0 + outer loop + vertex -17.2873 -23.335 -0.1 + vertex -17.4084 -23.7485 0 + vertex -17.4084 -23.7485 -0.1 + endloop + endfacet + facet normal 0.987024 -0.160575 0 + outer loop + vertex -17.2873 -23.335 0 + vertex -17.2226 -22.9371 -0.1 + vertex -17.2226 -22.9371 0 + endloop + endfacet + facet normal 0.987024 -0.160575 0 + outer loop + vertex -17.2226 -22.9371 -0.1 + vertex -17.2873 -23.335 0 + vertex -17.2873 -23.335 -0.1 + endloop + endfacet + facet normal 0.999826 0.0186517 0 + outer loop + vertex -17.2226 -22.9371 0 + vertex -17.2249 -22.8126 -0.1 + vertex -17.2249 -22.8126 0 + endloop + endfacet + facet normal 0.999826 0.0186517 0 + outer loop + vertex -17.2249 -22.8126 -0.1 + vertex -17.2226 -22.9371 0 + vertex -17.2226 -22.9371 -0.1 + endloop + endfacet + facet normal 0.932644 0.360799 0 + outer loop + vertex -17.2249 -22.8126 0 + vertex -17.2578 -22.7276 -0.1 + vertex -17.2578 -22.7276 0 + endloop + endfacet + facet normal 0.932644 0.360799 0 + outer loop + vertex -17.2578 -22.7276 -0.1 + vertex -17.2249 -22.8126 0 + vertex -17.2249 -22.8126 -0.1 + endloop + endfacet + facet normal 0.608972 0.793192 -0 + outer loop + vertex -17.2578 -22.7276 -0.1 + vertex -17.3267 -22.6747 0 + vertex -17.2578 -22.7276 0 + endloop + endfacet + facet normal 0.608972 0.793192 0 + outer loop + vertex -17.3267 -22.6747 0 + vertex -17.2578 -22.7276 -0.1 + vertex -17.3267 -22.6747 -0.1 + endloop + endfacet + facet normal 0.249366 0.968409 -0 + outer loop + vertex -17.3267 -22.6747 -0.1 + vertex -17.4374 -22.6462 0 + vertex -17.3267 -22.6747 0 + endloop + endfacet + facet normal 0.249366 0.968409 0 + outer loop + vertex -17.4374 -22.6462 0 + vertex -17.3267 -22.6747 -0.1 + vertex -17.4374 -22.6462 -0.1 + endloop + endfacet + facet normal 0.0372683 0.999305 -0 + outer loop + vertex -17.4374 -22.6462 -0.1 + vertex -17.8061 -22.6324 0 + vertex -17.4374 -22.6462 0 + endloop + endfacet + facet normal 0.0372683 0.999305 0 + outer loop + vertex -17.8061 -22.6324 0 + vertex -17.4374 -22.6462 -0.1 + vertex -17.8061 -22.6324 -0.1 + endloop + endfacet + facet normal 0.050033 0.998748 -0 + outer loop + vertex -17.8061 -22.6324 -0.1 + vertex -18.1091 -22.6172 0 + vertex -17.8061 -22.6324 0 + endloop + endfacet + facet normal 0.050033 0.998748 0 + outer loop + vertex -18.1091 -22.6172 0 + vertex -17.8061 -22.6324 -0.1 + vertex -18.1091 -22.6172 -0.1 + endloop + endfacet + facet normal 0.187734 0.98222 -0 + outer loop + vertex -18.1091 -22.6172 -0.1 + vertex -18.3541 -22.5704 0 + vertex -18.1091 -22.6172 0 + endloop + endfacet + facet normal 0.187734 0.98222 0 + outer loop + vertex -18.3541 -22.5704 0 + vertex -18.1091 -22.6172 -0.1 + vertex -18.3541 -22.5704 -0.1 + endloop + endfacet + facet normal 0.392235 0.919865 -0 + outer loop + vertex -18.3541 -22.5704 -0.1 + vertex -18.5429 -22.4899 0 + vertex -18.3541 -22.5704 0 + endloop + endfacet + facet normal 0.392235 0.919865 0 + outer loop + vertex -18.5429 -22.4899 0 + vertex -18.3541 -22.5704 -0.1 + vertex -18.5429 -22.4899 -0.1 + endloop + endfacet + facet normal 0.654816 0.755788 -0 + outer loop + vertex -18.5429 -22.4899 -0.1 + vertex -18.6769 -22.3738 0 + vertex -18.5429 -22.4899 0 + endloop + endfacet + facet normal 0.654816 0.755788 0 + outer loop + vertex -18.6769 -22.3738 0 + vertex -18.5429 -22.4899 -0.1 + vertex -18.6769 -22.3738 -0.1 + endloop + endfacet + facet normal 0.885096 0.465409 0 + outer loop + vertex -18.6769 -22.3738 0 + vertex -18.7577 -22.2202 -0.1 + vertex -18.7577 -22.2202 0 + endloop + endfacet + facet normal 0.885096 0.465409 0 + outer loop + vertex -18.7577 -22.2202 -0.1 + vertex -18.6769 -22.3738 0 + vertex -18.6769 -22.3738 -0.1 + endloop + endfacet + facet normal 0.988779 0.149383 0 + outer loop + vertex -18.7577 -22.2202 0 + vertex -18.7869 -22.0269 -0.1 + vertex -18.7869 -22.0269 0 + endloop + endfacet + facet normal 0.988779 0.149383 0 + outer loop + vertex -18.7869 -22.0269 -0.1 + vertex -18.7577 -22.2202 0 + vertex -18.7577 -22.2202 -0.1 + endloop + endfacet + facet normal 0.99608 -0.0884566 0 + outer loop + vertex -18.7869 -22.0269 0 + vertex -18.766 -21.7922 -0.1 + vertex -18.766 -21.7922 0 + endloop + endfacet + facet normal 0.99608 -0.0884566 0 + outer loop + vertex -18.766 -21.7922 -0.1 + vertex -18.7869 -22.0269 0 + vertex -18.7869 -22.0269 -0.1 + endloop + endfacet + facet normal 0.970344 -0.241728 0 + outer loop + vertex -18.766 -21.7922 0 + vertex -18.6967 -21.5139 -0.1 + vertex -18.6967 -21.5139 0 + endloop + endfacet + facet normal 0.970344 -0.241728 0 + outer loop + vertex -18.6967 -21.5139 -0.1 + vertex -18.766 -21.7922 0 + vertex -18.766 -21.7922 -0.1 + endloop + endfacet + facet normal 0.92433 -0.381593 0 + outer loop + vertex -18.6967 -21.5139 0 + vertex -18.5788 -21.2283 -0.1 + vertex -18.5788 -21.2283 0 + endloop + endfacet + facet normal 0.92433 -0.381593 0 + outer loop + vertex -18.5788 -21.2283 -0.1 + vertex -18.6967 -21.5139 0 + vertex -18.6967 -21.5139 -0.1 + endloop + endfacet + facet normal 0.848388 -0.529374 0 + outer loop + vertex -18.5788 -21.2283 0 + vertex -18.5053 -21.1105 -0.1 + vertex -18.5053 -21.1105 0 + endloop + endfacet + facet normal 0.848388 -0.529374 0 + outer loop + vertex -18.5053 -21.1105 -0.1 + vertex -18.5788 -21.2283 0 + vertex -18.5788 -21.2283 -0.1 + endloop + endfacet + facet normal 0.772185 -0.635398 0 + outer loop + vertex -18.5053 -21.1105 0 + vertex -18.4218 -21.0091 -0.1 + vertex -18.4218 -21.0091 0 + endloop + endfacet + facet normal 0.772185 -0.635398 0 + outer loop + vertex -18.4218 -21.0091 -0.1 + vertex -18.5053 -21.1105 0 + vertex -18.5053 -21.1105 -0.1 + endloop + endfacet + facet normal 0.673134 -0.739521 0 + outer loop + vertex -18.4218 -21.0091 -0.1 + vertex -18.3284 -20.924 0 + vertex -18.4218 -21.0091 0 + endloop + endfacet + facet normal 0.673134 -0.739521 0 + outer loop + vertex -18.3284 -20.924 0 + vertex -18.4218 -21.0091 -0.1 + vertex -18.3284 -20.924 -0.1 + endloop + endfacet + facet normal 0.553635 -0.832759 0 + outer loop + vertex -18.3284 -20.924 -0.1 + vertex -18.2248 -20.8552 0 + vertex -18.3284 -20.924 0 + endloop + endfacet + facet normal 0.553635 -0.832759 0 + outer loop + vertex -18.2248 -20.8552 0 + vertex -18.3284 -20.924 -0.1 + vertex -18.2248 -20.8552 -0.1 + endloop + endfacet + facet normal 0.4209 -0.907107 0 + outer loop + vertex -18.2248 -20.8552 -0.1 + vertex -18.1109 -20.8023 0 + vertex -18.2248 -20.8552 0 + endloop + endfacet + facet normal 0.4209 -0.907107 0 + outer loop + vertex -18.1109 -20.8023 0 + vertex -18.2248 -20.8552 -0.1 + vertex -18.1109 -20.8023 -0.1 + endloop + endfacet + facet normal 0.284987 -0.958531 0 + outer loop + vertex -18.1109 -20.8023 -0.1 + vertex -17.9865 -20.7653 0 + vertex -18.1109 -20.8023 0 + endloop + endfacet + facet normal 0.284987 -0.958531 0 + outer loop + vertex -17.9865 -20.7653 0 + vertex -18.1109 -20.8023 -0.1 + vertex -17.9865 -20.7653 -0.1 + endloop + endfacet + facet normal 0.279088 -0.960266 0 + outer loop + vertex -17.9865 -20.7653 -0.1 + vertex -16.9393 -20.461 0 + vertex -17.9865 -20.7653 0 + endloop + endfacet + facet normal 0.279088 -0.960266 0 + outer loop + vertex -16.9393 -20.461 0 + vertex -17.9865 -20.7653 -0.1 + vertex -16.9393 -20.461 -0.1 + endloop + endfacet + facet normal 0.302435 -0.95317 0 + outer loop + vertex -16.9393 -20.461 -0.1 + vertex -15.1436 -19.8912 0 + vertex -16.9393 -20.461 0 + endloop + endfacet + facet normal 0.302435 -0.95317 0 + outer loop + vertex -15.1436 -19.8912 0 + vertex -16.9393 -20.461 -0.1 + vertex -15.1436 -19.8912 -0.1 + endloop + endfacet + facet normal 0.297661 -0.954672 0 + outer loop + vertex -15.1436 -19.8912 -0.1 + vertex -14.1989 -19.5967 0 + vertex -15.1436 -19.8912 0 + endloop + endfacet + facet normal 0.297661 -0.954672 0 + outer loop + vertex -14.1989 -19.5967 0 + vertex -15.1436 -19.8912 -0.1 + vertex -14.1989 -19.5967 -0.1 + endloop + endfacet + facet normal 0.272658 -0.962111 0 + outer loop + vertex -14.1989 -19.5967 -0.1 + vertex -13.3483 -19.3556 0 + vertex -14.1989 -19.5967 0 + endloop + endfacet + facet normal 0.272658 -0.962111 0 + outer loop + vertex -13.3483 -19.3556 0 + vertex -14.1989 -19.5967 -0.1 + vertex -13.3483 -19.3556 -0.1 + endloop + endfacet + facet normal 0.238231 -0.971209 0 + outer loop + vertex -13.3483 -19.3556 -0.1 + vertex -12.6849 -19.1929 0 + vertex -13.3483 -19.3556 0 + endloop + endfacet + facet normal 0.238231 -0.971209 0 + outer loop + vertex -12.6849 -19.1929 0 + vertex -13.3483 -19.3556 -0.1 + vertex -12.6849 -19.1929 -0.1 + endloop + endfacet + facet normal 0.153595 -0.988134 0 + outer loop + vertex -12.6849 -19.1929 -0.1 + vertex -12.302 -19.1333 0 + vertex -12.6849 -19.1929 0 + endloop + endfacet + facet normal 0.153595 -0.988134 0 + outer loop + vertex -12.302 -19.1333 0 + vertex -12.6849 -19.1929 -0.1 + vertex -12.302 -19.1333 -0.1 + endloop + endfacet + facet normal -0.105808 -0.994387 0 + outer loop + vertex -12.302 -19.1333 -0.1 + vertex -12.0792 -19.1571 0 + vertex -12.302 -19.1333 0 + endloop + endfacet + facet normal -0.105808 -0.994387 -0 + outer loop + vertex -12.0792 -19.1571 0 + vertex -12.302 -19.1333 -0.1 + vertex -12.0792 -19.1571 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.6833 -25.6471 -0.1 + vertex 39.342 -26.9688 -0.1 + vertex 35.957 -24.8864 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.3422 -26.5156 -0.1 + vertex 39.342 -26.9688 -0.1 + vertex 35.6833 -25.6471 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.342 -26.9688 -0.1 + vertex 35.3422 -26.5156 -0.1 + vertex 38.2305 -29.6614 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 -0.1 + vertex 38.2305 -29.6614 -0.1 + vertex 35.3422 -26.5156 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.2305 -29.6614 -0.1 + vertex 33.8561 -30.1753 -0.1 + vertex 37.444 -31.6395 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.3957 -19.1543 -0.1 + vertex 42.162 -19.859 -0.1 + vertex 42.1595 -19.6516 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7426 -19.1572 -0.1 + vertex 42.1595 -19.6516 -0.1 + vertex 42.1149 -19.4743 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.162 -19.859 -0.1 + vertex 41.3957 -19.1543 -0.1 + vertex 42.1212 -20.0931 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7426 -19.1572 -0.1 + vertex 42.1149 -19.4743 -0.1 + vertex 42.0297 -19.3306 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.156 -19.2119 -0.1 + vertex 42.1212 -20.0931 -0.1 + vertex 41.3957 -19.1543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.1212 -20.0931 -0.1 + vertex 41.156 -19.2119 -0.1 + vertex 42.0356 -20.3507 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7426 -19.1572 -0.1 + vertex 42.0297 -19.3306 -0.1 + vertex 41.9051 -19.2238 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.9233 -19.8512 -0.1 + vertex 47.9993 -20.1225 -0.1 + vertex 47.9745 -19.9807 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.9993 -20.1225 -0.1 + vertex 47.9233 -19.8512 -0.1 + vertex 47.9987 -20.2887 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.845 -19.7221 -0.1 + vertex 47.9987 -20.2887 -0.1 + vertex 47.9233 -19.8512 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.9987 -20.2887 -0.1 + vertex 47.845 -19.7221 -0.1 + vertex 47.9737 -20.4912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.7384 -19.5813 -0.1 + vertex 47.9737 -20.4912 -0.1 + vertex 47.845 -19.7221 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.044 -19.1833 -0.1 + vertex 47.9737 -20.4912 -0.1 + vertex 47.7384 -19.5813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.8289 -19.1548 -0.1 + vertex 47.9737 -20.4912 -0.1 + vertex 47.044 -19.1833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2257 -19.2263 -0.1 + vertex 47.7384 -19.5813 -0.1 + vertex 47.6302 -19.4614 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.274 -19.1343 -0.1 + vertex 47.8542 -21.0531 -0.1 + vertex 46.8289 -19.1548 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2257 -19.2263 -0.1 + vertex 47.6302 -19.4614 -0.1 + vertex 47.5127 -19.3635 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2257 -19.2263 -0.1 + vertex 47.5127 -19.3635 -0.1 + vertex 47.3799 -19.2858 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.9737 -20.4912 -0.1 + vertex 46.8289 -19.1548 -0.1 + vertex 47.8542 -21.0531 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.7384 -19.5813 -0.1 + vertex 47.2257 -19.2263 -0.1 + vertex 47.044 -19.1833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.8542 -21.0531 -0.1 + vertex 46.274 -19.1343 -0.1 + vertex 47.7155 -21.5429 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 45.8151 -19.1475 -0.1 + vertex 47.7155 -21.5429 -0.1 + vertex 46.274 -19.1343 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.7155 -21.5429 -0.1 + vertex 45.8151 -19.1475 -0.1 + vertex 47.5422 -21.9981 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 45.391 -19.1898 -0.1 + vertex 47.5422 -21.9981 -0.1 + vertex 45.8151 -19.1475 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.5422 -21.9981 -0.1 + vertex 45.391 -19.1898 -0.1 + vertex 47.3383 -22.4165 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 44.9905 -19.265 -0.1 + vertex 47.3383 -22.4165 -0.1 + vertex 45.391 -19.1898 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 44.6026 -19.3768 -0.1 + vertex 47.3383 -22.4165 -0.1 + vertex 44.9905 -19.265 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.3383 -22.4165 -0.1 + vertex 44.6026 -19.3768 -0.1 + vertex 47.1074 -22.796 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 44.2162 -19.5289 -0.1 + vertex 47.1074 -22.796 -0.1 + vertex 44.6026 -19.3768 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.1074 -22.796 -0.1 + vertex 44.2162 -19.5289 -0.1 + vertex 46.8534 -23.1343 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.3873 -23.2523 -0.1 + vertex 46.8534 -23.1343 -0.1 + vertex 44.2162 -19.5289 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.8534 -23.1343 -0.1 + vertex 43.3873 -23.2523 -0.1 + vertex 46.5801 -23.4293 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.5801 -23.4293 -0.1 + vertex 43.3873 -23.2523 -0.1 + vertex 46.2914 -23.6786 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 43.6239 -23.5069 -0.1 + vertex 46.2914 -23.6786 -0.1 + vertex 43.3873 -23.2523 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.2914 -23.6786 -0.1 + vertex 43.6239 -23.5069 -0.1 + vertex 45.9909 -23.8802 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 43.8807 -23.7673 -0.1 + vertex 45.3703 -24.1311 -0.1 + vertex 43.6239 -23.5069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.3703 -24.1311 -0.1 + vertex 43.8807 -23.7673 -0.1 + vertex 45.0576 -24.176 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.9909 -23.8802 -0.1 + vertex 43.6239 -23.5069 -0.1 + vertex 45.6826 -24.0317 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.0576 -24.176 -0.1 + vertex 43.8807 -23.7673 -0.1 + vertex 44.7485 -24.1643 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.7485 -24.1643 -0.1 + vertex 43.8807 -23.7673 -0.1 + vertex 44.4468 -24.0937 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.3873 -23.2523 -0.1 + vertex 44.2162 -19.5289 -0.1 + vertex 43.8201 -19.7253 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.4468 -24.0937 -0.1 + vertex 43.8807 -23.7673 -0.1 + vertex 44.1563 -23.9621 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.3873 -23.2523 -0.1 + vertex 43.8201 -19.7253 -0.1 + vertex 43.4033 -19.9696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.6826 -24.0317 -0.1 + vertex 43.6239 -23.5069 -0.1 + vertex 45.3703 -24.1311 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.4033 -19.9696 -0.1 + vertex 43.1493 -23.0437 -0.1 + vertex 43.3873 -23.2523 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.9547 -20.2657 -0.1 + vertex 43.1493 -23.0437 -0.1 + vertex 43.4033 -19.9696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.9547 -20.2657 -0.1 + vertex 42.9376 -22.9028 -0.1 + vertex 43.1493 -23.0437 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.9547 -20.2657 -0.1 + vertex 42.8503 -22.8644 -0.1 + vertex 42.9376 -22.9028 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.3117 -20.6924 -0.1 + vertex 42.8503 -22.8644 -0.1 + vertex 42.9547 -20.2657 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.8503 -22.8644 -0.1 + vertex 42.3117 -20.6924 -0.1 + vertex 42.7799 -22.851 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.1116 -20.8028 -0.1 + vertex 42.7799 -22.851 -0.1 + vertex 42.3117 -20.6924 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.7799 -22.851 -0.1 + vertex 42.1116 -20.8028 -0.1 + vertex 42.6968 -22.8729 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.9827 -20.8453 -0.1 + vertex 42.6968 -22.8729 -0.1 + vertex 42.1116 -20.8028 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.6968 -22.8729 -0.1 + vertex 41.9827 -20.8453 -0.1 + vertex 42.5728 -22.9356 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9427 -20.8413 -0.1 + vertex 42.5728 -22.9356 -0.1 + vertex 41.9827 -20.8453 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.5728 -22.9356 -0.1 + vertex 41.9427 -20.8413 -0.1 + vertex 42.2267 -23.1657 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7898 -23.5063 -0.1 + vertex 41.9427 -20.8413 -0.1 + vertex 41.9179 -20.8207 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9427 -20.8413 -0.1 + vertex 41.7898 -23.5063 -0.1 + vertex 42.2267 -23.1657 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.5298 -19.7361 -0.1 + vertex 41.9179 -20.8207 -0.1 + vertex 41.9099 -20.7296 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.0356 -20.3507 -0.1 + vertex 41.156 -19.2119 -0.1 + vertex 41.9515 -20.5727 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.1595 -19.6516 -0.1 + vertex 41.7426 -19.1572 -0.1 + vertex 41.5436 -19.1343 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.1595 -19.6516 -0.1 + vertex 41.5436 -19.1343 -0.1 + vertex 41.3957 -19.1543 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 40.4513 -19.4233 -0.1 + vertex 41.9515 -20.5727 -0.1 + vertex 41.156 -19.2119 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9515 -20.5727 -0.1 + vertex 40.4513 -19.4233 -0.1 + vertex 41.9099 -20.7296 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 39.5298 -19.7361 -0.1 + vertex 41.9099 -20.7296 -0.1 + vertex 40.4513 -19.4233 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9179 -20.8207 -0.1 + vertex 39.5298 -19.7361 -0.1 + vertex 41.3103 -23.9223 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9179 -20.8207 -0.1 + vertex 41.3103 -23.9223 -0.1 + vertex 41.7898 -23.5063 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 38.4916 -20.1181 -0.1 + vertex 41.3103 -23.9223 -0.1 + vertex 39.5298 -19.7361 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.3103 -23.9223 -0.1 + vertex 38.4916 -20.1181 -0.1 + vertex 40.922 -24.2835 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.922 -24.2835 -0.1 + vertex 38.4916 -20.1181 -0.1 + vertex 40.604 -24.6171 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.3539 -23.0402 -0.1 + vertex 40.604 -24.6171 -0.1 + vertex 38.4916 -20.1181 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 36.3671 -23.1585 -0.1 + vertex 40.604 -24.6171 -0.1 + vertex 36.3539 -23.0402 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.604 -24.6171 -0.1 + vertex 36.362 -23.3104 -0.1 + vertex 40.3218 -24.9877 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.2977 -23.7121 -0.1 + vertex 40.3218 -24.9877 -0.1 + vertex 36.362 -23.3104 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.3218 -24.9877 -0.1 + vertex 36.2977 -23.7121 -0.1 + vertex 40.0406 -25.46 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3539 -23.0402 -0.1 + vertex 38.4916 -20.1181 -0.1 + vertex 37.4642 -20.5001 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.1622 -24.2394 -0.1 + vertex 40.0406 -25.46 -0.1 + vertex 36.2977 -23.7121 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.0406 -25.46 -0.1 + vertex 36.1622 -24.2394 -0.1 + vertex 39.7256 -26.0988 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3224 -22.9562 -0.1 + vertex 37.4642 -20.5001 -0.1 + vertex 36.5724 -20.813 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.957 -24.8864 -0.1 + vertex 39.7256 -26.0988 -0.1 + vertex 36.1622 -24.2394 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.7256 -26.0988 -0.1 + vertex 35.957 -24.8864 -0.1 + vertex 39.342 -26.9688 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.362 -23.3104 -0.1 + vertex 40.604 -24.6171 -0.1 + vertex 36.3671 -23.1585 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.4642 -20.5001 -0.1 + vertex 36.3224 -22.9562 -0.1 + vertex 36.3539 -23.0402 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.5724 -20.813 -0.1 + vertex 36.2723 -22.9073 -0.1 + vertex 36.3224 -22.9562 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.9118 -21.0243 -0.1 + vertex 36.2723 -22.9073 -0.1 + vertex 36.5724 -20.813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.2723 -22.9073 -0.1 + vertex 35.9118 -21.0243 -0.1 + vertex 36.2034 -22.8943 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.5778 -21.102 -0.1 + vertex 36.2034 -22.8943 -0.1 + vertex 35.9118 -21.0243 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.2034 -22.8943 -0.1 + vertex 35.5778 -21.102 -0.1 + vertex 36.1157 -22.9178 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.1157 -22.9178 -0.1 + vertex 35.5778 -21.102 -0.1 + vertex 35.9442 -22.9618 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.9442 -22.9618 -0.1 + vertex 35.5778 -21.102 -0.1 + vertex 35.7166 -22.9783 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.0706 -21.3217 -0.1 + vertex 35.7166 -22.9783 -0.1 + vertex 35.5778 -21.102 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.2304 -21.2043 -0.1 + vertex 35.5778 -21.102 -0.1 + vertex 35.4013 -21.1287 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.5778 -21.102 -0.1 + vertex 35.2304 -21.2043 -0.1 + vertex 35.0706 -21.3217 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.9274 -21.474 -0.1 + vertex 35.7166 -22.9783 -0.1 + vertex 35.0706 -21.3217 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.7166 -22.9783 -0.1 + vertex 34.9274 -21.474 -0.1 + vertex 35.4626 -22.9668 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.8063 -21.6543 -0.1 + vertex 35.4626 -22.9668 -0.1 + vertex 34.9274 -21.474 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.713 -21.8554 -0.1 + vertex 35.4626 -22.9668 -0.1 + vertex 34.8063 -21.6543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.4626 -22.9668 -0.1 + vertex 34.713 -21.8554 -0.1 + vertex 35.2118 -22.9271 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.653 -22.0706 -0.1 + vertex 35.2118 -22.9271 -0.1 + vertex 34.713 -21.8554 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.6318 -22.2927 -0.1 + vertex 35.2118 -22.9271 -0.1 + vertex 34.653 -22.0706 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.2118 -22.9271 -0.1 + vertex 34.6318 -22.2927 -0.1 + vertex 34.9345 -22.8399 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 34.6385 -22.4262 -0.1 + vertex 34.9345 -22.8399 -0.1 + vertex 34.6318 -22.2927 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 34.6602 -22.54 -0.1 + vertex 34.9345 -22.8399 -0.1 + vertex 34.6385 -22.4262 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.9345 -22.8399 -0.1 + vertex 34.6602 -22.54 -0.1 + vertex 34.8338 -22.7839 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.8338 -22.7839 -0.1 + vertex 34.6602 -22.54 -0.1 + vertex 34.7558 -22.7166 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7558 -22.7166 -0.1 + vertex 34.6602 -22.54 -0.1 + vertex 34.6986 -22.636 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.6954 -36.1853 -0.1 + vertex 38.1248 -36.8464 -0.1 + vertex 38.119 -36.6694 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.8576 -36.2498 -0.1 + vertex 38.119 -36.6694 -0.1 + vertex 38.0969 -36.5276 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.203 -36.0604 -0.1 + vertex 38.1248 -36.8464 -0.1 + vertex 37.6954 -36.1853 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.9736 -36.3241 -0.1 + vertex 38.0969 -36.5276 -0.1 + vertex 38.0509 -36.4146 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.1248 -36.8464 -0.1 + vertex 37.203 -36.0604 -0.1 + vertex 38.103 -37.2562 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0969 -36.5276 -0.1 + vertex 37.9736 -36.3241 -0.1 + vertex 37.8576 -36.2498 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.119 -36.6694 -0.1 + vertex 37.8576 -36.2498 -0.1 + vertex 37.6954 -36.1853 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 37.3927 -37.9628 -0.1 + vertex 38.103 -37.2562 -0.1 + vertex 37.203 -36.0604 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 37.7849 -37.8018 -0.1 + vertex 38.0668 -37.4245 -0.1 + vertex 37.6132 -37.8903 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0668 -37.4245 -0.1 + vertex 37.7849 -37.8018 -0.1 + vertex 38.0057 -37.5705 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0057 -37.5705 -0.1 + vertex 37.7849 -37.8018 -0.1 + vertex 37.9137 -37.6957 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 37.6132 -37.8903 -0.1 + vertex 38.103 -37.2562 -0.1 + vertex 37.3927 -37.9628 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.103 -37.2562 -0.1 + vertex 37.6132 -37.8903 -0.1 + vertex 38.0668 -37.4245 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.203 -36.0604 -0.1 + vertex 37.1174 -38.0208 -0.1 + vertex 37.3927 -37.9628 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.203 -36.0604 -0.1 + vertex 36.7812 -38.066 -0.1 + vertex 37.1174 -38.0208 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.6812 -35.9318 -0.1 + vertex 36.7812 -38.066 -0.1 + vertex 37.203 -36.0604 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.9024 -38.1241 -0.1 + vertex 36.6812 -35.9318 -0.1 + vertex 36.5187 -35.8653 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.9024 -38.1241 -0.1 + vertex 36.5187 -35.8653 -0.1 + vertex 36.4089 -35.7834 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7085 -38.1497 -0.1 + vertex 36.4089 -35.7834 -0.1 + vertex 36.3422 -35.6758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7085 -38.1497 -0.1 + vertex 36.3422 -35.6758 -0.1 + vertex 36.3089 -35.532 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.444 -31.6395 -0.1 + vertex 33.8561 -30.1753 -0.1 + vertex 36.8389 -33.2656 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 33.1139 -32.0001 -0.1 + vertex 36.8389 -33.2656 -0.1 + vertex 33.8561 -30.1753 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.6812 -35.9318 -0.1 + vertex 35.9024 -38.1241 -0.1 + vertex 36.7812 -38.066 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.0766 -34.3595 -0.1 + vertex 36.3089 -35.532 -0.1 + vertex 36.2992 -35.3418 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.8389 -33.2656 -0.1 + vertex 33.1139 -32.0001 -0.1 + vertex 36.4479 -34.448 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 32.5373 -33.371 -0.1 + vertex 36.4479 -34.448 -0.1 + vertex 33.1139 -32.0001 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.4479 -34.448 -0.1 + vertex 32.5373 -33.371 -0.1 + vertex 36.3428 -34.844 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3428 -34.844 -0.1 + vertex 32.5373 -33.371 -0.1 + vertex 36.3035 -35.0946 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 32.0766 -34.3595 -0.1 + vertex 36.3035 -35.0946 -0.1 + vertex 32.5373 -33.371 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3035 -35.0946 -0.1 + vertex 32.0766 -34.3595 -0.1 + vertex 36.2992 -35.3418 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.4089 -35.7834 -0.1 + vertex 34.7085 -38.1497 -0.1 + vertex 35.9024 -38.1241 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3089 -35.532 -0.1 + vertex 32.0766 -34.3595 -0.1 + vertex 31.8743 -34.7329 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3089 -35.532 -0.1 + vertex 31.8743 -34.7329 -0.1 + vertex 34.7085 -38.1497 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7085 -38.1497 -0.1 + vertex 31.8743 -34.7329 -0.1 + vertex 33.1514 -38.1555 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.6824 -35.0376 -0.1 + vertex 33.1514 -38.1555 -0.1 + vertex 31.8743 -34.7329 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.4948 -35.2825 -0.1 + vertex 33.1514 -38.1555 -0.1 + vertex 31.6824 -35.0376 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.3052 -35.4767 -0.1 + vertex 33.1514 -38.1555 -0.1 + vertex 31.4948 -35.2825 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.1075 -35.6291 -0.1 + vertex 33.1514 -38.1555 -0.1 + vertex 31.3052 -35.4767 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.1514 -38.1555 -0.1 + vertex 31.1075 -35.6291 -0.1 + vertex 31.1824 -38.1409 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.8955 -35.7486 -0.1 + vertex 31.1824 -38.1409 -0.1 + vertex 31.1075 -35.6291 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.6629 -35.8443 -0.1 + vertex 31.1824 -38.1409 -0.1 + vertex 30.8955 -35.7486 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.4037 -35.9251 -0.1 + vertex 31.1824 -38.1409 -0.1 + vertex 30.6629 -35.8443 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.4037 -35.9251 -0.1 + vertex 29.8192 -38.0948 -0.1 + vertex 31.1824 -38.1409 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.7804 -36.0779 -0.1 + vertex 29.8192 -38.0948 -0.1 + vertex 30.4037 -35.9251 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.5705 -36.1356 -0.1 + vertex 29.8192 -38.0948 -0.1 + vertex 29.7804 -36.0779 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.3757 -36.2065 -0.1 + vertex 29.8192 -38.0948 -0.1 + vertex 29.5705 -36.1356 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.1966 -36.2895 -0.1 + vertex 29.8192 -38.0948 -0.1 + vertex 29.3757 -36.2065 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.8192 -38.0948 -0.1 + vertex 29.1966 -36.2895 -0.1 + vertex 29.3448 -38.0588 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.034 -36.3831 -0.1 + vertex 29.3448 -38.0588 -0.1 + vertex 29.1966 -36.2895 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.8888 -36.4863 -0.1 + vertex 29.3448 -38.0588 -0.1 + vertex 29.034 -36.3831 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.7617 -36.5978 -0.1 + vertex 29.3448 -38.0588 -0.1 + vertex 28.8888 -36.4863 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.6534 -36.7163 -0.1 + vertex 29.3448 -38.0588 -0.1 + vertex 28.7617 -36.5978 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.3448 -38.0588 -0.1 + vertex 28.6534 -36.7163 -0.1 + vertex 28.9979 -38.0135 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.5648 -36.8405 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.6534 -36.7163 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.4965 -36.9693 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.5648 -36.8405 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.4495 -37.1014 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.4965 -36.9693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.7706 -37.9584 -0.1 + vertex 28.5587 -37.7674 -0.1 + vertex 28.6548 -37.8931 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.4243 -37.2355 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.4495 -37.1014 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.9979 -38.0135 -0.1 + vertex 28.5587 -37.7674 -0.1 + vertex 28.7706 -37.9584 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.4219 -37.3704 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.4243 -37.2355 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 28.5587 -37.7674 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.4883 -37.6376 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 28.4883 -37.6376 -0.1 + vertex 28.9979 -38.0135 -0.1 + vertex 28.443 -37.5048 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.9979 -38.0135 -0.1 + vertex 28.4219 -37.3704 -0.1 + vertex 28.443 -37.5048 -0.1 + endloop + endfacet + facet normal -0.131122 -0.991366 0 + outer loop + vertex 46.8289 -19.1548 -0.1 + vertex 47.044 -19.1833 0 + vertex 46.8289 -19.1548 0 + endloop + endfacet + facet normal -0.131122 -0.991366 -0 + outer loop + vertex 47.044 -19.1833 0 + vertex 46.8289 -19.1548 -0.1 + vertex 47.044 -19.1833 -0.1 + endloop + endfacet + facet normal -0.230596 -0.97305 0 + outer loop + vertex 47.044 -19.1833 -0.1 + vertex 47.2257 -19.2263 0 + vertex 47.044 -19.1833 0 + endloop + endfacet + facet normal -0.230596 -0.97305 -0 + outer loop + vertex 47.2257 -19.2263 0 + vertex 47.044 -19.1833 -0.1 + vertex 47.2257 -19.2263 -0.1 + endloop + endfacet + facet normal -0.359881 -0.932998 0 + outer loop + vertex 47.2257 -19.2263 -0.1 + vertex 47.3799 -19.2858 0 + vertex 47.2257 -19.2263 0 + endloop + endfacet + facet normal -0.359881 -0.932998 -0 + outer loop + vertex 47.3799 -19.2858 0 + vertex 47.2257 -19.2263 -0.1 + vertex 47.3799 -19.2858 -0.1 + endloop + endfacet + facet normal -0.505271 -0.862961 0 + outer loop + vertex 47.3799 -19.2858 -0.1 + vertex 47.5127 -19.3635 0 + vertex 47.3799 -19.2858 0 + endloop + endfacet + facet normal -0.505271 -0.862961 -0 + outer loop + vertex 47.5127 -19.3635 0 + vertex 47.3799 -19.2858 -0.1 + vertex 47.5127 -19.3635 -0.1 + endloop + endfacet + facet normal -0.640123 -0.768272 0 + outer loop + vertex 47.5127 -19.3635 -0.1 + vertex 47.6302 -19.4614 0 + vertex 47.5127 -19.3635 0 + endloop + endfacet + facet normal -0.640123 -0.768272 -0 + outer loop + vertex 47.6302 -19.4614 0 + vertex 47.5127 -19.3635 -0.1 + vertex 47.6302 -19.4614 -0.1 + endloop + endfacet + facet normal -0.742266 -0.670106 0 + outer loop + vertex 47.7384 -19.5813 -0.1 + vertex 47.6302 -19.4614 0 + vertex 47.6302 -19.4614 -0.1 + endloop + endfacet + facet normal -0.742266 -0.670106 0 + outer loop + vertex 47.6302 -19.4614 0 + vertex 47.7384 -19.5813 -0.1 + vertex 47.7384 -19.5813 0 + endloop + endfacet + facet normal -0.797332 -0.60354 0 + outer loop + vertex 47.845 -19.7221 -0.1 + vertex 47.7384 -19.5813 0 + vertex 47.7384 -19.5813 -0.1 + endloop + endfacet + facet normal -0.797332 -0.60354 0 + outer loop + vertex 47.7384 -19.5813 0 + vertex 47.845 -19.7221 -0.1 + vertex 47.845 -19.7221 0 + endloop + endfacet + facet normal -0.85488 -0.518827 0 + outer loop + vertex 47.9233 -19.8512 -0.1 + vertex 47.845 -19.7221 0 + vertex 47.845 -19.7221 -0.1 + endloop + endfacet + facet normal -0.85488 -0.518827 0 + outer loop + vertex 47.845 -19.7221 0 + vertex 47.9233 -19.8512 -0.1 + vertex 47.9233 -19.8512 0 + endloop + endfacet + facet normal -0.930142 -0.367201 0 + outer loop + vertex 47.9745 -19.9807 -0.1 + vertex 47.9233 -19.8512 0 + vertex 47.9233 -19.8512 -0.1 + endloop + endfacet + facet normal -0.930142 -0.367201 0 + outer loop + vertex 47.9233 -19.8512 0 + vertex 47.9745 -19.9807 -0.1 + vertex 47.9745 -19.9807 0 + endloop + endfacet + facet normal -0.985048 -0.172278 0 + outer loop + vertex 47.9993 -20.1225 -0.1 + vertex 47.9745 -19.9807 0 + vertex 47.9745 -19.9807 -0.1 + endloop + endfacet + facet normal -0.985048 -0.172278 0 + outer loop + vertex 47.9745 -19.9807 0 + vertex 47.9993 -20.1225 -0.1 + vertex 47.9993 -20.1225 0 + endloop + endfacet + facet normal -0.999994 0.0034209 0 + outer loop + vertex 47.9987 -20.2887 -0.1 + vertex 47.9993 -20.1225 0 + vertex 47.9993 -20.1225 -0.1 + endloop + endfacet + facet normal -0.999994 0.0034209 0 + outer loop + vertex 47.9993 -20.1225 0 + vertex 47.9987 -20.2887 -0.1 + vertex 47.9987 -20.2887 0 + endloop + endfacet + facet normal -0.992465 0.122526 0 + outer loop + vertex 47.9737 -20.4912 -0.1 + vertex 47.9987 -20.2887 0 + vertex 47.9987 -20.2887 -0.1 + endloop + endfacet + facet normal -0.992465 0.122526 0 + outer loop + vertex 47.9987 -20.2887 0 + vertex 47.9737 -20.4912 -0.1 + vertex 47.9737 -20.4912 0 + endloop + endfacet + facet normal -0.97813 0.207995 0 + outer loop + vertex 47.8542 -21.0531 -0.1 + vertex 47.9737 -20.4912 0 + vertex 47.9737 -20.4912 -0.1 + endloop + endfacet + facet normal -0.97813 0.207995 0 + outer loop + vertex 47.9737 -20.4912 0 + vertex 47.8542 -21.0531 -0.1 + vertex 47.8542 -21.0531 0 + endloop + endfacet + facet normal -0.962149 0.272524 0 + outer loop + vertex 47.7155 -21.5429 -0.1 + vertex 47.8542 -21.0531 0 + vertex 47.8542 -21.0531 -0.1 + endloop + endfacet + facet normal -0.962149 0.272524 0 + outer loop + vertex 47.8542 -21.0531 0 + vertex 47.7155 -21.5429 -0.1 + vertex 47.7155 -21.5429 0 + endloop + endfacet + facet normal -0.934598 0.355705 0 + outer loop + vertex 47.5422 -21.9981 -0.1 + vertex 47.7155 -21.5429 0 + vertex 47.7155 -21.5429 -0.1 + endloop + endfacet + facet normal -0.934598 0.355705 0 + outer loop + vertex 47.7155 -21.5429 0 + vertex 47.5422 -21.9981 -0.1 + vertex 47.5422 -21.9981 0 + endloop + endfacet + facet normal -0.898902 0.438149 0 + outer loop + vertex 47.3383 -22.4165 -0.1 + vertex 47.5422 -21.9981 0 + vertex 47.5422 -21.9981 -0.1 + endloop + endfacet + facet normal -0.898902 0.438149 0 + outer loop + vertex 47.5422 -21.9981 0 + vertex 47.3383 -22.4165 -0.1 + vertex 47.3383 -22.4165 0 + endloop + endfacet + facet normal -0.854314 0.519757 0 + outer loop + vertex 47.1074 -22.796 -0.1 + vertex 47.3383 -22.4165 0 + vertex 47.3383 -22.4165 -0.1 + endloop + endfacet + facet normal -0.854314 0.519757 0 + outer loop + vertex 47.3383 -22.4165 0 + vertex 47.1074 -22.796 -0.1 + vertex 47.1074 -22.796 0 + endloop + endfacet + facet normal -0.79973 0.600359 0 + outer loop + vertex 46.8534 -23.1343 -0.1 + vertex 47.1074 -22.796 0 + vertex 47.1074 -22.796 -0.1 + endloop + endfacet + facet normal -0.79973 0.600359 0 + outer loop + vertex 47.1074 -22.796 0 + vertex 46.8534 -23.1343 -0.1 + vertex 46.8534 -23.1343 0 + endloop + endfacet + facet normal -0.73354 0.679647 0 + outer loop + vertex 46.5801 -23.4293 -0.1 + vertex 46.8534 -23.1343 0 + vertex 46.8534 -23.1343 -0.1 + endloop + endfacet + facet normal -0.73354 0.679647 0 + outer loop + vertex 46.8534 -23.1343 0 + vertex 46.5801 -23.4293 -0.1 + vertex 46.5801 -23.4293 0 + endloop + endfacet + facet normal -0.653573 0.756863 0 + outer loop + vertex 46.5801 -23.4293 -0.1 + vertex 46.2914 -23.6786 0 + vertex 46.5801 -23.4293 0 + endloop + endfacet + facet normal -0.653573 0.756863 0 + outer loop + vertex 46.2914 -23.6786 0 + vertex 46.5801 -23.4293 -0.1 + vertex 46.2914 -23.6786 -0.1 + endloop + endfacet + facet normal -0.557126 0.830428 0 + outer loop + vertex 46.2914 -23.6786 -0.1 + vertex 45.9909 -23.8802 0 + vertex 46.2914 -23.6786 0 + endloop + endfacet + facet normal -0.557126 0.830428 0 + outer loop + vertex 45.9909 -23.8802 0 + vertex 46.2914 -23.6786 -0.1 + vertex 45.9909 -23.8802 -0.1 + endloop + endfacet + facet normal -0.441145 0.897436 0 + outer loop + vertex 45.9909 -23.8802 -0.1 + vertex 45.6826 -24.0317 0 + vertex 45.9909 -23.8802 0 + endloop + endfacet + facet normal -0.441145 0.897436 0 + outer loop + vertex 45.6826 -24.0317 0 + vertex 45.9909 -23.8802 -0.1 + vertex 45.6826 -24.0317 -0.1 + endloop + endfacet + facet normal -0.303061 0.952971 0 + outer loop + vertex 45.6826 -24.0317 -0.1 + vertex 45.3703 -24.1311 0 + vertex 45.6826 -24.0317 0 + endloop + endfacet + facet normal -0.303061 0.952971 0 + outer loop + vertex 45.3703 -24.1311 0 + vertex 45.6826 -24.0317 -0.1 + vertex 45.3703 -24.1311 -0.1 + endloop + endfacet + facet normal -0.142218 0.989835 0 + outer loop + vertex 45.3703 -24.1311 -0.1 + vertex 45.0576 -24.176 0 + vertex 45.3703 -24.1311 0 + endloop + endfacet + facet normal -0.142218 0.989835 0 + outer loop + vertex 45.0576 -24.176 0 + vertex 45.3703 -24.1311 -0.1 + vertex 45.0576 -24.176 -0.1 + endloop + endfacet + facet normal 0.0378695 0.999283 -0 + outer loop + vertex 45.0576 -24.176 -0.1 + vertex 44.7485 -24.1643 0 + vertex 45.0576 -24.176 0 + endloop + endfacet + facet normal 0.0378695 0.999283 0 + outer loop + vertex 44.7485 -24.1643 0 + vertex 45.0576 -24.176 -0.1 + vertex 44.7485 -24.1643 -0.1 + endloop + endfacet + facet normal 0.227696 0.973732 -0 + outer loop + vertex 44.7485 -24.1643 -0.1 + vertex 44.4468 -24.0937 0 + vertex 44.7485 -24.1643 0 + endloop + endfacet + facet normal 0.227696 0.973732 0 + outer loop + vertex 44.4468 -24.0937 0 + vertex 44.7485 -24.1643 -0.1 + vertex 44.4468 -24.0937 -0.1 + endloop + endfacet + facet normal 0.412594 0.910915 -0 + outer loop + vertex 44.4468 -24.0937 -0.1 + vertex 44.1563 -23.9621 0 + vertex 44.4468 -24.0937 0 + endloop + endfacet + facet normal 0.412594 0.910915 0 + outer loop + vertex 44.1563 -23.9621 0 + vertex 44.4468 -24.0937 -0.1 + vertex 44.1563 -23.9621 -0.1 + endloop + endfacet + facet normal 0.57736 0.81649 -0 + outer loop + vertex 44.1563 -23.9621 -0.1 + vertex 43.8807 -23.7673 0 + vertex 44.1563 -23.9621 0 + endloop + endfacet + facet normal 0.57736 0.81649 0 + outer loop + vertex 43.8807 -23.7673 0 + vertex 44.1563 -23.9621 -0.1 + vertex 43.8807 -23.7673 -0.1 + endloop + endfacet + facet normal 0.711931 0.70225 0 + outer loop + vertex 43.8807 -23.7673 0 + vertex 43.6239 -23.5069 -0.1 + vertex 43.6239 -23.5069 0 + endloop + endfacet + facet normal 0.711931 0.70225 0 + outer loop + vertex 43.6239 -23.5069 -0.1 + vertex 43.8807 -23.7673 0 + vertex 43.8807 -23.7673 -0.1 + endloop + endfacet + facet normal 0.732645 0.680611 0 + outer loop + vertex 43.6239 -23.5069 0 + vertex 43.3873 -23.2523 -0.1 + vertex 43.3873 -23.2523 0 + endloop + endfacet + facet normal 0.732645 0.680611 0 + outer loop + vertex 43.3873 -23.2523 -0.1 + vertex 43.6239 -23.5069 0 + vertex 43.6239 -23.5069 -0.1 + endloop + endfacet + facet normal 0.659068 0.752084 -0 + outer loop + vertex 43.3873 -23.2523 -0.1 + vertex 43.1493 -23.0437 0 + vertex 43.3873 -23.2523 0 + endloop + endfacet + facet normal 0.659068 0.752084 0 + outer loop + vertex 43.1493 -23.0437 0 + vertex 43.3873 -23.2523 -0.1 + vertex 43.1493 -23.0437 -0.1 + endloop + endfacet + facet normal 0.55411 0.832444 -0 + outer loop + vertex 43.1493 -23.0437 -0.1 + vertex 42.9376 -22.9028 0 + vertex 43.1493 -23.0437 0 + endloop + endfacet + facet normal 0.55411 0.832444 0 + outer loop + vertex 42.9376 -22.9028 0 + vertex 43.1493 -23.0437 -0.1 + vertex 42.9376 -22.9028 -0.1 + endloop + endfacet + facet normal 0.402192 0.915555 -0 + outer loop + vertex 42.9376 -22.9028 -0.1 + vertex 42.8503 -22.8644 0 + vertex 42.9376 -22.9028 0 + endloop + endfacet + facet normal 0.402192 0.915555 0 + outer loop + vertex 42.8503 -22.8644 0 + vertex 42.9376 -22.9028 -0.1 + vertex 42.8503 -22.8644 -0.1 + endloop + endfacet + facet normal 0.186876 0.982384 -0 + outer loop + vertex 42.8503 -22.8644 -0.1 + vertex 42.7799 -22.851 0 + vertex 42.8503 -22.8644 0 + endloop + endfacet + facet normal 0.186876 0.982384 0 + outer loop + vertex 42.7799 -22.851 0 + vertex 42.8503 -22.8644 -0.1 + vertex 42.7799 -22.851 -0.1 + endloop + endfacet + facet normal -0.254315 0.967121 0 + outer loop + vertex 42.7799 -22.851 -0.1 + vertex 42.6968 -22.8729 0 + vertex 42.7799 -22.851 0 + endloop + endfacet + facet normal -0.254315 0.967121 0 + outer loop + vertex 42.6968 -22.8729 0 + vertex 42.7799 -22.851 -0.1 + vertex 42.6968 -22.8729 -0.1 + endloop + endfacet + facet normal -0.451219 0.892413 0 + outer loop + vertex 42.6968 -22.8729 -0.1 + vertex 42.5728 -22.9356 0 + vertex 42.6968 -22.8729 0 + endloop + endfacet + facet normal -0.451219 0.892413 0 + outer loop + vertex 42.5728 -22.9356 0 + vertex 42.6968 -22.8729 -0.1 + vertex 42.5728 -22.9356 -0.1 + endloop + endfacet + facet normal -0.553713 0.832708 0 + outer loop + vertex 42.5728 -22.9356 -0.1 + vertex 42.2267 -23.1657 0 + vertex 42.5728 -22.9356 0 + endloop + endfacet + facet normal -0.553713 0.832708 0 + outer loop + vertex 42.2267 -23.1657 0 + vertex 42.5728 -22.9356 -0.1 + vertex 42.2267 -23.1657 -0.1 + endloop + endfacet + facet normal -0.614835 0.788656 0 + outer loop + vertex 42.2267 -23.1657 -0.1 + vertex 41.7898 -23.5063 0 + vertex 42.2267 -23.1657 0 + endloop + endfacet + facet normal -0.614835 0.788656 0 + outer loop + vertex 41.7898 -23.5063 0 + vertex 42.2267 -23.1657 -0.1 + vertex 41.7898 -23.5063 -0.1 + endloop + endfacet + facet normal -0.655263 0.755401 0 + outer loop + vertex 41.7898 -23.5063 -0.1 + vertex 41.3103 -23.9223 0 + vertex 41.7898 -23.5063 0 + endloop + endfacet + facet normal -0.655263 0.755401 0 + outer loop + vertex 41.3103 -23.9223 0 + vertex 41.7898 -23.5063 -0.1 + vertex 41.3103 -23.9223 -0.1 + endloop + endfacet + facet normal -0.681106 0.732185 0 + outer loop + vertex 41.3103 -23.9223 -0.1 + vertex 40.922 -24.2835 0 + vertex 41.3103 -23.9223 0 + endloop + endfacet + facet normal -0.681106 0.732185 0 + outer loop + vertex 40.922 -24.2835 0 + vertex 41.3103 -23.9223 -0.1 + vertex 40.922 -24.2835 -0.1 + endloop + endfacet + facet normal -0.723872 0.689934 0 + outer loop + vertex 40.604 -24.6171 -0.1 + vertex 40.922 -24.2835 0 + vertex 40.922 -24.2835 -0.1 + endloop + endfacet + facet normal -0.723872 0.689934 0 + outer loop + vertex 40.922 -24.2835 0 + vertex 40.604 -24.6171 -0.1 + vertex 40.604 -24.6171 0 + endloop + endfacet + facet normal -0.795563 0.60587 0 + outer loop + vertex 40.3218 -24.9877 -0.1 + vertex 40.604 -24.6171 0 + vertex 40.604 -24.6171 -0.1 + endloop + endfacet + facet normal -0.795563 0.60587 0 + outer loop + vertex 40.604 -24.6171 0 + vertex 40.3218 -24.9877 -0.1 + vertex 40.3218 -24.9877 0 + endloop + endfacet + facet normal -0.859211 0.511621 0 + outer loop + vertex 40.0406 -25.46 -0.1 + vertex 40.3218 -24.9877 0 + vertex 40.3218 -24.9877 -0.1 + endloop + endfacet + facet normal -0.859211 0.511621 0 + outer loop + vertex 40.3218 -24.9877 0 + vertex 40.0406 -25.46 -0.1 + vertex 40.0406 -25.46 0 + endloop + endfacet + facet normal -0.896877 0.442281 0 + outer loop + vertex 39.7256 -26.0988 -0.1 + vertex 40.0406 -25.46 0 + vertex 40.0406 -25.46 -0.1 + endloop + endfacet + facet normal -0.896877 0.442281 0 + outer loop + vertex 40.0406 -25.46 0 + vertex 39.7256 -26.0988 -0.1 + vertex 39.7256 -26.0988 0 + endloop + endfacet + facet normal -0.915036 0.403372 0 + outer loop + vertex 39.342 -26.9688 -0.1 + vertex 39.7256 -26.0988 0 + vertex 39.7256 -26.0988 -0.1 + endloop + endfacet + facet normal -0.915036 0.403372 0 + outer loop + vertex 39.7256 -26.0988 0 + vertex 39.342 -26.9688 -0.1 + vertex 39.342 -26.9688 0 + endloop + endfacet + facet normal -0.924339 0.381572 0 + outer loop + vertex 38.2305 -29.6614 -0.1 + vertex 39.342 -26.9688 0 + vertex 39.342 -26.9688 -0.1 + endloop + endfacet + facet normal -0.924339 0.381572 0 + outer loop + vertex 39.342 -26.9688 0 + vertex 38.2305 -29.6614 -0.1 + vertex 38.2305 -29.6614 0 + endloop + endfacet + facet normal -0.929232 0.369498 0 + outer loop + vertex 37.444 -31.6395 -0.1 + vertex 38.2305 -29.6614 0 + vertex 38.2305 -29.6614 -0.1 + endloop + endfacet + facet normal -0.929232 0.369498 0 + outer loop + vertex 38.2305 -29.6614 0 + vertex 37.444 -31.6395 -0.1 + vertex 37.444 -31.6395 0 + endloop + endfacet + facet normal -0.937221 0.348736 0 + outer loop + vertex 36.8389 -33.2656 -0.1 + vertex 37.444 -31.6395 0 + vertex 37.444 -31.6395 -0.1 + endloop + endfacet + facet normal -0.937221 0.348736 0 + outer loop + vertex 37.444 -31.6395 0 + vertex 36.8389 -33.2656 -0.1 + vertex 36.8389 -33.2656 0 + endloop + endfacet + facet normal -0.949427 0.313989 0 + outer loop + vertex 36.4479 -34.448 -0.1 + vertex 36.8389 -33.2656 0 + vertex 36.8389 -33.2656 -0.1 + endloop + endfacet + facet normal -0.949427 0.313989 0 + outer loop + vertex 36.8389 -33.2656 0 + vertex 36.4479 -34.448 -0.1 + vertex 36.4479 -34.448 0 + endloop + endfacet + facet normal -0.966574 0.256387 0 + outer loop + vertex 36.3428 -34.844 -0.1 + vertex 36.4479 -34.448 0 + vertex 36.4479 -34.448 -0.1 + endloop + endfacet + facet normal -0.966574 0.256387 0 + outer loop + vertex 36.4479 -34.448 0 + vertex 36.3428 -34.844 -0.1 + vertex 36.3428 -34.844 0 + endloop + endfacet + facet normal -0.987922 0.154951 0 + outer loop + vertex 36.3035 -35.0946 -0.1 + vertex 36.3428 -34.844 0 + vertex 36.3428 -34.844 -0.1 + endloop + endfacet + facet normal -0.987922 0.154951 0 + outer loop + vertex 36.3428 -34.844 0 + vertex 36.3035 -35.0946 -0.1 + vertex 36.3035 -35.0946 0 + endloop + endfacet + facet normal -0.999846 0.0175753 0 + outer loop + vertex 36.2992 -35.3418 -0.1 + vertex 36.3035 -35.0946 0 + vertex 36.3035 -35.0946 -0.1 + endloop + endfacet + facet normal -0.999846 0.0175753 0 + outer loop + vertex 36.3035 -35.0946 0 + vertex 36.2992 -35.3418 -0.1 + vertex 36.2992 -35.3418 0 + endloop + endfacet + facet normal -0.99871 -0.0507764 0 + outer loop + vertex 36.3089 -35.532 -0.1 + vertex 36.2992 -35.3418 0 + vertex 36.2992 -35.3418 -0.1 + endloop + endfacet + facet normal -0.99871 -0.0507764 0 + outer loop + vertex 36.2992 -35.3418 0 + vertex 36.3089 -35.532 -0.1 + vertex 36.3089 -35.532 0 + endloop + endfacet + facet normal -0.974112 -0.226068 0 + outer loop + vertex 36.3422 -35.6758 -0.1 + vertex 36.3089 -35.532 0 + vertex 36.3089 -35.532 -0.1 + endloop + endfacet + facet normal -0.974112 -0.226068 0 + outer loop + vertex 36.3089 -35.532 0 + vertex 36.3422 -35.6758 -0.1 + vertex 36.3422 -35.6758 0 + endloop + endfacet + facet normal -0.84992 -0.526911 0 + outer loop + vertex 36.4089 -35.7834 -0.1 + vertex 36.3422 -35.6758 0 + vertex 36.3422 -35.6758 -0.1 + endloop + endfacet + facet normal -0.84992 -0.526911 0 + outer loop + vertex 36.3422 -35.6758 0 + vertex 36.4089 -35.7834 -0.1 + vertex 36.4089 -35.7834 0 + endloop + endfacet + facet normal -0.59793 -0.801548 0 + outer loop + vertex 36.4089 -35.7834 -0.1 + vertex 36.5187 -35.8653 0 + vertex 36.4089 -35.7834 0 + endloop + endfacet + facet normal -0.59793 -0.801548 -0 + outer loop + vertex 36.5187 -35.8653 0 + vertex 36.4089 -35.7834 -0.1 + vertex 36.5187 -35.8653 -0.1 + endloop + endfacet + facet normal -0.37896 -0.925413 0 + outer loop + vertex 36.5187 -35.8653 -0.1 + vertex 36.6812 -35.9318 0 + vertex 36.5187 -35.8653 0 + endloop + endfacet + facet normal -0.37896 -0.925413 -0 + outer loop + vertex 36.6812 -35.9318 0 + vertex 36.5187 -35.8653 -0.1 + vertex 36.6812 -35.9318 -0.1 + endloop + endfacet + facet normal -0.239239 -0.970961 0 + outer loop + vertex 36.6812 -35.9318 -0.1 + vertex 37.203 -36.0604 0 + vertex 36.6812 -35.9318 0 + endloop + endfacet + facet normal -0.239239 -0.970961 -0 + outer loop + vertex 37.203 -36.0604 0 + vertex 36.6812 -35.9318 -0.1 + vertex 37.203 -36.0604 -0.1 + endloop + endfacet + facet normal -0.245847 -0.969309 0 + outer loop + vertex 37.203 -36.0604 -0.1 + vertex 37.6954 -36.1853 0 + vertex 37.203 -36.0604 0 + endloop + endfacet + facet normal -0.245847 -0.969309 -0 + outer loop + vertex 37.6954 -36.1853 0 + vertex 37.203 -36.0604 -0.1 + vertex 37.6954 -36.1853 -0.1 + endloop + endfacet + facet normal -0.369675 -0.929161 0 + outer loop + vertex 37.6954 -36.1853 -0.1 + vertex 37.8576 -36.2498 0 + vertex 37.6954 -36.1853 0 + endloop + endfacet + facet normal -0.369675 -0.929161 -0 + outer loop + vertex 37.8576 -36.2498 0 + vertex 37.6954 -36.1853 -0.1 + vertex 37.8576 -36.2498 -0.1 + endloop + endfacet + facet normal -0.539517 -0.841975 0 + outer loop + vertex 37.8576 -36.2498 -0.1 + vertex 37.9736 -36.3241 0 + vertex 37.8576 -36.2498 0 + endloop + endfacet + facet normal -0.539517 -0.841975 -0 + outer loop + vertex 37.9736 -36.3241 0 + vertex 37.8576 -36.2498 -0.1 + vertex 37.9736 -36.3241 -0.1 + endloop + endfacet + facet normal -0.760366 -0.649494 0 + outer loop + vertex 38.0509 -36.4146 -0.1 + vertex 37.9736 -36.3241 0 + vertex 37.9736 -36.3241 -0.1 + endloop + endfacet + facet normal -0.760366 -0.649494 0 + outer loop + vertex 37.9736 -36.3241 0 + vertex 38.0509 -36.4146 -0.1 + vertex 38.0509 -36.4146 0 + endloop + endfacet + facet normal -0.926147 -0.377163 0 + outer loop + vertex 38.0969 -36.5276 -0.1 + vertex 38.0509 -36.4146 0 + vertex 38.0509 -36.4146 -0.1 + endloop + endfacet + facet normal -0.926147 -0.377163 0 + outer loop + vertex 38.0509 -36.4146 0 + vertex 38.0969 -36.5276 -0.1 + vertex 38.0969 -36.5276 0 + endloop + endfacet + facet normal -0.988006 -0.154417 0 + outer loop + vertex 38.119 -36.6694 -0.1 + vertex 38.0969 -36.5276 0 + vertex 38.0969 -36.5276 -0.1 + endloop + endfacet + facet normal -0.988006 -0.154417 0 + outer loop + vertex 38.0969 -36.5276 0 + vertex 38.119 -36.6694 -0.1 + vertex 38.119 -36.6694 0 + endloop + endfacet + facet normal -0.999475 -0.0324031 0 + outer loop + vertex 38.1248 -36.8464 -0.1 + vertex 38.119 -36.6694 0 + vertex 38.119 -36.6694 -0.1 + endloop + endfacet + facet normal -0.999475 -0.0324031 0 + outer loop + vertex 38.119 -36.6694 0 + vertex 38.1248 -36.8464 -0.1 + vertex 38.1248 -36.8464 0 + endloop + endfacet + facet normal -0.99859 0.0530808 0 + outer loop + vertex 38.103 -37.2562 -0.1 + vertex 38.1248 -36.8464 0 + vertex 38.1248 -36.8464 -0.1 + endloop + endfacet + facet normal -0.99859 0.0530808 0 + outer loop + vertex 38.1248 -36.8464 0 + vertex 38.103 -37.2562 -0.1 + vertex 38.103 -37.2562 0 + endloop + endfacet + facet normal -0.977614 0.210405 0 + outer loop + vertex 38.0668 -37.4245 -0.1 + vertex 38.103 -37.2562 0 + vertex 38.103 -37.2562 -0.1 + endloop + endfacet + facet normal -0.977614 0.210405 0 + outer loop + vertex 38.103 -37.2562 0 + vertex 38.0668 -37.4245 -0.1 + vertex 38.0668 -37.4245 0 + endloop + endfacet + facet normal -0.922461 0.38609 0 + outer loop + vertex 38.0057 -37.5705 -0.1 + vertex 38.0668 -37.4245 0 + vertex 38.0668 -37.4245 -0.1 + endloop + endfacet + facet normal -0.922461 0.38609 0 + outer loop + vertex 38.0668 -37.4245 0 + vertex 38.0057 -37.5705 -0.1 + vertex 38.0057 -37.5705 0 + endloop + endfacet + facet normal -0.806037 0.591865 0 + outer loop + vertex 37.9137 -37.6957 -0.1 + vertex 38.0057 -37.5705 0 + vertex 38.0057 -37.5705 -0.1 + endloop + endfacet + facet normal -0.806037 0.591865 0 + outer loop + vertex 38.0057 -37.5705 0 + vertex 37.9137 -37.6957 -0.1 + vertex 37.9137 -37.6957 0 + endloop + endfacet + facet normal -0.635642 0.771984 0 + outer loop + vertex 37.9137 -37.6957 -0.1 + vertex 37.7849 -37.8018 0 + vertex 37.9137 -37.6957 0 + endloop + endfacet + facet normal -0.635642 0.771984 0 + outer loop + vertex 37.7849 -37.8018 0 + vertex 37.9137 -37.6957 -0.1 + vertex 37.7849 -37.8018 -0.1 + endloop + endfacet + facet normal -0.458146 0.888877 0 + outer loop + vertex 37.7849 -37.8018 -0.1 + vertex 37.6132 -37.8903 0 + vertex 37.7849 -37.8018 0 + endloop + endfacet + facet normal -0.458146 0.888877 0 + outer loop + vertex 37.6132 -37.8903 0 + vertex 37.7849 -37.8018 -0.1 + vertex 37.6132 -37.8903 -0.1 + endloop + endfacet + facet normal -0.312246 0.950001 0 + outer loop + vertex 37.6132 -37.8903 -0.1 + vertex 37.3927 -37.9628 0 + vertex 37.6132 -37.8903 0 + endloop + endfacet + facet normal -0.312246 0.950001 0 + outer loop + vertex 37.3927 -37.9628 0 + vertex 37.6132 -37.8903 -0.1 + vertex 37.3927 -37.9628 -0.1 + endloop + endfacet + facet normal -0.206263 0.978497 0 + outer loop + vertex 37.3927 -37.9628 -0.1 + vertex 37.1174 -38.0208 0 + vertex 37.3927 -37.9628 0 + endloop + endfacet + facet normal -0.206263 0.978497 0 + outer loop + vertex 37.1174 -38.0208 0 + vertex 37.3927 -37.9628 -0.1 + vertex 37.1174 -38.0208 -0.1 + endloop + endfacet + facet normal -0.133215 0.991087 0 + outer loop + vertex 37.1174 -38.0208 -0.1 + vertex 36.7812 -38.066 0 + vertex 37.1174 -38.0208 0 + endloop + endfacet + facet normal -0.133215 0.991087 0 + outer loop + vertex 36.7812 -38.066 0 + vertex 37.1174 -38.0208 -0.1 + vertex 36.7812 -38.066 -0.1 + endloop + endfacet + facet normal -0.0659814 0.997821 0 + outer loop + vertex 36.7812 -38.066 -0.1 + vertex 35.9024 -38.1241 0 + vertex 36.7812 -38.066 0 + endloop + endfacet + facet normal -0.0659814 0.997821 0 + outer loop + vertex 35.9024 -38.1241 0 + vertex 36.7812 -38.066 -0.1 + vertex 35.9024 -38.1241 -0.1 + endloop + endfacet + facet normal -0.0214493 0.99977 0 + outer loop + vertex 35.9024 -38.1241 -0.1 + vertex 34.7085 -38.1497 0 + vertex 35.9024 -38.1241 0 + endloop + endfacet + facet normal -0.0214493 0.99977 0 + outer loop + vertex 34.7085 -38.1497 0 + vertex 35.9024 -38.1241 -0.1 + vertex 34.7085 -38.1497 -0.1 + endloop + endfacet + facet normal -0.00368212 0.999993 0 + outer loop + vertex 34.7085 -38.1497 -0.1 + vertex 33.1514 -38.1555 0 + vertex 34.7085 -38.1497 0 + endloop + endfacet + facet normal -0.00368212 0.999993 0 + outer loop + vertex 33.1514 -38.1555 0 + vertex 34.7085 -38.1497 -0.1 + vertex 33.1514 -38.1555 -0.1 + endloop + endfacet + facet normal 0.00738333 0.999973 -0 + outer loop + vertex 33.1514 -38.1555 -0.1 + vertex 31.1824 -38.1409 0 + vertex 33.1514 -38.1555 0 + endloop + endfacet + facet normal 0.00738333 0.999973 0 + outer loop + vertex 31.1824 -38.1409 0 + vertex 33.1514 -38.1555 -0.1 + vertex 31.1824 -38.1409 -0.1 + endloop + endfacet + facet normal 0.0337924 0.999429 -0 + outer loop + vertex 31.1824 -38.1409 -0.1 + vertex 29.8192 -38.0948 0 + vertex 31.1824 -38.1409 0 + endloop + endfacet + facet normal 0.0337924 0.999429 0 + outer loop + vertex 29.8192 -38.0948 0 + vertex 31.1824 -38.1409 -0.1 + vertex 29.8192 -38.0948 -0.1 + endloop + endfacet + facet normal 0.0757553 0.997126 -0 + outer loop + vertex 29.8192 -38.0948 -0.1 + vertex 29.3448 -38.0588 0 + vertex 29.8192 -38.0948 0 + endloop + endfacet + facet normal 0.0757553 0.997126 0 + outer loop + vertex 29.3448 -38.0588 0 + vertex 29.8192 -38.0948 -0.1 + vertex 29.3448 -38.0588 -0.1 + endloop + endfacet + facet normal 0.129569 0.99157 -0 + outer loop + vertex 29.3448 -38.0588 -0.1 + vertex 28.9979 -38.0135 0 + vertex 29.3448 -38.0588 0 + endloop + endfacet + facet normal 0.129569 0.99157 0 + outer loop + vertex 28.9979 -38.0135 0 + vertex 29.3448 -38.0588 -0.1 + vertex 28.9979 -38.0135 -0.1 + endloop + endfacet + facet normal 0.235468 0.971882 -0 + outer loop + vertex 28.9979 -38.0135 -0.1 + vertex 28.7706 -37.9584 0 + vertex 28.9979 -38.0135 0 + endloop + endfacet + facet normal 0.235468 0.971882 0 + outer loop + vertex 28.7706 -37.9584 0 + vertex 28.9979 -38.0135 -0.1 + vertex 28.7706 -37.9584 -0.1 + endloop + endfacet + facet normal 0.491281 0.871001 -0 + outer loop + vertex 28.7706 -37.9584 -0.1 + vertex 28.6548 -37.8931 0 + vertex 28.7706 -37.9584 0 + endloop + endfacet + facet normal 0.491281 0.871001 0 + outer loop + vertex 28.6548 -37.8931 0 + vertex 28.7706 -37.9584 -0.1 + vertex 28.6548 -37.8931 -0.1 + endloop + endfacet + facet normal 0.794168 0.607698 0 + outer loop + vertex 28.6548 -37.8931 0 + vertex 28.5587 -37.7674 -0.1 + vertex 28.5587 -37.7674 0 + endloop + endfacet + facet normal 0.794168 0.607698 0 + outer loop + vertex 28.5587 -37.7674 -0.1 + vertex 28.6548 -37.8931 0 + vertex 28.6548 -37.8931 -0.1 + endloop + endfacet + facet normal 0.879213 0.47643 0 + outer loop + vertex 28.5587 -37.7674 0 + vertex 28.4883 -37.6376 -0.1 + vertex 28.4883 -37.6376 0 + endloop + endfacet + facet normal 0.879213 0.47643 0 + outer loop + vertex 28.4883 -37.6376 -0.1 + vertex 28.5587 -37.7674 0 + vertex 28.5587 -37.7674 -0.1 + endloop + endfacet + facet normal 0.946363 0.323104 0 + outer loop + vertex 28.4883 -37.6376 0 + vertex 28.443 -37.5048 -0.1 + vertex 28.443 -37.5048 0 + endloop + endfacet + facet normal 0.946363 0.323104 0 + outer loop + vertex 28.443 -37.5048 -0.1 + vertex 28.4883 -37.6376 0 + vertex 28.4883 -37.6376 -0.1 + endloop + endfacet + facet normal 0.987941 0.154833 0 + outer loop + vertex 28.443 -37.5048 0 + vertex 28.4219 -37.3704 -0.1 + vertex 28.4219 -37.3704 0 + endloop + endfacet + facet normal 0.987941 0.154833 0 + outer loop + vertex 28.4219 -37.3704 -0.1 + vertex 28.443 -37.5048 0 + vertex 28.443 -37.5048 -0.1 + endloop + endfacet + facet normal 0.99984 -0.0178826 0 + outer loop + vertex 28.4219 -37.3704 0 + vertex 28.4243 -37.2355 -0.1 + vertex 28.4243 -37.2355 0 + endloop + endfacet + facet normal 0.99984 -0.0178826 0 + outer loop + vertex 28.4243 -37.2355 -0.1 + vertex 28.4219 -37.3704 0 + vertex 28.4219 -37.3704 -0.1 + endloop + endfacet + facet normal 0.982895 -0.184165 0 + outer loop + vertex 28.4243 -37.2355 0 + vertex 28.4495 -37.1014 -0.1 + vertex 28.4495 -37.1014 0 + endloop + endfacet + facet normal 0.982895 -0.184165 0 + outer loop + vertex 28.4495 -37.1014 -0.1 + vertex 28.4243 -37.2355 0 + vertex 28.4243 -37.2355 -0.1 + endloop + endfacet + facet normal 0.941957 -0.335735 0 + outer loop + vertex 28.4495 -37.1014 0 + vertex 28.4965 -36.9693 -0.1 + vertex 28.4965 -36.9693 0 + endloop + endfacet + facet normal 0.941957 -0.335735 0 + outer loop + vertex 28.4965 -36.9693 -0.1 + vertex 28.4495 -37.1014 0 + vertex 28.4495 -37.1014 -0.1 + endloop + endfacet + facet normal 0.883597 -0.468248 0 + outer loop + vertex 28.4965 -36.9693 0 + vertex 28.5648 -36.8405 -0.1 + vertex 28.5648 -36.8405 0 + endloop + endfacet + facet normal 0.883597 -0.468248 0 + outer loop + vertex 28.5648 -36.8405 -0.1 + vertex 28.4965 -36.9693 0 + vertex 28.4965 -36.9693 -0.1 + endloop + endfacet + facet normal 0.814058 -0.580783 0 + outer loop + vertex 28.5648 -36.8405 0 + vertex 28.6534 -36.7163 -0.1 + vertex 28.6534 -36.7163 0 + endloop + endfacet + facet normal 0.814058 -0.580783 0 + outer loop + vertex 28.6534 -36.7163 -0.1 + vertex 28.5648 -36.8405 0 + vertex 28.5648 -36.8405 -0.1 + endloop + endfacet + facet normal 0.738176 -0.674608 0 + outer loop + vertex 28.6534 -36.7163 0 + vertex 28.7617 -36.5978 -0.1 + vertex 28.7617 -36.5978 0 + endloop + endfacet + facet normal 0.738176 -0.674608 0 + outer loop + vertex 28.7617 -36.5978 -0.1 + vertex 28.6534 -36.7163 0 + vertex 28.6534 -36.7163 -0.1 + endloop + endfacet + facet normal 0.659231 -0.75194 0 + outer loop + vertex 28.7617 -36.5978 -0.1 + vertex 28.8888 -36.4863 0 + vertex 28.7617 -36.5978 0 + endloop + endfacet + facet normal 0.659231 -0.75194 0 + outer loop + vertex 28.8888 -36.4863 0 + vertex 28.7617 -36.5978 -0.1 + vertex 28.8888 -36.4863 -0.1 + endloop + endfacet + facet normal 0.57926 -0.815143 0 + outer loop + vertex 28.8888 -36.4863 -0.1 + vertex 29.034 -36.3831 0 + vertex 28.8888 -36.4863 0 + endloop + endfacet + facet normal 0.57926 -0.815143 0 + outer loop + vertex 29.034 -36.3831 0 + vertex 28.8888 -36.4863 -0.1 + vertex 29.034 -36.3831 -0.1 + endloop + endfacet + facet normal 0.499403 -0.86637 0 + outer loop + vertex 29.034 -36.3831 -0.1 + vertex 29.1966 -36.2895 0 + vertex 29.034 -36.3831 0 + endloop + endfacet + facet normal 0.499403 -0.86637 0 + outer loop + vertex 29.1966 -36.2895 0 + vertex 29.034 -36.3831 -0.1 + vertex 29.1966 -36.2895 -0.1 + endloop + endfacet + facet normal 0.420274 -0.907397 0 + outer loop + vertex 29.1966 -36.2895 -0.1 + vertex 29.3757 -36.2065 0 + vertex 29.1966 -36.2895 0 + endloop + endfacet + facet normal 0.420274 -0.907397 0 + outer loop + vertex 29.3757 -36.2065 0 + vertex 29.1966 -36.2895 -0.1 + vertex 29.3757 -36.2065 -0.1 + endloop + endfacet + facet normal 0.34216 -0.939642 0 + outer loop + vertex 29.3757 -36.2065 -0.1 + vertex 29.5705 -36.1356 0 + vertex 29.3757 -36.2065 0 + endloop + endfacet + facet normal 0.34216 -0.939642 0 + outer loop + vertex 29.5705 -36.1356 0 + vertex 29.3757 -36.2065 -0.1 + vertex 29.5705 -36.1356 -0.1 + endloop + endfacet + facet normal 0.265166 -0.964203 0 + outer loop + vertex 29.5705 -36.1356 -0.1 + vertex 29.7804 -36.0779 0 + vertex 29.5705 -36.1356 0 + endloop + endfacet + facet normal 0.265166 -0.964203 0 + outer loop + vertex 29.7804 -36.0779 0 + vertex 29.5705 -36.1356 -0.1 + vertex 29.7804 -36.0779 -0.1 + endloop + endfacet + facet normal 0.237962 -0.971274 0 + outer loop + vertex 29.7804 -36.0779 -0.1 + vertex 30.4037 -35.9251 0 + vertex 29.7804 -36.0779 0 + endloop + endfacet + facet normal 0.237962 -0.971274 0 + outer loop + vertex 30.4037 -35.9251 0 + vertex 29.7804 -36.0779 -0.1 + vertex 30.4037 -35.9251 -0.1 + endloop + endfacet + facet normal 0.297523 -0.954715 0 + outer loop + vertex 30.4037 -35.9251 -0.1 + vertex 30.6629 -35.8443 0 + vertex 30.4037 -35.9251 0 + endloop + endfacet + facet normal 0.297523 -0.954715 0 + outer loop + vertex 30.6629 -35.8443 0 + vertex 30.4037 -35.9251 -0.1 + vertex 30.6629 -35.8443 -0.1 + endloop + endfacet + facet normal 0.380574 -0.92475 0 + outer loop + vertex 30.6629 -35.8443 -0.1 + vertex 30.8955 -35.7486 0 + vertex 30.6629 -35.8443 0 + endloop + endfacet + facet normal 0.380574 -0.92475 0 + outer loop + vertex 30.8955 -35.7486 0 + vertex 30.6629 -35.8443 -0.1 + vertex 30.8955 -35.7486 -0.1 + endloop + endfacet + facet normal 0.491191 -0.871052 0 + outer loop + vertex 30.8955 -35.7486 -0.1 + vertex 31.1075 -35.6291 0 + vertex 30.8955 -35.7486 0 + endloop + endfacet + facet normal 0.491191 -0.871052 0 + outer loop + vertex 31.1075 -35.6291 0 + vertex 30.8955 -35.7486 -0.1 + vertex 31.1075 -35.6291 -0.1 + endloop + endfacet + facet normal 0.610497 -0.792019 0 + outer loop + vertex 31.1075 -35.6291 -0.1 + vertex 31.3052 -35.4767 0 + vertex 31.1075 -35.6291 0 + endloop + endfacet + facet normal 0.610497 -0.792019 0 + outer loop + vertex 31.3052 -35.4767 0 + vertex 31.1075 -35.6291 -0.1 + vertex 31.3052 -35.4767 -0.1 + endloop + endfacet + facet normal 0.71556 -0.698551 0 + outer loop + vertex 31.3052 -35.4767 0 + vertex 31.4948 -35.2825 -0.1 + vertex 31.4948 -35.2825 0 + endloop + endfacet + facet normal 0.71556 -0.698551 0 + outer loop + vertex 31.4948 -35.2825 -0.1 + vertex 31.3052 -35.4767 0 + vertex 31.3052 -35.4767 -0.1 + endloop + endfacet + facet normal 0.793854 -0.608109 0 + outer loop + vertex 31.4948 -35.2825 0 + vertex 31.6824 -35.0376 -0.1 + vertex 31.6824 -35.0376 0 + endloop + endfacet + facet normal 0.793854 -0.608109 0 + outer loop + vertex 31.6824 -35.0376 -0.1 + vertex 31.4948 -35.2825 0 + vertex 31.4948 -35.2825 -0.1 + endloop + endfacet + facet normal 0.846168 -0.532916 0 + outer loop + vertex 31.6824 -35.0376 0 + vertex 31.8743 -34.7329 -0.1 + vertex 31.8743 -34.7329 0 + endloop + endfacet + facet normal 0.846168 -0.532916 0 + outer loop + vertex 31.8743 -34.7329 -0.1 + vertex 31.6824 -35.0376 0 + vertex 31.6824 -35.0376 -0.1 + endloop + endfacet + facet normal 0.879213 -0.47643 0 + outer loop + vertex 31.8743 -34.7329 0 + vertex 32.0766 -34.3595 -0.1 + vertex 32.0766 -34.3595 0 + endloop + endfacet + facet normal 0.879213 -0.47643 0 + outer loop + vertex 32.0766 -34.3595 -0.1 + vertex 31.8743 -34.7329 0 + vertex 31.8743 -34.7329 -0.1 + endloop + endfacet + facet normal 0.906414 -0.422389 0 + outer loop + vertex 32.0766 -34.3595 0 + vertex 32.5373 -33.371 -0.1 + vertex 32.5373 -33.371 0 + endloop + endfacet + facet normal 0.906414 -0.422389 0 + outer loop + vertex 32.5373 -33.371 -0.1 + vertex 32.0766 -34.3595 0 + vertex 32.0766 -34.3595 -0.1 + endloop + endfacet + facet normal 0.921762 -0.387755 0 + outer loop + vertex 32.5373 -33.371 0 + vertex 33.1139 -32.0001 -0.1 + vertex 33.1139 -32.0001 0 + endloop + endfacet + facet normal 0.921762 -0.387755 0 + outer loop + vertex 33.1139 -32.0001 -0.1 + vertex 32.5373 -33.371 0 + vertex 32.5373 -33.371 -0.1 + endloop + endfacet + facet normal 0.926317 -0.376745 0 + outer loop + vertex 33.1139 -32.0001 0 + vertex 33.8561 -30.1753 -0.1 + vertex 33.8561 -30.1753 0 + endloop + endfacet + facet normal 0.926317 -0.376745 0 + outer loop + vertex 33.8561 -30.1753 -0.1 + vertex 33.1139 -32.0001 0 + vertex 33.1139 -32.0001 -0.1 + endloop + endfacet + facet normal 0.926524 -0.376237 0 + outer loop + vertex 33.8561 -30.1753 0 + vertex 35.3422 -26.5156 -0.1 + vertex 35.3422 -26.5156 0 + endloop + endfacet + facet normal 0.926524 -0.376237 0 + outer loop + vertex 35.3422 -26.5156 -0.1 + vertex 33.8561 -30.1753 0 + vertex 33.8561 -30.1753 -0.1 + endloop + endfacet + facet normal 0.930815 -0.36549 0 + outer loop + vertex 35.3422 -26.5156 0 + vertex 35.6833 -25.6471 -0.1 + vertex 35.6833 -25.6471 0 + endloop + endfacet + facet normal 0.930815 -0.36549 0 + outer loop + vertex 35.6833 -25.6471 -0.1 + vertex 35.3422 -26.5156 0 + vertex 35.3422 -26.5156 -0.1 + endloop + endfacet + facet normal 0.940922 -0.338624 0 + outer loop + vertex 35.6833 -25.6471 0 + vertex 35.957 -24.8864 -0.1 + vertex 35.957 -24.8864 0 + endloop + endfacet + facet normal 0.940922 -0.338624 0 + outer loop + vertex 35.957 -24.8864 -0.1 + vertex 35.6833 -25.6471 0 + vertex 35.6833 -25.6471 -0.1 + endloop + endfacet + facet normal 0.953192 -0.302366 0 + outer loop + vertex 35.957 -24.8864 0 + vertex 36.1622 -24.2394 -0.1 + vertex 36.1622 -24.2394 0 + endloop + endfacet + facet normal 0.953192 -0.302366 0 + outer loop + vertex 36.1622 -24.2394 -0.1 + vertex 35.957 -24.8864 0 + vertex 35.957 -24.8864 -0.1 + endloop + endfacet + facet normal 0.968572 -0.248734 0 + outer loop + vertex 36.1622 -24.2394 0 + vertex 36.2977 -23.7121 -0.1 + vertex 36.2977 -23.7121 0 + endloop + endfacet + facet normal 0.968572 -0.248734 0 + outer loop + vertex 36.2977 -23.7121 -0.1 + vertex 36.1622 -24.2394 0 + vertex 36.1622 -24.2394 -0.1 + endloop + endfacet + facet normal 0.987422 -0.158107 0 + outer loop + vertex 36.2977 -23.7121 0 + vertex 36.362 -23.3104 -0.1 + vertex 36.362 -23.3104 0 + endloop + endfacet + facet normal 0.987422 -0.158107 0 + outer loop + vertex 36.362 -23.3104 -0.1 + vertex 36.2977 -23.7121 0 + vertex 36.2977 -23.7121 -0.1 + endloop + endfacet + facet normal 0.999436 -0.0335772 0 + outer loop + vertex 36.362 -23.3104 0 + vertex 36.3671 -23.1585 -0.1 + vertex 36.3671 -23.1585 0 + endloop + endfacet + facet normal 0.999436 -0.0335772 0 + outer loop + vertex 36.3671 -23.1585 -0.1 + vertex 36.362 -23.3104 0 + vertex 36.362 -23.3104 -0.1 + endloop + endfacet + facet normal 0.993888 0.110395 0 + outer loop + vertex 36.3671 -23.1585 0 + vertex 36.3539 -23.0402 -0.1 + vertex 36.3539 -23.0402 0 + endloop + endfacet + facet normal 0.993888 0.110395 0 + outer loop + vertex 36.3539 -23.0402 -0.1 + vertex 36.3671 -23.1585 0 + vertex 36.3671 -23.1585 -0.1 + endloop + endfacet + facet normal 0.93611 0.351708 0 + outer loop + vertex 36.3539 -23.0402 0 + vertex 36.3224 -22.9562 -0.1 + vertex 36.3224 -22.9562 0 + endloop + endfacet + facet normal 0.93611 0.351708 0 + outer loop + vertex 36.3224 -22.9562 -0.1 + vertex 36.3539 -23.0402 0 + vertex 36.3539 -23.0402 -0.1 + endloop + endfacet + facet normal 0.698293 0.715812 -0 + outer loop + vertex 36.3224 -22.9562 -0.1 + vertex 36.2723 -22.9073 0 + vertex 36.3224 -22.9562 0 + endloop + endfacet + facet normal 0.698293 0.715812 0 + outer loop + vertex 36.2723 -22.9073 0 + vertex 36.3224 -22.9562 -0.1 + vertex 36.2723 -22.9073 -0.1 + endloop + endfacet + facet normal 0.186395 0.982475 -0 + outer loop + vertex 36.2723 -22.9073 -0.1 + vertex 36.2034 -22.8943 0 + vertex 36.2723 -22.9073 0 + endloop + endfacet + facet normal 0.186395 0.982475 0 + outer loop + vertex 36.2034 -22.8943 0 + vertex 36.2723 -22.9073 -0.1 + vertex 36.2034 -22.8943 -0.1 + endloop + endfacet + facet normal -0.258789 0.965934 0 + outer loop + vertex 36.2034 -22.8943 -0.1 + vertex 36.1157 -22.9178 0 + vertex 36.2034 -22.8943 0 + endloop + endfacet + facet normal -0.258789 0.965934 0 + outer loop + vertex 36.1157 -22.9178 0 + vertex 36.2034 -22.8943 -0.1 + vertex 36.1157 -22.9178 -0.1 + endloop + endfacet + facet normal -0.248765 0.968564 0 + outer loop + vertex 36.1157 -22.9178 -0.1 + vertex 35.9442 -22.9618 0 + vertex 36.1157 -22.9178 0 + endloop + endfacet + facet normal -0.248765 0.968564 0 + outer loop + vertex 35.9442 -22.9618 0 + vertex 36.1157 -22.9178 -0.1 + vertex 35.9442 -22.9618 -0.1 + endloop + endfacet + facet normal -0.0720501 0.997401 0 + outer loop + vertex 35.9442 -22.9618 -0.1 + vertex 35.7166 -22.9783 0 + vertex 35.9442 -22.9618 0 + endloop + endfacet + facet normal -0.0720501 0.997401 0 + outer loop + vertex 35.7166 -22.9783 0 + vertex 35.9442 -22.9618 -0.1 + vertex 35.7166 -22.9783 -0.1 + endloop + endfacet + facet normal 0.0451334 0.998981 -0 + outer loop + vertex 35.7166 -22.9783 -0.1 + vertex 35.4626 -22.9668 0 + vertex 35.7166 -22.9783 0 + endloop + endfacet + facet normal 0.0451334 0.998981 0 + outer loop + vertex 35.4626 -22.9668 0 + vertex 35.7166 -22.9783 -0.1 + vertex 35.4626 -22.9668 -0.1 + endloop + endfacet + facet normal 0.156383 0.987697 -0 + outer loop + vertex 35.4626 -22.9668 -0.1 + vertex 35.2118 -22.9271 0 + vertex 35.4626 -22.9668 0 + endloop + endfacet + facet normal 0.156383 0.987697 0 + outer loop + vertex 35.2118 -22.9271 0 + vertex 35.4626 -22.9668 -0.1 + vertex 35.2118 -22.9271 -0.1 + endloop + endfacet + facet normal 0.299759 0.954015 -0 + outer loop + vertex 35.2118 -22.9271 -0.1 + vertex 34.9345 -22.8399 0 + vertex 35.2118 -22.9271 0 + endloop + endfacet + facet normal 0.299759 0.954015 0 + outer loop + vertex 34.9345 -22.8399 0 + vertex 35.2118 -22.9271 -0.1 + vertex 34.9345 -22.8399 -0.1 + endloop + endfacet + facet normal 0.486497 0.873682 -0 + outer loop + vertex 34.9345 -22.8399 -0.1 + vertex 34.8338 -22.7839 0 + vertex 34.9345 -22.8399 0 + endloop + endfacet + facet normal 0.486497 0.873682 0 + outer loop + vertex 34.8338 -22.7839 0 + vertex 34.9345 -22.8399 -0.1 + vertex 34.8338 -22.7839 -0.1 + endloop + endfacet + facet normal 0.653163 0.757217 -0 + outer loop + vertex 34.8338 -22.7839 -0.1 + vertex 34.7558 -22.7166 0 + vertex 34.8338 -22.7839 0 + endloop + endfacet + facet normal 0.653163 0.757217 0 + outer loop + vertex 34.7558 -22.7166 0 + vertex 34.8338 -22.7839 -0.1 + vertex 34.7558 -22.7166 -0.1 + endloop + endfacet + facet normal 0.815361 0.578952 0 + outer loop + vertex 34.7558 -22.7166 0 + vertex 34.6986 -22.636 -0.1 + vertex 34.6986 -22.636 0 + endloop + endfacet + facet normal 0.815361 0.578952 0 + outer loop + vertex 34.6986 -22.636 -0.1 + vertex 34.7558 -22.7166 0 + vertex 34.7558 -22.7166 -0.1 + endloop + endfacet + facet normal 0.928456 0.371442 0 + outer loop + vertex 34.6986 -22.636 0 + vertex 34.6602 -22.54 -0.1 + vertex 34.6602 -22.54 0 + endloop + endfacet + facet normal 0.928456 0.371442 0 + outer loop + vertex 34.6602 -22.54 -0.1 + vertex 34.6986 -22.636 0 + vertex 34.6986 -22.636 -0.1 + endloop + endfacet + facet normal 0.982392 0.186829 0 + outer loop + vertex 34.6602 -22.54 0 + vertex 34.6385 -22.4262 -0.1 + vertex 34.6385 -22.4262 0 + endloop + endfacet + facet normal 0.982392 0.186829 0 + outer loop + vertex 34.6385 -22.4262 -0.1 + vertex 34.6602 -22.54 0 + vertex 34.6602 -22.54 -0.1 + endloop + endfacet + facet normal 0.998716 0.050655 0 + outer loop + vertex 34.6385 -22.4262 0 + vertex 34.6318 -22.2927 -0.1 + vertex 34.6318 -22.2927 0 + endloop + endfacet + facet normal 0.998716 0.050655 0 + outer loop + vertex 34.6318 -22.2927 -0.1 + vertex 34.6385 -22.4262 0 + vertex 34.6385 -22.4262 -0.1 + endloop + endfacet + facet normal 0.995457 -0.0952108 0 + outer loop + vertex 34.6318 -22.2927 0 + vertex 34.653 -22.0706 -0.1 + vertex 34.653 -22.0706 0 + endloop + endfacet + facet normal 0.995457 -0.0952108 0 + outer loop + vertex 34.653 -22.0706 -0.1 + vertex 34.6318 -22.2927 0 + vertex 34.6318 -22.2927 -0.1 + endloop + endfacet + facet normal 0.963199 -0.268788 0 + outer loop + vertex 34.653 -22.0706 0 + vertex 34.713 -21.8554 -0.1 + vertex 34.713 -21.8554 0 + endloop + endfacet + facet normal 0.963199 -0.268788 0 + outer loop + vertex 34.713 -21.8554 -0.1 + vertex 34.653 -22.0706 0 + vertex 34.653 -22.0706 -0.1 + endloop + endfacet + facet normal 0.90719 -0.420722 0 + outer loop + vertex 34.713 -21.8554 0 + vertex 34.8063 -21.6543 -0.1 + vertex 34.8063 -21.6543 0 + endloop + endfacet + facet normal 0.90719 -0.420722 0 + outer loop + vertex 34.8063 -21.6543 -0.1 + vertex 34.713 -21.8554 0 + vertex 34.713 -21.8554 -0.1 + endloop + endfacet + facet normal 0.830216 -0.557442 0 + outer loop + vertex 34.8063 -21.6543 0 + vertex 34.9274 -21.474 -0.1 + vertex 34.9274 -21.474 0 + endloop + endfacet + facet normal 0.830216 -0.557442 0 + outer loop + vertex 34.9274 -21.474 -0.1 + vertex 34.8063 -21.6543 0 + vertex 34.8063 -21.6543 -0.1 + endloop + endfacet + facet normal 0.728585 -0.684956 0 + outer loop + vertex 34.9274 -21.474 0 + vertex 35.0706 -21.3217 -0.1 + vertex 35.0706 -21.3217 0 + endloop + endfacet + facet normal 0.728585 -0.684956 0 + outer loop + vertex 35.0706 -21.3217 -0.1 + vertex 34.9274 -21.474 0 + vertex 34.9274 -21.474 -0.1 + endloop + endfacet + facet normal 0.592071 -0.805886 0 + outer loop + vertex 35.0706 -21.3217 -0.1 + vertex 35.2304 -21.2043 0 + vertex 35.0706 -21.3217 0 + endloop + endfacet + facet normal 0.592071 -0.805886 0 + outer loop + vertex 35.2304 -21.2043 0 + vertex 35.0706 -21.3217 -0.1 + vertex 35.2304 -21.2043 -0.1 + endloop + endfacet + facet normal 0.404331 -0.914613 0 + outer loop + vertex 35.2304 -21.2043 -0.1 + vertex 35.4013 -21.1287 0 + vertex 35.2304 -21.2043 0 + endloop + endfacet + facet normal 0.404331 -0.914613 0 + outer loop + vertex 35.4013 -21.1287 0 + vertex 35.2304 -21.2043 -0.1 + vertex 35.4013 -21.1287 -0.1 + endloop + endfacet + facet normal 0.149785 -0.988719 0 + outer loop + vertex 35.4013 -21.1287 -0.1 + vertex 35.5778 -21.102 0 + vertex 35.4013 -21.1287 0 + endloop + endfacet + facet normal 0.149785 -0.988719 0 + outer loop + vertex 35.5778 -21.102 0 + vertex 35.4013 -21.1287 -0.1 + vertex 35.5778 -21.102 -0.1 + endloop + endfacet + facet normal 0.22645 -0.974023 0 + outer loop + vertex 35.5778 -21.102 -0.1 + vertex 35.9118 -21.0243 0 + vertex 35.5778 -21.102 0 + endloop + endfacet + facet normal 0.22645 -0.974023 0 + outer loop + vertex 35.9118 -21.0243 0 + vertex 35.5778 -21.102 -0.1 + vertex 35.9118 -21.0243 -0.1 + endloop + endfacet + facet normal 0.304725 -0.95244 0 + outer loop + vertex 35.9118 -21.0243 -0.1 + vertex 36.5724 -20.813 0 + vertex 35.9118 -21.0243 0 + endloop + endfacet + facet normal 0.304725 -0.95244 0 + outer loop + vertex 36.5724 -20.813 0 + vertex 35.9118 -21.0243 -0.1 + vertex 36.5724 -20.813 -0.1 + endloop + endfacet + facet normal 0.331013 -0.943626 0 + outer loop + vertex 36.5724 -20.813 -0.1 + vertex 37.4642 -20.5001 0 + vertex 36.5724 -20.813 0 + endloop + endfacet + facet normal 0.331013 -0.943626 0 + outer loop + vertex 37.4642 -20.5001 0 + vertex 36.5724 -20.813 -0.1 + vertex 37.4642 -20.5001 -0.1 + endloop + endfacet + facet normal 0.348531 -0.937297 0 + outer loop + vertex 37.4642 -20.5001 -0.1 + vertex 38.4916 -20.1181 0 + vertex 37.4642 -20.5001 0 + endloop + endfacet + facet normal 0.348531 -0.937297 0 + outer loop + vertex 38.4916 -20.1181 0 + vertex 37.4642 -20.5001 -0.1 + vertex 38.4916 -20.1181 -0.1 + endloop + endfacet + facet normal 0.345306 -0.93849 0 + outer loop + vertex 38.4916 -20.1181 -0.1 + vertex 39.5298 -19.7361 0 + vertex 38.4916 -20.1181 0 + endloop + endfacet + facet normal 0.345306 -0.93849 0 + outer loop + vertex 39.5298 -19.7361 0 + vertex 38.4916 -20.1181 -0.1 + vertex 39.5298 -19.7361 -0.1 + endloop + endfacet + facet normal 0.321461 -0.946923 0 + outer loop + vertex 39.5298 -19.7361 -0.1 + vertex 40.4513 -19.4233 0 + vertex 39.5298 -19.7361 0 + endloop + endfacet + facet normal 0.321461 -0.946923 0 + outer loop + vertex 40.4513 -19.4233 0 + vertex 39.5298 -19.7361 -0.1 + vertex 40.4513 -19.4233 -0.1 + endloop + endfacet + facet normal 0.28733 -0.957832 0 + outer loop + vertex 40.4513 -19.4233 -0.1 + vertex 41.156 -19.2119 0 + vertex 40.4513 -19.4233 0 + endloop + endfacet + facet normal 0.28733 -0.957832 0 + outer loop + vertex 41.156 -19.2119 0 + vertex 40.4513 -19.4233 -0.1 + vertex 41.156 -19.2119 -0.1 + endloop + endfacet + facet normal 0.23347 -0.972364 0 + outer loop + vertex 41.156 -19.2119 -0.1 + vertex 41.3957 -19.1543 0 + vertex 41.156 -19.2119 0 + endloop + endfacet + facet normal 0.23347 -0.972364 0 + outer loop + vertex 41.3957 -19.1543 0 + vertex 41.156 -19.2119 -0.1 + vertex 41.3957 -19.1543 -0.1 + endloop + endfacet + facet normal 0.13452 -0.990911 0 + outer loop + vertex 41.3957 -19.1543 -0.1 + vertex 41.5436 -19.1343 0 + vertex 41.3957 -19.1543 0 + endloop + endfacet + facet normal 0.13452 -0.990911 0 + outer loop + vertex 41.5436 -19.1343 0 + vertex 41.3957 -19.1543 -0.1 + vertex 41.5436 -19.1343 -0.1 + endloop + endfacet + facet normal -0.114485 -0.993425 0 + outer loop + vertex 41.5436 -19.1343 -0.1 + vertex 41.7426 -19.1572 0 + vertex 41.5436 -19.1343 0 + endloop + endfacet + facet normal -0.114485 -0.993425 -0 + outer loop + vertex 41.7426 -19.1572 0 + vertex 41.5436 -19.1343 -0.1 + vertex 41.7426 -19.1572 -0.1 + endloop + endfacet + facet normal -0.379137 -0.925341 0 + outer loop + vertex 41.7426 -19.1572 -0.1 + vertex 41.9051 -19.2238 0 + vertex 41.7426 -19.1572 0 + endloop + endfacet + facet normal -0.379137 -0.925341 -0 + outer loop + vertex 41.9051 -19.2238 0 + vertex 41.7426 -19.1572 -0.1 + vertex 41.9051 -19.2238 -0.1 + endloop + endfacet + facet normal -0.651079 -0.75901 0 + outer loop + vertex 41.9051 -19.2238 -0.1 + vertex 42.0297 -19.3306 0 + vertex 41.9051 -19.2238 0 + endloop + endfacet + facet normal -0.651079 -0.75901 -0 + outer loop + vertex 42.0297 -19.3306 0 + vertex 41.9051 -19.2238 -0.1 + vertex 42.0297 -19.3306 -0.1 + endloop + endfacet + facet normal -0.860116 -0.510098 0 + outer loop + vertex 42.1149 -19.4743 -0.1 + vertex 42.0297 -19.3306 0 + vertex 42.0297 -19.3306 -0.1 + endloop + endfacet + facet normal -0.860116 -0.510098 0 + outer loop + vertex 42.0297 -19.3306 0 + vertex 42.1149 -19.4743 -0.1 + vertex 42.1149 -19.4743 0 + endloop + endfacet + facet normal -0.969806 -0.243876 0 + outer loop + vertex 42.1595 -19.6516 -0.1 + vertex 42.1149 -19.4743 0 + vertex 42.1149 -19.4743 -0.1 + endloop + endfacet + facet normal -0.969806 -0.243876 0 + outer loop + vertex 42.1149 -19.4743 0 + vertex 42.1595 -19.6516 -0.1 + vertex 42.1595 -19.6516 0 + endloop + endfacet + facet normal -0.999925 -0.0122495 0 + outer loop + vertex 42.162 -19.859 -0.1 + vertex 42.1595 -19.6516 0 + vertex 42.1595 -19.6516 -0.1 + endloop + endfacet + facet normal -0.999925 -0.0122495 0 + outer loop + vertex 42.1595 -19.6516 0 + vertex 42.162 -19.859 -0.1 + vertex 42.162 -19.859 0 + endloop + endfacet + facet normal -0.985121 0.171861 0 + outer loop + vertex 42.1212 -20.0931 -0.1 + vertex 42.162 -19.859 0 + vertex 42.162 -19.859 -0.1 + endloop + endfacet + facet normal -0.985121 0.171861 0 + outer loop + vertex 42.162 -19.859 0 + vertex 42.1212 -20.0931 -0.1 + vertex 42.1212 -20.0931 0 + endloop + endfacet + facet normal -0.948956 0.315408 0 + outer loop + vertex 42.0356 -20.3507 -0.1 + vertex 42.1212 -20.0931 0 + vertex 42.1212 -20.0931 -0.1 + endloop + endfacet + facet normal -0.948956 0.315408 0 + outer loop + vertex 42.1212 -20.0931 0 + vertex 42.0356 -20.3507 -0.1 + vertex 42.0356 -20.3507 0 + endloop + endfacet + facet normal -0.935213 0.354086 0 + outer loop + vertex 41.9515 -20.5727 -0.1 + vertex 42.0356 -20.3507 0 + vertex 42.0356 -20.3507 -0.1 + endloop + endfacet + facet normal -0.935213 0.354086 0 + outer loop + vertex 42.0356 -20.3507 0 + vertex 41.9515 -20.5727 -0.1 + vertex 41.9515 -20.5727 0 + endloop + endfacet + facet normal -0.96654 0.256517 0 + outer loop + vertex 41.9099 -20.7296 -0.1 + vertex 41.9515 -20.5727 0 + vertex 41.9515 -20.5727 -0.1 + endloop + endfacet + facet normal -0.96654 0.256517 0 + outer loop + vertex 41.9515 -20.5727 0 + vertex 41.9099 -20.7296 -0.1 + vertex 41.9099 -20.7296 0 + endloop + endfacet + facet normal -0.996169 -0.0874488 0 + outer loop + vertex 41.9179 -20.8207 -0.1 + vertex 41.9099 -20.7296 0 + vertex 41.9099 -20.7296 -0.1 + endloop + endfacet + facet normal -0.996169 -0.0874488 0 + outer loop + vertex 41.9099 -20.7296 0 + vertex 41.9179 -20.8207 -0.1 + vertex 41.9179 -20.8207 0 + endloop + endfacet + facet normal -0.639023 -0.769188 0 + outer loop + vertex 41.9179 -20.8207 -0.1 + vertex 41.9427 -20.8413 0 + vertex 41.9179 -20.8207 0 + endloop + endfacet + facet normal -0.639023 -0.769188 -0 + outer loop + vertex 41.9427 -20.8413 0 + vertex 41.9179 -20.8207 -0.1 + vertex 41.9427 -20.8413 -0.1 + endloop + endfacet + facet normal -0.0984788 -0.995139 0 + outer loop + vertex 41.9427 -20.8413 -0.1 + vertex 41.9827 -20.8453 0 + vertex 41.9427 -20.8413 0 + endloop + endfacet + facet normal -0.0984788 -0.995139 -0 + outer loop + vertex 41.9827 -20.8453 0 + vertex 41.9427 -20.8413 -0.1 + vertex 41.9827 -20.8453 -0.1 + endloop + endfacet + facet normal 0.313279 -0.949661 0 + outer loop + vertex 41.9827 -20.8453 -0.1 + vertex 42.1116 -20.8028 0 + vertex 41.9827 -20.8453 0 + endloop + endfacet + facet normal 0.313279 -0.949661 0 + outer loop + vertex 42.1116 -20.8028 0 + vertex 41.9827 -20.8453 -0.1 + vertex 42.1116 -20.8028 -0.1 + endloop + endfacet + facet normal 0.482712 -0.875779 0 + outer loop + vertex 42.1116 -20.8028 -0.1 + vertex 42.3117 -20.6924 0 + vertex 42.1116 -20.8028 0 + endloop + endfacet + facet normal 0.482712 -0.875779 0 + outer loop + vertex 42.3117 -20.6924 0 + vertex 42.1116 -20.8028 -0.1 + vertex 42.3117 -20.6924 -0.1 + endloop + endfacet + facet normal 0.552983 -0.833193 0 + outer loop + vertex 42.3117 -20.6924 -0.1 + vertex 42.9547 -20.2657 0 + vertex 42.3117 -20.6924 0 + endloop + endfacet + facet normal 0.552983 -0.833193 0 + outer loop + vertex 42.9547 -20.2657 0 + vertex 42.3117 -20.6924 -0.1 + vertex 42.9547 -20.2657 -0.1 + endloop + endfacet + facet normal 0.550831 -0.834617 0 + outer loop + vertex 42.9547 -20.2657 -0.1 + vertex 43.4033 -19.9696 0 + vertex 42.9547 -20.2657 0 + endloop + endfacet + facet normal 0.550831 -0.834617 0 + outer loop + vertex 43.4033 -19.9696 0 + vertex 42.9547 -20.2657 -0.1 + vertex 43.4033 -19.9696 -0.1 + endloop + endfacet + facet normal 0.505722 -0.862696 0 + outer loop + vertex 43.4033 -19.9696 -0.1 + vertex 43.8201 -19.7253 0 + vertex 43.4033 -19.9696 0 + endloop + endfacet + facet normal 0.505722 -0.862696 0 + outer loop + vertex 43.8201 -19.7253 0 + vertex 43.4033 -19.9696 -0.1 + vertex 43.8201 -19.7253 -0.1 + endloop + endfacet + facet normal 0.444191 -0.895932 0 + outer loop + vertex 43.8201 -19.7253 -0.1 + vertex 44.2162 -19.5289 0 + vertex 43.8201 -19.7253 0 + endloop + endfacet + facet normal 0.444191 -0.895932 0 + outer loop + vertex 44.2162 -19.5289 0 + vertex 43.8201 -19.7253 -0.1 + vertex 44.2162 -19.5289 -0.1 + endloop + endfacet + facet normal 0.36641 -0.930454 0 + outer loop + vertex 44.2162 -19.5289 -0.1 + vertex 44.6026 -19.3768 0 + vertex 44.2162 -19.5289 0 + endloop + endfacet + facet normal 0.36641 -0.930454 0 + outer loop + vertex 44.6026 -19.3768 0 + vertex 44.2162 -19.5289 -0.1 + vertex 44.6026 -19.3768 -0.1 + endloop + endfacet + facet normal 0.276888 -0.960902 0 + outer loop + vertex 44.6026 -19.3768 -0.1 + vertex 44.9905 -19.265 0 + vertex 44.6026 -19.3768 0 + endloop + endfacet + facet normal 0.276888 -0.960902 0 + outer loop + vertex 44.9905 -19.265 0 + vertex 44.6026 -19.3768 -0.1 + vertex 44.9905 -19.265 -0.1 + endloop + endfacet + facet normal 0.184446 -0.982843 0 + outer loop + vertex 44.9905 -19.265 -0.1 + vertex 45.391 -19.1898 0 + vertex 44.9905 -19.265 0 + endloop + endfacet + facet normal 0.184446 -0.982843 0 + outer loop + vertex 45.391 -19.1898 0 + vertex 44.9905 -19.265 -0.1 + vertex 45.391 -19.1898 -0.1 + endloop + endfacet + facet normal 0.0992848 -0.995059 0 + outer loop + vertex 45.391 -19.1898 -0.1 + vertex 45.8151 -19.1475 0 + vertex 45.391 -19.1898 0 + endloop + endfacet + facet normal 0.0992848 -0.995059 0 + outer loop + vertex 45.8151 -19.1475 0 + vertex 45.391 -19.1898 -0.1 + vertex 45.8151 -19.1475 -0.1 + endloop + endfacet + facet normal 0.028896 -0.999582 0 + outer loop + vertex 45.8151 -19.1475 -0.1 + vertex 46.274 -19.1343 0 + vertex 45.8151 -19.1475 0 + endloop + endfacet + facet normal 0.028896 -0.999582 0 + outer loop + vertex 46.274 -19.1343 0 + vertex 45.8151 -19.1475 -0.1 + vertex 46.274 -19.1343 -0.1 + endloop + endfacet + facet normal -0.036999 -0.999315 0 + outer loop + vertex 46.274 -19.1343 -0.1 + vertex 46.8289 -19.1548 0 + vertex 46.274 -19.1343 0 + endloop + endfacet + facet normal -0.036999 -0.999315 -0 + outer loop + vertex 46.8289 -19.1548 0 + vertex 46.274 -19.1343 -0.1 + vertex 46.8289 -19.1548 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1728 30.7024 -0.1 + vertex 12.3025 30.5214 -0.1 + vertex 12.291 30.606 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1728 30.7024 -0.1 + vertex 12.291 30.606 -0.1 + vertex 12.2478 30.6663 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0661 30.7144 -0.1 + vertex 12.3025 30.5214 -0.1 + vertex 12.1728 30.7024 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3025 30.5214 -0.1 + vertex 12.0661 30.7144 -0.1 + vertex 12.2821 30.4122 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.9476 30.6899 -0.1 + vertex 12.2821 30.4122 -0.1 + vertex 12.0661 30.7144 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2821 30.4122 -0.1 + vertex 11.9476 30.6899 -0.1 + vertex 12.23 30.2784 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.7177 30.5077 -0.1 + vertex 12.23 30.2784 -0.1 + vertex 11.8311 30.6195 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.23 30.2784 -0.1 + vertex 11.9476 30.6899 -0.1 + vertex 11.8311 30.6195 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.6088 30.3591 -0.1 + vertex 12.23 30.2784 -0.1 + vertex 11.7177 30.5077 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.23 30.2784 -0.1 + vertex 11.6088 30.3591 -0.1 + vertex 12.0304 29.9363 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.5057 30.1782 -0.1 + vertex 12.0304 29.9363 -0.1 + vertex 11.6088 30.3591 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0304 29.9363 -0.1 + vertex 11.5057 30.1782 -0.1 + vertex 11.965 29.8184 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.965 29.8184 -0.1 + vertex 11.4096 29.9696 -0.1 + vertex 11.9082 29.6745 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.4096 29.9696 -0.1 + vertex 11.965 29.8184 -0.1 + vertex 11.5057 30.1782 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.6784 17.7808 -0.1 + vertex 26.0696 17.9605 -0.1 + vertex 26.0933 17.5963 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.2605 19.0904 -0.1 + vertex 26.0009 18.2942 -0.1 + vertex 26.0696 17.9605 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.5652 19.0574 -0.1 + vertex 26.1176 19.296 -0.1 + vertex 25.9541 19.4837 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.2605 19.0904 -0.1 + vertex 25.8914 18.5921 -0.1 + vertex 26.0009 18.2942 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.5652 19.0574 -0.1 + vertex 25.9541 19.4837 -0.1 + vertex 25.7697 19.6539 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.2605 19.0904 -0.1 + vertex 25.7448 18.8483 -0.1 + vertex 25.8914 18.5921 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.1176 19.296 -0.1 + vertex 25.5652 19.0574 -0.1 + vertex 25.7448 18.8483 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3564 19.2137 -0.1 + vertex 25.7697 19.6539 -0.1 + vertex 25.5639 19.8069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.7697 19.6539 -0.1 + vertex 25.3564 19.2137 -0.1 + vertex 25.5652 19.0574 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.1224 19.3115 -0.1 + vertex 25.5639 19.8069 -0.1 + vertex 25.3364 19.943 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.5639 19.8069 -0.1 + vertex 25.1224 19.3115 -0.1 + vertex 25.3564 19.2137 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9972 19.3368 -0.1 + vertex 25.3364 19.943 -0.1 + vertex 25.087 20.0627 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3364 19.943 -0.1 + vertex 24.9972 19.3368 -0.1 + vertex 25.1224 19.3115 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.087 20.0627 -0.1 + vertex 24.8672 19.3454 -0.1 + vertex 24.9972 19.3368 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8151 20.1664 -0.1 + vertex 24.8672 19.3454 -0.1 + vertex 25.087 20.0627 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8151 20.1664 -0.1 + vertex 24.6124 19.3722 -0.1 + vertex 24.8672 19.3454 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5205 20.2543 -0.1 + vertex 24.6124 19.3722 -0.1 + vertex 24.8151 20.1664 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5205 20.2543 -0.1 + vertex 24.2514 19.4451 -0.1 + vertex 24.6124 19.3722 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2028 20.3268 -0.1 + vertex 24.2514 19.4451 -0.1 + vertex 24.5205 20.2543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.8321 19.5531 -0.1 + vertex 24.2028 20.3268 -0.1 + vertex 23.8617 20.3844 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2028 20.3268 -0.1 + vertex 23.8321 19.5531 -0.1 + vertex 24.2514 19.4451 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.4027 19.6849 -0.1 + vertex 23.8617 20.3844 -0.1 + vertex 23.4814 20.4643 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.8617 20.3844 -0.1 + vertex 23.4027 19.6849 -0.1 + vertex 23.8321 19.5531 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9977 19.8472 -0.1 + vertex 23.4814 20.4643 -0.1 + vertex 23.1504 20.59 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.4814 20.4643 -0.1 + vertex 22.9977 19.8472 -0.1 + vertex 23.4027 19.6849 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6486 20.047 -0.1 + vertex 23.1504 20.59 -0.1 + vertex 22.8668 20.7638 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.3515 20.2895 -0.1 + vertex 22.8668 20.7638 -0.1 + vertex 22.7421 20.8693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1504 20.59 -0.1 + vertex 22.6486 20.047 -0.1 + vertex 22.9977 19.8472 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2213 20.4283 -0.1 + vertex 22.7421 20.8693 -0.1 + vertex 22.6286 20.9877 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.8989 20.9229 -0.1 + vertex 22.6286 20.9877 -0.1 + vertex 22.4341 21.2638 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8668 20.7638 -0.1 + vertex 22.3515 20.2895 -0.1 + vertex 22.6486 20.047 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.7362 21.3239 -0.1 + vertex 22.4341 21.2638 -0.1 + vertex 22.2815 21.5943 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.7421 20.8693 -0.1 + vertex 22.2213 20.4283 -0.1 + vertex 22.3515 20.2895 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.6111 21.7881 -0.1 + vertex 22.2815 21.5943 -0.1 + vertex 22.1689 21.9813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6286 20.9877 -0.1 + vertex 22.1028 20.5797 -0.1 + vertex 22.2213 20.4283 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.5197 22.3204 -0.1 + vertex 22.1689 21.9813 -0.1 + vertex 22.0944 22.427 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.4205 22.8275 -0.1 + vertex 22.0944 22.427 -0.1 + vertex 21.9928 23.1034 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.3493 23.064 -0.1 + vertex 21.9928 23.1034 -0.1 + vertex 21.926 23.397 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6286 20.9877 -0.1 + vertex 21.8989 20.9229 -0.1 + vertex 22.1028 20.5797 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.2635 23.2891 -0.1 + vertex 21.926 23.397 -0.1 + vertex 21.8437 23.6658 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1632 23.503 -0.1 + vertex 21.8437 23.6658 -0.1 + vertex 21.7423 23.9135 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.4341 21.2638 -0.1 + vertex 21.7362 21.3239 -0.1 + vertex 21.8989 20.9229 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0482 23.7058 -0.1 + vertex 21.7423 23.9135 -0.1 + vertex 21.6182 24.144 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2815 21.5943 -0.1 + vertex 21.6111 21.7881 -0.1 + vertex 21.7362 21.3239 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.1689 21.9813 -0.1 + vertex 21.5197 22.3204 -0.1 + vertex 21.6111 21.7881 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9184 23.8976 -0.1 + vertex 21.6182 24.144 -0.1 + vertex 21.4677 24.3609 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.0944 22.427 -0.1 + vertex 21.4205 22.8275 -0.1 + vertex 21.5197 22.3204 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.9928 23.1034 -0.1 + vertex 21.3493 23.064 -0.1 + vertex 21.4205 22.8275 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.7738 24.0784 -0.1 + vertex 21.4677 24.3609 -0.1 + vertex 21.2873 24.568 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.926 23.397 -0.1 + vertex 21.2635 23.2891 -0.1 + vertex 21.3493 23.064 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.8437 23.6658 -0.1 + vertex 21.1632 23.503 -0.1 + vertex 21.2635 23.2891 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.6143 24.2484 -0.1 + vertex 21.2873 24.568 -0.1 + vertex 21.0733 24.7691 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7423 23.9135 -0.1 + vertex 21.0482 23.7058 -0.1 + vertex 21.1632 23.503 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6182 24.144 -0.1 + vertex 20.9184 23.8976 -0.1 + vertex 21.0482 23.7058 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.4398 24.4076 -0.1 + vertex 21.0733 24.7691 -0.1 + vertex 20.8221 24.9679 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4677 24.3609 -0.1 + vertex 20.7738 24.0784 -0.1 + vertex 20.9184 23.8976 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.2873 24.568 -0.1 + vertex 20.6143 24.2484 -0.1 + vertex 20.7738 24.0784 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2502 24.5562 -0.1 + vertex 20.8221 24.9679 -0.1 + vertex 20.53 25.168 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0733 24.7691 -0.1 + vertex 20.4398 24.4076 -0.1 + vertex 20.6143 24.2484 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8221 24.9679 -0.1 + vertex 20.2502 24.5562 -0.1 + vertex 20.4398 24.4076 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0455 24.6942 -0.1 + vertex 20.53 25.168 -0.1 + vertex 20.1936 25.3734 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.53 25.168 -0.1 + vertex 20.0455 24.6942 -0.1 + vertex 20.2502 24.5562 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1936 25.3734 -0.1 + vertex 19.5904 24.9388 -0.1 + vertex 20.0455 24.6942 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3729 25.8147 -0.1 + vertex 19.5904 24.9388 -0.1 + vertex 20.1936 25.3734 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3729 25.8147 -0.1 + vertex 19.0737 25.1422 -0.1 + vertex 19.5904 24.9388 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3729 25.8147 -0.1 + vertex 18.5685 25.3244 -0.1 + vertex 19.0737 25.1422 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3311 26.3216 -0.1 + vertex 18.5685 25.3244 -0.1 + vertex 19.3729 25.8147 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3311 26.3216 -0.1 + vertex 18.1033 25.5216 -0.1 + vertex 18.5685 25.3244 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3311 26.3216 -0.1 + vertex 17.6707 25.7385 -0.1 + vertex 18.1033 25.5216 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6504 26.6607 -0.1 + vertex 17.6707 25.7385 -0.1 + vertex 18.3311 26.3216 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6504 26.6607 -0.1 + vertex 17.2631 25.98 -0.1 + vertex 17.6707 25.7385 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.873 26.2508 -0.1 + vertex 17.6504 26.6607 -0.1 + vertex 17.0889 26.9817 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6504 26.6607 -0.1 + vertex 16.873 26.2508 -0.1 + vertex 17.2631 25.98 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4932 26.5558 -0.1 + vertex 17.0889 26.9817 -0.1 + vertex 16.6359 27.2959 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.0889 26.9817 -0.1 + vertex 16.4932 26.5558 -0.1 + vertex 16.873 26.2508 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.116 26.8997 -0.1 + vertex 16.6359 27.2959 -0.1 + vertex 16.4467 27.454 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.116 26.8997 -0.1 + vertex 16.4467 27.454 -0.1 + vertex 16.2806 27.6146 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.734 27.2872 -0.1 + vertex 16.2806 27.6146 -0.1 + vertex 16.1362 27.7792 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.6359 27.2959 -0.1 + vertex 16.116 26.8997 -0.1 + vertex 16.4932 26.5558 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.734 27.2872 -0.1 + vertex 16.1362 27.7792 -0.1 + vertex 16.0121 27.9491 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.344 27.7317 -0.1 + vertex 16.0121 27.9491 -0.1 + vertex 15.9071 28.1258 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2193 27.9155 -0.1 + vertex 15.9071 28.1258 -0.1 + vertex 15.8197 28.3106 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1337 28.0941 -0.1 + vertex 15.8197 28.3106 -0.1 + vertex 15.7487 28.5051 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2806 27.6146 -0.1 + vertex 15.734 27.2872 -0.1 + vertex 16.116 26.8997 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 -0.1 + vertex 15.7487 28.5051 -0.1 + vertex 15.6927 28.7106 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.0552 28.7509 -0.1 + vertex 15.6927 28.7106 -0.1 + vertex 15.6202 29.1601 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.1102 29.496 -0.1 + vertex 15.6202 29.1601 -0.1 + vertex 15.5622 29.5773 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.1701 29.8123 -0.1 + vertex 15.5622 29.5773 -0.1 + vertex 15.49 29.8698 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.2437 30.0088 -0.1 + vertex 15.49 29.8698 -0.1 + vertex 15.4091 30.0386 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.2838 30.0618 -0.1 + vertex 15.4091 30.0386 -0.1 + vertex 15.3672 30.0768 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6202 29.1601 -0.1 + vertex 15.0694 29.0611 -0.1 + vertex 15.0552 28.7509 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2838 30.0618 -0.1 + vertex 15.3672 30.0768 -0.1 + vertex 15.3252 30.0845 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.4091 30.0386 -0.1 + vertex 15.2838 30.0618 -0.1 + vertex 15.2437 30.0088 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.49 29.8698 -0.1 + vertex 15.2437 30.0088 -0.1 + vertex 15.1701 29.8123 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6927 28.7106 -0.1 + vertex 15.0552 28.7509 -0.1 + vertex 15.0574 28.4965 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5622 29.5773 -0.1 + vertex 15.1701 29.8123 -0.1 + vertex 15.1102 29.496 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6202 29.1601 -0.1 + vertex 15.1102 29.496 -0.1 + vertex 15.0694 29.0611 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.0121 27.9491 -0.1 + vertex 15.344 27.7317 -0.1 + vertex 15.734 27.2872 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.7487 28.5051 -0.1 + vertex 15.0574 28.4965 -0.1 + vertex 15.0817 28.2827 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.9071 28.1258 -0.1 + vertex 15.2193 27.9155 -0.1 + vertex 15.344 27.7317 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.7487 28.5051 -0.1 + vertex 15.0817 28.2827 -0.1 + vertex 15.1337 28.0941 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8197 28.3106 -0.1 + vertex 15.1337 28.0941 -0.1 + vertex 15.2193 27.9155 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.6024 10.7775 -0.1 + vertex 21.7259 8.22365 -0.1 + vertex 27.5775 10.2019 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 23.6083 4.95794 -0.1 + vertex 27.0158 7.30485 -0.1 + vertex 23.5351 5.37146 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 22.0631 7.89267 -0.1 + vertex 27.5775 10.2019 -0.1 + vertex 21.7259 8.22365 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.5397 9.70386 -0.1 + vertex 22.0631 7.89267 -0.1 + vertex 27.4871 9.26334 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 23.6192 4.7586 -0.1 + vertex 27.0158 7.30485 -0.1 + vertex 23.6083 4.95794 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 23.6192 4.7586 -0.1 + vertex 24.9074 2.59483 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 22.3621 7.54907 -0.1 + vertex 27.4871 9.26334 -0.1 + vertex 22.0631 7.89267 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.6129 4.5634 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 23.6192 4.7586 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.5494 4.18291 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 23.5897 4.3717 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4176 8.86037 -0.1 + vertex 22.3621 7.54907 -0.1 + vertex 27.3295 8.47496 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.4183 3.81156 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 23.5494 4.18291 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.22 3.44442 -0.1 + vertex 24.764 2.4559 -0.1 + vertex 23.4183 3.81156 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9074 2.59483 -0.1 + vertex 23.4183 3.81156 -0.1 + vertex 24.764 2.4559 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.5897 4.3717 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 23.6129 4.5634 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 23.3929 5.8089 -0.1 + vertex 23.5351 5.37146 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3295 8.47496 -0.1 + vertex 22.3621 7.54907 -0.1 + vertex 27.2208 8.08714 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 23.1811 6.27516 -0.1 + vertex 23.3929 5.8089 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 22.8992 6.77518 -0.1 + vertex 23.1811 6.27516 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1048 7.68143 -0.1 + vertex 22.8992 6.77518 -0.1 + vertex 27.0158 7.30485 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 22.8992 6.77518 -0.1 + vertex 27.1048 7.68143 -0.1 + vertex 22.6364 7.18064 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4871 9.26334 -0.1 + vertex 22.3621 7.54907 -0.1 + vertex 27.4176 8.86037 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2208 8.08714 -0.1 + vertex 22.6364 7.18064 -0.1 + vertex 27.1048 7.68143 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 22.6364 7.18064 -0.1 + vertex 27.2208 8.08714 -0.1 + vertex 22.3621 7.54907 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.3371 8.55423 -0.1 + vertex 22.2336 15.278 -0.1 + vertex 21.6737 15.039 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.5775 10.2019 -0.1 + vertex 22.0631 7.89267 -0.1 + vertex 27.5397 9.70386 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8834 8.89663 -0.1 + vertex 21.6737 15.039 -0.1 + vertex 21.1771 14.8489 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6737 15.039 -0.1 + vertex 20.8834 8.89663 -0.1 + vertex 21.3371 8.55423 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3513 9.26304 -0.1 + vertex 21.1771 14.8489 -0.1 + vertex 20.8452 14.735 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7274 9.66569 -0.1 + vertex 20.8452 14.735 -0.1 + vertex 20.5722 14.6577 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1771 14.8489 -0.1 + vertex 20.3513 9.26304 -0.1 + vertex 20.8834 8.89663 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4723 9.81661 -0.1 + vertex 20.5722 14.6577 -0.1 + vertex 20.327 14.6203 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.2206 9.94402 -0.1 + vertex 20.327 14.6203 -0.1 + vertex 20.0785 14.6265 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.6964 10.137 -0.1 + vertex 20.0785 14.6265 -0.1 + vertex 19.7955 14.6797 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8452 14.735 -0.1 + vertex 19.7274 9.66569 -0.1 + vertex 20.3513 9.26304 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5722 14.6577 -0.1 + vertex 19.4723 9.81661 -0.1 + vertex 19.7274 9.66569 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4085 10.2069 -0.1 + vertex 19.7955 14.6797 -0.1 + vertex 19.4469 14.7833 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.327 14.6203 -0.1 + vertex 19.2206 9.94402 -0.1 + vertex 19.4723 9.81661 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0785 14.6265 -0.1 + vertex 18.9645 10.0501 -0.1 + vertex 19.2206 9.94402 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0785 14.6265 -0.1 + vertex 18.6964 10.137 -0.1 + vertex 18.9645 10.0501 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.093 10.2619 -0.1 + vertex 19.4469 14.7833 -0.1 + vertex 18.4281 15.1559 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7955 14.6797 -0.1 + vertex 18.4085 10.2069 -0.1 + vertex 18.6964 10.137 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4469 14.7833 -0.1 + vertex 18.093 10.2619 -0.1 + vertex 18.4085 10.2069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.499 10.3797 -0.1 + vertex 18.4281 15.1559 -0.1 + vertex 17.448 15.5385 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4281 15.1559 -0.1 + vertex 17.3487 10.3363 -0.1 + vertex 18.093 10.2619 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2187 10.3704 -0.1 + vertex 17.448 15.5385 -0.1 + vertex 16.6072 15.8977 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4281 15.1559 -0.1 + vertex 16.499 10.3797 -0.1 + vertex 17.3487 10.3363 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.448 15.5385 -0.1 + vertex 16.2187 10.3704 -0.1 + vertex 16.499 10.3797 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.6072 15.8977 -0.1 + vertex 16.005 10.3315 -0.1 + vertex 16.2187 10.3704 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8738 16.2527 -0.1 + vertex 16.005 10.3315 -0.1 + vertex 16.6072 15.8977 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8738 16.2527 -0.1 + vertex 15.8355 10.2563 -0.1 + vertex 16.005 10.3315 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2162 16.623 -0.1 + vertex 15.8355 10.2563 -0.1 + vertex 15.8738 16.2527 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8355 10.2563 -0.1 + vertex 15.2162 16.623 -0.1 + vertex 15.6879 10.1383 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 15.6879 10.1383 -0.1 + vertex 15.2162 16.623 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6879 10.1383 -0.1 + vertex 10.4375 16.5104 -0.1 + vertex 15.5399 9.97068 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5399 9.97068 -0.1 + vertex 10.4375 16.5104 -0.1 + vertex 15.369 9.74689 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.73318 16.1788 -0.1 + vertex 15.369 9.74689 -0.1 + vertex 10.4375 16.5104 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.369 9.74689 -0.1 + vertex 9.73318 16.1788 -0.1 + vertex 15.213 9.52982 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.213 9.52982 -0.1 + vertex 9.73318 16.1788 -0.1 + vertex 15.0942 9.33737 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.19116 15.9452 -0.1 + vertex 15.0942 9.33737 -0.1 + vertex 9.73318 16.1788 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.99158 15.8746 -0.1 + vertex 15.0942 9.33737 -0.1 + vertex 9.19116 15.9452 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 15.2162 16.623 -0.1 + vertex 14.6028 17.0277 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 24.4388 2.25734 -0.1 + vertex 24.764 2.4559 -0.1 + vertex 23.22 3.44442 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.764 2.4559 -0.1 + vertex 24.4388 2.25734 -0.1 + vertex 24.6285 2.34829 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.4388 2.25734 -0.1 + vertex 23.22 3.44442 -0.1 + vertex 24.2201 2.19262 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2201 2.19262 -0.1 + vertex 23.22 3.44442 -0.1 + vertex 23.9975 2.16372 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.9975 2.16372 -0.1 + vertex 23.22 3.44442 -0.1 + vertex 23.7673 2.14309 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.0427 3.12896 -0.1 + vertex 23.7673 2.14309 -0.1 + vertex 23.22 3.44442 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7673 2.14309 -0.1 + vertex 23.0427 3.12896 -0.1 + vertex 23.5277 2.10089 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.9115 2.82433 -0.1 + vertex 23.5277 2.10089 -0.1 + vertex 23.0427 3.12896 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.827 2.54396 -0.1 + vertex 23.5277 2.10089 -0.1 + vertex 22.9115 2.82433 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5277 2.10089 -0.1 + vertex 22.827 2.54396 -0.1 + vertex 23.3072 2.04326 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.7901 2.30129 -0.1 + vertex 23.3072 2.04326 -0.1 + vertex 22.827 2.54396 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.3072 2.04326 -0.1 + vertex 22.7901 2.30129 -0.1 + vertex 23.0469 1.94283 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.8016 2.10976 -0.1 + vertex 23.0469 1.94283 -0.1 + vertex 22.7901 2.30129 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.8257 2.03737 -0.1 + vertex 23.0469 1.94283 -0.1 + vertex 22.8016 2.10976 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0469 1.94283 -0.1 + vertex 22.8257 2.03737 -0.1 + vertex 22.9727 1.93385 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.8622 1.9828 -0.1 + vertex 22.9727 1.93385 -0.1 + vertex 22.8257 2.03737 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9727 1.93385 -0.1 + vertex 22.8622 1.9828 -0.1 + vertex 22.9112 1.94773 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4227 15.3534 -0.1 + vertex 24.3498 16.3417 -0.1 + vertex 27.4995 15.0808 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3198 15.5987 -0.1 + vertex 24.3498 16.3417 -0.1 + vertex 27.4227 15.3534 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4995 15.0808 -0.1 + vertex 24.3498 16.3417 -0.1 + vertex 27.5539 14.7505 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.3498 16.3417 -0.1 + vertex 27.3198 15.5987 -0.1 + vertex 24.659 16.5397 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.5539 14.7505 -0.1 + vertex 24.3498 16.3417 -0.1 + vertex 27.5896 14.3319 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1872 15.8473 -0.1 + vertex 24.659 16.5397 -0.1 + vertex 27.3198 15.5987 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.9148 16.0975 -0.1 + vertex 27.5896 14.3319 -0.1 + vertex 24.3498 16.3417 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.659 16.5397 -0.1 + vertex 25.8187 16.7495 -0.1 + vertex 24.7548 16.6154 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.5896 14.3319 -0.1 + vertex 23.9148 16.0975 -0.1 + vertex 27.6103 13.7945 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.3919 15.8262 -0.1 + vertex 27.6103 13.7945 -0.1 + vertex 23.9148 16.0975 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.7548 16.6154 -0.1 + vertex 25.8187 16.7495 -0.1 + vertex 24.8049 16.6725 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.6103 13.7945 -0.1 + vertex 23.3919 15.8262 -0.1 + vertex 27.6211 12.2412 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.659 16.5397 -0.1 + vertex 27.1872 15.8473 -0.1 + vertex 25.8187 16.7495 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.2336 15.278 -0.1 + vertex 27.6211 12.2412 -0.1 + vertex 23.3919 15.8262 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.3371 8.55423 -0.1 + vertex 27.6211 12.2412 -0.1 + vertex 22.2336 15.278 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8659 16.7424 -0.1 + vertex 27.1872 15.8473 -0.1 + vertex 27.0139 16.2113 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.6211 12.2412 -0.1 + vertex 21.3371 8.55423 -0.1 + vertex 27.6024 10.7775 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 21.7259 8.22365 -0.1 + vertex 27.6024 10.7775 -0.1 + vertex 21.3371 8.55423 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 26.9517 6.92758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1872 15.8473 -0.1 + vertex 25.8659 16.7424 -0.1 + vertex 25.8187 16.7495 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8659 16.7424 -0.1 + vertex 27.0139 16.2113 -0.1 + vertex 26.8653 16.6367 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.8138 2.23679 -0.1 + vertex 26.9647 2.16551 -0.1 + vertex 26.9615 2.94949 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.4766 2.59351 -0.1 + vertex 26.9615 2.94949 -0.1 + vertex 26.9294 3.98634 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9647 2.16551 -0.1 + vertex 25.8138 2.23679 -0.1 + vertex 26.0094 1.96397 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.185 2.7087 -0.1 + vertex 26.9294 3.98634 -0.1 + vertex 26.8871 5.49316 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 26.3175 1.53367 -0.1 + vertex 26.9647 2.16551 -0.1 + vertex 26.0094 1.96397 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9517 6.92758 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 26.9103 6.51977 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9615 2.94949 -0.1 + vertex 25.6376 2.44612 -0.1 + vertex 25.8138 2.23679 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.9855 16.8461 -0.1 + vertex 26.8653 16.6367 -0.1 + vertex 26.7571 17.0706 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 26.4455 1.37999 -0.1 + vertex 26.9324 1.61996 -0.1 + vertex 26.3175 1.53367 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.0803 17.2678 -0.1 + vertex 26.7571 17.0706 -0.1 + vertex 26.7051 17.4601 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.0933 17.5963 -0.1 + vertex 26.7051 17.4601 -0.1 + vertex 26.6784 17.7808 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8653 16.6367 -0.1 + vertex 25.9855 16.8461 -0.1 + vertex 25.9096 16.7563 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.6784 17.7808 -0.1 + vertex 26.6332 18.0815 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.6332 18.0815 -0.1 + vertex 26.5691 18.3624 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7571 17.0706 -0.1 + vertex 26.0434 17.0172 -0.1 + vertex 25.9855 16.8461 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.5691 18.3624 -0.1 + vertex 26.4859 18.624 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9324 1.61996 -0.1 + vertex 26.4455 1.37999 -0.1 + vertex 26.901 1.43209 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.4859 18.624 -0.1 + vertex 26.3832 18.8665 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 26.5572 1.2697 -0.1 + vertex 26.901 1.43209 -0.1 + vertex 26.4455 1.37999 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.3832 18.8665 -0.1 + vertex 26.2605 19.0904 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.7448 18.8483 -0.1 + vertex 26.2605 19.0904 -0.1 + vertex 26.1176 19.296 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7051 17.4601 -0.1 + vertex 26.0933 17.5963 -0.1 + vertex 26.0803 17.2678 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7571 17.0706 -0.1 + vertex 26.0803 17.2678 -0.1 + vertex 26.0434 17.0172 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 26.6535 1.20459 -0.1 + vertex 26.8581 1.29842 -0.1 + vertex 26.5572 1.2697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8581 1.29842 -0.1 + vertex 26.6535 1.20459 -0.1 + vertex 26.8032 1.21715 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8032 1.21715 -0.1 + vertex 26.6535 1.20459 -0.1 + vertex 26.7352 1.18648 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.8659 16.7424 -0.1 + vertex 26.8653 16.6367 -0.1 + vertex 25.9096 16.7563 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9103 6.51977 -0.1 + vertex 24.9074 2.59483 -0.1 + vertex 26.8894 6.05157 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.7157 16.8274 -0.1 + vertex 24.8049 16.6725 -0.1 + vertex 25.8187 16.7495 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.901 1.43209 -0.1 + vertex 26.5572 1.2697 -0.1 + vertex 26.8581 1.29842 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8049 16.6725 -0.1 + vertex 25.7157 16.8274 -0.1 + vertex 24.8294 16.7672 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9647 2.16551 -0.1 + vertex 26.3175 1.53367 -0.1 + vertex 26.9324 1.61996 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8294 16.7672 -0.1 + vertex 25.7157 16.8274 -0.1 + vertex 25.6037 16.9917 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8232 16.8925 -0.1 + vertex 25.6037 16.9917 -0.1 + vertex 25.4856 17.2443 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9615 2.94949 -0.1 + vertex 25.4766 2.59351 -0.1 + vertex 25.6376 2.44612 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.789 17.0321 -0.1 + vertex 25.4856 17.2443 -0.1 + vertex 25.3467 17.5167 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.0464 2.67962 -0.1 + vertex 26.8894 6.05157 -0.1 + vertex 24.9074 2.59483 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.7291 17.1695 -0.1 + vertex 25.3467 17.5167 -0.1 + vertex 25.2614 17.6336 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9294 3.98634 -0.1 + vertex 25.3271 2.68052 -0.1 + vertex 25.4766 2.59351 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6602 17.253 -0.1 + vertex 25.2614 17.6336 -0.1 + vertex 25.163 17.7384 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6602 17.253 -0.1 + vertex 25.163 17.7384 -0.1 + vertex 25.0501 17.8316 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9294 3.98634 -0.1 + vertex 25.185 2.7087 -0.1 + vertex 25.3271 2.68052 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6602 17.253 -0.1 + vertex 25.0501 17.8316 -0.1 + vertex 24.9207 17.9138 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8871 5.49316 -0.1 + vertex 25.0464 2.67962 -0.1 + vertex 25.185 2.7087 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8894 6.05157 -0.1 + vertex 25.0464 2.67962 -0.1 + vertex 26.8871 5.49316 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.6037 16.9917 -0.1 + vertex 24.8232 16.8925 -0.1 + vertex 24.8294 16.7672 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.4856 17.2443 -0.1 + vertex 24.789 17.0321 -0.1 + vertex 24.8232 16.8925 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3467 17.5167 -0.1 + vertex 24.7291 17.1695 -0.1 + vertex 24.789 17.0321 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.2614 17.6336 -0.1 + vertex 24.6602 17.253 -0.1 + vertex 24.7291 17.1695 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5483 17.3222 -0.1 + vertex 24.9207 17.9138 -0.1 + vertex 24.6059 18.0475 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9207 17.9138 -0.1 + vertex 24.5483 17.3222 -0.1 + vertex 24.6602 17.253 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 -0.1 + vertex 24.386 17.3783 -0.1 + vertex 24.5483 17.3222 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.166 17.4223 -0.1 + vertex 24.6059 18.0475 -0.1 + vertex 24.2049 18.1437 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 -0.1 + vertex 24.166 17.4223 -0.1 + vertex 24.386 17.3783 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7039 18.207 -0.1 + vertex 24.166 17.4223 -0.1 + vertex 24.2049 18.1437 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7039 18.207 -0.1 + vertex 23.5226 17.4791 -0.1 + vertex 24.166 17.4223 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0891 18.2417 -0.1 + vertex 23.5226 17.4791 -0.1 + vertex 23.7039 18.207 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0891 18.2417 -0.1 + vertex 22.5588 17.5015 -0.1 + vertex 23.5226 17.4791 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.3468 18.2522 -0.1 + vertex 22.5588 17.5015 -0.1 + vertex 23.0891 18.2417 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.5679 18.2611 -0.1 + vertex 22.5588 17.5015 -0.1 + vertex 22.3468 18.2522 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.5679 18.2611 -0.1 + vertex 21.0506 17.5236 -0.1 + vertex 22.5588 17.5015 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9709 18.304 -0.1 + vertex 21.0506 17.5236 -0.1 + vertex 21.5679 18.2611 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.7319 18.3459 -0.1 + vertex 21.0506 17.5236 -0.1 + vertex 20.9709 18.304 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2276 17.5562 -0.1 + vertex 20.7319 18.3459 -0.1 + vertex 20.5281 18.4055 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0333 17.6179 -0.1 + vertex 20.5281 18.4055 -0.1 + vertex 20.3561 18.486 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.7319 18.3459 -0.1 + vertex 20.2276 17.5562 -0.1 + vertex 21.0506 17.5236 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6934 17.9694 -0.1 + vertex 20.3561 18.486 -0.1 + vertex 20.2124 18.5903 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5281 18.4055 -0.1 + vertex 20.1284 17.5777 -0.1 + vertex 20.2276 17.5562 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5469 18.2611 -0.1 + vertex 20.2124 18.5903 -0.1 + vertex 20.0935 18.7216 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5281 18.4055 -0.1 + vertex 20.0333 17.6179 -0.1 + vertex 20.1284 17.5777 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4153 18.6317 -0.1 + vertex 20.0935 18.7216 -0.1 + vertex 19.9962 18.8829 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3561 18.486 -0.1 + vertex 19.9424 17.6771 -0.1 + vertex 20.0333 17.6179 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4153 18.6317 -0.1 + vertex 19.9962 18.8829 -0.1 + vertex 19.9169 19.0772 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3561 18.486 -0.1 + vertex 19.8554 17.7553 -0.1 + vertex 19.9424 17.6771 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.2984 19.082 -0.1 + vertex 19.9169 19.0772 -0.1 + vertex 19.8522 19.3078 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.1956 19.6132 -0.1 + vertex 19.8522 19.3078 -0.1 + vertex 19.753 19.8896 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3561 18.486 -0.1 + vertex 19.6934 17.9694 -0.1 + vertex 19.8554 17.7553 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.1065 20.2262 -0.1 + vertex 19.753 19.8896 -0.1 + vertex 19.6713 20.6529 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.0081 20.8787 -0.1 + vertex 19.6713 20.6529 -0.1 + vertex 19.58 21.4118 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0935 18.7216 -0.1 + vertex 19.4153 18.6317 -0.1 + vertex 19.5469 18.2611 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.892 21.4494 -0.1 + vertex 19.58 21.4118 -0.1 + vertex 19.5238 21.6908 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.892 21.4494 -0.1 + vertex 19.5238 21.6908 -0.1 + vertex 19.4538 21.9215 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2124 18.5903 -0.1 + vertex 19.5469 18.2611 -0.1 + vertex 19.6934 17.9694 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.7726 21.8767 -0.1 + vertex 19.4538 21.9215 -0.1 + vertex 19.3646 22.1178 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.9169 19.0772 -0.1 + vertex 19.2984 19.082 -0.1 + vertex 19.4153 18.6317 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.7726 21.8767 -0.1 + vertex 19.3646 22.1178 -0.1 + vertex 19.2511 22.2936 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.8522 19.3078 -0.1 + vertex 19.1956 19.6132 -0.1 + vertex 19.2984 19.082 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.7163 22.0174 -0.1 + vertex 19.2511 22.2936 -0.1 + vertex 19.108 22.463 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.753 19.8896 -0.1 + vertex 19.1065 20.2262 -0.1 + vertex 19.1956 19.6132 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6713 20.6529 -0.1 + vertex 19.0081 20.8787 -0.1 + vertex 19.1065 20.2262 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.6646 22.0992 -0.1 + vertex 19.108 22.463 -0.1 + vertex 18.9302 22.6398 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.58 21.4118 -0.1 + vertex 18.892 21.4494 -0.1 + vertex 19.0081 20.8787 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4538 21.9215 -0.1 + vertex 18.7726 21.8767 -0.1 + vertex 18.892 21.4494 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.2511 22.2936 -0.1 + vertex 18.7163 22.0174 -0.1 + vertex 18.7726 21.8767 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.108 22.463 -0.1 + vertex 18.6646 22.0992 -0.1 + vertex 18.7163 22.0174 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4732 22.2317 -0.1 + vertex 18.9302 22.6398 -0.1 + vertex 18.6454 22.8797 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9302 22.6398 -0.1 + vertex 18.4732 22.2317 -0.1 + vertex 18.6646 22.0992 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.127 22.4141 -0.1 + vertex 18.6454 22.8797 -0.1 + vertex 18.318 23.1114 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.6454 22.8797 -0.1 + vertex 18.127 22.4141 -0.1 + vertex 18.4732 22.2317 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6752 22.6222 -0.1 + vertex 18.318 23.1114 -0.1 + vertex 17.9883 23.3086 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6752 22.6222 -0.1 + vertex 17.9883 23.3086 -0.1 + vertex 17.6969 23.4449 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.318 23.1114 -0.1 + vertex 17.6752 22.6222 -0.1 + vertex 18.127 22.4141 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6969 23.4449 -0.1 + vertex 17.1667 22.8321 -0.1 + vertex 17.6752 22.6222 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2809 23.9862 -0.1 + vertex 17.1667 22.8321 -0.1 + vertex 17.6969 23.4449 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2809 23.9862 -0.1 + vertex 15.5173 23.4995 -0.1 + vertex 17.1667 22.8321 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1328 24.4531 -0.1 + vertex 15.5173 23.4995 -0.1 + vertex 16.2809 23.9862 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0281 24.1527 -0.1 + vertex 15.1328 24.4531 -0.1 + vertex 14.2197 24.8651 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1328 24.4531 -0.1 + vertex 14.0281 24.1527 -0.1 + vertex 15.5173 23.4995 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2197 24.8651 -0.1 + vertex 13.7923 24.2655 -0.1 + vertex 14.0281 24.1527 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2197 24.8651 -0.1 + vertex 13.5553 24.3991 -0.1 + vertex 13.7923 24.2655 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5086 25.2416 -0.1 + vertex 13.5553 24.3991 -0.1 + vertex 14.2197 24.8651 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.085 24.7212 -0.1 + vertex 13.5086 25.2416 -0.1 + vertex 13.2184 25.4225 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5086 25.2416 -0.1 + vertex 13.085 24.7212 -0.1 + vertex 13.5553 24.3991 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6316 25.1032 -0.1 + vertex 13.2184 25.4225 -0.1 + vertex 12.9664 25.6018 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6316 25.1032 -0.1 + vertex 12.9664 25.6018 -0.1 + vertex 12.7484 25.782 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.2184 25.4225 -0.1 + vertex 12.6316 25.1032 -0.1 + vertex 13.085 24.7212 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2092 25.5292 -0.1 + vertex 12.7484 25.782 -0.1 + vertex 12.5603 25.9653 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2092 25.5292 -0.1 + vertex 12.5603 25.9653 -0.1 + vertex 12.3979 26.1543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8324 25.9834 -0.1 + vertex 12.3979 26.1543 -0.1 + vertex 12.2572 26.3514 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.7484 25.782 -0.1 + vertex 12.2092 25.5292 -0.1 + vertex 12.6316 25.1032 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8324 25.9834 -0.1 + vertex 12.2572 26.3514 -0.1 + vertex 12.1339 26.5589 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5154 26.4501 -0.1 + vertex 12.1339 26.5589 -0.1 + vertex 12.0241 26.7794 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.3839 26.6832 -0.1 + vertex 12.0241 26.7794 -0.1 + vertex 11.903 27.1234 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3979 26.1543 -0.1 + vertex 11.8324 25.9834 -0.1 + vertex 12.2092 25.5292 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.1835 27.139 -0.1 + vertex 11.903 27.1234 -0.1 + vertex 11.8169 27.5343 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.0734 27.5937 -0.1 + vertex 11.8169 27.5343 -0.1 + vertex 11.7656 27.9858 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.0419 28.1143 -0.1 + vertex 11.7656 27.9858 -0.1 + vertex 11.7492 28.4518 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.2437 29.4873 -0.1 + vertex 11.9082 29.6745 -0.1 + vertex 11.4096 29.9696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.9082 29.6745 -0.1 + vertex 11.2437 29.4873 -0.1 + vertex 11.8205 29.3224 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7675 28.9061 -0.1 + vertex 11.1213 28.9486 -0.1 + vertex 11.7492 28.4518 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8205 29.3224 -0.1 + vertex 11.2437 29.4873 -0.1 + vertex 11.7675 28.9061 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.1213 28.9486 -0.1 + vertex 11.7675 28.9061 -0.1 + vertex 11.2437 29.4873 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0528 28.3898 -0.1 + vertex 11.7492 28.4518 -0.1 + vertex 11.1213 28.9486 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1339 26.5589 -0.1 + vertex 11.5154 26.4501 -0.1 + vertex 11.8324 25.9834 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0419 28.1143 -0.1 + vertex 11.7492 28.4518 -0.1 + vertex 11.0528 28.3898 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0241 26.7794 -0.1 + vertex 11.3839 26.6832 -0.1 + vertex 11.5154 26.4501 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7656 27.9858 -0.1 + vertex 11.0419 28.1143 -0.1 + vertex 11.0484 27.8474 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.903 27.1234 -0.1 + vertex 11.2726 26.9135 -0.1 + vertex 11.3839 26.6832 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7656 27.9858 -0.1 + vertex 11.0484 27.8474 -0.1 + vertex 11.0734 27.5937 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.903 27.1234 -0.1 + vertex 11.1835 27.139 -0.1 + vertex 11.2726 26.9135 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8169 27.5343 -0.1 + vertex 11.1184 27.3577 -0.1 + vertex 11.1835 27.139 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8169 27.5343 -0.1 + vertex 11.0734 27.5937 -0.1 + vertex 11.1184 27.3577 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5155 0.168137 -0.1 + vertex 21.1355 -0.658014 -0.1 + vertex 21.1316 -0.233279 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8646 0.230347 -0.1 + vertex 21.1316 -0.233279 -0.1 + vertex 21.099 0.0745682 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9772 0.235111 -0.1 + vertex 21.099 0.0745682 -0.1 + vertex 21.0726 0.170561 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9772 0.235111 -0.1 + vertex 21.0726 0.170561 -0.1 + vertex 21.0399 0.220413 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1316 -0.233279 -0.1 + vertex 20.8646 0.230347 -0.1 + vertex 20.5155 0.168137 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1355 -0.658014 -0.1 + vertex 20.5155 0.168137 -0.1 + vertex 20.0432 0.0451876 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.099 0.0745682 -0.1 + vertex 20.9772 0.235111 -0.1 + vertex 20.8646 0.230347 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1355 -0.658014 -0.1 + vertex 20.0432 0.0451876 -0.1 + vertex 21.1085 -1.15452 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.4982 -0.127099 -0.1 + vertex 21.1085 -1.15452 -0.1 + vertex 20.0432 0.0451876 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1085 -1.15452 -0.1 + vertex 19.4982 -0.127099 -0.1 + vertex 21.0399 -1.71534 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0399 -1.71534 -0.1 + vertex 19.4982 -0.127099 -0.1 + vertex 20.9878 -1.96317 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.7502 -0.369046 -0.1 + vertex 20.9878 -1.96317 -0.1 + vertex 19.4982 -0.127099 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9878 -1.96317 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.9199 -2.19366 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9199 -2.19366 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.8331 -2.41014 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8331 -2.41014 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.7245 -2.61588 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.7245 -2.61588 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.591 -2.8142 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.591 -2.8142 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.4297 -3.0084 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.4297 -3.0084 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.2374 -3.20177 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2374 -3.20177 -0.1 + vertex 18.7502 -0.369046 -0.1 + vertex 20.0112 -3.39762 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.4876 -0.435405 -0.1 + vertex 20.0112 -3.39762 -0.1 + vertex 18.7502 -0.369046 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0112 -3.39762 -0.1 + vertex 18.4876 -0.435405 -0.1 + vertex 19.4451 -3.80993 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.2791 -0.466914 -0.1 + vertex 19.4451 -3.80993 -0.1 + vertex 18.4876 -0.435405 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.1098 -0.464739 -0.1 + vertex 19.4451 -3.80993 -0.1 + vertex 18.2791 -0.466914 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4451 -3.80993 -0.1 + vertex 18.1098 -0.464739 -0.1 + vertex 18.7073 -4.27174 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.9646 -0.430052 -0.1 + vertex 18.7073 -4.27174 -0.1 + vertex 18.1098 -0.464739 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.7736 -4.80944 -0.1 + vertex 17.9646 -0.430052 -0.1 + vertex 17.8284 -0.36402 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.9646 -0.430052 -0.1 + vertex 17.7736 -4.80944 -0.1 + vertex 18.7073 -4.27174 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.3217 -2.5049 -0.1 + vertex 17.8284 -0.36402 -0.1 + vertex 17.6862 -0.267812 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2572 -2.23644 -0.1 + vertex 17.6862 -0.267812 -0.1 + vertex 17.4918 -0.0873203 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.1524 -1.94488 -0.1 + vertex 17.4918 -0.0873203 -0.1 + vertex 17.2889 0.169637 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.008 -1.63155 -0.1 + vertex 17.2889 0.169637 -0.1 + vertex 17.0802 0.495742 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.8249 -1.29782 -0.1 + vertex 17.0802 0.495742 -0.1 + vertex 16.8681 0.883681 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.604 -0.945011 -0.1 + vertex 16.8681 0.883681 -0.1 + vertex 16.6551 1.32614 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3463 -0.574481 -0.1 + vertex 16.6551 1.32614 -0.1 + vertex 16.4437 1.81579 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6862 -0.267812 -0.1 + vertex 14.2572 -2.23644 -0.1 + vertex 14.3217 -2.5049 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.7237 0.214368 -0.1 + vertex 16.4437 1.81579 -0.1 + vertex 16.2363 2.34533 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3607 0.629996 -0.1 + vertex 16.2363 2.34533 -0.1 + vertex 16.0356 2.90743 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5355 1.49693 -0.1 + vertex 16.0356 2.90743 -0.1 + vertex 15.6639 4.10009 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.8284 -0.36402 -0.1 + vertex 14.3217 -2.5049 -0.1 + vertex 14.3448 -2.7489 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5355 1.49693 -0.1 + vertex 15.6639 4.10009 -0.1 + vertex 15.498 4.716 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5842 2.40247 -0.1 + vertex 15.498 4.716 -0.1 + vertex 15.3486 5.33522 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5842 2.40247 -0.1 + vertex 15.3486 5.33522 -0.1 + vertex 15.2183 5.95043 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.61741 3.25086 -0.1 + vertex 15.2183 5.95043 -0.1 + vertex 15.1095 6.5543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.29624 3.50894 -0.1 + vertex 15.1095 6.5543 -0.1 + vertex 15.0249 7.13954 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.3256 -2.96711 -0.1 + vertex 17.7736 -4.80944 -0.1 + vertex 14.3448 -2.7489 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.14614 3.60373 -0.1 + vertex 15.0249 7.13954 -0.1 + vertex 14.9668 7.69881 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.19732 4.25764 -0.1 + vertex 14.9668 7.69881 -0.1 + vertex 14.9212 8.45633 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0942 9.33737 -0.1 + vertex 8.99158 15.8746 -0.1 + vertex 15.0092 9.15168 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.7736 -4.80944 -0.1 + vertex 14.3256 -2.96711 -0.1 + vertex 16.3254 -5.59514 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.1768 -3.32005 -0.1 + vertex 16.3254 -5.59514 -0.1 + vertex 14.2634 -3.15818 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.2634 -3.15818 -0.1 + vertex 16.3254 -5.59514 -0.1 + vertex 14.3256 -2.96711 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.8284 -0.36402 -0.1 + vertex 14.3448 -2.7489 -0.1 + vertex 17.7736 -4.80944 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.4918 -0.0873203 -0.1 + vertex 14.1524 -1.94488 -0.1 + vertex 14.2572 -2.23644 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.2889 0.169637 -0.1 + vertex 14.008 -1.63155 -0.1 + vertex 14.1524 -1.94488 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 14.6028 17.0277 -0.1 + vertex 14.0017 17.4864 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.0802 0.495742 -0.1 + vertex 13.8249 -1.29782 -0.1 + vertex 14.008 -1.63155 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8681 0.883681 -0.1 + vertex 13.604 -0.945011 -0.1 + vertex 13.8249 -1.29782 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 14.0017 17.4864 -0.1 + vertex 13.3813 18.0182 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.6551 1.32614 -0.1 + vertex 13.3463 -0.574481 -0.1 + vertex 13.604 -0.945011 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4437 1.81579 -0.1 + vertex 13.0525 -0.187573 -0.1 + vertex 13.3463 -0.574481 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4437 1.81579 -0.1 + vertex 12.7237 0.214368 -0.1 + vertex 13.0525 -0.187573 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 13.3813 18.0182 -0.1 + vertex 12.71 18.6425 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2363 2.34533 -0.1 + vertex 12.3607 0.629996 -0.1 + vertex 12.7237 0.214368 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.4375 16.5104 -0.1 + vertex 12.71 18.6425 -0.1 + vertex 12.1494 19.1886 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.77546 17.1908 -0.1 + vertex 12.1494 19.1886 -0.1 + vertex 11.6914 19.6646 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.87708 15.8492 -0.1 + vertex 15.0092 9.15168 -0.1 + vertex 8.99158 15.8746 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.09841 17.8163 -0.1 + vertex 11.6914 19.6646 -0.1 + vertex 11.3113 20.1069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.09841 17.8163 -0.1 + vertex 11.3113 20.1069 -0.1 + vertex 10.9846 20.5521 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.31493 18.4459 -0.1 + vertex 10.9846 20.5521 -0.1 + vertex 10.6869 21.0368 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.0356 2.90743 -0.1 + vertex 11.5355 1.49693 -0.1 + vertex 12.3607 0.629996 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.498 4.716 -0.1 + vertex 10.5842 2.40247 -0.1 + vertex 11.5355 1.49693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.9444 18.7161 -0.1 + vertex 10.6869 21.0368 -0.1 + vertex 10.3935 21.5973 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.36805 19.075 -0.1 + vertex 10.3935 21.5973 -0.1 + vertex 10.0801 22.2703 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1494 19.1886 -0.1 + vertex 9.77546 17.1908 -0.1 + vertex 10.4375 16.5104 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.21113 19.1268 -0.1 + vertex 10.0801 22.2703 -0.1 + vertex 9.72206 23.0922 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6914 19.6646 -0.1 + vertex 9.46246 17.4938 -0.1 + vertex 9.77546 17.1908 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.21113 19.1268 -0.1 + vertex 9.72206 23.0922 -0.1 + vertex 9.38213 23.8626 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6914 19.6646 -0.1 + vertex 9.09841 17.8163 -0.1 + vertex 9.46246 17.4938 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.76329 26.0408 -0.1 + vertex 9.38213 23.8626 -0.1 + vertex 9.08206 24.476 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.12606 25.9588 -0.1 + vertex 9.08206 24.476 -0.1 + vertex 8.80411 24.9522 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.55919 25.8755 -0.1 + vertex 8.80411 24.9522 -0.1 + vertex 8.6679 25.145 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.55919 25.8755 -0.1 + vertex 8.6679 25.145 -0.1 + vertex 8.53058 25.3107 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.55919 25.8755 -0.1 + vertex 8.53058 25.3107 -0.1 + vertex 8.38993 25.4519 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9846 20.5521 -0.1 + vertex 8.31493 18.4459 -0.1 + vertex 9.09841 17.8163 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.92584 25.7528 -0.1 + vertex 8.38993 25.4519 -0.1 + vertex 8.24373 25.571 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.92584 25.7528 -0.1 + vertex 8.24373 25.571 -0.1 + vertex 8.08977 25.6705 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.6869 21.0368 -0.1 + vertex 7.9444 18.7161 -0.1 + vertex 8.31493 18.4459 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.38993 25.4519 -0.1 + vertex 7.92584 25.7528 -0.1 + vertex 7.55919 25.8755 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.3935 21.5973 -0.1 + vertex 7.62063 18.9319 -0.1 + vertex 7.9444 18.7161 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.80411 24.9522 -0.1 + vertex 7.55919 25.8755 -0.1 + vertex 7.12606 25.9588 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.3935 21.5973 -0.1 + vertex 7.36805 19.075 -0.1 + vertex 7.62063 18.9319 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0801 22.2703 -0.1 + vertex 7.21113 19.1268 -0.1 + vertex 7.36805 19.075 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.76329 26.0408 -0.1 + vertex 9.08206 24.476 -0.1 + vertex 7.12606 25.9588 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.38213 23.8626 -0.1 + vertex 6.76329 26.0408 -0.1 + vertex 7.21113 19.1268 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.21113 19.1268 -0.1 + vertex 6.76329 26.0408 -0.1 + vertex 7.15267 19.0966 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.41393 26.1795 -0.1 + vertex 7.15267 19.0966 -0.1 + vertex 6.76329 26.0408 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.07308 26.3793 -0.1 + vertex 7.15267 19.0966 -0.1 + vertex 6.41393 26.1795 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.816408 27.0884 -0.1 + vertex 7.15267 19.0966 -0.1 + vertex 6.07308 26.3793 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 1.92323 12.5289 -0.1 + vertex 7.1242 19.0144 -0.1 + vertex 1.90284 12.6291 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.734953 27.0776 -0.1 + vertex 7.15267 19.0966 -0.1 + vertex 0.816408 27.0884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.870515 27.1101 -0.1 + vertex 6.07308 26.3793 -0.1 + vertex 5.73586 26.6445 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.870515 27.1101 -0.1 + vertex 5.73586 26.6445 -0.1 + vertex 5.39739 26.9794 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 6.22936 5.32709 -0.1 + vertex 7.1242 19.0144 -0.1 + vertex 1.92323 12.5289 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.870515 27.1101 -0.1 + vertex 5.39739 26.9794 -0.1 + vertex 5.05276 27.3884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.908598 27.1645 -0.1 + vertex 5.05276 27.3884 -0.1 + vertex 4.69711 27.8759 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.944126 27.2693 -0.1 + vertex 4.69711 27.8759 -0.1 + vertex 4.32553 28.4461 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 6.22936 5.32709 -0.1 + vertex 7.07462 4.9138 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04514 28.0688 -0.1 + vertex 4.32553 28.4461 -0.1 + vertex 4.09087 28.8303 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04514 28.0688 -0.1 + vertex 4.09087 28.8303 -0.1 + vertex 3.91157 29.1502 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.0601 28.6106 -0.1 + vertex 3.91157 29.1502 -0.1 + vertex 3.78021 29.4348 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.07949 29.2543 -0.1 + vertex 3.78021 29.4348 -0.1 + vertex 3.68937 29.7129 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.13903 29.8907 -0.1 + vertex 3.68937 29.7129 -0.1 + vertex 3.63162 30.0135 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.24074 30.5277 -0.1 + vertex 3.63162 30.0135 -0.1 + vertex 3.59957 30.3654 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.91748 12.4352 -0.1 + vertex 6.22936 5.32709 -0.1 + vertex 1.92323 12.5289 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.38662 31.173 -0.1 + vertex 3.59957 30.3654 -0.1 + vertex 3.58282 31.3388 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.0741 -3.47638 -0.1 + vertex 16.3254 -5.59514 -0.1 + vertex 14.1768 -3.32005 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.3254 -5.59514 -0.1 + vertex 14.0741 -3.47638 -0.1 + vertex 15.6549 -5.93433 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.8248 -3.7697 -0.1 + vertex 15.6549 -5.93433 -0.1 + vertex 14.0741 -3.47638 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6549 -5.93433 -0.1 + vertex 13.8248 -3.7697 -0.1 + vertex 15.0129 -6.23993 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.5249 -4.03275 -0.1 + vertex 15.0129 -6.23993 -0.1 + vertex 13.8248 -3.7697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0129 -6.23993 -0.1 + vertex 13.5249 -4.03275 -0.1 + vertex 14.3941 -6.51356 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.1837 -4.26011 -0.1 + vertex 14.3941 -6.51356 -0.1 + vertex 13.5249 -4.03275 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.3941 -6.51356 -0.1 + vertex 13.1837 -4.26011 -0.1 + vertex 13.793 -6.75686 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.8106 -4.44636 -0.1 + vertex 13.793 -6.75686 -0.1 + vertex 13.1837 -4.26011 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.793 -6.75686 -0.1 + vertex 12.8106 -4.44636 -0.1 + vertex 13.2041 -6.97145 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.4149 -4.5861 -0.1 + vertex 13.2041 -6.97145 -0.1 + vertex 12.8106 -4.44636 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.2041 -6.97145 -0.1 + vertex 12.4149 -4.5861 -0.1 + vertex 12.6221 -7.15898 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.006 -4.67391 -0.1 + vertex 12.6221 -7.15898 -0.1 + vertex 12.4149 -4.5861 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6221 -7.15898 -0.1 + vertex 12.006 -4.67391 -0.1 + vertex 12.0414 -7.32107 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.5931 -4.70438 -0.1 + vertex 12.0414 -7.32107 -0.1 + vertex 12.006 -4.67391 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5931 -4.70438 -0.1 + vertex 11.4568 -7.45935 -0.1 + vertex 12.0414 -7.32107 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.26 -4.69402 -0.1 + vertex 11.4568 -7.45935 -0.1 + vertex 11.5931 -4.70438 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9319 -4.66264 -0.1 + vertex 11.4568 -7.45935 -0.1 + vertex 11.26 -4.69402 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9319 -4.66264 -0.1 + vertex 10.8627 -7.57545 -0.1 + vertex 11.4568 -7.45935 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.608 -4.6098 -0.1 + vertex 10.8627 -7.57545 -0.1 + vertex 10.9319 -4.66264 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.2538 -7.67101 -0.1 + vertex 10.608 -4.6098 -0.1 + vertex 10.2875 -4.53506 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.608 -4.6098 -0.1 + vertex 10.2538 -7.67101 -0.1 + vertex 10.8627 -7.57545 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.62459 -7.74765 -0.1 + vertex 10.2875 -4.53506 -0.1 + vertex 9.96977 -4.43796 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.809 -5.75259 -0.1 + vertex 9.96977 -4.43796 -0.1 + vertex 9.65389 -4.31807 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.2875 -4.53506 -0.1 + vertex 9.62459 -7.74765 -0.1 + vertex 10.2538 -7.67101 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.809 -5.75259 -0.1 + vertex 9.65389 -4.31807 -0.1 + vertex 9.33912 -4.17495 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.809 -5.75259 -0.1 + vertex 9.33912 -4.17495 -0.1 + vertex 9.02468 -4.00814 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.96977 -4.43796 -0.1 + vertex 7.809 -5.75259 -0.1 + vertex 9.62459 -7.74765 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.809 -5.75259 -0.1 + vertex 9.02468 -4.00814 -0.1 + vertex 8.70978 -3.81721 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.04277 -4.97268 -0.1 + vertex 8.70978 -3.81721 -0.1 + vertex 8.39365 -3.60171 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.04277 -4.97268 -0.1 + vertex 8.39365 -3.60171 -0.1 + vertex 8.0755 -3.36119 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.62459 -7.74765 -0.1 + vertex 7.809 -5.75259 -0.1 + vertex 8.96966 -7.80701 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.809 -5.75259 -0.1 + vertex 7.56097 -7.88041 -0.1 + vertex 8.96966 -7.80701 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.2241 -5.88439 -0.1 + vertex 7.56097 -7.88041 -0.1 + vertex 7.809 -5.75259 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.87672 -5.95074 -0.1 + vertex 7.56097 -7.88041 -0.1 + vertex 7.2241 -5.88439 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.53505 -5.98957 -0.1 + vertex 7.56097 -7.88041 -0.1 + vertex 6.87672 -5.95074 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.04455 -7.91255 -0.1 + vertex 6.53505 -5.98957 -0.1 + vertex 6.18777 -5.99984 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.53505 -5.98957 -0.1 + vertex 6.04455 -7.91255 -0.1 + vertex 7.56097 -7.88041 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.82356 -5.98052 -0.1 + vertex 6.04455 -7.91255 -0.1 + vertex 6.18777 -5.99984 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.82356 -5.98052 -0.1 + vertex 5.49083 -7.9071 -0.1 + vertex 6.04455 -7.91255 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.4311 -5.93055 -0.1 + vertex 5.49083 -7.9071 -0.1 + vertex 5.82356 -5.98052 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.4311 -5.93055 -0.1 + vertex 5.0434 -7.88498 -0.1 + vertex 5.49083 -7.9071 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.99906 -5.84891 -0.1 + vertex 5.0434 -7.88498 -0.1 + vertex 5.4311 -5.93055 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.99906 -5.84891 -0.1 + vertex 4.67971 -7.84446 -0.1 + vertex 5.0434 -7.88498 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.11342 -7.70123 -0.1 + vertex 4.99906 -5.84891 -0.1 + vertex 4.51611 -5.73457 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.99906 -5.84891 -0.1 + vertex 4.37723 -7.78379 -0.1 + vertex 4.67971 -7.84446 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.99906 -5.84891 -0.1 + vertex 4.11342 -7.70123 -0.1 + vertex 4.37723 -7.78379 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.40104 -7.34622 -0.1 + vertex 4.51611 -5.73457 -0.1 + vertex 3.97093 -5.58648 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.51611 -5.73457 -0.1 + vertex 3.86574 -7.59505 -0.1 + vertex 4.11342 -7.70123 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.51611 -5.73457 -0.1 + vertex 3.40104 -7.34622 -0.1 + vertex 3.86574 -7.59505 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.71562 -6.94693 -0.1 + vertex 3.97093 -5.58648 -0.1 + vertex 3.25174 -5.37115 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 -0.1 + vertex 2.71562 -6.94693 -0.1 + vertex 3.40104 -7.34622 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.534 -5.13555 -0.1 + vertex 2.71562 -6.94693 -0.1 + vertex 3.25174 -5.37115 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.05193 -5.91722 -0.1 + vertex 2.534 -5.13555 -0.1 + vertex 1.81816 -4.87986 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.05193 -5.91722 -0.1 + vertex 1.81816 -4.87986 -0.1 + vertex 1.10471 -4.60426 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.534 -5.13555 -0.1 + vertex 1.05193 -5.91722 -0.1 + vertex 2.71562 -6.94693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.394112 -4.30895 -0.1 + vertex 1.05193 -5.91722 -0.1 + vertex 1.10471 -4.60426 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.694871 -4.82613 -0.1 + vertex 0.394112 -4.30895 -0.1 + vertex -0.313177 -3.99411 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.394112 -4.30895 -0.1 + vertex -0.694871 -4.82613 -0.1 + vertex 1.05193 -5.91722 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.01669 -3.65993 -0.1 + vertex -0.694871 -4.82613 -0.1 + vertex -0.313177 -3.99411 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.47177 -3.7788 -0.1 + vertex -1.01669 -3.65993 -0.1 + vertex -1.71595 -3.30659 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.47177 -3.7788 -0.1 + vertex -1.71595 -3.30659 -0.1 + vertex -2.32857 -3.00041 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.01669 -3.65993 -0.1 + vertex -2.47177 -3.7788 -0.1 + vertex -0.694871 -4.82613 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.32857 -3.00041 -0.1 + vertex -2.8551 -3.51984 -0.1 + vertex -2.47177 -3.7788 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.87688 -2.74967 -0.1 + vertex -2.8551 -3.51984 -0.1 + vertex -2.32857 -3.00041 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.87688 -2.74967 -0.1 + vertex -3.18232 -3.26618 -0.1 + vertex -2.8551 -3.51984 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.44099 -3.03042 -0.1 + vertex -2.87688 -2.74967 -0.1 + vertex -3.301 -2.58026 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.87688 -2.74967 -0.1 + vertex -3.44099 -3.03042 -0.1 + vertex -3.18232 -3.26618 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.61865 -2.82513 -0.1 + vertex -3.301 -2.58026 -0.1 + vertex -3.54104 -2.51804 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.301 -2.58026 -0.1 + vertex -3.61865 -2.82513 -0.1 + vertex -3.44099 -3.03042 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 -0.1 + vertex -3.54104 -2.51804 -0.1 + vertex -3.62666 -2.52788 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70601 -2.60189 -0.1 + vertex -3.62666 -2.52788 -0.1 + vertex -3.68113 -2.55635 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.54104 -2.51804 -0.1 + vertex -3.70285 -2.66292 -0.1 + vertex -3.61865 -2.82513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.62666 -2.52788 -0.1 + vertex -3.70601 -2.60189 -0.1 + vertex -3.70285 -2.66292 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.5419 27.5737 -0.1 + vertex -21.2799 26.5937 -0.1 + vertex -21.2563 26.5576 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.7979 27.6578 -0.1 + vertex -21.3473 26.6332 -0.1 + vertex -21.2799 26.5937 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5951 26.7172 -0.1 + vertex -21.1001 27.7294 -0.1 + vertex -21.4599 27.7917 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.1001 27.7294 -0.1 + vertex -21.5951 26.7172 -0.1 + vertex -21.3473 26.6332 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.4599 27.7917 -0.1 + vertex -21.9618 26.7994 -0.1 + vertex -21.5951 26.7172 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3975 27.9007 -0.1 + vertex -21.9618 26.7994 -0.1 + vertex -21.4599 27.7917 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3975 27.9007 -0.1 + vertex -22.4095 26.8695 -0.1 + vertex -21.9618 26.7994 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3975 27.9007 -0.1 + vertex -22.8078 26.9423 -0.1 + vertex -22.4095 26.8695 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1232 27.9594 -0.1 + vertex -22.8078 26.9423 -0.1 + vertex -22.3975 27.9007 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1232 27.9594 -0.1 + vertex -23.1972 27.0531 -0.1 + vertex -22.8078 26.9423 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1232 27.9594 -0.1 + vertex -23.56 27.1917 -0.1 + vertex -23.1972 27.0531 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.7335 27.9892 -0.1 + vertex -23.56 27.1917 -0.1 + vertex -23.1232 27.9594 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.7335 27.9892 -0.1 + vertex -23.8785 27.3484 -0.1 + vertex -23.56 27.1917 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.7335 27.9892 -0.1 + vertex -24.1346 27.513 -0.1 + vertex -23.8785 27.3484 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.1643 27.9885 -0.1 + vertex -24.1346 27.513 -0.1 + vertex -23.7335 27.9892 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3632 27.7532 -0.1 + vertex -24.1643 27.9885 -0.1 + vertex -24.2923 27.9761 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1643 27.9885 -0.1 + vertex -24.3107 27.6757 -0.1 + vertex -24.1346 27.513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3858 27.8943 -0.1 + vertex -24.2923 27.9761 -0.1 + vertex -24.3515 27.9554 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1643 27.9885 -0.1 + vertex -24.3632 27.7532 -0.1 + vertex -24.3107 27.6757 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2923 27.9761 -0.1 + vertex -24.3858 27.8943 -0.1 + vertex -24.3889 27.8265 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2923 27.9761 -0.1 + vertex -24.3889 27.8265 -0.1 + vertex -24.3632 27.7532 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.89877 27.2865 -0.1 + vertex -10.5394 24.4322 -0.1 + vertex -10.5349 24.4109 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.2816 27.5955 -0.1 + vertex -10.6591 24.5009 -0.1 + vertex -10.5394 24.4322 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.2816 27.5955 -0.1 + vertex -10.9077 24.5958 -0.1 + vertex -10.6591 24.5009 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.2816 27.5955 -0.1 + vertex -11.2625 24.7069 -0.1 + vertex -10.9077 24.5958 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5342 27.7352 -0.1 + vertex -11.2625 24.7069 -0.1 + vertex -10.2816 27.5955 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5342 27.7352 -0.1 + vertex -11.7825 24.8213 -0.1 + vertex -11.2625 24.7069 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5342 27.7352 -0.1 + vertex -12.4277 24.907 -0.1 + vertex -11.7825 24.8213 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6053 27.816 -0.1 + vertex -12.4277 24.907 -0.1 + vertex -11.5342 27.7352 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6053 27.816 -0.1 + vertex -13.1566 24.9634 -0.1 + vertex -12.4277 24.907 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.5445 27.8374 -0.1 + vertex -13.1566 24.9634 -0.1 + vertex -12.6053 27.816 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.5445 27.8374 -0.1 + vertex -13.9275 24.99 -0.1 + vertex -13.1566 24.9634 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.4014 27.7989 -0.1 + vertex -13.9275 24.99 -0.1 + vertex -13.5445 27.8374 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.4014 27.7989 -0.1 + vertex -14.6988 24.986 -0.1 + vertex -13.9275 24.99 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.2259 27.7001 -0.1 + vertex -14.6988 24.986 -0.1 + vertex -14.4014 27.7989 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.2259 27.7001 -0.1 + vertex -15.4289 24.9511 -0.1 + vertex -14.6988 24.986 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.0674 27.5405 -0.1 + vertex -15.4289 24.9511 -0.1 + vertex -15.2259 27.7001 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.0674 27.5405 -0.1 + vertex -16.0762 24.8844 -0.1 + vertex -15.4289 24.9511 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.9758 27.3196 -0.1 + vertex -16.0762 24.8844 -0.1 + vertex -16.0674 27.5405 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.0762 24.8844 -0.1 + vertex -16.9758 27.3196 -0.1 + vertex -16.599 24.7853 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 -0.1 + vertex -17.1707 24.6702 -0.1 + vertex -16.599 24.7853 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 -0.1 + vertex -18.0818 24.5233 -0.1 + vertex -17.1707 24.6702 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.3233 26.703 -0.1 + vertex -18.0818 24.5233 -0.1 + vertex -16.9758 27.3196 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0818 24.5233 -0.1 + vertex -19.3233 26.703 -0.1 + vertex -19.207 24.3637 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2669 26.4994 -0.1 + vertex -19.3233 26.703 -0.1 + vertex -19.9368 27.2141 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2563 26.5576 -0.1 + vertex -19.9368 27.2141 -0.1 + vertex -20.1227 27.3549 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2563 26.5576 -0.1 + vertex -20.1227 27.3549 -0.1 + vertex -20.3206 27.4738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2997 26.4466 -0.1 + vertex -19.3233 26.703 -0.1 + vertex -21.2669 26.4994 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2563 26.5576 -0.1 + vertex -20.3206 27.4738 -0.1 + vertex -20.5419 27.5737 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2799 26.5937 -0.1 + vertex -20.5419 27.5737 -0.1 + vertex -20.7979 27.6578 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.3473 26.6332 -0.1 + vertex -20.7979 27.6578 -0.1 + vertex -21.1001 27.7294 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.9368 27.2141 -0.1 + vertex -21.2563 26.5576 -0.1 + vertex -21.2669 26.4994 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.3233 26.703 -0.1 + vertex -20.4207 24.2101 -0.1 + vertex -19.207 24.3637 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.3233 26.703 -0.1 + vertex -21.2997 26.4466 -0.1 + vertex -20.4207 24.2101 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.3558 26.3992 -0.1 + vertex -20.4207 24.2101 -0.1 + vertex -21.2997 26.4466 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.4368 26.3569 -0.1 + vertex -20.4207 24.2101 -0.1 + vertex -21.3558 26.3992 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.6785 26.2874 -0.1 + vertex -20.4207 24.2101 -0.1 + vertex -21.4368 26.3569 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.0356 26.2369 -0.1 + vertex -20.4207 24.2101 -0.1 + vertex -21.6785 26.2874 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.3692 23.8604 -0.1 + vertex -22.0356 26.2369 -0.1 + vertex -22.5186 26.2045 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.3692 23.8604 -0.1 + vertex -22.5186 26.2045 -0.1 + vertex -23.1385 26.1891 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.0356 26.2369 -0.1 + vertex -23.3692 23.8604 -0.1 + vertex -20.4207 24.2101 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.6523 24.0122 -0.1 + vertex -23.3692 23.8604 -0.1 + vertex -23.1385 26.1891 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.3692 23.8604 -0.1 + vertex -24.6523 24.0122 -0.1 + vertex -24.1455 19.0472 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8316 26.205 -0.1 + vertex -24.6523 24.0122 -0.1 + vertex -23.1385 26.1891 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8316 26.205 -0.1 + vertex -26.0107 24.2804 -0.1 + vertex -24.6523 24.0122 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3751 26.2567 -0.1 + vertex -26.0107 24.2804 -0.1 + vertex -24.8316 26.205 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3751 26.2567 -0.1 + vertex -26.5818 24.4056 -0.1 + vertex -26.0107 24.2804 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.1227 24.5501 -0.1 + vertex -26.3751 26.2567 -0.1 + vertex -26.9353 26.3003 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3751 26.2567 -0.1 + vertex -27.1227 24.5501 -0.1 + vertex -26.5818 24.4056 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.636 24.7152 -0.1 + vertex -26.9353 26.3003 -0.1 + vertex -27.4097 26.3653 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.9353 26.3003 -0.1 + vertex -27.636 24.7152 -0.1 + vertex -27.1227 24.5501 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1248 24.9019 -0.1 + vertex -27.4097 26.3653 -0.1 + vertex -27.8395 26.4592 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.4097 26.3653 -0.1 + vertex -28.1248 24.9019 -0.1 + vertex -27.636 24.7152 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5919 25.1115 -0.1 + vertex -27.8395 26.4592 -0.1 + vertex -28.2663 26.5892 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8395 26.4592 -0.1 + vertex -28.5919 25.1115 -0.1 + vertex -28.1248 24.9019 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0402 25.3453 -0.1 + vertex -28.2663 26.5892 -0.1 + vertex -28.7314 26.7626 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2663 26.5892 -0.1 + vertex -29.0402 25.3453 -0.1 + vertex -28.5919 25.1115 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.4725 25.6043 -0.1 + vertex -28.7314 26.7626 -0.1 + vertex -29.2762 26.9865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.7314 26.7626 -0.1 + vertex -29.4725 25.6043 -0.1 + vertex -29.0402 25.3453 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.2762 26.9865 -0.1 + vertex -29.8918 25.8898 -0.1 + vertex -29.4725 25.6043 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0875 27.3102 -0.1 + vertex -29.8918 25.8898 -0.1 + vertex -29.2762 26.9865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0875 27.3102 -0.1 + vertex -30.6514 26.471 -0.1 + vertex -29.8918 25.8898 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.9143 26.7038 -0.1 + vertex -30.0875 27.3102 -0.1 + vertex -30.6543 27.4912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1043 26.9038 -0.1 + vertex -30.6543 27.4912 -0.1 + vertex -30.8579 27.5312 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0875 27.3102 -0.1 + vertex -30.9143 26.7038 -0.1 + vertex -30.6514 26.471 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2248 27.0754 -0.1 + vertex -30.8579 27.5312 -0.1 + vertex -31.0145 27.539 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.6543 27.4912 -0.1 + vertex -31.1043 26.9038 -0.1 + vertex -30.9143 26.7038 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 -0.1 + vertex -31.0145 27.539 -0.1 + vertex -31.1289 27.5158 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 -0.1 + vertex -31.1289 27.5158 -0.1 + vertex -31.2059 27.4629 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8579 27.5312 -0.1 + vertex -31.2248 27.0754 -0.1 + vertex -31.1043 26.9038 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0145 27.539 -0.1 + vertex -31.272 27.3506 -0.1 + vertex -31.2795 27.2229 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0145 27.539 -0.1 + vertex -31.2795 27.2229 -0.1 + vertex -31.2248 27.0754 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.22936 5.32709 -0.1 + vertex 1.91748 12.4352 -0.1 + vertex 5.27855 5.76024 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.32553 28.4461 -0.1 + vertex 1.00441 27.6053 -0.1 + vertex 0.944126 27.2693 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.60924 32.0876 -0.1 + vertex 1.57871 31.8344 -0.1 + vertex 3.58282 31.3388 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.69711 27.8759 -0.1 + vertex 0.944126 27.2693 -0.1 + vertex 0.908598 27.1645 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.38662 31.173 -0.1 + vertex 3.58282 31.3388 -0.1 + vertex 1.57871 31.8344 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 1.85843 12.7398 -0.1 + vertex 1.90284 12.6291 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.59957 30.3654 -0.1 + vertex 1.38662 31.173 -0.1 + vertex 1.24074 30.5277 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.32553 28.4461 -0.1 + vertex 1.04514 28.0688 -0.1 + vertex 1.00441 27.6053 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.63162 30.0135 -0.1 + vertex 1.24074 30.5277 -0.1 + vertex 1.13903 29.8907 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.68937 29.7129 -0.1 + vertex 1.13903 29.8907 -0.1 + vertex 1.07949 29.2543 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.78021 29.4348 -0.1 + vertex 1.07949 29.2543 -0.1 + vertex 1.0601 28.6106 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.91157 29.1502 -0.1 + vertex 1.0601 28.6106 -0.1 + vertex 1.04514 28.0688 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.05276 27.3884 -0.1 + vertex 0.908598 27.1645 -0.1 + vertex 0.870515 27.1101 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 1.7147 12.9716 -0.1 + vertex 1.85843 12.7398 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.07308 26.3793 -0.1 + vertex 0.870515 27.1101 -0.1 + vertex 0.816408 27.0884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 1.51175 13.1874 -0.1 + vertex 1.7147 12.9716 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 1.25015 13.3869 -0.1 + vertex 1.51175 13.1874 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 0.930489 13.5702 -0.1 + vertex 1.25015 13.3869 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.15267 19.0966 -0.1 + vertex 0.734953 27.0776 -0.1 + vertex 7.1242 19.0144 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.371032 14.021 -0.1 + vertex 7.1242 19.0144 -0.1 + vertex 0.734953 27.0776 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 0.55335 13.737 -0.1 + vertex 0.930489 13.5702 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.917111 14.138 -0.1 + vertex 0.734953 27.0776 -0.1 + vertex 0.505992 27.0868 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.51834 14.2381 -0.1 + vertex 0.505992 27.0868 -0.1 + vertex 0.215611 27.1342 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 0.119316 13.8873 -0.1 + vertex 0.55335 13.737 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.17413 14.3212 -0.1 + vertex 0.215611 27.1342 -0.1 + vertex -0.104203 27.2162 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex -0.371032 14.021 -0.1 + vertex 0.119316 13.8873 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.8839 14.3873 -0.1 + vertex -0.104203 27.2162 -0.1 + vertex -0.438314 27.347 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.54439 27.3597 -0.1 + vertex -0.438314 27.347 -0.1 + vertex -0.7749 27.5359 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.734953 27.0776 -0.1 + vertex -0.917111 14.138 -0.1 + vertex -0.371032 14.021 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.54439 27.3597 -0.1 + vertex -0.7749 27.5359 -0.1 + vertex -1.11256 27.7809 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.44763 27.4571 -0.1 + vertex -1.11256 27.7809 -0.1 + vertex -1.44988 28.0795 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.505992 27.0868 -0.1 + vertex -1.51834 14.2381 -0.1 + vertex -0.917111 14.138 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.44763 27.4571 -0.1 + vertex -1.44988 28.0795 -0.1 + vertex -1.78547 28.4297 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.37156 27.6173 -0.1 + vertex -1.78547 28.4297 -0.1 + vertex -2.11792 28.8291 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.215611 27.1342 -0.1 + vertex -2.17413 14.3212 -0.1 + vertex -1.51834 14.2381 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.31368 27.8729 -0.1 + vertex -2.11792 28.8291 -0.1 + vertex -2.44583 29.2754 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.27149 28.2565 -0.1 + vertex -2.44583 29.2754 -0.1 + vertex -2.7678 29.7664 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.11256 27.7809 -0.1 + vertex -6.44763 27.4571 -0.1 + vertex -6.54439 27.3597 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.24249 28.8007 -0.1 + vertex -2.7678 29.7664 -0.1 + vertex -3.08241 30.2998 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.22417 29.538 -0.1 + vertex -3.08241 30.2998 -0.1 + vertex -3.38828 30.8734 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.438314 27.347 -0.1 + vertex -6.54439 27.3597 -0.1 + vertex -3.64708 14.4362 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.22417 29.538 -0.1 + vertex -3.38828 30.8734 -0.1 + vertex -3.68399 31.485 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.20957 31.7226 -0.1 + vertex -3.68399 31.485 -0.1 + vertex -3.96814 32.1322 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.20957 31.7226 -0.1 + vertex -3.96814 32.1322 -0.1 + vertex -4.23933 32.8128 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.78547 28.4297 -0.1 + vertex -6.37156 27.6173 -0.1 + vertex -6.44763 27.4571 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.19415 33.3563 -0.1 + vertex -4.23933 32.8128 -0.1 + vertex -4.49616 33.5245 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.19415 33.3563 -0.1 + vertex -4.49616 33.5245 -0.1 + vertex -4.73722 34.2652 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.15766 34.7516 -0.1 + vertex -4.73722 34.2652 -0.1 + vertex -4.96111 35.0324 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.15766 34.7516 -0.1 + vertex -4.96111 35.0324 -0.1 + vertex -5.11886 35.5644 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.10555 35.7605 -0.1 + vertex -5.11886 35.5644 -0.1 + vertex -5.26884 35.9859 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.7678 29.7664 -0.1 + vertex -6.24249 28.8007 -0.1 + vertex -6.27149 28.2565 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.07534 36.0738 -0.1 + vertex -5.26884 35.9859 -0.1 + vertex -5.41174 36.2975 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.92579 36.4611 -0.1 + vertex -5.41174 36.2975 -0.1 + vertex -5.54821 36.5001 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.86569 36.5344 -0.1 + vertex -5.54821 36.5001 -0.1 + vertex -5.61425 36.5608 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.80457 36.5812 -0.1 + vertex -5.61425 36.5608 -0.1 + vertex -5.67893 36.5944 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.80457 36.5812 -0.1 + vertex -5.67893 36.5944 -0.1 + vertex -5.74234 36.6012 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.61425 36.5608 -0.1 + vertex -5.80457 36.5812 -0.1 + vertex -5.86569 36.5344 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.54821 36.5001 -0.1 + vertex -5.86569 36.5344 -0.1 + vertex -5.92579 36.4611 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.41174 36.2975 -0.1 + vertex -5.92579 36.4611 -0.1 + vertex -6.04327 36.2349 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.41174 36.2975 -0.1 + vertex -6.04327 36.2349 -0.1 + vertex -6.07534 36.0738 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.26884 35.9859 -0.1 + vertex -6.07534 36.0738 -0.1 + vertex -6.10555 35.7605 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.11886 35.5644 -0.1 + vertex -6.10555 35.7605 -0.1 + vertex -6.15766 34.7516 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.73722 34.2652 -0.1 + vertex -6.15766 34.7516 -0.1 + vertex -6.19415 33.3563 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.23933 32.8128 -0.1 + vertex -6.19415 33.3563 -0.1 + vertex -6.20957 31.7226 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.68399 31.485 -0.1 + vertex -6.20957 31.7226 -0.1 + vertex -6.22417 29.538 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.08241 30.2998 -0.1 + vertex -6.22417 29.538 -0.1 + vertex -6.24249 28.8007 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.44583 29.2754 -0.1 + vertex -6.27149 28.2565 -0.1 + vertex -6.31368 27.8729 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.11792 28.8291 -0.1 + vertex -6.31368 27.8729 -0.1 + vertex -6.37156 27.6173 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.104203 27.2162 -0.1 + vertex -2.8839 14.3873 -0.1 + vertex -2.17413 14.3212 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.438314 27.347 -0.1 + vertex -3.64708 14.4362 -0.1 + vertex -2.8839 14.3873 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.65192 27.3056 -0.1 + vertex -3.64708 14.4362 -0.1 + vertex -6.54439 27.3597 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.64708 14.4362 -0.1 + vertex -6.65192 27.3056 -0.1 + vertex -4.46307 14.4678 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.904 19.9248 -0.1 + vertex -4.46307 14.4678 -0.1 + vertex -6.65192 27.3056 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.46307 14.4678 -0.1 + vertex -10.904 19.9248 -0.1 + vertex -5.33129 14.482 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.904 19.9248 -0.1 + vertex -6.65192 27.3056 -0.1 + vertex -6.80178 27.2682 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5349 24.4109 -0.1 + vertex -6.80178 27.2682 -0.1 + vertex -6.99768 27.2475 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.33129 14.482 -0.1 + vertex -10.904 19.9248 -0.1 + vertex -6.25117 14.4787 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5349 24.4109 -0.1 + vertex -6.99768 27.2475 -0.1 + vertex -7.24334 27.2437 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5349 24.4109 -0.1 + vertex -7.24334 27.2437 -0.1 + vertex -7.89877 27.2865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5394 24.4322 -0.1 + vertex -7.89877 27.2865 -0.1 + vertex -8.79778 27.3973 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.80178 27.2682 -0.1 + vertex -10.5349 24.4109 -0.1 + vertex -10.904 19.9248 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.25117 14.4787 -0.1 + vertex -10.9261 19.832 -0.1 + vertex -7.22211 14.4578 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5394 24.4322 -0.1 + vertex -8.79778 27.3973 -0.1 + vertex -10.2816 27.5955 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.9261 19.832 -0.1 + vertex -6.25117 14.4787 -0.1 + vertex -10.904 19.9248 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.0035 20.0644 -0.1 + vertex -10.5349 24.4109 -0.1 + vertex -10.5711 24.4 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.9948 19.7221 -0.1 + vertex -7.22211 14.4578 -0.1 + vertex -10.9261 19.832 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.22211 14.4578 -0.1 + vertex -10.9948 19.7221 -0.1 + vertex -9.25643 14.3812 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5349 24.4109 -0.1 + vertex -10.9294 20.0018 -0.1 + vertex -10.904 19.9248 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5349 24.4109 -0.1 + vertex -11.0035 20.0644 -0.1 + vertex -10.9294 20.0018 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5711 24.4 -0.1 + vertex -11.1271 20.114 -0.1 + vertex -11.0035 20.0644 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5711 24.4 -0.1 + vertex -11.3013 20.1521 -0.1 + vertex -11.1271 20.114 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5711 24.4 -0.1 + vertex -11.5271 20.1801 -0.1 + vertex -11.3013 20.1521 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5711 24.4 -0.1 + vertex -12.1376 20.2112 -0.1 + vertex -11.5271 20.1801 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.1612 23.8467 -0.1 + vertex -12.1376 20.2112 -0.1 + vertex -10.5711 24.4 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.1376 20.2112 -0.1 + vertex -14.1612 23.8467 -0.1 + vertex -12.9665 20.2187 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.9665 20.2187 -0.1 + vertex -14.1612 23.8467 -0.1 + vertex -13.9037 20.2008 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1612 23.8467 -0.1 + vertex -14.8461 20.153 -0.1 + vertex -13.9037 20.2008 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.0412 23.3999 -0.1 + vertex -14.8461 20.153 -0.1 + vertex -14.1612 23.8467 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.8461 20.153 -0.1 + vertex -17.0412 23.3999 -0.1 + vertex -15.684 20.0825 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.684 20.0825 -0.1 + vertex -17.0412 23.3999 -0.1 + vertex -16.3079 19.9967 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.0412 23.3999 -0.1 + vertex -17.2235 19.8332 -0.1 + vertex -16.3079 19.9967 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.3158 23.0662 -0.1 + vertex -17.2235 19.8332 -0.1 + vertex -17.0412 23.3999 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2235 19.8332 -0.1 + vertex -19.3158 23.0662 -0.1 + vertex -18.1791 19.6811 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.3158 23.0662 -0.1 + vertex -20.1671 19.4139 -0.1 + vertex -18.1791 19.6811 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.7318 22.8633 -0.1 + vertex -20.1671 19.4139 -0.1 + vertex -19.3158 23.0662 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.5474 22.7309 -0.1 + vertex -20.1671 19.4139 -0.1 + vertex -20.7318 22.8633 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1849 19.2007 -0.1 + vertex -21.5474 22.7309 -0.1 + vertex -21.6404 22.7266 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1849 19.2007 -0.1 + vertex -21.6404 22.7266 -0.1 + vertex -21.755 22.7463 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1849 19.2007 -0.1 + vertex -21.755 22.7463 -0.1 + vertex -22.0315 22.8497 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5474 22.7309 -0.1 + vertex -22.1849 19.2007 -0.1 + vertex -20.1671 19.4139 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3422 23.0246 -0.1 + vertex -22.1849 19.2007 -0.1 + vertex -22.0315 22.8497 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1455 19.0472 -0.1 + vertex -22.3422 23.0246 -0.1 + vertex -22.6524 23.2546 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1455 19.0472 -0.1 + vertex -22.6524 23.2546 -0.1 + vertex -23.3692 23.8604 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3422 23.0246 -0.1 + vertex -24.1455 19.0472 -0.1 + vertex -22.1849 19.2007 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.10332 38.557 -0.1 + vertex 5.26494 38.4452 -0.1 + vertex 5.23504 38.5484 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.26494 38.4452 -0.1 + vertex 5.01738 38.4749 -0.1 + vertex 5.25596 38.2865 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.10332 38.557 -0.1 + vertex 5.23504 38.5484 -0.1 + vertex 5.20457 38.5758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.10332 38.557 -0.1 + vertex 5.20457 38.5758 -0.1 + vertex 5.16325 38.5852 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.26494 38.4452 -0.1 + vertex 5.10332 38.557 -0.1 + vertex 5.01738 38.4749 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.25596 38.2865 -0.1 + vertex 5.01738 38.4749 -0.1 + vertex 5.21112 38.083 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.77727 38.1658 -0.1 + vertex 5.21112 38.083 -0.1 + vertex 5.01738 38.4749 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.21112 38.083 -0.1 + vertex 4.77727 38.1658 -0.1 + vertex 5.13345 37.8458 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.13345 37.8458 -0.1 + vertex 4.77727 38.1658 -0.1 + vertex 5.02596 37.5856 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.46246 37.6912 -0.1 + vertex 5.02596 37.5856 -0.1 + vertex 4.77727 38.1658 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.02596 37.5856 -0.1 + vertex 4.46246 37.6912 -0.1 + vertex 4.89167 37.3134 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.89167 37.3134 -0.1 + vertex 4.46246 37.6912 -0.1 + vertex 4.73361 37.0399 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.09252 37.0842 -0.1 + vertex 4.73361 37.0399 -0.1 + vertex 4.46246 37.6912 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.73361 37.0399 -0.1 + vertex 4.09252 37.0842 -0.1 + vertex 4.62814 36.8484 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62814 36.8484 -0.1 + vertex 4.09252 37.0842 -0.1 + vertex 4.52293 36.6141 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.68699 36.3778 -0.1 + vertex 4.52293 36.6141 -0.1 + vertex 4.09252 37.0842 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.52293 36.6141 -0.1 + vertex 3.68699 36.3778 -0.1 + vertex 4.31688 36.0346 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.26543 35.6052 -0.1 + vertex 4.31688 36.0346 -0.1 + vertex 3.68699 36.3778 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.31688 36.0346 -0.1 + vertex 3.26543 35.6052 -0.1 + vertex 4.1227 35.3375 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.1227 35.3375 -0.1 + vertex 3.26543 35.6052 -0.1 + vertex 3.94762 34.5584 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.84738 34.7996 -0.1 + vertex 3.94762 34.5584 -0.1 + vertex 3.26543 35.6052 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.94762 34.5584 -0.1 + vertex 2.84738 34.7996 -0.1 + vertex 3.79886 33.7332 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.4524 33.9939 -0.1 + vertex 3.79886 33.7332 -0.1 + vertex 2.84738 34.7996 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.79886 33.7332 -0.1 + vertex 2.4524 33.9939 -0.1 + vertex 3.68366 32.8976 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.10958 33.2371 -0.1 + vertex 3.68366 32.8976 -0.1 + vertex 2.4524 33.9939 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.68366 32.8976 -0.1 + vertex 2.10958 33.2371 -0.1 + vertex 3.60924 32.0876 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.81903 32.5199 -0.1 + vertex 3.60924 32.0876 -0.1 + vertex 2.10958 33.2371 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.27855 5.76024 -0.1 + vertex 1.91748 12.4352 -0.1 + vertex 4.285 6.1855 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.57871 31.8344 -0.1 + vertex 3.60924 32.0876 -0.1 + vertex 1.81903 32.5199 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.88346 12.344 -0.1 + vertex 4.285 6.1855 -0.1 + vertex 1.91748 12.4352 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.285 6.1855 -0.1 + vertex 1.88346 12.344 -0.1 + vertex 3.31149 6.57517 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.81906 12.2515 -0.1 + vertex 3.31149 6.57517 -0.1 + vertex 1.88346 12.344 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.72214 12.1537 -0.1 + vertex 3.31149 6.57517 -0.1 + vertex 1.81906 12.2515 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.31149 6.57517 -0.1 + vertex 1.72214 12.1537 -0.1 + vertex 2.42084 6.9015 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.42228 11.926 -0.1 + vertex 2.42084 6.9015 -0.1 + vertex 1.72214 12.1537 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.42084 6.9015 -0.1 + vertex 1.42228 11.926 -0.1 + vertex 1.67583 7.13679 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.986004 11.656 -0.1 + vertex 1.67583 7.13679 -0.1 + vertex 1.42228 11.926 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.67583 7.13679 -0.1 + vertex 0.986004 11.656 -0.1 + vertex 1.30727 7.25861 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.986004 11.656 -0.1 + vertex 0.855811 7.43981 -0.1 + vertex 1.30727 7.25861 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.546849 11.4454 -0.1 + vertex 0.855811 7.43981 -0.1 + vertex 0.986004 11.656 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.23691 7.94665 -0.1 + vertex 0.546849 11.4454 -0.1 + vertex 0.0942225 11.293 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.546849 11.4454 -0.1 + vertex -0.23691 7.94665 -0.1 + vertex 0.855811 7.43981 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.382462 11.1972 -0.1 + vertex -0.23691 7.94665 -0.1 + vertex 0.0942225 11.293 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.48458 8.58988 -0.1 + vertex -0.382462 11.1972 -0.1 + vertex -0.893798 11.1566 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.48458 8.58988 -0.1 + vertex -0.893798 11.1566 -0.1 + vertex -1.45038 11.1697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.382462 11.1972 -0.1 + vertex -1.48458 8.58988 -0.1 + vertex -0.23691 7.94665 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.76946 9.30203 -0.1 + vertex -1.45038 11.1697 -0.1 + vertex -2.06279 11.235 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.76946 9.30203 -0.1 + vertex -2.06279 11.235 -0.1 + vertex -2.74162 11.3511 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.45038 11.1697 -0.1 + vertex -2.76946 9.30203 -0.1 + vertex -1.48458 8.58988 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97378 10.0157 -0.1 + vertex -2.74162 11.3511 -0.1 + vertex -3.43924 11.4799 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.74162 11.3511 -0.1 + vertex -3.97378 10.0157 -0.1 + vertex -2.76946 9.30203 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.06319 11.5774 -0.1 + vertex -3.97378 10.0157 -0.1 + vertex -3.43924 11.4799 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.9798 10.6633 -0.1 + vertex -4.06319 11.5774 -0.1 + vertex -4.60751 11.6434 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.06319 11.5774 -0.1 + vertex -4.9798 10.6633 -0.1 + vertex -3.97378 10.0157 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.06624 11.6776 -0.1 + vertex -4.9798 10.6633 -0.1 + vertex -4.60751 11.6434 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.06624 11.6776 -0.1 + vertex -5.37165 10.9414 -0.1 + vertex -4.9798 10.6633 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.4334 11.6797 -0.1 + vertex -5.37165 10.9414 -0.1 + vertex -5.06624 11.6776 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.4334 11.6797 -0.1 + vertex -5.66976 11.1776 -0.1 + vertex -5.37165 10.9414 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.70304 11.6495 -0.1 + vertex -5.66976 11.1776 -0.1 + vertex -5.4334 11.6797 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.85942 11.3636 -0.1 + vertex -5.70304 11.6495 -0.1 + vertex -5.79943 11.6221 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.70304 11.6495 -0.1 + vertex -5.85942 11.3636 -0.1 + vertex -5.66976 11.1776 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.8692 11.5867 -0.1 + vertex -5.85942 11.3636 -0.1 + vertex -5.79943 11.6221 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8692 11.5867 -0.1 + vertex -5.90899 11.4352 -0.1 + vertex -5.85942 11.3636 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.91161 11.5429 -0.1 + vertex -5.90899 11.4352 -0.1 + vertex -5.8692 11.5867 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.90899 11.4352 -0.1 + vertex -5.91161 11.5429 -0.1 + vertex -5.92592 11.491 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.51759 -4.36865 -0.1 + vertex 8.0755 -3.36119 -0.1 + vertex 7.75455 -3.09522 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.2523 -4.01644 -0.1 + vertex 7.75455 -3.09522 -0.1 + vertex 7.10115 -2.48513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.70978 -3.81721 -0.1 + vertex 7.04277 -4.97268 -0.1 + vertex 7.809 -5.75259 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.0755 -3.36119 -0.1 + vertex 6.78219 -4.68956 -0.1 + vertex 7.04277 -4.97268 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.0755 -3.36119 -0.1 + vertex 6.51759 -4.36865 -0.1 + vertex 6.78219 -4.68956 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.48552 -2.8367 -0.1 + vertex 7.10115 -2.48513 -0.1 + vertex 6.42718 -1.76788 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.75455 -3.09522 -0.1 + vertex 6.2523 -4.01644 -0.1 + vertex 6.51759 -4.36865 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.10115 -2.48513 -0.1 + vertex 5.98964 -3.63939 -0.1 + vertex 6.2523 -4.01644 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.03179 -2.01239 -0.1 + vertex 6.42718 -1.76788 -0.1 + vertex 5.79491 -1.04264 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.10115 -2.48513 -0.1 + vertex 5.48552 -2.8367 -0.1 + vertex 5.98964 -3.63939 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.65505 -1.21825 -0.1 + vertex 5.79491 -1.04264 -0.1 + vertex 5.24358 -0.384283 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.42718 -1.76788 -0.1 + vertex 5.03179 -2.01239 -0.1 + vertex 5.48552 -2.8367 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.38188 -0.506111 -0.1 + vertex 5.24358 -0.384283 -0.1 + vertex 4.83246 0.134689 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.79491 -1.04264 -0.1 + vertex 4.65505 -1.21825 -0.1 + vertex 5.03179 -2.01239 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.23886 0.0722368 -0.1 + vertex 4.83246 0.134689 -0.1 + vertex 4.62083 0.441773 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.24358 -0.384283 -0.1 + vertex 4.50386 -0.848697 -0.1 + vertex 4.65505 -1.21825 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.25257 0.464986 -0.1 + vertex 4.62083 0.441773 -0.1 + vertex 4.49221 0.674515 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.33872 0.684191 -0.1 + vertex 4.49221 0.674515 -0.1 + vertex 4.44662 0.733548 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.3737 0.738144 -0.1 + vertex 4.44662 0.733548 -0.1 + vertex 4.40839 0.754677 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.24358 -0.384283 -0.1 + vertex 4.38188 -0.506111 -0.1 + vertex 4.50386 -0.848697 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.44662 0.733548 -0.1 + vertex 4.3737 0.738144 -0.1 + vertex 4.33872 0.684191 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.49221 0.674515 -0.1 + vertex 4.33872 0.684191 -0.1 + vertex 4.25257 0.464986 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.83246 0.134689 -0.1 + vertex 4.29244 -0.196974 -0.1 + vertex 4.38188 -0.506111 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62083 0.441773 -0.1 + vertex 4.25257 0.464986 -0.1 + vertex 4.22446 0.295049 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.83246 0.134689 -0.1 + vertex 4.23886 0.0722368 -0.1 + vertex 4.29244 -0.196974 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62083 0.441773 -0.1 + vertex 4.22446 0.295049 -0.1 + vertex 4.23886 0.0722368 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0092 9.15168 -0.1 + vertex 8.87708 15.8492 -0.1 + vertex 14.9543 8.95485 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2183 5.95043 -0.1 + vertex 9.61741 3.25086 -0.1 + vertex 10.5842 2.40247 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1095 6.5543 -0.1 + vertex 9.29624 3.50894 -0.1 + vertex 9.61741 3.25086 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 14.9543 8.95485 -0.1 + vertex 8.87708 15.8492 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0249 7.13954 -0.1 + vertex 9.14614 3.60373 -0.1 + vertex 9.29624 3.50894 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9668 7.69881 -0.1 + vertex 8.19732 4.25764 -0.1 + vertex 8.81858 3.79581 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9543 8.95485 -0.1 + vertex 7.07462 4.9138 -0.1 + vertex 14.9262 8.72903 -0.1 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 7.75154 4.54807 -0.1 + vertex 14.9262 8.72903 -0.1 + vertex 7.07462 4.9138 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 8.87708 15.8492 -0.1 + vertex 8.83337 15.875 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.14614 3.60373 -0.1 + vertex 8.81858 3.79581 -0.1 + vertex 9.03464 3.65533 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 8.83337 15.875 -0.1 + vertex 8.76553 15.9481 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 8.76553 15.9481 -0.1 + vertex 8.57086 16.213 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9668 7.69881 -0.1 + vertex 8.81858 3.79581 -0.1 + vertex 9.14614 3.60373 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 8.57086 16.213 -0.1 + vertex 8.03973 17.0592 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9212 8.45633 -0.1 + vertex 8.00725 4.39171 -0.1 + vertex 8.19732 4.25764 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9212 8.45633 -0.1 + vertex 7.75154 4.54807 -0.1 + vertex 8.00725 4.39171 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 8.03973 17.0592 -0.1 + vertex 7.49889 18.0241 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 7.49889 18.0241 -0.1 + vertex 7.29207 18.4374 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 7.29207 18.4374 -0.1 + vertex 7.16351 18.7442 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 7.16351 18.7442 -0.1 + vertex 7.1273 18.8927 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9262 8.72903 -0.1 + vertex 7.75154 4.54807 -0.1 + vertex 14.9212 8.45633 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 7.1273 18.8927 -0.1 + vertex 7.1242 19.0144 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.1091 19.5935 -0.1 + vertex -9.25643 14.3812 -0.1 + vertex -10.9948 19.7221 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.4702 19.2748 -0.1 + vertex -9.25643 14.3812 -0.1 + vertex -11.1091 19.5935 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.25643 14.3812 -0.1 + vertex -11.4702 19.2748 -0.1 + vertex -9.98725 14.3241 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.0016 18.8648 -0.1 + vertex -9.98725 14.3241 -0.1 + vertex -11.4702 19.2748 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.98725 14.3241 -0.1 + vertex -12.0016 18.8648 -0.1 + vertex -10.6249 14.238 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.6249 14.238 -0.1 + vertex -12.0016 18.8648 -0.1 + vertex -11.2428 14.1101 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.8225 17.5152 -0.1 + vertex -11.2428 14.1101 -0.1 + vertex -12.0016 18.8648 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.2428 14.1101 -0.1 + vertex -13.8225 17.5152 -0.1 + vertex -11.9142 13.9281 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.9142 13.9281 -0.1 + vertex -13.8225 17.5152 -0.1 + vertex -12.7125 13.6795 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.4648 17.0612 -0.1 + vertex -12.7125 13.6795 -0.1 + vertex -13.8225 17.5152 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.9972 16.7116 -0.1 + vertex -12.7125 13.6795 -0.1 + vertex -14.4648 17.0612 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.7125 13.6795 -0.1 + vertex -14.9972 16.7116 -0.1 + vertex -13.7109 13.3517 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.4716 16.4339 -0.1 + vertex -13.7109 13.3517 -0.1 + vertex -14.9972 16.7116 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.7109 13.3517 -0.1 + vertex -15.4716 16.4339 -0.1 + vertex -14.949 12.9624 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.9397 16.1961 -0.1 + vertex -14.949 12.9624 -0.1 + vertex -15.4716 16.4339 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.4531 15.9659 -0.1 + vertex -14.949 12.9624 -0.1 + vertex -15.9397 16.1961 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.949 12.9624 -0.1 + vertex -16.4531 15.9659 -0.1 + vertex -16.0795 12.6436 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.0637 15.711 -0.1 + vertex -16.0795 12.6436 -0.1 + vertex -16.4531 15.9659 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.0795 12.6436 -0.1 + vertex -17.0637 15.711 -0.1 + vertex -16.9775 12.4282 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.4061 15.1884 -0.1 + vertex -16.9775 12.4282 -0.1 + vertex -17.0637 15.711 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9775 12.4282 -0.1 + vertex -18.4061 15.1884 -0.1 + vertex -17.3003 12.3696 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3003 12.3696 -0.1 + vertex -18.4061 15.1884 -0.1 + vertex -17.5181 12.3491 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5181 12.3491 -0.1 + vertex -18.4061 15.1884 -0.1 + vertex -17.9556 12.3221 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.4061 15.1884 -0.1 + vertex -18.5728 12.2484 -0.1 + vertex -17.9556 12.3221 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.7213 14.7364 -0.1 + vertex -18.5728 12.2484 -0.1 + vertex -18.4061 15.1884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5728 12.2484 -0.1 + vertex -19.7213 14.7364 -0.1 + vertex -19.2876 12.1394 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7213 14.7364 -0.1 + vertex -20.0181 12.0063 -0.1 + vertex -19.2876 12.1394 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.0167 14.3533 -0.1 + vertex -20.0181 12.0063 -0.1 + vertex -19.7213 14.7364 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.0181 12.0063 -0.1 + vertex -21.0167 14.3533 -0.1 + vertex -20.4772 11.9313 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.0167 14.3533 -0.1 + vertex -21.0446 11.8651 -0.1 + vertex -20.4772 11.9313 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.3001 14.0374 -0.1 + vertex -21.0446 11.8651 -0.1 + vertex -21.0167 14.3533 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3001 14.0374 -0.1 + vertex -22.4311 11.7593 -0.1 + vertex -21.0446 11.8651 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.579 13.787 -0.1 + vertex -22.4311 11.7593 -0.1 + vertex -22.3001 14.0374 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.579 13.787 -0.1 + vertex -24.031 11.6901 -0.1 + vertex -22.4311 11.7593 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.8613 13.6003 -0.1 + vertex -24.031 11.6901 -0.1 + vertex -23.579 13.787 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8613 13.6003 -0.1 + vertex -25.698 11.6586 -0.1 + vertex -24.031 11.6901 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.1544 13.4758 -0.1 + vertex -25.698 11.6586 -0.1 + vertex -24.8613 13.6003 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.1544 13.4758 -0.1 + vertex -27.2855 11.6658 -0.1 + vertex -25.698 11.6586 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.4661 13.4117 -0.1 + vertex -27.2855 11.6658 -0.1 + vertex -26.1544 13.4758 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.4661 13.4117 -0.1 + vertex -28.647 11.7129 -0.1 + vertex -27.2855 11.6658 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.0548 13.353 -0.1 + vertex -28.647 11.7129 -0.1 + vertex -27.4661 13.4117 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0548 13.353 -0.1 + vertex -29.1973 11.7518 -0.1 + vertex -28.647 11.7129 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -29.5683 13.309 -0.1 + vertex -29.1973 11.7518 -0.1 + vertex -29.0548 13.353 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.5683 13.309 -0.1 + vertex -29.6362 11.801 -0.1 + vertex -29.1973 11.7518 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3556 12.4664 -0.1 + vertex -29.5683 13.309 -0.1 + vertex -29.9294 13.2465 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.5683 13.309 -0.1 + vertex -30.2975 12.2549 -0.1 + vertex -29.6362 11.801 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.6362 11.801 -0.1 + vertex -30.2975 12.2549 -0.1 + vertex -29.9453 11.8607 -0.1 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -30.2115 12.0683 -0.1 + vertex -29.9453 11.8607 -0.1 + vertex -30.2975 12.2549 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 12.6783 -0.1 + vertex -29.9294 13.2465 -0.1 + vertex -30.1646 13.1588 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9453 11.8607 -0.1 + vertex -30.2115 12.0683 -0.1 + vertex -30.0456 11.8946 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3621 12.8813 -0.1 + vertex -30.1646 13.1588 -0.1 + vertex -30.2432 13.1034 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0456 11.8946 -0.1 + vertex -30.2115 12.0683 -0.1 + vertex -30.1065 11.9311 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3387 12.9655 -0.1 + vertex -30.2432 13.1034 -0.1 + vertex -30.3001 13.0393 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2432 13.1034 -0.1 + vertex -30.3387 12.9655 -0.1 + vertex -30.3621 12.8813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.5683 13.309 -0.1 + vertex -30.3556 12.4664 -0.1 + vertex -30.2975 12.2549 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1646 13.1588 -0.1 + vertex -30.3621 12.8813 -0.1 + vertex -30.377 12.6783 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9294 13.2465 -0.1 + vertex -30.377 12.6783 -0.1 + vertex -30.3556 12.4664 -0.1 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.053 23.8437 -0.1 + vertex -24.1455 19.0472 -0.1 + vertex -24.6523 24.0122 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1455 19.0472 -0.1 + vertex -26.053 23.8437 -0.1 + vertex -25.9619 18.9589 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -26.053 23.8437 -0.1 + vertex -26.7338 23.7794 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.053 23.8437 -0.1 + vertex -28.3394 21.9725 -0.1 + vertex -25.9619 18.9589 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -26.7338 23.7794 -0.1 + vertex -27.3569 23.7586 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.9619 18.9589 -0.1 + vertex -28.3394 21.9725 -0.1 + vertex -26.7887 18.9409 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -27.3569 23.7586 -0.1 + vertex -27.9279 23.7822 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.7887 18.9409 -0.1 + vertex -28.3394 21.9725 -0.1 + vertex -27.5469 18.9414 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.5469 18.9414 -0.1 + vertex -28.3394 21.9725 -0.1 + vertex -28.2256 18.9609 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0186 22.3563 -0.1 + vertex -27.9279 23.7822 -0.1 + vertex -28.4524 23.8513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.4321 22.5993 -0.1 + vertex -28.4524 23.8513 -0.1 + vertex -28.9359 23.9669 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.9279 23.7822 -0.1 + vertex -29.0186 22.3563 -0.1 + vertex -28.3394 21.9725 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.7937 22.8325 -0.1 + vertex -28.9359 23.9669 -0.1 + vertex -29.384 24.13 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.4524 23.8513 -0.1 + vertex -29.4321 22.5993 -0.1 + vertex -29.0186 22.3563 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.9359 23.9669 -0.1 + vertex -29.7937 22.8325 -0.1 + vertex -29.4321 22.5993 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3761 23.2826 -0.1 + vertex -29.384 24.13 -0.1 + vertex -29.8023 24.3416 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.384 24.13 -0.1 + vertex -30.1071 23.0591 -0.1 + vertex -29.7937 22.8325 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.7957 23.7338 -0.1 + vertex -29.8023 24.3416 -0.1 + vertex -30.1964 24.6027 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.384 24.13 -0.1 + vertex -30.3761 23.2826 -0.1 + vertex -30.1071 23.0591 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0826 24.213 -0.1 + vertex -30.1964 24.6027 -0.1 + vertex -30.5308 24.8328 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.8023 24.3416 -0.1 + vertex -30.6044 23.5064 -0.1 + vertex -30.3761 23.2826 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.8023 24.3416 -0.1 + vertex -30.7957 23.7338 -0.1 + vertex -30.6044 23.5064 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2103 24.5339 -0.1 + vertex -30.5308 24.8328 -0.1 + vertex -30.8055 24.9813 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1964 24.6027 -0.1 + vertex -30.9539 23.9682 -0.1 + vertex -30.7957 23.7338 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2656 24.779 -0.1 + vertex -30.8055 24.9813 -0.1 + vertex -31.0185 25.0493 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1964 24.6027 -0.1 + vertex -31.0826 24.213 -0.1 + vertex -30.9539 23.9682 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2668 24.8727 -0.1 + vertex -31.0185 25.0493 -0.1 + vertex -31.1012 25.0533 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2507 24.9472 -0.1 + vertex -31.1012 25.0533 -0.1 + vertex -31.1676 25.0376 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5308 24.8328 -0.1 + vertex -31.2103 24.5339 -0.1 + vertex -31.0826 24.213 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2507 24.9472 -0.1 + vertex -31.1676 25.0376 -0.1 + vertex -31.2175 25.0021 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1012 25.0533 -0.1 + vertex -31.2507 24.9472 -0.1 + vertex -31.2668 24.8727 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8055 24.9813 -0.1 + vertex -31.2656 24.779 -0.1 + vertex -31.2103 24.5339 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0185 25.0493 -0.1 + vertex -31.2668 24.8727 -0.1 + vertex -31.2656 24.779 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -28.8137 19.0002 -0.1 + vertex -28.2256 18.9609 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -29.3006 19.0599 -0.1 + vertex -28.8137 19.0002 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -29.6752 19.1409 -0.1 + vertex -29.3006 19.0599 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0859 22.0525 -0.1 + vertex -29.6752 19.1409 -0.1 + vertex -28.3394 21.9725 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5811 19.4165 -0.1 + vertex -30.0859 22.0525 -0.1 + vertex -30.5728 22.0884 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0859 22.0525 -0.1 + vertex -30.5811 19.4165 -0.1 + vertex -29.6752 19.1409 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.4466 19.7034 -0.1 + vertex -30.5728 22.0884 -0.1 + vertex -31.074 22.1513 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5728 22.0884 -0.1 + vertex -31.4466 19.7034 -0.1 + vertex -30.5811 19.4165 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.271 20.0012 -0.1 + vertex -31.074 22.1513 -0.1 + vertex -31.5861 22.2399 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.271 20.0012 -0.1 + vertex -31.5861 22.2399 -0.1 + vertex -32.1061 22.3529 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.074 22.1513 -0.1 + vertex -32.271 20.0012 -0.1 + vertex -31.4466 19.7034 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.0533 20.3093 -0.1 + vertex -32.1061 22.3529 -0.1 + vertex -32.6306 22.489 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1061 22.3529 -0.1 + vertex -33.0533 20.3093 -0.1 + vertex -32.271 20.0012 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.7926 20.6272 -0.1 + vertex -32.6306 22.489 -0.1 + vertex -33.1564 22.6469 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.4881 20.9542 -0.1 + vertex -33.1564 22.6469 -0.1 + vertex -33.6803 22.8253 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.6306 22.489 -0.1 + vertex -33.7926 20.6272 -0.1 + vertex -33.0533 20.3093 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.4881 20.9542 -0.1 + vertex -33.6803 22.8253 -0.1 + vertex -34.199 23.023 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.1564 22.6469 -0.1 + vertex -34.4881 20.9542 -0.1 + vertex -33.7926 20.6272 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.1386 21.2899 -0.1 + vertex -34.199 23.023 -0.1 + vertex -34.7094 23.2385 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.199 23.023 -0.1 + vertex -35.1386 21.2899 -0.1 + vertex -34.4881 20.9542 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.7435 21.6336 -0.1 + vertex -34.7094 23.2385 -0.1 + vertex -35.2082 23.4707 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.3017 21.985 -0.1 + vertex -35.2082 23.4707 -0.1 + vertex -35.6921 23.7183 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.7094 23.2385 -0.1 + vertex -35.7435 21.6336 -0.1 + vertex -35.1386 21.2899 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.8124 22.3433 -0.1 + vertex -35.6921 23.7183 -0.1 + vertex -36.1579 23.9798 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.2082 23.4707 -0.1 + vertex -36.3017 21.985 -0.1 + vertex -35.7435 21.6336 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2746 22.7082 -0.1 + vertex -36.1579 23.9798 -0.1 + vertex -36.6025 24.2541 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6921 23.7183 -0.1 + vertex -36.8124 22.3433 -0.1 + vertex -36.3017 21.985 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6874 23.0789 -0.1 + vertex -36.6025 24.2541 -0.1 + vertex -37.0225 24.5398 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.1579 23.9798 -0.1 + vertex -37.2746 22.7082 -0.1 + vertex -36.8124 22.3433 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3611 23.836 -0.1 + vertex -37.0225 24.5398 -0.1 + vertex -37.4147 24.8357 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.6025 24.2541 -0.1 + vertex -37.6874 23.0789 -0.1 + vertex -37.2746 22.7082 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6203 24.2212 -0.1 + vertex -37.4147 24.8357 -0.1 + vertex -37.776 25.1404 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0225 24.5398 -0.1 + vertex -38.0499 23.455 -0.1 + vertex -37.6874 23.0789 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.8265 24.6102 -0.1 + vertex -37.776 25.1404 -0.1 + vertex -38.2113 25.5018 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0225 24.5398 -0.1 + vertex -38.3611 23.836 -0.1 + vertex -38.0499 23.455 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0227 25.0923 -0.1 + vertex -38.2113 25.5018 -0.1 + vertex -38.5664 25.7376 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4147 24.8357 -0.1 + vertex -38.6203 24.2212 -0.1 + vertex -38.3611 23.836 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.1186 25.4589 -0.1 + vertex -38.5664 25.7376 -0.1 + vertex -38.7129 25.8089 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.776 25.1404 -0.1 + vertex -38.8265 24.6102 -0.1 + vertex -38.6203 24.2212 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.13 25.5984 -0.1 + vertex -38.7129 25.8089 -0.1 + vertex -38.8381 25.8495 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.1175 25.7085 -0.1 + vertex -38.8381 25.8495 -0.1 + vertex -38.9416 25.8595 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.2113 25.5018 -0.1 + vertex -39.0227 25.0923 -0.1 + vertex -38.8265 24.6102 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0817 25.7888 -0.1 + vertex -38.9416 25.8595 -0.1 + vertex -39.0229 25.8392 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.9416 25.8595 -0.1 + vertex -39.0817 25.7888 -0.1 + vertex -39.1175 25.7085 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.8381 25.8495 -0.1 + vertex -39.1175 25.7085 -0.1 + vertex -39.13 25.5984 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.5664 25.7376 -0.1 + vertex -39.1186 25.4589 -0.1 + vertex -39.0227 25.0923 -0.1 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.7129 25.8089 -0.1 + vertex -39.13 25.5984 -0.1 + vertex -39.1186 25.4589 -0.1 + endloop + endfacet + facet normal -0.668491 -0.74372 0 + outer loop + vertex 5.20457 38.5758 -0.1 + vertex 5.23504 38.5484 0 + vertex 5.20457 38.5758 0 + endloop + endfacet + facet normal -0.668491 -0.74372 -0 + outer loop + vertex 5.23504 38.5484 0 + vertex 5.20457 38.5758 -0.1 + vertex 5.23504 38.5484 -0.1 + endloop + endfacet + facet normal -0.96052 -0.278211 0 + outer loop + vertex 5.26494 38.4452 -0.1 + vertex 5.23504 38.5484 0 + vertex 5.23504 38.5484 -0.1 + endloop + endfacet + facet normal -0.96052 -0.278211 0 + outer loop + vertex 5.23504 38.5484 0 + vertex 5.26494 38.4452 -0.1 + vertex 5.26494 38.4452 0 + endloop + endfacet + facet normal -0.998404 0.0564745 0 + outer loop + vertex 5.25596 38.2865 -0.1 + vertex 5.26494 38.4452 0 + vertex 5.26494 38.4452 -0.1 + endloop + endfacet + facet normal -0.998404 0.0564745 0 + outer loop + vertex 5.26494 38.4452 0 + vertex 5.25596 38.2865 -0.1 + vertex 5.25596 38.2865 0 + endloop + endfacet + facet normal -0.976561 0.215243 0 + outer loop + vertex 5.21112 38.083 -0.1 + vertex 5.25596 38.2865 0 + vertex 5.25596 38.2865 -0.1 + endloop + endfacet + facet normal -0.976561 0.215243 0 + outer loop + vertex 5.25596 38.2865 0 + vertex 5.21112 38.083 -0.1 + vertex 5.21112 38.083 0 + endloop + endfacet + facet normal -0.950355 0.311168 0 + outer loop + vertex 5.13345 37.8458 -0.1 + vertex 5.21112 38.083 0 + vertex 5.21112 38.083 -0.1 + endloop + endfacet + facet normal -0.950355 0.311168 0 + outer loop + vertex 5.21112 38.083 0 + vertex 5.13345 37.8458 -0.1 + vertex 5.13345 37.8458 0 + endloop + endfacet + facet normal -0.924228 0.381841 0 + outer loop + vertex 5.02596 37.5856 -0.1 + vertex 5.13345 37.8458 0 + vertex 5.13345 37.8458 -0.1 + endloop + endfacet + facet normal -0.924228 0.381841 0 + outer loop + vertex 5.13345 37.8458 0 + vertex 5.02596 37.5856 -0.1 + vertex 5.02596 37.5856 0 + endloop + endfacet + facet normal -0.896839 0.442358 0 + outer loop + vertex 4.89167 37.3134 -0.1 + vertex 5.02596 37.5856 0 + vertex 5.02596 37.5856 -0.1 + endloop + endfacet + facet normal -0.896839 0.442358 0 + outer loop + vertex 5.02596 37.5856 0 + vertex 4.89167 37.3134 -0.1 + vertex 4.89167 37.3134 0 + endloop + endfacet + facet normal -0.865785 0.500416 0 + outer loop + vertex 4.73361 37.0399 -0.1 + vertex 4.89167 37.3134 0 + vertex 4.89167 37.3134 -0.1 + endloop + endfacet + facet normal -0.865785 0.500416 0 + outer loop + vertex 4.89167 37.3134 0 + vertex 4.73361 37.0399 -0.1 + vertex 4.73361 37.0399 0 + endloop + endfacet + facet normal -0.875928 0.482442 0 + outer loop + vertex 4.62814 36.8484 -0.1 + vertex 4.73361 37.0399 0 + vertex 4.73361 37.0399 -0.1 + endloop + endfacet + facet normal -0.875928 0.482442 0 + outer loop + vertex 4.73361 37.0399 0 + vertex 4.62814 36.8484 -0.1 + vertex 4.62814 36.8484 0 + endloop + endfacet + facet normal -0.912281 0.409566 0 + outer loop + vertex 4.52293 36.6141 -0.1 + vertex 4.62814 36.8484 0 + vertex 4.62814 36.8484 -0.1 + endloop + endfacet + facet normal -0.912281 0.409566 0 + outer loop + vertex 4.62814 36.8484 0 + vertex 4.52293 36.6141 -0.1 + vertex 4.52293 36.6141 0 + endloop + endfacet + facet normal -0.942197 0.335061 0 + outer loop + vertex 4.31688 36.0346 -0.1 + vertex 4.52293 36.6141 0 + vertex 4.52293 36.6141 -0.1 + endloop + endfacet + facet normal -0.942197 0.335061 0 + outer loop + vertex 4.52293 36.6141 0 + vertex 4.31688 36.0346 -0.1 + vertex 4.31688 36.0346 0 + endloop + endfacet + facet normal -0.963331 0.268317 0 + outer loop + vertex 4.1227 35.3375 -0.1 + vertex 4.31688 36.0346 0 + vertex 4.31688 36.0346 -0.1 + endloop + endfacet + facet normal -0.963331 0.268317 0 + outer loop + vertex 4.31688 36.0346 0 + vertex 4.1227 35.3375 -0.1 + vertex 4.1227 35.3375 0 + endloop + endfacet + facet normal -0.975667 0.219257 0 + outer loop + vertex 3.94762 34.5584 -0.1 + vertex 4.1227 35.3375 0 + vertex 4.1227 35.3375 -0.1 + endloop + endfacet + facet normal -0.975667 0.219257 0 + outer loop + vertex 4.1227 35.3375 0 + vertex 3.94762 34.5584 -0.1 + vertex 3.94762 34.5584 0 + endloop + endfacet + facet normal -0.984138 0.177404 0 + outer loop + vertex 3.79886 33.7332 -0.1 + vertex 3.94762 34.5584 0 + vertex 3.94762 34.5584 -0.1 + endloop + endfacet + facet normal -0.984138 0.177404 0 + outer loop + vertex 3.94762 34.5584 0 + vertex 3.79886 33.7332 -0.1 + vertex 3.79886 33.7332 0 + endloop + endfacet + facet normal -0.990628 0.136587 0 + outer loop + vertex 3.68366 32.8976 -0.1 + vertex 3.79886 33.7332 0 + vertex 3.79886 33.7332 -0.1 + endloop + endfacet + facet normal -0.990628 0.136587 0 + outer loop + vertex 3.79886 33.7332 0 + vertex 3.68366 32.8976 -0.1 + vertex 3.68366 32.8976 0 + endloop + endfacet + facet normal -0.995806 0.0914898 0 + outer loop + vertex 3.60924 32.0876 -0.1 + vertex 3.68366 32.8976 0 + vertex 3.68366 32.8976 -0.1 + endloop + endfacet + facet normal -0.995806 0.0914898 0 + outer loop + vertex 3.68366 32.8976 0 + vertex 3.60924 32.0876 -0.1 + vertex 3.60924 32.0876 0 + endloop + endfacet + facet normal -0.999378 0.0352546 0 + outer loop + vertex 3.58282 31.3388 -0.1 + vertex 3.60924 32.0876 0 + vertex 3.60924 32.0876 -0.1 + endloop + endfacet + facet normal -0.999378 0.0352546 0 + outer loop + vertex 3.60924 32.0876 0 + vertex 3.58282 31.3388 -0.1 + vertex 3.58282 31.3388 0 + endloop + endfacet + facet normal -0.999852 -0.0171991 0 + outer loop + vertex 3.59957 30.3654 -0.1 + vertex 3.58282 31.3388 0 + vertex 3.58282 31.3388 -0.1 + endloop + endfacet + facet normal -0.999852 -0.0171991 0 + outer loop + vertex 3.58282 31.3388 0 + vertex 3.59957 30.3654 -0.1 + vertex 3.59957 30.3654 0 + endloop + endfacet + facet normal -0.995876 -0.0907198 0 + outer loop + vertex 3.63162 30.0135 -0.1 + vertex 3.59957 30.3654 0 + vertex 3.59957 30.3654 -0.1 + endloop + endfacet + facet normal -0.995876 -0.0907198 0 + outer loop + vertex 3.59957 30.3654 0 + vertex 3.63162 30.0135 -0.1 + vertex 3.63162 30.0135 0 + endloop + endfacet + facet normal -0.982044 -0.188652 0 + outer loop + vertex 3.68937 29.7129 -0.1 + vertex 3.63162 30.0135 0 + vertex 3.63162 30.0135 -0.1 + endloop + endfacet + facet normal -0.982044 -0.188652 0 + outer loop + vertex 3.63162 30.0135 0 + vertex 3.68937 29.7129 -0.1 + vertex 3.68937 29.7129 0 + endloop + endfacet + facet normal -0.950581 -0.310477 0 + outer loop + vertex 3.78021 29.4348 -0.1 + vertex 3.68937 29.7129 0 + vertex 3.68937 29.7129 -0.1 + endloop + endfacet + facet normal -0.950581 -0.310477 0 + outer loop + vertex 3.68937 29.7129 0 + vertex 3.78021 29.4348 -0.1 + vertex 3.78021 29.4348 0 + endloop + endfacet + facet normal -0.907937 -0.419107 0 + outer loop + vertex 3.91157 29.1502 -0.1 + vertex 3.78021 29.4348 0 + vertex 3.78021 29.4348 -0.1 + endloop + endfacet + facet normal -0.907937 -0.419107 0 + outer loop + vertex 3.78021 29.4348 0 + vertex 3.91157 29.1502 -0.1 + vertex 3.91157 29.1502 0 + endloop + endfacet + facet normal -0.872337 -0.488905 0 + outer loop + vertex 4.09087 28.8303 -0.1 + vertex 3.91157 29.1502 0 + vertex 3.91157 29.1502 -0.1 + endloop + endfacet + facet normal -0.872337 -0.488905 0 + outer loop + vertex 3.91157 29.1502 0 + vertex 4.09087 28.8303 -0.1 + vertex 4.09087 28.8303 0 + endloop + endfacet + facet normal -0.853386 -0.52128 0 + outer loop + vertex 4.32553 28.4461 -0.1 + vertex 4.09087 28.8303 0 + vertex 4.09087 28.8303 -0.1 + endloop + endfacet + facet normal -0.853386 -0.52128 0 + outer loop + vertex 4.09087 28.8303 0 + vertex 4.32553 28.4461 -0.1 + vertex 4.32553 28.4461 0 + endloop + endfacet + facet normal -0.837817 -0.545951 0 + outer loop + vertex 4.69711 27.8759 -0.1 + vertex 4.32553 28.4461 0 + vertex 4.32553 28.4461 -0.1 + endloop + endfacet + facet normal -0.837817 -0.545951 0 + outer loop + vertex 4.32553 28.4461 0 + vertex 4.69711 27.8759 -0.1 + vertex 4.69711 27.8759 0 + endloop + endfacet + facet normal -0.807831 -0.589415 0 + outer loop + vertex 5.05276 27.3884 -0.1 + vertex 4.69711 27.8759 0 + vertex 4.69711 27.8759 -0.1 + endloop + endfacet + facet normal -0.807831 -0.589415 0 + outer loop + vertex 4.69711 27.8759 0 + vertex 5.05276 27.3884 -0.1 + vertex 5.05276 27.3884 0 + endloop + endfacet + facet normal -0.764742 -0.644337 0 + outer loop + vertex 5.39739 26.9794 -0.1 + vertex 5.05276 27.3884 0 + vertex 5.05276 27.3884 -0.1 + endloop + endfacet + facet normal -0.764742 -0.644337 0 + outer loop + vertex 5.05276 27.3884 0 + vertex 5.39739 26.9794 -0.1 + vertex 5.39739 26.9794 0 + endloop + endfacet + facet normal -0.703379 -0.710815 0 + outer loop + vertex 5.39739 26.9794 -0.1 + vertex 5.73586 26.6445 0 + vertex 5.39739 26.9794 0 + endloop + endfacet + facet normal -0.703379 -0.710815 -0 + outer loop + vertex 5.73586 26.6445 0 + vertex 5.39739 26.9794 -0.1 + vertex 5.73586 26.6445 -0.1 + endloop + endfacet + facet normal -0.618154 -0.786057 0 + outer loop + vertex 5.73586 26.6445 -0.1 + vertex 6.07308 26.3793 0 + vertex 5.73586 26.6445 0 + endloop + endfacet + facet normal -0.618154 -0.786057 -0 + outer loop + vertex 6.07308 26.3793 0 + vertex 5.73586 26.6445 -0.1 + vertex 6.07308 26.3793 -0.1 + endloop + endfacet + facet normal -0.505671 -0.862726 0 + outer loop + vertex 6.07308 26.3793 -0.1 + vertex 6.41393 26.1795 0 + vertex 6.07308 26.3793 0 + endloop + endfacet + facet normal -0.505671 -0.862726 -0 + outer loop + vertex 6.41393 26.1795 0 + vertex 6.07308 26.3793 -0.1 + vertex 6.41393 26.1795 -0.1 + endloop + endfacet + facet normal -0.369033 -0.929416 0 + outer loop + vertex 6.41393 26.1795 -0.1 + vertex 6.76329 26.0408 0 + vertex 6.41393 26.1795 0 + endloop + endfacet + facet normal -0.369033 -0.929416 -0 + outer loop + vertex 6.76329 26.0408 0 + vertex 6.41393 26.1795 -0.1 + vertex 6.76329 26.0408 -0.1 + endloop + endfacet + facet normal -0.220456 -0.975397 0 + outer loop + vertex 6.76329 26.0408 -0.1 + vertex 7.12606 25.9588 0 + vertex 6.76329 26.0408 0 + endloop + endfacet + facet normal -0.220456 -0.975397 -0 + outer loop + vertex 7.12606 25.9588 0 + vertex 6.76329 26.0408 -0.1 + vertex 7.12606 25.9588 -0.1 + endloop + endfacet + facet normal -0.188841 -0.982008 0 + outer loop + vertex 7.12606 25.9588 -0.1 + vertex 7.55919 25.8755 0 + vertex 7.12606 25.9588 0 + endloop + endfacet + facet normal -0.188841 -0.982008 -0 + outer loop + vertex 7.55919 25.8755 0 + vertex 7.12606 25.9588 -0.1 + vertex 7.55919 25.8755 -0.1 + endloop + endfacet + facet normal -0.317419 -0.948285 0 + outer loop + vertex 7.55919 25.8755 -0.1 + vertex 7.92584 25.7528 0 + vertex 7.55919 25.8755 0 + endloop + endfacet + facet normal -0.317419 -0.948285 -0 + outer loop + vertex 7.92584 25.7528 0 + vertex 7.55919 25.8755 -0.1 + vertex 7.92584 25.7528 -0.1 + endloop + endfacet + facet normal -0.448547 -0.893759 0 + outer loop + vertex 7.92584 25.7528 -0.1 + vertex 8.08977 25.6705 0 + vertex 7.92584 25.7528 0 + endloop + endfacet + facet normal -0.448547 -0.893759 -0 + outer loop + vertex 8.08977 25.6705 0 + vertex 7.92584 25.7528 -0.1 + vertex 8.08977 25.6705 -0.1 + endloop + endfacet + facet normal -0.542679 -0.83994 0 + outer loop + vertex 8.08977 25.6705 -0.1 + vertex 8.24373 25.571 0 + vertex 8.08977 25.6705 0 + endloop + endfacet + facet normal -0.542679 -0.83994 -0 + outer loop + vertex 8.24373 25.571 0 + vertex 8.08977 25.6705 -0.1 + vertex 8.24373 25.571 -0.1 + endloop + endfacet + facet normal -0.63165 -0.775254 0 + outer loop + vertex 8.24373 25.571 -0.1 + vertex 8.38993 25.4519 0 + vertex 8.24373 25.571 0 + endloop + endfacet + facet normal -0.63165 -0.775254 -0 + outer loop + vertex 8.38993 25.4519 0 + vertex 8.24373 25.571 -0.1 + vertex 8.38993 25.4519 -0.1 + endloop + endfacet + facet normal -0.708493 -0.705718 0 + outer loop + vertex 8.53058 25.3107 -0.1 + vertex 8.38993 25.4519 0 + vertex 8.38993 25.4519 -0.1 + endloop + endfacet + facet normal -0.708493 -0.705718 0 + outer loop + vertex 8.38993 25.4519 0 + vertex 8.53058 25.3107 -0.1 + vertex 8.53058 25.3107 0 + endloop + endfacet + facet normal -0.770043 -0.637991 0 + outer loop + vertex 8.6679 25.145 -0.1 + vertex 8.53058 25.3107 0 + vertex 8.53058 25.3107 -0.1 + endloop + endfacet + facet normal -0.770043 -0.637991 0 + outer loop + vertex 8.53058 25.3107 0 + vertex 8.6679 25.145 -0.1 + vertex 8.6679 25.145 0 + endloop + endfacet + facet normal -0.816637 -0.577152 0 + outer loop + vertex 8.80411 24.9522 -0.1 + vertex 8.6679 25.145 0 + vertex 8.6679 25.145 -0.1 + endloop + endfacet + facet normal -0.816637 -0.577152 0 + outer loop + vertex 8.6679 25.145 0 + vertex 8.80411 24.9522 -0.1 + vertex 8.80411 24.9522 0 + endloop + endfacet + facet normal -0.863652 -0.504088 0 + outer loop + vertex 9.08206 24.476 -0.1 + vertex 8.80411 24.9522 0 + vertex 8.80411 24.9522 -0.1 + endloop + endfacet + facet normal -0.863652 -0.504088 0 + outer loop + vertex 8.80411 24.9522 0 + vertex 9.08206 24.476 -0.1 + vertex 9.08206 24.476 0 + endloop + endfacet + facet normal -0.8983 -0.439382 0 + outer loop + vertex 9.38213 23.8626 -0.1 + vertex 9.08206 24.476 0 + vertex 9.08206 24.476 -0.1 + endloop + endfacet + facet normal -0.8983 -0.439382 0 + outer loop + vertex 9.08206 24.476 0 + vertex 9.38213 23.8626 -0.1 + vertex 9.38213 23.8626 0 + endloop + endfacet + facet normal -0.914889 -0.403706 0 + outer loop + vertex 9.72206 23.0922 -0.1 + vertex 9.38213 23.8626 0 + vertex 9.38213 23.8626 -0.1 + endloop + endfacet + facet normal -0.914889 -0.403706 0 + outer loop + vertex 9.38213 23.8626 0 + vertex 9.72206 23.0922 -0.1 + vertex 9.72206 23.0922 0 + endloop + endfacet + facet normal -0.916786 -0.399379 0 + outer loop + vertex 10.0801 22.2703 -0.1 + vertex 9.72206 23.0922 0 + vertex 9.72206 23.0922 -0.1 + endloop + endfacet + facet normal -0.916786 -0.399379 0 + outer loop + vertex 9.72206 23.0922 0 + vertex 10.0801 22.2703 -0.1 + vertex 10.0801 22.2703 0 + endloop + endfacet + facet normal -0.906506 -0.422192 0 + outer loop + vertex 10.3935 21.5973 -0.1 + vertex 10.0801 22.2703 0 + vertex 10.0801 22.2703 -0.1 + endloop + endfacet + facet normal -0.906506 -0.422192 0 + outer loop + vertex 10.0801 22.2703 0 + vertex 10.3935 21.5973 -0.1 + vertex 10.3935 21.5973 0 + endloop + endfacet + facet normal -0.886025 -0.463638 0 + outer loop + vertex 10.6869 21.0368 -0.1 + vertex 10.3935 21.5973 0 + vertex 10.3935 21.5973 -0.1 + endloop + endfacet + facet normal -0.886025 -0.463638 0 + outer loop + vertex 10.3935 21.5973 0 + vertex 10.6869 21.0368 -0.1 + vertex 10.6869 21.0368 0 + endloop + endfacet + facet normal -0.852053 -0.523456 0 + outer loop + vertex 10.9846 20.5521 -0.1 + vertex 10.6869 21.0368 0 + vertex 10.6869 21.0368 -0.1 + endloop + endfacet + facet normal -0.852053 -0.523456 0 + outer loop + vertex 10.6869 21.0368 0 + vertex 10.9846 20.5521 -0.1 + vertex 10.9846 20.5521 0 + endloop + endfacet + facet normal -0.806267 -0.591552 0 + outer loop + vertex 11.3113 20.1069 -0.1 + vertex 10.9846 20.5521 0 + vertex 10.9846 20.5521 -0.1 + endloop + endfacet + facet normal -0.806267 -0.591552 0 + outer loop + vertex 10.9846 20.5521 0 + vertex 11.3113 20.1069 -0.1 + vertex 11.3113 20.1069 0 + endloop + endfacet + facet normal -0.758443 -0.65174 0 + outer loop + vertex 11.6914 19.6646 -0.1 + vertex 11.3113 20.1069 0 + vertex 11.3113 20.1069 -0.1 + endloop + endfacet + facet normal -0.758443 -0.65174 0 + outer loop + vertex 11.3113 20.1069 0 + vertex 11.6914 19.6646 -0.1 + vertex 11.6914 19.6646 0 + endloop + endfacet + facet normal -0.720518 -0.693437 0 + outer loop + vertex 12.1494 19.1886 -0.1 + vertex 11.6914 19.6646 0 + vertex 11.6914 19.6646 -0.1 + endloop + endfacet + facet normal -0.720518 -0.693437 0 + outer loop + vertex 11.6914 19.6646 0 + vertex 12.1494 19.1886 -0.1 + vertex 12.1494 19.1886 0 + endloop + endfacet + facet normal -0.697808 -0.716285 0 + outer loop + vertex 12.1494 19.1886 -0.1 + vertex 12.71 18.6425 0 + vertex 12.1494 19.1886 0 + endloop + endfacet + facet normal -0.697808 -0.716285 -0 + outer loop + vertex 12.71 18.6425 0 + vertex 12.1494 19.1886 -0.1 + vertex 12.71 18.6425 -0.1 + endloop + endfacet + facet normal -0.680991 -0.732292 0 + outer loop + vertex 12.71 18.6425 -0.1 + vertex 13.3813 18.0182 0 + vertex 12.71 18.6425 0 + endloop + endfacet + facet normal -0.680991 -0.732292 -0 + outer loop + vertex 13.3813 18.0182 0 + vertex 12.71 18.6425 -0.1 + vertex 13.3813 18.0182 -0.1 + endloop + endfacet + facet normal -0.650845 -0.759211 0 + outer loop + vertex 13.3813 18.0182 -0.1 + vertex 14.0017 17.4864 0 + vertex 13.3813 18.0182 0 + endloop + endfacet + facet normal -0.650845 -0.759211 -0 + outer loop + vertex 14.0017 17.4864 0 + vertex 13.3813 18.0182 -0.1 + vertex 14.0017 17.4864 -0.1 + endloop + endfacet + facet normal -0.606609 -0.795001 0 + outer loop + vertex 14.0017 17.4864 -0.1 + vertex 14.6028 17.0277 0 + vertex 14.0017 17.4864 0 + endloop + endfacet + facet normal -0.606609 -0.795001 -0 + outer loop + vertex 14.6028 17.0277 0 + vertex 14.0017 17.4864 -0.1 + vertex 14.6028 17.0277 -0.1 + endloop + endfacet + facet normal -0.550734 -0.834681 0 + outer loop + vertex 14.6028 17.0277 -0.1 + vertex 15.2162 16.623 0 + vertex 14.6028 17.0277 0 + endloop + endfacet + facet normal -0.550734 -0.834681 -0 + outer loop + vertex 15.2162 16.623 0 + vertex 14.6028 17.0277 -0.1 + vertex 15.2162 16.623 -0.1 + endloop + endfacet + facet normal -0.490625 -0.871371 0 + outer loop + vertex 15.2162 16.623 -0.1 + vertex 15.8738 16.2527 0 + vertex 15.2162 16.623 0 + endloop + endfacet + facet normal -0.490625 -0.871371 -0 + outer loop + vertex 15.8738 16.2527 0 + vertex 15.2162 16.623 -0.1 + vertex 15.8738 16.2527 -0.1 + endloop + endfacet + facet normal -0.435747 -0.900069 0 + outer loop + vertex 15.8738 16.2527 -0.1 + vertex 16.6072 15.8977 0 + vertex 15.8738 16.2527 0 + endloop + endfacet + facet normal -0.435747 -0.900069 -0 + outer loop + vertex 16.6072 15.8977 0 + vertex 15.8738 16.2527 -0.1 + vertex 16.6072 15.8977 -0.1 + endloop + endfacet + facet normal -0.392812 -0.919619 0 + outer loop + vertex 16.6072 15.8977 -0.1 + vertex 17.448 15.5385 0 + vertex 16.6072 15.8977 0 + endloop + endfacet + facet normal -0.392812 -0.919619 -0 + outer loop + vertex 17.448 15.5385 0 + vertex 16.6072 15.8977 -0.1 + vertex 17.448 15.5385 -0.1 + endloop + endfacet + facet normal -0.36368 -0.931524 0 + outer loop + vertex 17.448 15.5385 -0.1 + vertex 18.4281 15.1559 0 + vertex 17.448 15.5385 0 + endloop + endfacet + facet normal -0.36368 -0.931524 -0 + outer loop + vertex 18.4281 15.1559 0 + vertex 17.448 15.5385 -0.1 + vertex 18.4281 15.1559 -0.1 + endloop + endfacet + facet normal -0.343445 -0.939173 0 + outer loop + vertex 18.4281 15.1559 -0.1 + vertex 19.4469 14.7833 0 + vertex 18.4281 15.1559 0 + endloop + endfacet + facet normal -0.343445 -0.939173 -0 + outer loop + vertex 19.4469 14.7833 0 + vertex 18.4281 15.1559 -0.1 + vertex 19.4469 14.7833 -0.1 + endloop + endfacet + facet normal -0.28492 -0.958551 0 + outer loop + vertex 19.4469 14.7833 -0.1 + vertex 19.7955 14.6797 0 + vertex 19.4469 14.7833 0 + endloop + endfacet + facet normal -0.28492 -0.958551 -0 + outer loop + vertex 19.7955 14.6797 0 + vertex 19.4469 14.7833 -0.1 + vertex 19.7955 14.6797 -0.1 + endloop + endfacet + facet normal -0.184649 -0.982804 0 + outer loop + vertex 19.7955 14.6797 -0.1 + vertex 20.0785 14.6265 0 + vertex 19.7955 14.6797 0 + endloop + endfacet + facet normal -0.184649 -0.982804 -0 + outer loop + vertex 20.0785 14.6265 0 + vertex 19.7955 14.6797 -0.1 + vertex 20.0785 14.6265 -0.1 + endloop + endfacet + facet normal -0.024894 -0.99969 0 + outer loop + vertex 20.0785 14.6265 -0.1 + vertex 20.327 14.6203 0 + vertex 20.0785 14.6265 0 + endloop + endfacet + facet normal -0.024894 -0.99969 -0 + outer loop + vertex 20.327 14.6203 0 + vertex 20.0785 14.6265 -0.1 + vertex 20.327 14.6203 -0.1 + endloop + endfacet + facet normal 0.150471 -0.988614 0 + outer loop + vertex 20.327 14.6203 -0.1 + vertex 20.5722 14.6577 0 + vertex 20.327 14.6203 0 + endloop + endfacet + facet normal 0.150471 -0.988614 0 + outer loop + vertex 20.5722 14.6577 0 + vertex 20.327 14.6203 -0.1 + vertex 20.5722 14.6577 -0.1 + endloop + endfacet + facet normal 0.272592 -0.96213 0 + outer loop + vertex 20.5722 14.6577 -0.1 + vertex 20.8452 14.735 0 + vertex 20.5722 14.6577 0 + endloop + endfacet + facet normal 0.272592 -0.96213 0 + outer loop + vertex 20.8452 14.735 0 + vertex 20.5722 14.6577 -0.1 + vertex 20.8452 14.735 -0.1 + endloop + endfacet + facet normal 0.32454 -0.945872 0 + outer loop + vertex 20.8452 14.735 -0.1 + vertex 21.1771 14.8489 0 + vertex 20.8452 14.735 0 + endloop + endfacet + facet normal 0.32454 -0.945872 0 + outer loop + vertex 21.1771 14.8489 0 + vertex 20.8452 14.735 -0.1 + vertex 21.1771 14.8489 -0.1 + endloop + endfacet + facet normal 0.357547 -0.933895 0 + outer loop + vertex 21.1771 14.8489 -0.1 + vertex 21.6737 15.039 0 + vertex 21.1771 14.8489 0 + endloop + endfacet + facet normal 0.357547 -0.933895 0 + outer loop + vertex 21.6737 15.039 0 + vertex 21.1771 14.8489 -0.1 + vertex 21.6737 15.039 -0.1 + endloop + endfacet + facet normal 0.392507 -0.919749 0 + outer loop + vertex 21.6737 15.039 -0.1 + vertex 22.2336 15.278 0 + vertex 21.6737 15.039 0 + endloop + endfacet + facet normal 0.392507 -0.919749 0 + outer loop + vertex 22.2336 15.278 0 + vertex 21.6737 15.039 -0.1 + vertex 22.2336 15.278 -0.1 + endloop + endfacet + facet normal 0.427814 -0.903867 0 + outer loop + vertex 22.2336 15.278 -0.1 + vertex 23.3919 15.8262 0 + vertex 22.2336 15.278 0 + endloop + endfacet + facet normal 0.427814 -0.903867 0 + outer loop + vertex 23.3919 15.8262 0 + vertex 22.2336 15.278 -0.1 + vertex 23.3919 15.8262 -0.1 + endloop + endfacet + facet normal 0.460603 -0.887606 0 + outer loop + vertex 23.3919 15.8262 -0.1 + vertex 23.9148 16.0975 0 + vertex 23.3919 15.8262 0 + endloop + endfacet + facet normal 0.460603 -0.887606 0 + outer loop + vertex 23.9148 16.0975 0 + vertex 23.3919 15.8262 -0.1 + vertex 23.9148 16.0975 -0.1 + endloop + endfacet + facet normal 0.489467 -0.872022 0 + outer loop + vertex 23.9148 16.0975 -0.1 + vertex 24.3498 16.3417 0 + vertex 23.9148 16.0975 0 + endloop + endfacet + facet normal 0.489467 -0.872022 0 + outer loop + vertex 24.3498 16.3417 0 + vertex 23.9148 16.0975 -0.1 + vertex 24.3498 16.3417 -0.1 + endloop + endfacet + facet normal 0.539107 -0.842237 0 + outer loop + vertex 24.3498 16.3417 -0.1 + vertex 24.659 16.5397 0 + vertex 24.3498 16.3417 0 + endloop + endfacet + facet normal 0.539107 -0.842237 0 + outer loop + vertex 24.659 16.5397 0 + vertex 24.3498 16.3417 -0.1 + vertex 24.659 16.5397 -0.1 + endloop + endfacet + facet normal 0.620549 -0.784168 0 + outer loop + vertex 24.659 16.5397 -0.1 + vertex 24.7548 16.6154 0 + vertex 24.659 16.5397 0 + endloop + endfacet + facet normal 0.620549 -0.784168 0 + outer loop + vertex 24.7548 16.6154 0 + vertex 24.659 16.5397 -0.1 + vertex 24.7548 16.6154 -0.1 + endloop + endfacet + facet normal 0.751376 -0.659874 0 + outer loop + vertex 24.7548 16.6154 0 + vertex 24.8049 16.6725 -0.1 + vertex 24.8049 16.6725 0 + endloop + endfacet + facet normal 0.751376 -0.659874 0 + outer loop + vertex 24.8049 16.6725 -0.1 + vertex 24.7548 16.6154 0 + vertex 24.7548 16.6154 -0.1 + endloop + endfacet + facet normal 0.968195 -0.250195 0 + outer loop + vertex 24.8049 16.6725 0 + vertex 24.8294 16.7672 -0.1 + vertex 24.8294 16.7672 0 + endloop + endfacet + facet normal 0.968195 -0.250195 0 + outer loop + vertex 24.8294 16.7672 -0.1 + vertex 24.8049 16.6725 0 + vertex 24.8049 16.6725 -0.1 + endloop + endfacet + facet normal 0.998807 0.0488365 0 + outer loop + vertex 24.8294 16.7672 0 + vertex 24.8232 16.8925 -0.1 + vertex 24.8232 16.8925 0 + endloop + endfacet + facet normal 0.998807 0.0488365 0 + outer loop + vertex 24.8232 16.8925 -0.1 + vertex 24.8294 16.7672 0 + vertex 24.8294 16.7672 -0.1 + endloop + endfacet + facet normal 0.971162 0.23842 0 + outer loop + vertex 24.8232 16.8925 0 + vertex 24.789 17.0321 -0.1 + vertex 24.789 17.0321 0 + endloop + endfacet + facet normal 0.971162 0.23842 0 + outer loop + vertex 24.789 17.0321 -0.1 + vertex 24.8232 16.8925 0 + vertex 24.8232 16.8925 -0.1 + endloop + endfacet + facet normal 0.916748 0.399467 0 + outer loop + vertex 24.789 17.0321 0 + vertex 24.7291 17.1695 -0.1 + vertex 24.7291 17.1695 0 + endloop + endfacet + facet normal 0.916748 0.399467 0 + outer loop + vertex 24.7291 17.1695 -0.1 + vertex 24.789 17.0321 0 + vertex 24.789 17.0321 -0.1 + endloop + endfacet + facet normal 0.771083 0.636734 0 + outer loop + vertex 24.7291 17.1695 0 + vertex 24.6602 17.253 -0.1 + vertex 24.6602 17.253 0 + endloop + endfacet + facet normal 0.771083 0.636734 0 + outer loop + vertex 24.6602 17.253 -0.1 + vertex 24.7291 17.1695 0 + vertex 24.7291 17.1695 -0.1 + endloop + endfacet + facet normal 0.526106 0.850419 -0 + outer loop + vertex 24.6602 17.253 -0.1 + vertex 24.5483 17.3222 0 + vertex 24.6602 17.253 0 + endloop + endfacet + facet normal 0.526106 0.850419 0 + outer loop + vertex 24.5483 17.3222 0 + vertex 24.6602 17.253 -0.1 + vertex 24.5483 17.3222 -0.1 + endloop + endfacet + facet normal 0.326655 0.945144 -0 + outer loop + vertex 24.5483 17.3222 -0.1 + vertex 24.386 17.3783 0 + vertex 24.5483 17.3222 0 + endloop + endfacet + facet normal 0.326655 0.945144 0 + outer loop + vertex 24.386 17.3783 0 + vertex 24.5483 17.3222 -0.1 + vertex 24.386 17.3783 -0.1 + endloop + endfacet + facet normal 0.19643 0.980518 -0 + outer loop + vertex 24.386 17.3783 -0.1 + vertex 24.166 17.4223 0 + vertex 24.386 17.3783 0 + endloop + endfacet + facet normal 0.19643 0.980518 0 + outer loop + vertex 24.166 17.4223 0 + vertex 24.386 17.3783 -0.1 + vertex 24.166 17.4223 -0.1 + endloop + endfacet + facet normal 0.0878721 0.996132 -0 + outer loop + vertex 24.166 17.4223 -0.1 + vertex 23.5226 17.4791 0 + vertex 24.166 17.4223 0 + endloop + endfacet + facet normal 0.0878721 0.996132 0 + outer loop + vertex 23.5226 17.4791 0 + vertex 24.166 17.4223 -0.1 + vertex 23.5226 17.4791 -0.1 + endloop + endfacet + facet normal 0.0232768 0.999729 -0 + outer loop + vertex 23.5226 17.4791 -0.1 + vertex 22.5588 17.5015 0 + vertex 23.5226 17.4791 0 + endloop + endfacet + facet normal 0.0232768 0.999729 0 + outer loop + vertex 22.5588 17.5015 0 + vertex 23.5226 17.4791 -0.1 + vertex 22.5588 17.5015 -0.1 + endloop + endfacet + facet normal 0.0146144 0.999893 -0 + outer loop + vertex 22.5588 17.5015 -0.1 + vertex 21.0506 17.5236 0 + vertex 22.5588 17.5015 0 + endloop + endfacet + facet normal 0.0146144 0.999893 0 + outer loop + vertex 21.0506 17.5236 0 + vertex 22.5588 17.5015 -0.1 + vertex 21.0506 17.5236 -0.1 + endloop + endfacet + facet normal 0.0395978 0.999216 -0 + outer loop + vertex 21.0506 17.5236 -0.1 + vertex 20.2276 17.5562 0 + vertex 21.0506 17.5236 0 + endloop + endfacet + facet normal 0.0395978 0.999216 0 + outer loop + vertex 20.2276 17.5562 0 + vertex 21.0506 17.5236 -0.1 + vertex 20.2276 17.5562 -0.1 + endloop + endfacet + facet normal 0.211618 0.977352 -0 + outer loop + vertex 20.2276 17.5562 -0.1 + vertex 20.1284 17.5777 0 + vertex 20.2276 17.5562 0 + endloop + endfacet + facet normal 0.211618 0.977352 0 + outer loop + vertex 20.1284 17.5777 0 + vertex 20.2276 17.5562 -0.1 + vertex 20.1284 17.5777 -0.1 + endloop + endfacet + facet normal 0.390006 0.920812 -0 + outer loop + vertex 20.1284 17.5777 -0.1 + vertex 20.0333 17.6179 0 + vertex 20.1284 17.5777 0 + endloop + endfacet + facet normal 0.390006 0.920812 0 + outer loop + vertex 20.0333 17.6179 0 + vertex 20.1284 17.5777 -0.1 + vertex 20.0333 17.6179 -0.1 + endloop + endfacet + facet normal 0.545234 0.838284 -0 + outer loop + vertex 20.0333 17.6179 -0.1 + vertex 19.9424 17.6771 0 + vertex 20.0333 17.6179 0 + endloop + endfacet + facet normal 0.545234 0.838284 0 + outer loop + vertex 19.9424 17.6771 0 + vertex 20.0333 17.6179 -0.1 + vertex 19.9424 17.6771 -0.1 + endloop + endfacet + facet normal 0.668778 0.743462 -0 + outer loop + vertex 19.9424 17.6771 -0.1 + vertex 19.8554 17.7553 0 + vertex 19.9424 17.6771 0 + endloop + endfacet + facet normal 0.668778 0.743462 0 + outer loop + vertex 19.8554 17.7553 0 + vertex 19.9424 17.6771 -0.1 + vertex 19.8554 17.7553 -0.1 + endloop + endfacet + facet normal 0.797362 0.603501 0 + outer loop + vertex 19.8554 17.7553 0 + vertex 19.6934 17.9694 -0.1 + vertex 19.6934 17.9694 0 + endloop + endfacet + facet normal 0.797362 0.603501 0 + outer loop + vertex 19.6934 17.9694 -0.1 + vertex 19.8554 17.7553 0 + vertex 19.8554 17.7553 -0.1 + endloop + endfacet + facet normal 0.893603 0.448858 0 + outer loop + vertex 19.6934 17.9694 0 + vertex 19.5469 18.2611 -0.1 + vertex 19.5469 18.2611 0 + endloop + endfacet + facet normal 0.893603 0.448858 0 + outer loop + vertex 19.5469 18.2611 -0.1 + vertex 19.6934 17.9694 0 + vertex 19.6934 17.9694 -0.1 + endloop + endfacet + facet normal 0.942385 0.33453 0 + outer loop + vertex 19.5469 18.2611 0 + vertex 19.4153 18.6317 -0.1 + vertex 19.4153 18.6317 0 + endloop + endfacet + facet normal 0.942385 0.33453 0 + outer loop + vertex 19.4153 18.6317 -0.1 + vertex 19.5469 18.2611 0 + vertex 19.5469 18.2611 -0.1 + endloop + endfacet + facet normal 0.967894 0.251357 0 + outer loop + vertex 19.4153 18.6317 0 + vertex 19.2984 19.082 -0.1 + vertex 19.2984 19.082 0 + endloop + endfacet + facet normal 0.967894 0.251357 0 + outer loop + vertex 19.2984 19.082 -0.1 + vertex 19.4153 18.6317 0 + vertex 19.4153 18.6317 -0.1 + endloop + endfacet + facet normal 0.981784 0.190002 0 + outer loop + vertex 19.2984 19.082 0 + vertex 19.1956 19.6132 -0.1 + vertex 19.1956 19.6132 0 + endloop + endfacet + facet normal 0.981784 0.190002 0 + outer loop + vertex 19.1956 19.6132 -0.1 + vertex 19.2984 19.082 0 + vertex 19.2984 19.082 -0.1 + endloop + endfacet + facet normal 0.989607 0.143797 0 + outer loop + vertex 19.1956 19.6132 0 + vertex 19.1065 20.2262 -0.1 + vertex 19.1065 20.2262 0 + endloop + endfacet + facet normal 0.989607 0.143797 0 + outer loop + vertex 19.1065 20.2262 -0.1 + vertex 19.1956 19.6132 0 + vertex 19.1956 19.6132 -0.1 + endloop + endfacet + facet normal 0.988819 0.149121 0 + outer loop + vertex 19.1065 20.2262 0 + vertex 19.0081 20.8787 -0.1 + vertex 19.0081 20.8787 0 + endloop + endfacet + facet normal 0.988819 0.149121 0 + outer loop + vertex 19.0081 20.8787 -0.1 + vertex 19.1065 20.2262 0 + vertex 19.1065 20.2262 -0.1 + endloop + endfacet + facet normal 0.979919 0.199398 0 + outer loop + vertex 19.0081 20.8787 0 + vertex 18.892 21.4494 -0.1 + vertex 18.892 21.4494 0 + endloop + endfacet + facet normal 0.979919 0.199398 0 + outer loop + vertex 18.892 21.4494 -0.1 + vertex 19.0081 20.8787 0 + vertex 19.0081 20.8787 -0.1 + endloop + endfacet + facet normal 0.963148 0.268972 0 + outer loop + vertex 18.892 21.4494 0 + vertex 18.7726 21.8767 -0.1 + vertex 18.7726 21.8767 0 + endloop + endfacet + facet normal 0.963148 0.268972 0 + outer loop + vertex 18.7726 21.8767 -0.1 + vertex 18.892 21.4494 0 + vertex 18.892 21.4494 -0.1 + endloop + endfacet + facet normal 0.928333 0.371749 0 + outer loop + vertex 18.7726 21.8767 0 + vertex 18.7163 22.0174 -0.1 + vertex 18.7163 22.0174 0 + endloop + endfacet + facet normal 0.928333 0.371749 0 + outer loop + vertex 18.7163 22.0174 -0.1 + vertex 18.7726 21.8767 0 + vertex 18.7726 21.8767 -0.1 + endloop + endfacet + facet normal 0.845312 0.534273 0 + outer loop + vertex 18.7163 22.0174 0 + vertex 18.6646 22.0992 -0.1 + vertex 18.6646 22.0992 0 + endloop + endfacet + facet normal 0.845312 0.534273 0 + outer loop + vertex 18.6646 22.0992 -0.1 + vertex 18.7163 22.0174 0 + vertex 18.7163 22.0174 -0.1 + endloop + endfacet + facet normal 0.569342 0.822101 -0 + outer loop + vertex 18.6646 22.0992 -0.1 + vertex 18.4732 22.2317 0 + vertex 18.6646 22.0992 0 + endloop + endfacet + facet normal 0.569342 0.822101 0 + outer loop + vertex 18.4732 22.2317 0 + vertex 18.6646 22.0992 -0.1 + vertex 18.4732 22.2317 -0.1 + endloop + endfacet + facet normal 0.466042 0.884763 -0 + outer loop + vertex 18.4732 22.2317 -0.1 + vertex 18.127 22.4141 0 + vertex 18.4732 22.2317 0 + endloop + endfacet + facet normal 0.466042 0.884763 0 + outer loop + vertex 18.127 22.4141 0 + vertex 18.4732 22.2317 -0.1 + vertex 18.127 22.4141 -0.1 + endloop + endfacet + facet normal 0.418359 0.908282 -0 + outer loop + vertex 18.127 22.4141 -0.1 + vertex 17.6752 22.6222 0 + vertex 18.127 22.4141 0 + endloop + endfacet + facet normal 0.418359 0.908282 0 + outer loop + vertex 17.6752 22.6222 0 + vertex 18.127 22.4141 -0.1 + vertex 17.6752 22.6222 -0.1 + endloop + endfacet + facet normal 0.381566 0.924342 -0 + outer loop + vertex 17.6752 22.6222 -0.1 + vertex 17.1667 22.8321 0 + vertex 17.6752 22.6222 0 + endloop + endfacet + facet normal 0.381566 0.924342 0 + outer loop + vertex 17.1667 22.8321 0 + vertex 17.6752 22.6222 -0.1 + vertex 17.1667 22.8321 -0.1 + endloop + endfacet + facet normal 0.375086 0.92699 -0 + outer loop + vertex 17.1667 22.8321 -0.1 + vertex 15.5173 23.4995 0 + vertex 17.1667 22.8321 0 + endloop + endfacet + facet normal 0.375086 0.92699 0 + outer loop + vertex 15.5173 23.4995 0 + vertex 17.1667 22.8321 -0.1 + vertex 15.5173 23.4995 -0.1 + endloop + endfacet + facet normal 0.401684 0.915778 -0 + outer loop + vertex 15.5173 23.4995 -0.1 + vertex 14.0281 24.1527 0 + vertex 15.5173 23.4995 0 + endloop + endfacet + facet normal 0.401684 0.915778 0 + outer loop + vertex 14.0281 24.1527 0 + vertex 15.5173 23.4995 -0.1 + vertex 14.0281 24.1527 -0.1 + endloop + endfacet + facet normal 0.431504 0.902111 -0 + outer loop + vertex 14.0281 24.1527 -0.1 + vertex 13.7923 24.2655 0 + vertex 14.0281 24.1527 0 + endloop + endfacet + facet normal 0.431504 0.902111 0 + outer loop + vertex 13.7923 24.2655 0 + vertex 14.0281 24.1527 -0.1 + vertex 13.7923 24.2655 -0.1 + endloop + endfacet + facet normal 0.491302 0.870989 -0 + outer loop + vertex 13.7923 24.2655 -0.1 + vertex 13.5553 24.3991 0 + vertex 13.7923 24.2655 0 + endloop + endfacet + facet normal 0.491302 0.870989 0 + outer loop + vertex 13.5553 24.3991 0 + vertex 13.7923 24.2655 -0.1 + vertex 13.5553 24.3991 -0.1 + endloop + endfacet + facet normal 0.565064 0.825047 -0 + outer loop + vertex 13.5553 24.3991 -0.1 + vertex 13.085 24.7212 0 + vertex 13.5553 24.3991 0 + endloop + endfacet + facet normal 0.565064 0.825047 0 + outer loop + vertex 13.085 24.7212 0 + vertex 13.5553 24.3991 -0.1 + vertex 13.085 24.7212 -0.1 + endloop + endfacet + facet normal 0.644201 0.764857 -0 + outer loop + vertex 13.085 24.7212 -0.1 + vertex 12.6316 25.1032 0 + vertex 13.085 24.7212 0 + endloop + endfacet + facet normal 0.644201 0.764857 0 + outer loop + vertex 12.6316 25.1032 0 + vertex 13.085 24.7212 -0.1 + vertex 12.6316 25.1032 -0.1 + endloop + endfacet + facet normal 0.710157 0.704043 0 + outer loop + vertex 12.6316 25.1032 0 + vertex 12.2092 25.5292 -0.1 + vertex 12.2092 25.5292 0 + endloop + endfacet + facet normal 0.710157 0.704043 0 + outer loop + vertex 12.2092 25.5292 -0.1 + vertex 12.6316 25.1032 0 + vertex 12.6316 25.1032 -0.1 + endloop + endfacet + facet normal 0.769647 0.63847 0 + outer loop + vertex 12.2092 25.5292 0 + vertex 11.8324 25.9834 -0.1 + vertex 11.8324 25.9834 0 + endloop + endfacet + facet normal 0.769647 0.63847 0 + outer loop + vertex 11.8324 25.9834 -0.1 + vertex 12.2092 25.5292 0 + vertex 12.2092 25.5292 -0.1 + endloop + endfacet + facet normal 0.827234 0.561857 0 + outer loop + vertex 11.8324 25.9834 0 + vertex 11.5154 26.4501 -0.1 + vertex 11.5154 26.4501 0 + endloop + endfacet + facet normal 0.827234 0.561857 0 + outer loop + vertex 11.5154 26.4501 -0.1 + vertex 11.8324 25.9834 0 + vertex 11.8324 25.9834 -0.1 + endloop + endfacet + facet normal 0.870844 0.491559 0 + outer loop + vertex 11.5154 26.4501 0 + vertex 11.3839 26.6832 -0.1 + vertex 11.3839 26.6832 0 + endloop + endfacet + facet normal 0.870844 0.491559 0 + outer loop + vertex 11.3839 26.6832 -0.1 + vertex 11.5154 26.4501 0 + vertex 11.5154 26.4501 -0.1 + endloop + endfacet + facet normal 0.900452 0.434955 0 + outer loop + vertex 11.3839 26.6832 0 + vertex 11.2726 26.9135 -0.1 + vertex 11.2726 26.9135 0 + endloop + endfacet + facet normal 0.900452 0.434955 0 + outer loop + vertex 11.2726 26.9135 -0.1 + vertex 11.3839 26.6832 0 + vertex 11.3839 26.6832 -0.1 + endloop + endfacet + facet normal 0.930028 0.367488 0 + outer loop + vertex 11.2726 26.9135 0 + vertex 11.1835 27.139 -0.1 + vertex 11.1835 27.139 0 + endloop + endfacet + facet normal 0.930028 0.367488 0 + outer loop + vertex 11.1835 27.139 -0.1 + vertex 11.2726 26.9135 0 + vertex 11.2726 26.9135 -0.1 + endloop + endfacet + facet normal 0.958361 0.28556 0 + outer loop + vertex 11.1835 27.139 0 + vertex 11.1184 27.3577 -0.1 + vertex 11.1184 27.3577 0 + endloop + endfacet + facet normal 0.958361 0.28556 0 + outer loop + vertex 11.1184 27.3577 -0.1 + vertex 11.1835 27.139 0 + vertex 11.1835 27.139 -0.1 + endloop + endfacet + facet normal 0.982358 0.187011 0 + outer loop + vertex 11.1184 27.3577 0 + vertex 11.0734 27.5937 -0.1 + vertex 11.0734 27.5937 0 + endloop + endfacet + facet normal 0.982358 0.187011 0 + outer loop + vertex 11.0734 27.5937 -0.1 + vertex 11.1184 27.3577 0 + vertex 11.1184 27.3577 -0.1 + endloop + endfacet + facet normal 0.995162 0.0982451 0 + outer loop + vertex 11.0734 27.5937 0 + vertex 11.0484 27.8474 -0.1 + vertex 11.0484 27.8474 0 + endloop + endfacet + facet normal 0.995162 0.0982451 0 + outer loop + vertex 11.0484 27.8474 -0.1 + vertex 11.0734 27.5937 0 + vertex 11.0734 27.5937 -0.1 + endloop + endfacet + facet normal 0.999708 0.0241697 0 + outer loop + vertex 11.0484 27.8474 0 + vertex 11.0419 28.1143 -0.1 + vertex 11.0419 28.1143 0 + endloop + endfacet + facet normal 0.999708 0.0241697 0 + outer loop + vertex 11.0419 28.1143 -0.1 + vertex 11.0484 27.8474 0 + vertex 11.0484 27.8474 -0.1 + endloop + endfacet + facet normal 0.999225 -0.0393733 0 + outer loop + vertex 11.0419 28.1143 0 + vertex 11.0528 28.3898 -0.1 + vertex 11.0528 28.3898 0 + endloop + endfacet + facet normal 0.999225 -0.0393733 0 + outer loop + vertex 11.0528 28.3898 -0.1 + vertex 11.0419 28.1143 0 + vertex 11.0419 28.1143 -0.1 + endloop + endfacet + facet normal 0.992566 -0.121707 0 + outer loop + vertex 11.0528 28.3898 0 + vertex 11.1213 28.9486 -0.1 + vertex 11.1213 28.9486 0 + endloop + endfacet + facet normal 0.992566 -0.121707 0 + outer loop + vertex 11.1213 28.9486 -0.1 + vertex 11.0528 28.3898 0 + vertex 11.0528 28.3898 -0.1 + endloop + endfacet + facet normal 0.975165 -0.221479 0 + outer loop + vertex 11.1213 28.9486 0 + vertex 11.2437 29.4873 -0.1 + vertex 11.2437 29.4873 0 + endloop + endfacet + facet normal 0.975165 -0.221479 0 + outer loop + vertex 11.2437 29.4873 -0.1 + vertex 11.1213 28.9486 0 + vertex 11.1213 28.9486 -0.1 + endloop + endfacet + facet normal 0.94561 -0.325304 0 + outer loop + vertex 11.2437 29.4873 0 + vertex 11.4096 29.9696 -0.1 + vertex 11.4096 29.9696 0 + endloop + endfacet + facet normal 0.94561 -0.325304 0 + outer loop + vertex 11.4096 29.9696 -0.1 + vertex 11.2437 29.4873 0 + vertex 11.2437 29.4873 -0.1 + endloop + endfacet + facet normal 0.908293 -0.418334 0 + outer loop + vertex 11.4096 29.9696 0 + vertex 11.5057 30.1782 -0.1 + vertex 11.5057 30.1782 0 + endloop + endfacet + facet normal 0.908293 -0.418334 0 + outer loop + vertex 11.5057 30.1782 -0.1 + vertex 11.4096 29.9696 0 + vertex 11.4096 29.9696 -0.1 + endloop + endfacet + facet normal 0.868734 -0.495279 0 + outer loop + vertex 11.5057 30.1782 0 + vertex 11.6088 30.3591 -0.1 + vertex 11.6088 30.3591 0 + endloop + endfacet + facet normal 0.868734 -0.495279 0 + outer loop + vertex 11.6088 30.3591 -0.1 + vertex 11.5057 30.1782 0 + vertex 11.5057 30.1782 -0.1 + endloop + endfacet + facet normal 0.806643 -0.59104 0 + outer loop + vertex 11.6088 30.3591 0 + vertex 11.7177 30.5077 -0.1 + vertex 11.7177 30.5077 0 + endloop + endfacet + facet normal 0.806643 -0.59104 0 + outer loop + vertex 11.7177 30.5077 -0.1 + vertex 11.6088 30.3591 0 + vertex 11.6088 30.3591 -0.1 + endloop + endfacet + facet normal 0.702105 -0.712073 0 + outer loop + vertex 11.7177 30.5077 -0.1 + vertex 11.8311 30.6195 0 + vertex 11.7177 30.5077 0 + endloop + endfacet + facet normal 0.702105 -0.712073 0 + outer loop + vertex 11.8311 30.6195 0 + vertex 11.7177 30.5077 -0.1 + vertex 11.8311 30.6195 -0.1 + endloop + endfacet + facet normal 0.51702 -0.855973 0 + outer loop + vertex 11.8311 30.6195 -0.1 + vertex 11.9476 30.6899 0 + vertex 11.8311 30.6195 0 + endloop + endfacet + facet normal 0.51702 -0.855973 0 + outer loop + vertex 11.9476 30.6899 0 + vertex 11.8311 30.6195 -0.1 + vertex 11.9476 30.6899 -0.1 + endloop + endfacet + facet normal 0.202357 -0.979312 0 + outer loop + vertex 11.9476 30.6899 -0.1 + vertex 12.0661 30.7144 0 + vertex 11.9476 30.6899 0 + endloop + endfacet + facet normal 0.202357 -0.979312 0 + outer loop + vertex 12.0661 30.7144 0 + vertex 11.9476 30.6899 -0.1 + vertex 12.0661 30.7144 -0.1 + endloop + endfacet + facet normal -0.111663 -0.993746 0 + outer loop + vertex 12.0661 30.7144 -0.1 + vertex 12.1728 30.7024 0 + vertex 12.0661 30.7144 0 + endloop + endfacet + facet normal -0.111663 -0.993746 -0 + outer loop + vertex 12.1728 30.7024 0 + vertex 12.0661 30.7144 -0.1 + vertex 12.1728 30.7024 -0.1 + endloop + endfacet + facet normal -0.43355 -0.90113 0 + outer loop + vertex 12.1728 30.7024 -0.1 + vertex 12.2478 30.6663 0 + vertex 12.1728 30.7024 0 + endloop + endfacet + facet normal -0.43355 -0.90113 -0 + outer loop + vertex 12.2478 30.6663 0 + vertex 12.1728 30.7024 -0.1 + vertex 12.2478 30.6663 -0.1 + endloop + endfacet + facet normal -0.812799 -0.582545 0 + outer loop + vertex 12.291 30.606 -0.1 + vertex 12.2478 30.6663 0 + vertex 12.2478 30.6663 -0.1 + endloop + endfacet + facet normal -0.812799 -0.582545 0 + outer loop + vertex 12.2478 30.6663 0 + vertex 12.291 30.606 -0.1 + vertex 12.291 30.606 0 + endloop + endfacet + facet normal -0.990983 -0.133984 0 + outer loop + vertex 12.3025 30.5214 -0.1 + vertex 12.291 30.606 0 + vertex 12.291 30.606 -0.1 + endloop + endfacet + facet normal -0.990983 -0.133984 0 + outer loop + vertex 12.291 30.606 0 + vertex 12.3025 30.5214 -0.1 + vertex 12.3025 30.5214 0 + endloop + endfacet + facet normal -0.983093 0.183105 0 + outer loop + vertex 12.2821 30.4122 -0.1 + vertex 12.3025 30.5214 0 + vertex 12.3025 30.5214 -0.1 + endloop + endfacet + facet normal -0.983093 0.183105 0 + outer loop + vertex 12.3025 30.5214 0 + vertex 12.2821 30.4122 -0.1 + vertex 12.2821 30.4122 0 + endloop + endfacet + facet normal -0.931822 0.362917 0 + outer loop + vertex 12.23 30.2784 -0.1 + vertex 12.2821 30.4122 0 + vertex 12.2821 30.4122 -0.1 + endloop + endfacet + facet normal -0.931822 0.362917 0 + outer loop + vertex 12.2821 30.4122 0 + vertex 12.23 30.2784 -0.1 + vertex 12.23 30.2784 0 + endloop + endfacet + facet normal -0.863735 0.503946 0 + outer loop + vertex 12.0304 29.9363 -0.1 + vertex 12.23 30.2784 0 + vertex 12.23 30.2784 -0.1 + endloop + endfacet + facet normal -0.863735 0.503946 0 + outer loop + vertex 12.23 30.2784 0 + vertex 12.0304 29.9363 -0.1 + vertex 12.0304 29.9363 0 + endloop + endfacet + facet normal -0.874405 0.485196 0 + outer loop + vertex 11.965 29.8184 -0.1 + vertex 12.0304 29.9363 0 + vertex 12.0304 29.9363 -0.1 + endloop + endfacet + facet normal -0.874405 0.485196 0 + outer loop + vertex 12.0304 29.9363 0 + vertex 11.965 29.8184 -0.1 + vertex 11.965 29.8184 0 + endloop + endfacet + facet normal -0.930071 0.367381 0 + outer loop + vertex 11.9082 29.6745 -0.1 + vertex 11.965 29.8184 0 + vertex 11.965 29.8184 -0.1 + endloop + endfacet + facet normal -0.930071 0.367381 0 + outer loop + vertex 11.965 29.8184 0 + vertex 11.9082 29.6745 -0.1 + vertex 11.9082 29.6745 0 + endloop + endfacet + facet normal -0.970384 0.241567 0 + outer loop + vertex 11.8205 29.3224 -0.1 + vertex 11.9082 29.6745 0 + vertex 11.9082 29.6745 -0.1 + endloop + endfacet + facet normal -0.970384 0.241567 0 + outer loop + vertex 11.9082 29.6745 0 + vertex 11.8205 29.3224 -0.1 + vertex 11.8205 29.3224 0 + endloop + endfacet + facet normal -0.99199 0.126319 0 + outer loop + vertex 11.7675 28.9061 -0.1 + vertex 11.8205 29.3224 0 + vertex 11.8205 29.3224 -0.1 + endloop + endfacet + facet normal -0.99199 0.126319 0 + outer loop + vertex 11.8205 29.3224 0 + vertex 11.7675 28.9061 -0.1 + vertex 11.7675 28.9061 0 + endloop + endfacet + facet normal -0.999189 0.0402694 0 + outer loop + vertex 11.7492 28.4518 -0.1 + vertex 11.7675 28.9061 0 + vertex 11.7675 28.9061 -0.1 + endloop + endfacet + facet normal -0.999189 0.0402694 0 + outer loop + vertex 11.7675 28.9061 0 + vertex 11.7492 28.4518 -0.1 + vertex 11.7492 28.4518 0 + endloop + endfacet + facet normal -0.999377 -0.0352801 0 + outer loop + vertex 11.7656 27.9858 -0.1 + vertex 11.7492 28.4518 0 + vertex 11.7492 28.4518 -0.1 + endloop + endfacet + facet normal -0.999377 -0.0352801 0 + outer loop + vertex 11.7492 28.4518 0 + vertex 11.7656 27.9858 -0.1 + vertex 11.7656 27.9858 0 + endloop + endfacet + facet normal -0.993617 -0.112806 0 + outer loop + vertex 11.8169 27.5343 -0.1 + vertex 11.7656 27.9858 0 + vertex 11.7656 27.9858 -0.1 + endloop + endfacet + facet normal -0.993617 -0.112806 0 + outer loop + vertex 11.7656 27.9858 0 + vertex 11.8169 27.5343 -0.1 + vertex 11.8169 27.5343 0 + endloop + endfacet + facet normal -0.978727 -0.205168 0 + outer loop + vertex 11.903 27.1234 -0.1 + vertex 11.8169 27.5343 0 + vertex 11.8169 27.5343 -0.1 + endloop + endfacet + facet normal -0.978727 -0.205168 0 + outer loop + vertex 11.8169 27.5343 0 + vertex 11.903 27.1234 -0.1 + vertex 11.903 27.1234 0 + endloop + endfacet + facet normal -0.943297 -0.331951 0 + outer loop + vertex 12.0241 26.7794 -0.1 + vertex 11.903 27.1234 0 + vertex 11.903 27.1234 -0.1 + endloop + endfacet + facet normal -0.943297 -0.331951 0 + outer loop + vertex 11.903 27.1234 0 + vertex 12.0241 26.7794 -0.1 + vertex 12.0241 26.7794 0 + endloop + endfacet + facet normal -0.895057 -0.445953 0 + outer loop + vertex 12.1339 26.5589 -0.1 + vertex 12.0241 26.7794 0 + vertex 12.0241 26.7794 -0.1 + endloop + endfacet + facet normal -0.895057 -0.445953 0 + outer loop + vertex 12.0241 26.7794 0 + vertex 12.1339 26.5589 -0.1 + vertex 12.1339 26.5589 0 + endloop + endfacet + facet normal -0.859859 -0.510531 0 + outer loop + vertex 12.2572 26.3514 -0.1 + vertex 12.1339 26.5589 0 + vertex 12.1339 26.5589 -0.1 + endloop + endfacet + facet normal -0.859859 -0.510531 0 + outer loop + vertex 12.1339 26.5589 0 + vertex 12.2572 26.3514 -0.1 + vertex 12.2572 26.3514 0 + endloop + endfacet + facet normal -0.813765 -0.581194 0 + outer loop + vertex 12.3979 26.1543 -0.1 + vertex 12.2572 26.3514 0 + vertex 12.2572 26.3514 -0.1 + endloop + endfacet + facet normal -0.813765 -0.581194 0 + outer loop + vertex 12.2572 26.3514 0 + vertex 12.3979 26.1543 -0.1 + vertex 12.3979 26.1543 0 + endloop + endfacet + facet normal -0.758497 -0.651676 0 + outer loop + vertex 12.5603 25.9653 -0.1 + vertex 12.3979 26.1543 0 + vertex 12.3979 26.1543 -0.1 + endloop + endfacet + facet normal -0.758497 -0.651676 0 + outer loop + vertex 12.3979 26.1543 0 + vertex 12.5603 25.9653 -0.1 + vertex 12.5603 25.9653 0 + endloop + endfacet + facet normal -0.697934 -0.716162 0 + outer loop + vertex 12.5603 25.9653 -0.1 + vertex 12.7484 25.782 0 + vertex 12.5603 25.9653 0 + endloop + endfacet + facet normal -0.697934 -0.716162 -0 + outer loop + vertex 12.7484 25.782 0 + vertex 12.5603 25.9653 -0.1 + vertex 12.7484 25.782 -0.1 + endloop + endfacet + facet normal -0.636928 -0.770923 0 + outer loop + vertex 12.7484 25.782 -0.1 + vertex 12.9664 25.6018 0 + vertex 12.7484 25.782 0 + endloop + endfacet + facet normal -0.636928 -0.770923 -0 + outer loop + vertex 12.9664 25.6018 0 + vertex 12.7484 25.782 -0.1 + vertex 12.9664 25.6018 -0.1 + endloop + endfacet + facet normal -0.579754 -0.814791 0 + outer loop + vertex 12.9664 25.6018 -0.1 + vertex 13.2184 25.4225 0 + vertex 12.9664 25.6018 0 + endloop + endfacet + facet normal -0.579754 -0.814791 -0 + outer loop + vertex 13.2184 25.4225 0 + vertex 12.9664 25.6018 -0.1 + vertex 13.2184 25.4225 -0.1 + endloop + endfacet + facet normal -0.529164 -0.84852 0 + outer loop + vertex 13.2184 25.4225 -0.1 + vertex 13.5086 25.2416 0 + vertex 13.2184 25.4225 0 + endloop + endfacet + facet normal -0.529164 -0.84852 -0 + outer loop + vertex 13.5086 25.2416 0 + vertex 13.2184 25.4225 -0.1 + vertex 13.5086 25.2416 -0.1 + endloop + endfacet + facet normal -0.467835 -0.883816 0 + outer loop + vertex 13.5086 25.2416 -0.1 + vertex 14.2197 24.8651 0 + vertex 13.5086 25.2416 0 + endloop + endfacet + facet normal -0.467835 -0.883816 -0 + outer loop + vertex 14.2197 24.8651 0 + vertex 13.5086 25.2416 -0.1 + vertex 14.2197 24.8651 -0.1 + endloop + endfacet + facet normal -0.411276 -0.911511 0 + outer loop + vertex 14.2197 24.8651 -0.1 + vertex 15.1328 24.4531 0 + vertex 14.2197 24.8651 0 + endloop + endfacet + facet normal -0.411276 -0.911511 -0 + outer loop + vertex 15.1328 24.4531 0 + vertex 14.2197 24.8651 -0.1 + vertex 15.1328 24.4531 -0.1 + endloop + endfacet + facet normal -0.376758 -0.926312 0 + outer loop + vertex 15.1328 24.4531 -0.1 + vertex 16.2809 23.9862 0 + vertex 15.1328 24.4531 0 + endloop + endfacet + facet normal -0.376758 -0.926312 -0 + outer loop + vertex 16.2809 23.9862 0 + vertex 15.1328 24.4531 -0.1 + vertex 16.2809 23.9862 -0.1 + endloop + endfacet + facet normal -0.357069 -0.934078 0 + outer loop + vertex 16.2809 23.9862 -0.1 + vertex 17.6969 23.4449 0 + vertex 16.2809 23.9862 0 + endloop + endfacet + facet normal -0.357069 -0.934078 -0 + outer loop + vertex 17.6969 23.4449 0 + vertex 16.2809 23.9862 -0.1 + vertex 17.6969 23.4449 -0.1 + endloop + endfacet + facet normal -0.423576 -0.90586 0 + outer loop + vertex 17.6969 23.4449 -0.1 + vertex 17.9883 23.3086 0 + vertex 17.6969 23.4449 0 + endloop + endfacet + facet normal -0.423576 -0.90586 -0 + outer loop + vertex 17.9883 23.3086 0 + vertex 17.6969 23.4449 -0.1 + vertex 17.9883 23.3086 -0.1 + endloop + endfacet + facet normal -0.513377 -0.858163 0 + outer loop + vertex 17.9883 23.3086 -0.1 + vertex 18.318 23.1114 0 + vertex 17.9883 23.3086 0 + endloop + endfacet + facet normal -0.513377 -0.858163 -0 + outer loop + vertex 18.318 23.1114 0 + vertex 17.9883 23.3086 -0.1 + vertex 18.318 23.1114 -0.1 + endloop + endfacet + facet normal -0.57768 -0.816263 0 + outer loop + vertex 18.318 23.1114 -0.1 + vertex 18.6454 22.8797 0 + vertex 18.318 23.1114 0 + endloop + endfacet + facet normal -0.57768 -0.816263 -0 + outer loop + vertex 18.6454 22.8797 0 + vertex 18.318 23.1114 -0.1 + vertex 18.6454 22.8797 -0.1 + endloop + endfacet + facet normal -0.644197 -0.76486 0 + outer loop + vertex 18.6454 22.8797 -0.1 + vertex 18.9302 22.6398 0 + vertex 18.6454 22.8797 0 + endloop + endfacet + facet normal -0.644197 -0.76486 -0 + outer loop + vertex 18.9302 22.6398 0 + vertex 18.6454 22.8797 -0.1 + vertex 18.9302 22.6398 -0.1 + endloop + endfacet + facet normal -0.705164 -0.709044 0 + outer loop + vertex 18.9302 22.6398 -0.1 + vertex 19.108 22.463 0 + vertex 18.9302 22.6398 0 + endloop + endfacet + facet normal -0.705164 -0.709044 -0 + outer loop + vertex 19.108 22.463 0 + vertex 18.9302 22.6398 -0.1 + vertex 19.108 22.463 -0.1 + endloop + endfacet + facet normal -0.763943 -0.645283 0 + outer loop + vertex 19.2511 22.2936 -0.1 + vertex 19.108 22.463 0 + vertex 19.108 22.463 -0.1 + endloop + endfacet + facet normal -0.763943 -0.645283 0 + outer loop + vertex 19.108 22.463 0 + vertex 19.2511 22.2936 -0.1 + vertex 19.2511 22.2936 0 + endloop + endfacet + facet normal -0.840155 -0.542346 0 + outer loop + vertex 19.3646 22.1178 -0.1 + vertex 19.2511 22.2936 0 + vertex 19.2511 22.2936 -0.1 + endloop + endfacet + facet normal -0.840155 -0.542346 0 + outer loop + vertex 19.2511 22.2936 0 + vertex 19.3646 22.1178 -0.1 + vertex 19.3646 22.1178 0 + endloop + endfacet + facet normal -0.910423 -0.413678 0 + outer loop + vertex 19.4538 21.9215 -0.1 + vertex 19.3646 22.1178 0 + vertex 19.3646 22.1178 -0.1 + endloop + endfacet + facet normal -0.910423 -0.413678 0 + outer loop + vertex 19.3646 22.1178 0 + vertex 19.4538 21.9215 -0.1 + vertex 19.4538 21.9215 0 + endloop + endfacet + facet normal -0.956843 -0.290607 0 + outer loop + vertex 19.5238 21.6908 -0.1 + vertex 19.4538 21.9215 0 + vertex 19.4538 21.9215 -0.1 + endloop + endfacet + facet normal -0.956843 -0.290607 0 + outer loop + vertex 19.4538 21.9215 0 + vertex 19.5238 21.6908 -0.1 + vertex 19.5238 21.6908 0 + endloop + endfacet + facet normal -0.980355 -0.19724 0 + outer loop + vertex 19.58 21.4118 -0.1 + vertex 19.5238 21.6908 0 + vertex 19.5238 21.6908 -0.1 + endloop + endfacet + facet normal -0.980355 -0.19724 0 + outer loop + vertex 19.5238 21.6908 0 + vertex 19.58 21.4118 -0.1 + vertex 19.58 21.4118 0 + endloop + endfacet + facet normal -0.992839 -0.119457 0 + outer loop + vertex 19.6713 20.6529 -0.1 + vertex 19.58 21.4118 0 + vertex 19.58 21.4118 -0.1 + endloop + endfacet + facet normal -0.992839 -0.119457 0 + outer loop + vertex 19.58 21.4118 0 + vertex 19.6713 20.6529 -0.1 + vertex 19.6713 20.6529 0 + endloop + endfacet + facet normal -0.994314 -0.106485 0 + outer loop + vertex 19.753 19.8896 -0.1 + vertex 19.6713 20.6529 0 + vertex 19.6713 20.6529 -0.1 + endloop + endfacet + facet normal -0.994314 -0.106485 0 + outer loop + vertex 19.6713 20.6529 0 + vertex 19.753 19.8896 -0.1 + vertex 19.753 19.8896 0 + endloop + endfacet + facet normal -0.985782 -0.168027 0 + outer loop + vertex 19.8522 19.3078 -0.1 + vertex 19.753 19.8896 0 + vertex 19.753 19.8896 -0.1 + endloop + endfacet + facet normal -0.985782 -0.168027 0 + outer loop + vertex 19.753 19.8896 0 + vertex 19.8522 19.3078 -0.1 + vertex 19.8522 19.3078 0 + endloop + endfacet + facet normal -0.962825 -0.270127 0 + outer loop + vertex 19.9169 19.0772 -0.1 + vertex 19.8522 19.3078 0 + vertex 19.8522 19.3078 -0.1 + endloop + endfacet + facet normal -0.962825 -0.270127 0 + outer loop + vertex 19.8522 19.3078 0 + vertex 19.9169 19.0772 -0.1 + vertex 19.9169 19.0772 0 + endloop + endfacet + facet normal -0.925898 -0.377775 0 + outer loop + vertex 19.9962 18.8829 -0.1 + vertex 19.9169 19.0772 0 + vertex 19.9169 19.0772 -0.1 + endloop + endfacet + facet normal -0.925898 -0.377775 0 + outer loop + vertex 19.9169 19.0772 0 + vertex 19.9962 18.8829 -0.1 + vertex 19.9962 18.8829 0 + endloop + endfacet + facet normal -0.85612 -0.516776 0 + outer loop + vertex 20.0935 18.7216 -0.1 + vertex 19.9962 18.8829 0 + vertex 19.9962 18.8829 -0.1 + endloop + endfacet + facet normal -0.85612 -0.516776 0 + outer loop + vertex 19.9962 18.8829 0 + vertex 20.0935 18.7216 -0.1 + vertex 20.0935 18.7216 0 + endloop + endfacet + facet normal -0.741357 -0.67111 0 + outer loop + vertex 20.2124 18.5903 -0.1 + vertex 20.0935 18.7216 0 + vertex 20.0935 18.7216 -0.1 + endloop + endfacet + facet normal -0.741357 -0.67111 0 + outer loop + vertex 20.0935 18.7216 0 + vertex 20.2124 18.5903 -0.1 + vertex 20.2124 18.5903 0 + endloop + endfacet + facet normal -0.587422 -0.809281 0 + outer loop + vertex 20.2124 18.5903 -0.1 + vertex 20.3561 18.486 0 + vertex 20.2124 18.5903 0 + endloop + endfacet + facet normal -0.587422 -0.809281 -0 + outer loop + vertex 20.3561 18.486 0 + vertex 20.2124 18.5903 -0.1 + vertex 20.3561 18.486 -0.1 + endloop + endfacet + facet normal -0.423563 -0.905867 0 + outer loop + vertex 20.3561 18.486 -0.1 + vertex 20.5281 18.4055 0 + vertex 20.3561 18.486 0 + endloop + endfacet + facet normal -0.423563 -0.905867 -0 + outer loop + vertex 20.5281 18.4055 0 + vertex 20.3561 18.486 -0.1 + vertex 20.5281 18.4055 -0.1 + endloop + endfacet + facet normal -0.280888 -0.95974 0 + outer loop + vertex 20.5281 18.4055 -0.1 + vertex 20.7319 18.3459 0 + vertex 20.5281 18.4055 0 + endloop + endfacet + facet normal -0.280888 -0.95974 -0 + outer loop + vertex 20.7319 18.3459 0 + vertex 20.5281 18.4055 -0.1 + vertex 20.7319 18.3459 -0.1 + endloop + endfacet + facet normal -0.172751 -0.984966 0 + outer loop + vertex 20.7319 18.3459 -0.1 + vertex 20.9709 18.304 0 + vertex 20.7319 18.3459 0 + endloop + endfacet + facet normal -0.172751 -0.984966 -0 + outer loop + vertex 20.9709 18.304 0 + vertex 20.7319 18.3459 -0.1 + vertex 20.9709 18.304 -0.1 + endloop + endfacet + facet normal -0.0716809 -0.997428 0 + outer loop + vertex 20.9709 18.304 -0.1 + vertex 21.5679 18.2611 0 + vertex 20.9709 18.304 0 + endloop + endfacet + facet normal -0.0716809 -0.997428 -0 + outer loop + vertex 21.5679 18.2611 0 + vertex 20.9709 18.304 -0.1 + vertex 21.5679 18.2611 -0.1 + endloop + endfacet + facet normal -0.0113554 -0.999936 0 + outer loop + vertex 21.5679 18.2611 -0.1 + vertex 22.3468 18.2522 0 + vertex 21.5679 18.2611 0 + endloop + endfacet + facet normal -0.0113554 -0.999936 -0 + outer loop + vertex 22.3468 18.2522 0 + vertex 21.5679 18.2611 -0.1 + vertex 22.3468 18.2522 -0.1 + endloop + endfacet + facet normal -0.0142554 -0.999898 0 + outer loop + vertex 22.3468 18.2522 -0.1 + vertex 23.0891 18.2417 0 + vertex 22.3468 18.2522 0 + endloop + endfacet + facet normal -0.0142554 -0.999898 -0 + outer loop + vertex 23.0891 18.2417 0 + vertex 22.3468 18.2522 -0.1 + vertex 23.0891 18.2417 -0.1 + endloop + endfacet + facet normal -0.0563557 -0.998411 0 + outer loop + vertex 23.0891 18.2417 -0.1 + vertex 23.7039 18.207 0 + vertex 23.0891 18.2417 0 + endloop + endfacet + facet normal -0.0563557 -0.998411 -0 + outer loop + vertex 23.7039 18.207 0 + vertex 23.0891 18.2417 -0.1 + vertex 23.7039 18.207 -0.1 + endloop + endfacet + facet normal -0.125256 -0.992124 0 + outer loop + vertex 23.7039 18.207 -0.1 + vertex 24.2049 18.1437 0 + vertex 23.7039 18.207 0 + endloop + endfacet + facet normal -0.125256 -0.992124 -0 + outer loop + vertex 24.2049 18.1437 0 + vertex 23.7039 18.207 -0.1 + vertex 24.2049 18.1437 -0.1 + endloop + endfacet + facet normal -0.233347 -0.972393 0 + outer loop + vertex 24.2049 18.1437 -0.1 + vertex 24.6059 18.0475 0 + vertex 24.2049 18.1437 0 + endloop + endfacet + facet normal -0.233347 -0.972393 -0 + outer loop + vertex 24.6059 18.0475 0 + vertex 24.2049 18.1437 -0.1 + vertex 24.6059 18.0475 -0.1 + endloop + endfacet + facet normal -0.390765 -0.920491 0 + outer loop + vertex 24.6059 18.0475 -0.1 + vertex 24.9207 17.9138 0 + vertex 24.6059 18.0475 0 + endloop + endfacet + facet normal -0.390765 -0.920491 -0 + outer loop + vertex 24.9207 17.9138 0 + vertex 24.6059 18.0475 -0.1 + vertex 24.9207 17.9138 -0.1 + endloop + endfacet + facet normal -0.536417 -0.843953 0 + outer loop + vertex 24.9207 17.9138 -0.1 + vertex 25.0501 17.8316 0 + vertex 24.9207 17.9138 0 + endloop + endfacet + facet normal -0.536417 -0.843953 -0 + outer loop + vertex 25.0501 17.8316 0 + vertex 24.9207 17.9138 -0.1 + vertex 25.0501 17.8316 -0.1 + endloop + endfacet + facet normal -0.636483 -0.77129 0 + outer loop + vertex 25.0501 17.8316 -0.1 + vertex 25.163 17.7384 0 + vertex 25.0501 17.8316 0 + endloop + endfacet + facet normal -0.636483 -0.77129 -0 + outer loop + vertex 25.163 17.7384 0 + vertex 25.0501 17.8316 -0.1 + vertex 25.163 17.7384 -0.1 + endloop + endfacet + facet normal -0.729305 -0.684189 0 + outer loop + vertex 25.2614 17.6336 -0.1 + vertex 25.163 17.7384 0 + vertex 25.163 17.7384 -0.1 + endloop + endfacet + facet normal -0.729305 -0.684189 0 + outer loop + vertex 25.163 17.7384 0 + vertex 25.2614 17.6336 -0.1 + vertex 25.2614 17.6336 0 + endloop + endfacet + facet normal -0.807579 -0.589759 0 + outer loop + vertex 25.3467 17.5167 -0.1 + vertex 25.2614 17.6336 0 + vertex 25.2614 17.6336 -0.1 + endloop + endfacet + facet normal -0.807579 -0.589759 0 + outer loop + vertex 25.2614 17.6336 0 + vertex 25.3467 17.5167 -0.1 + vertex 25.3467 17.5167 0 + endloop + endfacet + facet normal -0.890947 -0.454107 0 + outer loop + vertex 25.4856 17.2443 -0.1 + vertex 25.3467 17.5167 0 + vertex 25.3467 17.5167 -0.1 + endloop + endfacet + facet normal -0.890947 -0.454107 0 + outer loop + vertex 25.3467 17.5167 0 + vertex 25.4856 17.2443 -0.1 + vertex 25.4856 17.2443 0 + endloop + endfacet + facet normal -0.905796 -0.423714 0 + outer loop + vertex 25.6037 16.9917 -0.1 + vertex 25.4856 17.2443 0 + vertex 25.4856 17.2443 -0.1 + endloop + endfacet + facet normal -0.905796 -0.423714 0 + outer loop + vertex 25.4856 17.2443 0 + vertex 25.6037 16.9917 -0.1 + vertex 25.6037 16.9917 0 + endloop + endfacet + facet normal -0.826293 -0.563241 0 + outer loop + vertex 25.7157 16.8274 -0.1 + vertex 25.6037 16.9917 0 + vertex 25.6037 16.9917 -0.1 + endloop + endfacet + facet normal -0.826293 -0.563241 0 + outer loop + vertex 25.6037 16.9917 0 + vertex 25.7157 16.8274 -0.1 + vertex 25.7157 16.8274 0 + endloop + endfacet + facet normal -0.603414 -0.797428 0 + outer loop + vertex 25.7157 16.8274 -0.1 + vertex 25.8187 16.7495 0 + vertex 25.7157 16.8274 0 + endloop + endfacet + facet normal -0.603414 -0.797428 -0 + outer loop + vertex 25.8187 16.7495 0 + vertex 25.7157 16.8274 -0.1 + vertex 25.8187 16.7495 -0.1 + endloop + endfacet + facet normal -0.148413 -0.988925 0 + outer loop + vertex 25.8187 16.7495 -0.1 + vertex 25.8659 16.7424 0 + vertex 25.8187 16.7495 0 + endloop + endfacet + facet normal -0.148413 -0.988925 -0 + outer loop + vertex 25.8659 16.7424 0 + vertex 25.8187 16.7495 -0.1 + vertex 25.8659 16.7424 -0.1 + endloop + endfacet + facet normal 0.302537 -0.953138 0 + outer loop + vertex 25.8659 16.7424 -0.1 + vertex 25.9096 16.7563 0 + vertex 25.8659 16.7424 0 + endloop + endfacet + facet normal 0.302537 -0.953138 0 + outer loop + vertex 25.9096 16.7563 0 + vertex 25.8659 16.7424 -0.1 + vertex 25.9096 16.7563 -0.1 + endloop + endfacet + facet normal 0.763836 -0.645411 0 + outer loop + vertex 25.9096 16.7563 0 + vertex 25.9855 16.8461 -0.1 + vertex 25.9855 16.8461 0 + endloop + endfacet + facet normal 0.763836 -0.645411 0 + outer loop + vertex 25.9855 16.8461 -0.1 + vertex 25.9096 16.7563 0 + vertex 25.9096 16.7563 -0.1 + endloop + endfacet + facet normal 0.947245 -0.320511 0 + outer loop + vertex 25.9855 16.8461 0 + vertex 26.0434 17.0172 -0.1 + vertex 26.0434 17.0172 0 + endloop + endfacet + facet normal 0.947245 -0.320511 0 + outer loop + vertex 26.0434 17.0172 -0.1 + vertex 25.9855 16.8461 0 + vertex 25.9855 16.8461 -0.1 + endloop + endfacet + facet normal 0.989326 -0.145716 0 + outer loop + vertex 26.0434 17.0172 0 + vertex 26.0803 17.2678 -0.1 + vertex 26.0803 17.2678 0 + endloop + endfacet + facet normal 0.989326 -0.145716 0 + outer loop + vertex 26.0803 17.2678 -0.1 + vertex 26.0434 17.0172 0 + vertex 26.0434 17.0172 -0.1 + endloop + endfacet + facet normal 0.999222 -0.0394472 0 + outer loop + vertex 26.0803 17.2678 0 + vertex 26.0933 17.5963 -0.1 + vertex 26.0933 17.5963 0 + endloop + endfacet + facet normal 0.999222 -0.0394472 0 + outer loop + vertex 26.0933 17.5963 -0.1 + vertex 26.0803 17.2678 0 + vertex 26.0803 17.2678 -0.1 + endloop + endfacet + facet normal 0.99788 0.0650754 0 + outer loop + vertex 26.0933 17.5963 0 + vertex 26.0696 17.9605 -0.1 + vertex 26.0696 17.9605 0 + endloop + endfacet + facet normal 0.99788 0.0650754 0 + outer loop + vertex 26.0696 17.9605 -0.1 + vertex 26.0933 17.5963 0 + vertex 26.0933 17.5963 -0.1 + endloop + endfacet + facet normal 0.979516 0.201364 0 + outer loop + vertex 26.0696 17.9605 0 + vertex 26.0009 18.2942 -0.1 + vertex 26.0009 18.2942 0 + endloop + endfacet + facet normal 0.979516 0.201364 0 + outer loop + vertex 26.0009 18.2942 -0.1 + vertex 26.0696 17.9605 0 + vertex 26.0696 17.9605 -0.1 + endloop + endfacet + facet normal 0.938515 0.345238 0 + outer loop + vertex 26.0009 18.2942 0 + vertex 25.8914 18.5921 -0.1 + vertex 25.8914 18.5921 0 + endloop + endfacet + facet normal 0.938515 0.345238 0 + outer loop + vertex 25.8914 18.5921 -0.1 + vertex 26.0009 18.2942 0 + vertex 26.0009 18.2942 -0.1 + endloop + endfacet + facet normal 0.86805 0.496476 0 + outer loop + vertex 25.8914 18.5921 0 + vertex 25.7448 18.8483 -0.1 + vertex 25.7448 18.8483 0 + endloop + endfacet + facet normal 0.86805 0.496476 0 + outer loop + vertex 25.7448 18.8483 -0.1 + vertex 25.8914 18.5921 0 + vertex 25.8914 18.5921 -0.1 + endloop + endfacet + facet normal 0.758477 0.651699 0 + outer loop + vertex 25.7448 18.8483 0 + vertex 25.5652 19.0574 -0.1 + vertex 25.5652 19.0574 0 + endloop + endfacet + facet normal 0.758477 0.651699 0 + outer loop + vertex 25.5652 19.0574 -0.1 + vertex 25.7448 18.8483 0 + vertex 25.7448 18.8483 -0.1 + endloop + endfacet + facet normal 0.599251 0.800561 -0 + outer loop + vertex 25.5652 19.0574 -0.1 + vertex 25.3564 19.2137 0 + vertex 25.5652 19.0574 0 + endloop + endfacet + facet normal 0.599251 0.800561 0 + outer loop + vertex 25.3564 19.2137 0 + vertex 25.5652 19.0574 -0.1 + vertex 25.3564 19.2137 -0.1 + endloop + endfacet + facet normal 0.385907 0.922538 -0 + outer loop + vertex 25.3564 19.2137 -0.1 + vertex 25.1224 19.3115 0 + vertex 25.3564 19.2137 0 + endloop + endfacet + facet normal 0.385907 0.922538 0 + outer loop + vertex 25.1224 19.3115 0 + vertex 25.3564 19.2137 -0.1 + vertex 25.1224 19.3115 -0.1 + endloop + endfacet + facet normal 0.197951 0.980212 -0 + outer loop + vertex 25.1224 19.3115 -0.1 + vertex 24.9972 19.3368 0 + vertex 25.1224 19.3115 0 + endloop + endfacet + facet normal 0.197951 0.980212 0 + outer loop + vertex 24.9972 19.3368 0 + vertex 25.1224 19.3115 -0.1 + vertex 24.9972 19.3368 -0.1 + endloop + endfacet + facet normal 0.0658711 0.997828 -0 + outer loop + vertex 24.9972 19.3368 -0.1 + vertex 24.8672 19.3454 0 + vertex 24.9972 19.3368 0 + endloop + endfacet + facet normal 0.0658711 0.997828 0 + outer loop + vertex 24.8672 19.3454 0 + vertex 24.9972 19.3368 -0.1 + vertex 24.8672 19.3454 -0.1 + endloop + endfacet + facet normal 0.104566 0.994518 -0 + outer loop + vertex 24.8672 19.3454 -0.1 + vertex 24.6124 19.3722 0 + vertex 24.8672 19.3454 0 + endloop + endfacet + facet normal 0.104566 0.994518 0 + outer loop + vertex 24.6124 19.3722 0 + vertex 24.8672 19.3454 -0.1 + vertex 24.6124 19.3722 -0.1 + endloop + endfacet + facet normal 0.198003 0.980201 -0 + outer loop + vertex 24.6124 19.3722 -0.1 + vertex 24.2514 19.4451 0 + vertex 24.6124 19.3722 0 + endloop + endfacet + facet normal 0.198003 0.980201 0 + outer loop + vertex 24.2514 19.4451 0 + vertex 24.6124 19.3722 -0.1 + vertex 24.2514 19.4451 -0.1 + endloop + endfacet + facet normal 0.249312 0.968423 -0 + outer loop + vertex 24.2514 19.4451 -0.1 + vertex 23.8321 19.5531 0 + vertex 24.2514 19.4451 0 + endloop + endfacet + facet normal 0.249312 0.968423 0 + outer loop + vertex 23.8321 19.5531 0 + vertex 24.2514 19.4451 -0.1 + vertex 23.8321 19.5531 -0.1 + endloop + endfacet + facet normal 0.293412 0.955986 -0 + outer loop + vertex 23.8321 19.5531 -0.1 + vertex 23.4027 19.6849 0 + vertex 23.8321 19.5531 0 + endloop + endfacet + facet normal 0.293412 0.955986 0 + outer loop + vertex 23.4027 19.6849 0 + vertex 23.8321 19.5531 -0.1 + vertex 23.4027 19.6849 -0.1 + endloop + endfacet + facet normal 0.372015 0.928227 -0 + outer loop + vertex 23.4027 19.6849 -0.1 + vertex 22.9977 19.8472 0 + vertex 23.4027 19.6849 0 + endloop + endfacet + facet normal 0.372015 0.928227 0 + outer loop + vertex 22.9977 19.8472 0 + vertex 23.4027 19.6849 -0.1 + vertex 22.9977 19.8472 -0.1 + endloop + endfacet + facet normal 0.496703 0.86792 -0 + outer loop + vertex 22.9977 19.8472 -0.1 + vertex 22.6486 20.047 0 + vertex 22.9977 19.8472 0 + endloop + endfacet + facet normal 0.496703 0.86792 0 + outer loop + vertex 22.6486 20.047 0 + vertex 22.9977 19.8472 -0.1 + vertex 22.6486 20.047 -0.1 + endloop + endfacet + facet normal 0.63232 0.774707 -0 + outer loop + vertex 22.6486 20.047 -0.1 + vertex 22.3515 20.2895 0 + vertex 22.6486 20.047 0 + endloop + endfacet + facet normal 0.63232 0.774707 0 + outer loop + vertex 22.3515 20.2895 0 + vertex 22.6486 20.047 -0.1 + vertex 22.3515 20.2895 -0.1 + endloop + endfacet + facet normal 0.72955 0.683927 0 + outer loop + vertex 22.3515 20.2895 0 + vertex 22.2213 20.4283 -0.1 + vertex 22.2213 20.4283 0 + endloop + endfacet + facet normal 0.72955 0.683927 0 + outer loop + vertex 22.2213 20.4283 -0.1 + vertex 22.3515 20.2895 0 + vertex 22.3515 20.2895 -0.1 + endloop + endfacet + facet normal 0.787511 0.616301 0 + outer loop + vertex 22.2213 20.4283 0 + vertex 22.1028 20.5797 -0.1 + vertex 22.1028 20.5797 0 + endloop + endfacet + facet normal 0.787511 0.616301 0 + outer loop + vertex 22.1028 20.5797 -0.1 + vertex 22.2213 20.4283 0 + vertex 22.2213 20.4283 -0.1 + endloop + endfacet + facet normal 0.859714 0.510776 0 + outer loop + vertex 22.1028 20.5797 0 + vertex 21.8989 20.9229 -0.1 + vertex 21.8989 20.9229 0 + endloop + endfacet + facet normal 0.859714 0.510776 0 + outer loop + vertex 21.8989 20.9229 -0.1 + vertex 22.1028 20.5797 0 + vertex 22.1028 20.5797 -0.1 + endloop + endfacet + facet normal 0.926661 0.375897 0 + outer loop + vertex 21.8989 20.9229 0 + vertex 21.7362 21.3239 -0.1 + vertex 21.7362 21.3239 0 + endloop + endfacet + facet normal 0.926661 0.375897 0 + outer loop + vertex 21.7362 21.3239 -0.1 + vertex 21.8989 20.9229 0 + vertex 21.8989 20.9229 -0.1 + endloop + endfacet + facet normal 0.965497 0.260414 0 + outer loop + vertex 21.7362 21.3239 0 + vertex 21.6111 21.7881 -0.1 + vertex 21.6111 21.7881 0 + endloop + endfacet + facet normal 0.965497 0.260414 0 + outer loop + vertex 21.6111 21.7881 -0.1 + vertex 21.7362 21.3239 0 + vertex 21.7362 21.3239 -0.1 + endloop + endfacet + facet normal 0.985599 0.169101 0 + outer loop + vertex 21.6111 21.7881 0 + vertex 21.5197 22.3204 -0.1 + vertex 21.5197 22.3204 0 + endloop + endfacet + facet normal 0.985599 0.169101 0 + outer loop + vertex 21.5197 22.3204 -0.1 + vertex 21.6111 21.7881 0 + vertex 21.6111 21.7881 -0.1 + endloop + endfacet + facet normal 0.981389 0.192031 0 + outer loop + vertex 21.5197 22.3204 0 + vertex 21.4205 22.8275 -0.1 + vertex 21.4205 22.8275 0 + endloop + endfacet + facet normal 0.981389 0.192031 0 + outer loop + vertex 21.4205 22.8275 -0.1 + vertex 21.5197 22.3204 0 + vertex 21.5197 22.3204 -0.1 + endloop + endfacet + facet normal 0.957484 0.288485 0 + outer loop + vertex 21.4205 22.8275 0 + vertex 21.3493 23.064 -0.1 + vertex 21.3493 23.064 0 + endloop + endfacet + facet normal 0.957484 0.288485 0 + outer loop + vertex 21.3493 23.064 -0.1 + vertex 21.4205 22.8275 0 + vertex 21.4205 22.8275 -0.1 + endloop + endfacet + facet normal 0.934507 0.355946 0 + outer loop + vertex 21.3493 23.064 0 + vertex 21.2635 23.2891 -0.1 + vertex 21.2635 23.2891 0 + endloop + endfacet + facet normal 0.934507 0.355946 0 + outer loop + vertex 21.2635 23.2891 -0.1 + vertex 21.3493 23.064 0 + vertex 21.3493 23.064 -0.1 + endloop + endfacet + facet normal 0.905346 0.424674 0 + outer loop + vertex 21.2635 23.2891 0 + vertex 21.1632 23.503 -0.1 + vertex 21.1632 23.503 0 + endloop + endfacet + facet normal 0.905346 0.424674 0 + outer loop + vertex 21.1632 23.503 -0.1 + vertex 21.2635 23.2891 0 + vertex 21.2635 23.2891 -0.1 + endloop + endfacet + facet normal 0.869841 0.493332 0 + outer loop + vertex 21.1632 23.503 0 + vertex 21.0482 23.7058 -0.1 + vertex 21.0482 23.7058 0 + endloop + endfacet + facet normal 0.869841 0.493332 0 + outer loop + vertex 21.0482 23.7058 -0.1 + vertex 21.1632 23.503 0 + vertex 21.1632 23.503 -0.1 + endloop + endfacet + facet normal 0.828197 0.560437 0 + outer loop + vertex 21.0482 23.7058 0 + vertex 20.9184 23.8976 -0.1 + vertex 20.9184 23.8976 0 + endloop + endfacet + facet normal 0.828197 0.560437 0 + outer loop + vertex 20.9184 23.8976 -0.1 + vertex 21.0482 23.7058 0 + vertex 21.0482 23.7058 -0.1 + endloop + endfacet + facet normal 0.781014 0.624513 0 + outer loop + vertex 20.9184 23.8976 0 + vertex 20.7738 24.0784 -0.1 + vertex 20.7738 24.0784 0 + endloop + endfacet + facet normal 0.781014 0.624513 0 + outer loop + vertex 20.7738 24.0784 -0.1 + vertex 20.9184 23.8976 0 + vertex 20.9184 23.8976 -0.1 + endloop + endfacet + facet normal 0.729218 0.684281 0 + outer loop + vertex 20.7738 24.0784 0 + vertex 20.6143 24.2484 -0.1 + vertex 20.6143 24.2484 0 + endloop + endfacet + facet normal 0.729218 0.684281 0 + outer loop + vertex 20.6143 24.2484 -0.1 + vertex 20.7738 24.0784 0 + vertex 20.7738 24.0784 -0.1 + endloop + endfacet + facet normal 0.674059 0.738677 -0 + outer loop + vertex 20.6143 24.2484 -0.1 + vertex 20.4398 24.4076 0 + vertex 20.6143 24.2484 0 + endloop + endfacet + facet normal 0.674059 0.738677 0 + outer loop + vertex 20.4398 24.4076 0 + vertex 20.6143 24.2484 -0.1 + vertex 20.4398 24.4076 -0.1 + endloop + endfacet + facet normal 0.616853 0.787078 -0 + outer loop + vertex 20.4398 24.4076 -0.1 + vertex 20.2502 24.5562 0 + vertex 20.4398 24.4076 0 + endloop + endfacet + facet normal 0.616853 0.787078 0 + outer loop + vertex 20.2502 24.5562 0 + vertex 20.4398 24.4076 -0.1 + vertex 20.2502 24.5562 -0.1 + endloop + endfacet + facet normal 0.558944 0.829206 -0 + outer loop + vertex 20.2502 24.5562 -0.1 + vertex 20.0455 24.6942 0 + vertex 20.2502 24.5562 0 + endloop + endfacet + facet normal 0.558944 0.829206 0 + outer loop + vertex 20.0455 24.6942 0 + vertex 20.2502 24.5562 -0.1 + vertex 20.0455 24.6942 -0.1 + endloop + endfacet + facet normal 0.473385 0.880855 -0 + outer loop + vertex 20.0455 24.6942 -0.1 + vertex 19.5904 24.9388 0 + vertex 20.0455 24.6942 0 + endloop + endfacet + facet normal 0.473385 0.880855 0 + outer loop + vertex 19.5904 24.9388 0 + vertex 20.0455 24.6942 -0.1 + vertex 19.5904 24.9388 -0.1 + endloop + endfacet + facet normal 0.366293 0.930499 -0 + outer loop + vertex 19.5904 24.9388 -0.1 + vertex 19.0737 25.1422 0 + vertex 19.5904 24.9388 0 + endloop + endfacet + facet normal 0.366293 0.930499 0 + outer loop + vertex 19.0737 25.1422 0 + vertex 19.5904 24.9388 -0.1 + vertex 19.0737 25.1422 -0.1 + endloop + endfacet + facet normal 0.339314 0.940673 -0 + outer loop + vertex 19.0737 25.1422 -0.1 + vertex 18.5685 25.3244 0 + vertex 19.0737 25.1422 0 + endloop + endfacet + facet normal 0.339314 0.940673 0 + outer loop + vertex 18.5685 25.3244 0 + vertex 19.0737 25.1422 -0.1 + vertex 18.5685 25.3244 -0.1 + endloop + endfacet + facet normal 0.390266 0.920702 -0 + outer loop + vertex 18.5685 25.3244 -0.1 + vertex 18.1033 25.5216 0 + vertex 18.5685 25.3244 0 + endloop + endfacet + facet normal 0.390266 0.920702 0 + outer loop + vertex 18.1033 25.5216 0 + vertex 18.5685 25.3244 -0.1 + vertex 18.1033 25.5216 -0.1 + endloop + endfacet + facet normal 0.448214 0.893926 -0 + outer loop + vertex 18.1033 25.5216 -0.1 + vertex 17.6707 25.7385 0 + vertex 18.1033 25.5216 0 + endloop + endfacet + facet normal 0.448214 0.893926 0 + outer loop + vertex 17.6707 25.7385 0 + vertex 18.1033 25.5216 -0.1 + vertex 17.6707 25.7385 -0.1 + endloop + endfacet + facet normal 0.509711 0.860346 -0 + outer loop + vertex 17.6707 25.7385 -0.1 + vertex 17.2631 25.98 0 + vertex 17.6707 25.7385 0 + endloop + endfacet + facet normal 0.509711 0.860346 0 + outer loop + vertex 17.2631 25.98 0 + vertex 17.6707 25.7385 -0.1 + vertex 17.2631 25.98 -0.1 + endloop + endfacet + facet normal 0.570375 0.821384 -0 + outer loop + vertex 17.2631 25.98 -0.1 + vertex 16.873 26.2508 0 + vertex 17.2631 25.98 0 + endloop + endfacet + facet normal 0.570375 0.821384 0 + outer loop + vertex 16.873 26.2508 0 + vertex 17.2631 25.98 -0.1 + vertex 16.873 26.2508 -0.1 + endloop + endfacet + facet normal 0.626027 0.779801 -0 + outer loop + vertex 16.873 26.2508 -0.1 + vertex 16.4932 26.5558 0 + vertex 16.873 26.2508 0 + endloop + endfacet + facet normal 0.626027 0.779801 0 + outer loop + vertex 16.4932 26.5558 0 + vertex 16.873 26.2508 -0.1 + vertex 16.4932 26.5558 -0.1 + endloop + endfacet + facet normal 0.673725 0.738983 -0 + outer loop + vertex 16.4932 26.5558 -0.1 + vertex 16.116 26.8997 0 + vertex 16.4932 26.5558 0 + endloop + endfacet + facet normal 0.673725 0.738983 0 + outer loop + vertex 16.116 26.8997 0 + vertex 16.4932 26.5558 -0.1 + vertex 16.116 26.8997 -0.1 + endloop + endfacet + facet normal 0.71226 0.701916 0 + outer loop + vertex 16.116 26.8997 0 + vertex 15.734 27.2872 -0.1 + vertex 15.734 27.2872 0 + endloop + endfacet + facet normal 0.71226 0.701916 0 + outer loop + vertex 15.734 27.2872 -0.1 + vertex 16.116 26.8997 0 + vertex 16.116 26.8997 -0.1 + endloop + endfacet + facet normal 0.751608 0.65961 0 + outer loop + vertex 15.734 27.2872 0 + vertex 15.344 27.7317 -0.1 + vertex 15.344 27.7317 0 + endloop + endfacet + facet normal 0.751608 0.65961 0 + outer loop + vertex 15.344 27.7317 -0.1 + vertex 15.734 27.2872 0 + vertex 15.734 27.2872 -0.1 + endloop + endfacet + facet normal 0.827441 0.561552 0 + outer loop + vertex 15.344 27.7317 0 + vertex 15.2193 27.9155 -0.1 + vertex 15.2193 27.9155 0 + endloop + endfacet + facet normal 0.827441 0.561552 0 + outer loop + vertex 15.2193 27.9155 -0.1 + vertex 15.344 27.7317 0 + vertex 15.344 27.7317 -0.1 + endloop + endfacet + facet normal 0.901872 0.432003 0 + outer loop + vertex 15.2193 27.9155 0 + vertex 15.1337 28.0941 -0.1 + vertex 15.1337 28.0941 0 + endloop + endfacet + facet normal 0.901872 0.432003 0 + outer loop + vertex 15.1337 28.0941 -0.1 + vertex 15.2193 27.9155 0 + vertex 15.2193 27.9155 -0.1 + endloop + endfacet + facet normal 0.963972 0.266005 0 + outer loop + vertex 15.1337 28.0941 0 + vertex 15.0817 28.2827 -0.1 + vertex 15.0817 28.2827 0 + endloop + endfacet + facet normal 0.963972 0.266005 0 + outer loop + vertex 15.0817 28.2827 -0.1 + vertex 15.1337 28.0941 0 + vertex 15.1337 28.0941 -0.1 + endloop + endfacet + facet normal 0.993628 0.112714 0 + outer loop + vertex 15.0817 28.2827 0 + vertex 15.0574 28.4965 -0.1 + vertex 15.0574 28.4965 0 + endloop + endfacet + facet normal 0.993628 0.112714 0 + outer loop + vertex 15.0574 28.4965 -0.1 + vertex 15.0817 28.2827 0 + vertex 15.0817 28.2827 -0.1 + endloop + endfacet + facet normal 0.999963 0.00862244 0 + outer loop + vertex 15.0574 28.4965 0 + vertex 15.0552 28.7509 -0.1 + vertex 15.0552 28.7509 0 + endloop + endfacet + facet normal 0.999963 0.00862244 0 + outer loop + vertex 15.0552 28.7509 -0.1 + vertex 15.0574 28.4965 0 + vertex 15.0574 28.4965 -0.1 + endloop + endfacet + facet normal 0.99896 -0.0455854 0 + outer loop + vertex 15.0552 28.7509 0 + vertex 15.0694 29.0611 -0.1 + vertex 15.0694 29.0611 0 + endloop + endfacet + facet normal 0.99896 -0.0455854 0 + outer loop + vertex 15.0694 29.0611 -0.1 + vertex 15.0552 28.7509 0 + vertex 15.0552 28.7509 -0.1 + endloop + endfacet + facet normal 0.995626 -0.0934289 0 + outer loop + vertex 15.0694 29.0611 0 + vertex 15.1102 29.496 -0.1 + vertex 15.1102 29.496 0 + endloop + endfacet + facet normal 0.995626 -0.0934289 0 + outer loop + vertex 15.1102 29.496 -0.1 + vertex 15.0694 29.0611 0 + vertex 15.0694 29.0611 -0.1 + endloop + endfacet + facet normal 0.982507 -0.186226 0 + outer loop + vertex 15.1102 29.496 0 + vertex 15.1701 29.8123 -0.1 + vertex 15.1701 29.8123 0 + endloop + endfacet + facet normal 0.982507 -0.186226 0 + outer loop + vertex 15.1701 29.8123 -0.1 + vertex 15.1102 29.496 0 + vertex 15.1102 29.496 -0.1 + endloop + endfacet + facet normal 0.936612 -0.350368 0 + outer loop + vertex 15.1701 29.8123 0 + vertex 15.2437 30.0088 -0.1 + vertex 15.2437 30.0088 0 + endloop + endfacet + facet normal 0.936612 -0.350368 0 + outer loop + vertex 15.2437 30.0088 -0.1 + vertex 15.1701 29.8123 0 + vertex 15.1701 29.8123 -0.1 + endloop + endfacet + facet normal 0.797615 -0.603167 0 + outer loop + vertex 15.2437 30.0088 0 + vertex 15.2838 30.0618 -0.1 + vertex 15.2838 30.0618 0 + endloop + endfacet + facet normal 0.797615 -0.603167 0 + outer loop + vertex 15.2838 30.0618 -0.1 + vertex 15.2437 30.0088 0 + vertex 15.2437 30.0088 -0.1 + endloop + endfacet + facet normal 0.48104 -0.876698 0 + outer loop + vertex 15.2838 30.0618 -0.1 + vertex 15.3252 30.0845 0 + vertex 15.2838 30.0618 0 + endloop + endfacet + facet normal 0.48104 -0.876698 0 + outer loop + vertex 15.3252 30.0845 0 + vertex 15.2838 30.0618 -0.1 + vertex 15.3252 30.0845 -0.1 + endloop + endfacet + facet normal -0.180566 -0.983563 0 + outer loop + vertex 15.3252 30.0845 -0.1 + vertex 15.3672 30.0768 0 + vertex 15.3252 30.0845 0 + endloop + endfacet + facet normal -0.180566 -0.983563 -0 + outer loop + vertex 15.3672 30.0768 0 + vertex 15.3252 30.0845 -0.1 + vertex 15.3672 30.0768 -0.1 + endloop + endfacet + facet normal -0.674079 -0.738659 0 + outer loop + vertex 15.3672 30.0768 -0.1 + vertex 15.4091 30.0386 0 + vertex 15.3672 30.0768 0 + endloop + endfacet + facet normal -0.674079 -0.738659 -0 + outer loop + vertex 15.4091 30.0386 0 + vertex 15.3672 30.0768 -0.1 + vertex 15.4091 30.0386 -0.1 + endloop + endfacet + facet normal -0.901794 -0.432166 0 + outer loop + vertex 15.49 29.8698 -0.1 + vertex 15.4091 30.0386 0 + vertex 15.4091 30.0386 -0.1 + endloop + endfacet + facet normal -0.901794 -0.432166 0 + outer loop + vertex 15.4091 30.0386 0 + vertex 15.49 29.8698 -0.1 + vertex 15.49 29.8698 0 + endloop + endfacet + facet normal -0.970859 -0.239653 0 + outer loop + vertex 15.5622 29.5773 -0.1 + vertex 15.49 29.8698 0 + vertex 15.49 29.8698 -0.1 + endloop + endfacet + facet normal -0.970859 -0.239653 0 + outer loop + vertex 15.49 29.8698 0 + vertex 15.5622 29.5773 -0.1 + vertex 15.5622 29.5773 0 + endloop + endfacet + facet normal -0.990483 -0.137635 0 + outer loop + vertex 15.6202 29.1601 -0.1 + vertex 15.5622 29.5773 0 + vertex 15.5622 29.5773 -0.1 + endloop + endfacet + facet normal -0.990483 -0.137635 0 + outer loop + vertex 15.5622 29.5773 0 + vertex 15.6202 29.1601 -0.1 + vertex 15.6202 29.1601 0 + endloop + endfacet + facet normal -0.987242 -0.159229 0 + outer loop + vertex 15.6927 28.7106 -0.1 + vertex 15.6202 29.1601 0 + vertex 15.6202 29.1601 -0.1 + endloop + endfacet + facet normal -0.987242 -0.159229 0 + outer loop + vertex 15.6202 29.1601 0 + vertex 15.6927 28.7106 -0.1 + vertex 15.6927 28.7106 0 + endloop + endfacet + facet normal -0.964764 -0.263116 0 + outer loop + vertex 15.7487 28.5051 -0.1 + vertex 15.6927 28.7106 0 + vertex 15.6927 28.7106 -0.1 + endloop + endfacet + facet normal -0.964764 -0.263116 0 + outer loop + vertex 15.6927 28.7106 0 + vertex 15.7487 28.5051 -0.1 + vertex 15.7487 28.5051 0 + endloop + endfacet + facet normal -0.93932 -0.343042 0 + outer loop + vertex 15.8197 28.3106 -0.1 + vertex 15.7487 28.5051 0 + vertex 15.7487 28.5051 -0.1 + endloop + endfacet + facet normal -0.93932 -0.343042 0 + outer loop + vertex 15.7487 28.5051 0 + vertex 15.8197 28.3106 -0.1 + vertex 15.8197 28.3106 0 + endloop + endfacet + facet normal -0.904159 -0.427196 0 + outer loop + vertex 15.9071 28.1258 -0.1 + vertex 15.8197 28.3106 0 + vertex 15.8197 28.3106 -0.1 + endloop + endfacet + facet normal -0.904159 -0.427196 0 + outer loop + vertex 15.8197 28.3106 0 + vertex 15.9071 28.1258 -0.1 + vertex 15.9071 28.1258 0 + endloop + endfacet + facet normal -0.859613 -0.510945 0 + outer loop + vertex 16.0121 27.9491 -0.1 + vertex 15.9071 28.1258 0 + vertex 15.9071 28.1258 -0.1 + endloop + endfacet + facet normal -0.859613 -0.510945 0 + outer loop + vertex 15.9071 28.1258 0 + vertex 16.0121 27.9491 -0.1 + vertex 16.0121 27.9491 0 + endloop + endfacet + facet normal -0.807674 -0.589629 0 + outer loop + vertex 16.1362 27.7792 -0.1 + vertex 16.0121 27.9491 0 + vertex 16.0121 27.9491 -0.1 + endloop + endfacet + facet normal -0.807674 -0.589629 0 + outer loop + vertex 16.0121 27.9491 0 + vertex 16.1362 27.7792 -0.1 + vertex 16.1362 27.7792 0 + endloop + endfacet + facet normal -0.751613 -0.659605 0 + outer loop + vertex 16.2806 27.6146 -0.1 + vertex 16.1362 27.7792 0 + vertex 16.1362 27.7792 -0.1 + endloop + endfacet + facet normal -0.751613 -0.659605 0 + outer loop + vertex 16.1362 27.7792 0 + vertex 16.2806 27.6146 -0.1 + vertex 16.2806 27.6146 0 + endloop + endfacet + facet normal -0.695067 -0.718945 0 + outer loop + vertex 16.2806 27.6146 -0.1 + vertex 16.4467 27.454 0 + vertex 16.2806 27.6146 0 + endloop + endfacet + facet normal -0.695067 -0.718945 -0 + outer loop + vertex 16.4467 27.454 0 + vertex 16.2806 27.6146 -0.1 + vertex 16.4467 27.454 -0.1 + endloop + endfacet + facet normal -0.641168 -0.767401 0 + outer loop + vertex 16.4467 27.454 -0.1 + vertex 16.6359 27.2959 0 + vertex 16.4467 27.454 0 + endloop + endfacet + facet normal -0.641168 -0.767401 -0 + outer loop + vertex 16.6359 27.2959 0 + vertex 16.4467 27.454 -0.1 + vertex 16.6359 27.2959 -0.1 + endloop + endfacet + facet normal -0.569935 -0.82169 0 + outer loop + vertex 16.6359 27.2959 -0.1 + vertex 17.0889 26.9817 0 + vertex 16.6359 27.2959 0 + endloop + endfacet + facet normal -0.569935 -0.82169 -0 + outer loop + vertex 17.0889 26.9817 0 + vertex 16.6359 27.2959 -0.1 + vertex 17.0889 26.9817 -0.1 + endloop + endfacet + facet normal -0.496343 -0.868126 0 + outer loop + vertex 17.0889 26.9817 -0.1 + vertex 17.6504 26.6607 0 + vertex 17.0889 26.9817 0 + endloop + endfacet + facet normal -0.496343 -0.868126 -0 + outer loop + vertex 17.6504 26.6607 0 + vertex 17.0889 26.9817 -0.1 + vertex 17.6504 26.6607 -0.1 + endloop + endfacet + facet normal -0.4459 -0.895083 0 + outer loop + vertex 17.6504 26.6607 -0.1 + vertex 18.3311 26.3216 0 + vertex 17.6504 26.6607 0 + endloop + endfacet + facet normal -0.4459 -0.895083 -0 + outer loop + vertex 18.3311 26.3216 0 + vertex 17.6504 26.6607 -0.1 + vertex 18.3311 26.3216 -0.1 + endloop + endfacet + facet normal -0.437511 -0.899213 0 + outer loop + vertex 18.3311 26.3216 -0.1 + vertex 19.3729 25.8147 0 + vertex 18.3311 26.3216 0 + endloop + endfacet + facet normal -0.437511 -0.899213 -0 + outer loop + vertex 19.3729 25.8147 0 + vertex 18.3311 26.3216 -0.1 + vertex 19.3729 25.8147 -0.1 + endloop + endfacet + facet normal -0.473558 -0.880763 0 + outer loop + vertex 19.3729 25.8147 -0.1 + vertex 20.1936 25.3734 0 + vertex 19.3729 25.8147 0 + endloop + endfacet + facet normal -0.473558 -0.880763 -0 + outer loop + vertex 20.1936 25.3734 0 + vertex 19.3729 25.8147 -0.1 + vertex 20.1936 25.3734 -0.1 + endloop + endfacet + facet normal -0.521003 -0.853555 0 + outer loop + vertex 20.1936 25.3734 -0.1 + vertex 20.53 25.168 0 + vertex 20.1936 25.3734 0 + endloop + endfacet + facet normal -0.521003 -0.853555 -0 + outer loop + vertex 20.53 25.168 0 + vertex 20.1936 25.3734 -0.1 + vertex 20.53 25.168 -0.1 + endloop + endfacet + facet normal -0.565431 -0.824796 0 + outer loop + vertex 20.53 25.168 -0.1 + vertex 20.8221 24.9679 0 + vertex 20.53 25.168 0 + endloop + endfacet + facet normal -0.565431 -0.824796 -0 + outer loop + vertex 20.8221 24.9679 0 + vertex 20.53 25.168 -0.1 + vertex 20.8221 24.9679 -0.1 + endloop + endfacet + facet normal -0.620484 -0.784219 0 + outer loop + vertex 20.8221 24.9679 -0.1 + vertex 21.0733 24.7691 0 + vertex 20.8221 24.9679 0 + endloop + endfacet + facet normal -0.620484 -0.784219 -0 + outer loop + vertex 21.0733 24.7691 0 + vertex 20.8221 24.9679 -0.1 + vertex 21.0733 24.7691 -0.1 + endloop + endfacet + facet normal -0.684731 -0.728796 0 + outer loop + vertex 21.0733 24.7691 -0.1 + vertex 21.2873 24.568 0 + vertex 21.0733 24.7691 0 + endloop + endfacet + facet normal -0.684731 -0.728796 -0 + outer loop + vertex 21.2873 24.568 0 + vertex 21.0733 24.7691 -0.1 + vertex 21.2873 24.568 -0.1 + endloop + endfacet + facet normal -0.754027 -0.656843 0 + outer loop + vertex 21.4677 24.3609 -0.1 + vertex 21.2873 24.568 0 + vertex 21.2873 24.568 -0.1 + endloop + endfacet + facet normal -0.754027 -0.656843 0 + outer loop + vertex 21.2873 24.568 0 + vertex 21.4677 24.3609 -0.1 + vertex 21.4677 24.3609 0 + endloop + endfacet + facet normal -0.821674 -0.569958 0 + outer loop + vertex 21.6182 24.144 -0.1 + vertex 21.4677 24.3609 0 + vertex 21.4677 24.3609 -0.1 + endloop + endfacet + facet normal -0.821674 -0.569958 0 + outer loop + vertex 21.4677 24.3609 0 + vertex 21.6182 24.144 -0.1 + vertex 21.6182 24.144 0 + endloop + endfacet + facet normal -0.880428 -0.47418 0 + outer loop + vertex 21.7423 23.9135 -0.1 + vertex 21.6182 24.144 0 + vertex 21.6182 24.144 -0.1 + endloop + endfacet + facet normal -0.880428 -0.47418 0 + outer loop + vertex 21.6182 24.144 0 + vertex 21.7423 23.9135 -0.1 + vertex 21.7423 23.9135 0 + endloop + endfacet + facet normal -0.925485 -0.378785 0 + outer loop + vertex 21.8437 23.6658 -0.1 + vertex 21.7423 23.9135 0 + vertex 21.7423 23.9135 -0.1 + endloop + endfacet + facet normal -0.925485 -0.378785 0 + outer loop + vertex 21.7423 23.9135 0 + vertex 21.8437 23.6658 -0.1 + vertex 21.8437 23.6658 0 + endloop + endfacet + facet normal -0.956187 -0.292757 0 + outer loop + vertex 21.926 23.397 -0.1 + vertex 21.8437 23.6658 0 + vertex 21.8437 23.6658 -0.1 + endloop + endfacet + facet normal -0.956187 -0.292757 0 + outer loop + vertex 21.8437 23.6658 0 + vertex 21.926 23.397 -0.1 + vertex 21.926 23.397 0 + endloop + endfacet + facet normal -0.975069 -0.221901 0 + outer loop + vertex 21.9928 23.1034 -0.1 + vertex 21.926 23.397 0 + vertex 21.926 23.397 -0.1 + endloop + endfacet + facet normal -0.975069 -0.221901 0 + outer loop + vertex 21.926 23.397 0 + vertex 21.9928 23.1034 -0.1 + vertex 21.9928 23.1034 0 + endloop + endfacet + facet normal -0.988902 -0.14857 0 + outer loop + vertex 22.0944 22.427 -0.1 + vertex 21.9928 23.1034 0 + vertex 21.9928 23.1034 -0.1 + endloop + endfacet + facet normal -0.988902 -0.14857 0 + outer loop + vertex 21.9928 23.1034 0 + vertex 22.0944 22.427 -0.1 + vertex 22.0944 22.427 0 + endloop + endfacet + facet normal -0.986323 -0.164825 0 + outer loop + vertex 22.1689 21.9813 -0.1 + vertex 22.0944 22.427 0 + vertex 22.0944 22.427 -0.1 + endloop + endfacet + facet normal -0.986323 -0.164825 0 + outer loop + vertex 22.0944 22.427 0 + vertex 22.1689 21.9813 -0.1 + vertex 22.1689 21.9813 0 + endloop + endfacet + facet normal -0.960165 -0.279433 0 + outer loop + vertex 22.2815 21.5943 -0.1 + vertex 22.1689 21.9813 0 + vertex 22.1689 21.9813 -0.1 + endloop + endfacet + facet normal -0.960165 -0.279433 0 + outer loop + vertex 22.1689 21.9813 0 + vertex 22.2815 21.5943 -0.1 + vertex 22.2815 21.5943 0 + endloop + endfacet + facet normal -0.907871 -0.41925 0 + outer loop + vertex 22.4341 21.2638 -0.1 + vertex 22.2815 21.5943 0 + vertex 22.2815 21.5943 -0.1 + endloop + endfacet + facet normal -0.907871 -0.41925 0 + outer loop + vertex 22.2815 21.5943 0 + vertex 22.4341 21.2638 -0.1 + vertex 22.4341 21.2638 0 + endloop + endfacet + facet normal -0.817597 -0.575791 0 + outer loop + vertex 22.6286 20.9877 -0.1 + vertex 22.4341 21.2638 0 + vertex 22.4341 21.2638 -0.1 + endloop + endfacet + facet normal -0.817597 -0.575791 0 + outer loop + vertex 22.4341 21.2638 0 + vertex 22.6286 20.9877 -0.1 + vertex 22.6286 20.9877 0 + endloop + endfacet + facet normal -0.721714 -0.692192 0 + outer loop + vertex 22.7421 20.8693 -0.1 + vertex 22.6286 20.9877 0 + vertex 22.6286 20.9877 -0.1 + endloop + endfacet + facet normal -0.721714 -0.692192 0 + outer loop + vertex 22.6286 20.9877 0 + vertex 22.7421 20.8693 -0.1 + vertex 22.7421 20.8693 0 + endloop + endfacet + facet normal -0.646202 -0.763167 0 + outer loop + vertex 22.7421 20.8693 -0.1 + vertex 22.8668 20.7638 0 + vertex 22.7421 20.8693 0 + endloop + endfacet + facet normal -0.646202 -0.763167 -0 + outer loop + vertex 22.8668 20.7638 0 + vertex 22.7421 20.8693 -0.1 + vertex 22.8668 20.7638 -0.1 + endloop + endfacet + facet normal -0.522339 -0.852738 0 + outer loop + vertex 22.8668 20.7638 -0.1 + vertex 23.1504 20.59 0 + vertex 22.8668 20.7638 0 + endloop + endfacet + facet normal -0.522339 -0.852738 -0 + outer loop + vertex 23.1504 20.59 0 + vertex 22.8668 20.7638 -0.1 + vertex 23.1504 20.59 -0.1 + endloop + endfacet + facet normal -0.355133 -0.934816 0 + outer loop + vertex 23.1504 20.59 -0.1 + vertex 23.4814 20.4643 0 + vertex 23.1504 20.59 0 + endloop + endfacet + facet normal -0.355133 -0.934816 -0 + outer loop + vertex 23.4814 20.4643 0 + vertex 23.1504 20.59 -0.1 + vertex 23.4814 20.4643 -0.1 + endloop + endfacet + facet normal -0.205594 -0.978637 0 + outer loop + vertex 23.4814 20.4643 -0.1 + vertex 23.8617 20.3844 0 + vertex 23.4814 20.4643 0 + endloop + endfacet + facet normal -0.205594 -0.978637 -0 + outer loop + vertex 23.8617 20.3844 0 + vertex 23.4814 20.4643 -0.1 + vertex 23.8617 20.3844 -0.1 + endloop + endfacet + facet normal -0.166383 -0.986061 0 + outer loop + vertex 23.8617 20.3844 -0.1 + vertex 24.2028 20.3268 0 + vertex 23.8617 20.3844 0 + endloop + endfacet + facet normal -0.166383 -0.986061 -0 + outer loop + vertex 24.2028 20.3268 0 + vertex 23.8617 20.3844 -0.1 + vertex 24.2028 20.3268 -0.1 + endloop + endfacet + facet normal -0.222634 -0.974902 0 + outer loop + vertex 24.2028 20.3268 -0.1 + vertex 24.5205 20.2543 0 + vertex 24.2028 20.3268 0 + endloop + endfacet + facet normal -0.222634 -0.974902 -0 + outer loop + vertex 24.5205 20.2543 0 + vertex 24.2028 20.3268 -0.1 + vertex 24.5205 20.2543 -0.1 + endloop + endfacet + facet normal -0.285939 -0.958248 0 + outer loop + vertex 24.5205 20.2543 -0.1 + vertex 24.8151 20.1664 0 + vertex 24.5205 20.2543 0 + endloop + endfacet + facet normal -0.285939 -0.958248 -0 + outer loop + vertex 24.8151 20.1664 0 + vertex 24.5205 20.2543 -0.1 + vertex 24.8151 20.1664 -0.1 + endloop + endfacet + facet normal -0.356177 -0.934419 0 + outer loop + vertex 24.8151 20.1664 -0.1 + vertex 25.087 20.0627 0 + vertex 24.8151 20.1664 0 + endloop + endfacet + facet normal -0.356177 -0.934419 -0 + outer loop + vertex 25.087 20.0627 0 + vertex 24.8151 20.1664 -0.1 + vertex 25.087 20.0627 -0.1 + endloop + endfacet + facet normal -0.432613 -0.90158 0 + outer loop + vertex 25.087 20.0627 -0.1 + vertex 25.3364 19.943 0 + vertex 25.087 20.0627 0 + endloop + endfacet + facet normal -0.432613 -0.90158 -0 + outer loop + vertex 25.3364 19.943 0 + vertex 25.087 20.0627 -0.1 + vertex 25.3364 19.943 -0.1 + endloop + endfacet + facet normal -0.513641 -0.858005 0 + outer loop + vertex 25.3364 19.943 -0.1 + vertex 25.5639 19.8069 0 + vertex 25.3364 19.943 0 + endloop + endfacet + facet normal -0.513641 -0.858005 -0 + outer loop + vertex 25.5639 19.8069 0 + vertex 25.3364 19.943 -0.1 + vertex 25.5639 19.8069 -0.1 + endloop + endfacet + facet normal -0.59661 -0.802531 0 + outer loop + vertex 25.5639 19.8069 -0.1 + vertex 25.7697 19.6539 0 + vertex 25.5639 19.8069 0 + endloop + endfacet + facet normal -0.59661 -0.802531 -0 + outer loop + vertex 25.7697 19.6539 0 + vertex 25.5639 19.8069 -0.1 + vertex 25.7697 19.6539 -0.1 + endloop + endfacet + facet normal -0.678036 -0.735029 0 + outer loop + vertex 25.7697 19.6539 -0.1 + vertex 25.9541 19.4837 0 + vertex 25.7697 19.6539 0 + endloop + endfacet + facet normal -0.678036 -0.735029 -0 + outer loop + vertex 25.9541 19.4837 0 + vertex 25.7697 19.6539 -0.1 + vertex 25.9541 19.4837 -0.1 + endloop + endfacet + facet normal -0.75405 -0.656818 0 + outer loop + vertex 26.1176 19.296 -0.1 + vertex 25.9541 19.4837 0 + vertex 25.9541 19.4837 -0.1 + endloop + endfacet + facet normal -0.75405 -0.656818 0 + outer loop + vertex 25.9541 19.4837 0 + vertex 26.1176 19.296 -0.1 + vertex 26.1176 19.296 0 + endloop + endfacet + facet normal -0.821173 -0.570679 0 + outer loop + vertex 26.2605 19.0904 -0.1 + vertex 26.1176 19.296 0 + vertex 26.1176 19.296 -0.1 + endloop + endfacet + facet normal -0.821173 -0.570679 0 + outer loop + vertex 26.1176 19.296 0 + vertex 26.2605 19.0904 -0.1 + vertex 26.2605 19.0904 0 + endloop + endfacet + facet normal -0.877038 -0.480422 0 + outer loop + vertex 26.3832 18.8665 -0.1 + vertex 26.2605 19.0904 0 + vertex 26.2605 19.0904 -0.1 + endloop + endfacet + facet normal -0.877038 -0.480422 0 + outer loop + vertex 26.2605 19.0904 0 + vertex 26.3832 18.8665 -0.1 + vertex 26.3832 18.8665 0 + endloop + endfacet + facet normal -0.920777 -0.390089 0 + outer loop + vertex 26.4859 18.624 -0.1 + vertex 26.3832 18.8665 0 + vertex 26.3832 18.8665 -0.1 + endloop + endfacet + facet normal -0.920777 -0.390089 0 + outer loop + vertex 26.3832 18.8665 0 + vertex 26.4859 18.624 -0.1 + vertex 26.4859 18.624 0 + endloop + endfacet + facet normal -0.952936 -0.30317 0 + outer loop + vertex 26.5691 18.3624 -0.1 + vertex 26.4859 18.624 0 + vertex 26.4859 18.624 -0.1 + endloop + endfacet + facet normal -0.952936 -0.30317 0 + outer loop + vertex 26.4859 18.624 0 + vertex 26.5691 18.3624 -0.1 + vertex 26.5691 18.3624 0 + endloop + endfacet + facet normal -0.974998 -0.222215 0 + outer loop + vertex 26.6332 18.0815 -0.1 + vertex 26.5691 18.3624 0 + vertex 26.5691 18.3624 -0.1 + endloop + endfacet + facet normal -0.974998 -0.222215 0 + outer loop + vertex 26.5691 18.3624 0 + vertex 26.6332 18.0815 -0.1 + vertex 26.6332 18.0815 0 + endloop + endfacet + facet normal -0.98889 -0.148648 0 + outer loop + vertex 26.6784 17.7808 -0.1 + vertex 26.6332 18.0815 0 + vertex 26.6332 18.0815 -0.1 + endloop + endfacet + facet normal -0.98889 -0.148648 0 + outer loop + vertex 26.6332 18.0815 0 + vertex 26.6784 17.7808 -0.1 + vertex 26.6784 17.7808 0 + endloop + endfacet + facet normal -0.996548 -0.083019 0 + outer loop + vertex 26.7051 17.4601 -0.1 + vertex 26.6784 17.7808 0 + vertex 26.6784 17.7808 -0.1 + endloop + endfacet + facet normal -0.996548 -0.083019 0 + outer loop + vertex 26.6784 17.7808 0 + vertex 26.7051 17.4601 -0.1 + vertex 26.7051 17.4601 0 + endloop + endfacet + facet normal -0.991209 -0.132303 0 + outer loop + vertex 26.7571 17.0706 -0.1 + vertex 26.7051 17.4601 0 + vertex 26.7051 17.4601 -0.1 + endloop + endfacet + facet normal -0.991209 -0.132303 0 + outer loop + vertex 26.7051 17.4601 0 + vertex 26.7571 17.0706 -0.1 + vertex 26.7571 17.0706 0 + endloop + endfacet + facet normal -0.970274 -0.242008 0 + outer loop + vertex 26.8653 16.6367 -0.1 + vertex 26.7571 17.0706 0 + vertex 26.7571 17.0706 -0.1 + endloop + endfacet + facet normal -0.970274 -0.242008 0 + outer loop + vertex 26.7571 17.0706 0 + vertex 26.8653 16.6367 -0.1 + vertex 26.8653 16.6367 0 + endloop + endfacet + facet normal -0.944031 -0.329856 0 + outer loop + vertex 27.0139 16.2113 -0.1 + vertex 26.8653 16.6367 0 + vertex 26.8653 16.6367 -0.1 + endloop + endfacet + facet normal -0.944031 -0.329856 0 + outer loop + vertex 26.8653 16.6367 0 + vertex 27.0139 16.2113 -0.1 + vertex 27.0139 16.2113 0 + endloop + endfacet + facet normal -0.902944 -0.429757 0 + outer loop + vertex 27.1872 15.8473 -0.1 + vertex 27.0139 16.2113 0 + vertex 27.0139 16.2113 -0.1 + endloop + endfacet + facet normal -0.902944 -0.429757 0 + outer loop + vertex 27.0139 16.2113 0 + vertex 27.1872 15.8473 -0.1 + vertex 27.1872 15.8473 0 + endloop + endfacet + facet normal -0.882286 -0.470713 0 + outer loop + vertex 27.3198 15.5987 -0.1 + vertex 27.1872 15.8473 0 + vertex 27.1872 15.8473 -0.1 + endloop + endfacet + facet normal -0.882286 -0.470713 0 + outer loop + vertex 27.1872 15.8473 0 + vertex 27.3198 15.5987 -0.1 + vertex 27.3198 15.5987 0 + endloop + endfacet + facet normal -0.922173 -0.386777 0 + outer loop + vertex 27.4227 15.3534 -0.1 + vertex 27.3198 15.5987 0 + vertex 27.3198 15.5987 -0.1 + endloop + endfacet + facet normal -0.922173 -0.386777 0 + outer loop + vertex 27.3198 15.5987 0 + vertex 27.4227 15.3534 -0.1 + vertex 27.4227 15.3534 0 + endloop + endfacet + facet normal -0.962502 -0.271275 0 + outer loop + vertex 27.4995 15.0808 -0.1 + vertex 27.4227 15.3534 0 + vertex 27.4227 15.3534 -0.1 + endloop + endfacet + facet normal -0.962502 -0.271275 0 + outer loop + vertex 27.4227 15.3534 0 + vertex 27.4995 15.0808 -0.1 + vertex 27.4995 15.0808 0 + endloop + endfacet + facet normal -0.986697 -0.162567 0 + outer loop + vertex 27.5539 14.7505 -0.1 + vertex 27.4995 15.0808 0 + vertex 27.4995 15.0808 -0.1 + endloop + endfacet + facet normal -0.986697 -0.162567 0 + outer loop + vertex 27.4995 15.0808 0 + vertex 27.5539 14.7505 -0.1 + vertex 27.5539 14.7505 0 + endloop + endfacet + facet normal -0.996383 -0.0849723 0 + outer loop + vertex 27.5896 14.3319 -0.1 + vertex 27.5539 14.7505 0 + vertex 27.5539 14.7505 -0.1 + endloop + endfacet + facet normal -0.996383 -0.0849723 0 + outer loop + vertex 27.5539 14.7505 0 + vertex 27.5896 14.3319 -0.1 + vertex 27.5896 14.3319 0 + endloop + endfacet + facet normal -0.999262 -0.0383987 0 + outer loop + vertex 27.6103 13.7945 -0.1 + vertex 27.5896 14.3319 0 + vertex 27.5896 14.3319 -0.1 + endloop + endfacet + facet normal -0.999262 -0.0383987 0 + outer loop + vertex 27.5896 14.3319 0 + vertex 27.6103 13.7945 -0.1 + vertex 27.6103 13.7945 0 + endloop + endfacet + facet normal -0.999976 -0.0069841 0 + outer loop + vertex 27.6211 12.2412 -0.1 + vertex 27.6103 13.7945 0 + vertex 27.6103 13.7945 -0.1 + endloop + endfacet + facet normal -0.999976 -0.0069841 0 + outer loop + vertex 27.6103 13.7945 0 + vertex 27.6211 12.2412 -0.1 + vertex 27.6211 12.2412 0 + endloop + endfacet + facet normal -0.999918 0.0127851 0 + outer loop + vertex 27.6024 10.7775 -0.1 + vertex 27.6211 12.2412 0 + vertex 27.6211 12.2412 -0.1 + endloop + endfacet + facet normal -0.999918 0.0127851 0 + outer loop + vertex 27.6211 12.2412 0 + vertex 27.6024 10.7775 -0.1 + vertex 27.6024 10.7775 0 + endloop + endfacet + facet normal -0.999067 0.0431942 0 + outer loop + vertex 27.5775 10.2019 -0.1 + vertex 27.6024 10.7775 0 + vertex 27.6024 10.7775 -0.1 + endloop + endfacet + facet normal -0.999067 0.0431942 0 + outer loop + vertex 27.6024 10.7775 0 + vertex 27.5775 10.2019 -0.1 + vertex 27.5775 10.2019 0 + endloop + endfacet + facet normal -0.997132 0.0756876 0 + outer loop + vertex 27.5397 9.70386 -0.1 + vertex 27.5775 10.2019 0 + vertex 27.5775 10.2019 -0.1 + endloop + endfacet + facet normal -0.997132 0.0756876 0 + outer loop + vertex 27.5775 10.2019 0 + vertex 27.5397 9.70386 -0.1 + vertex 27.5397 9.70386 0 + endloop + endfacet + facet normal -0.992933 0.118678 0 + outer loop + vertex 27.4871 9.26334 -0.1 + vertex 27.5397 9.70386 0 + vertex 27.5397 9.70386 -0.1 + endloop + endfacet + facet normal -0.992933 0.118678 0 + outer loop + vertex 27.5397 9.70386 0 + vertex 27.4871 9.26334 -0.1 + vertex 27.4871 9.26334 0 + endloop + endfacet + facet normal -0.985483 0.169774 0 + outer loop + vertex 27.4176 8.86037 -0.1 + vertex 27.4871 9.26334 0 + vertex 27.4871 9.26334 -0.1 + endloop + endfacet + facet normal -0.985483 0.169774 0 + outer loop + vertex 27.4871 9.26334 0 + vertex 27.4176 8.86037 -0.1 + vertex 27.4176 8.86037 0 + endloop + endfacet + facet normal -0.974842 0.222899 0 + outer loop + vertex 27.3295 8.47496 -0.1 + vertex 27.4176 8.86037 0 + vertex 27.4176 8.86037 -0.1 + endloop + endfacet + facet normal -0.974842 0.222899 0 + outer loop + vertex 27.4176 8.86037 0 + vertex 27.3295 8.47496 -0.1 + vertex 27.3295 8.47496 0 + endloop + endfacet + facet normal -0.962864 0.269986 0 + outer loop + vertex 27.2208 8.08714 -0.1 + vertex 27.3295 8.47496 0 + vertex 27.3295 8.47496 -0.1 + endloop + endfacet + facet normal -0.962864 0.269986 0 + outer loop + vertex 27.3295 8.47496 0 + vertex 27.2208 8.08714 -0.1 + vertex 27.2208 8.08714 0 + endloop + endfacet + facet normal -0.961499 0.274809 0 + outer loop + vertex 27.1048 7.68143 -0.1 + vertex 27.2208 8.08714 0 + vertex 27.2208 8.08714 -0.1 + endloop + endfacet + facet normal -0.961499 0.274809 0 + outer loop + vertex 27.2208 8.08714 0 + vertex 27.1048 7.68143 -0.1 + vertex 27.1048 7.68143 0 + endloop + endfacet + facet normal -0.973193 0.229988 0 + outer loop + vertex 27.0158 7.30485 -0.1 + vertex 27.1048 7.68143 0 + vertex 27.1048 7.68143 -0.1 + endloop + endfacet + facet normal -0.973193 0.229988 0 + outer loop + vertex 27.1048 7.68143 0 + vertex 27.0158 7.30485 -0.1 + vertex 27.0158 7.30485 0 + endloop + endfacet + facet normal -0.985852 0.167619 0 + outer loop + vertex 26.9517 6.92758 -0.1 + vertex 27.0158 7.30485 0 + vertex 27.0158 7.30485 -0.1 + endloop + endfacet + facet normal -0.985852 0.167619 0 + outer loop + vertex 27.0158 7.30485 0 + vertex 26.9517 6.92758 -0.1 + vertex 26.9517 6.92758 0 + endloop + endfacet + facet normal -0.994881 0.101051 0 + outer loop + vertex 26.9103 6.51977 -0.1 + vertex 26.9517 6.92758 0 + vertex 26.9517 6.92758 -0.1 + endloop + endfacet + facet normal -0.994881 0.101051 0 + outer loop + vertex 26.9517 6.92758 0 + vertex 26.9103 6.51977 -0.1 + vertex 26.9103 6.51977 0 + endloop + endfacet + facet normal -0.999013 0.0444183 0 + outer loop + vertex 26.8894 6.05157 -0.1 + vertex 26.9103 6.51977 0 + vertex 26.9103 6.51977 -0.1 + endloop + endfacet + facet normal -0.999013 0.0444183 0 + outer loop + vertex 26.9103 6.51977 0 + vertex 26.8894 6.05157 -0.1 + vertex 26.8894 6.05157 0 + endloop + endfacet + facet normal -0.999991 0.00417733 0 + outer loop + vertex 26.8871 5.49316 -0.1 + vertex 26.8894 6.05157 0 + vertex 26.8894 6.05157 -0.1 + endloop + endfacet + facet normal -0.999991 0.00417733 0 + outer loop + vertex 26.8894 6.05157 0 + vertex 26.8871 5.49316 -0.1 + vertex 26.8871 5.49316 0 + endloop + endfacet + facet normal -0.999606 -0.0280683 0 + outer loop + vertex 26.9294 3.98634 -0.1 + vertex 26.8871 5.49316 0 + vertex 26.8871 5.49316 -0.1 + endloop + endfacet + facet normal -0.999606 -0.0280683 0 + outer loop + vertex 26.8871 5.49316 0 + vertex 26.9294 3.98634 -0.1 + vertex 26.9294 3.98634 0 + endloop + endfacet + facet normal -0.999521 -0.0309525 0 + outer loop + vertex 26.9615 2.94949 -0.1 + vertex 26.9294 3.98634 0 + vertex 26.9294 3.98634 -0.1 + endloop + endfacet + facet normal -0.999521 -0.0309525 0 + outer loop + vertex 26.9294 3.98634 0 + vertex 26.9615 2.94949 -0.1 + vertex 26.9615 2.94949 0 + endloop + endfacet + facet normal -0.999992 -0.00407505 0 + outer loop + vertex 26.9647 2.16551 -0.1 + vertex 26.9615 2.94949 0 + vertex 26.9615 2.94949 -0.1 + endloop + endfacet + facet normal -0.999992 -0.00407505 0 + outer loop + vertex 26.9615 2.94949 0 + vertex 26.9647 2.16551 -0.1 + vertex 26.9647 2.16551 0 + endloop + endfacet + facet normal -0.998255 0.0590558 0 + outer loop + vertex 26.9324 1.61996 -0.1 + vertex 26.9647 2.16551 0 + vertex 26.9647 2.16551 -0.1 + endloop + endfacet + facet normal -0.998255 0.0590558 0 + outer loop + vertex 26.9647 2.16551 0 + vertex 26.9324 1.61996 -0.1 + vertex 26.9324 1.61996 0 + endloop + endfacet + facet normal -0.986243 0.165303 0 + outer loop + vertex 26.901 1.43209 -0.1 + vertex 26.9324 1.61996 0 + vertex 26.9324 1.61996 -0.1 + endloop + endfacet + facet normal -0.986243 0.165303 0 + outer loop + vertex 26.9324 1.61996 0 + vertex 26.901 1.43209 -0.1 + vertex 26.901 1.43209 0 + endloop + endfacet + facet normal -0.952336 0.30505 0 + outer loop + vertex 26.8581 1.29842 -0.1 + vertex 26.901 1.43209 0 + vertex 26.901 1.43209 -0.1 + endloop + endfacet + facet normal -0.952336 0.30505 0 + outer loop + vertex 26.901 1.43209 0 + vertex 26.8581 1.29842 -0.1 + vertex 26.8581 1.29842 0 + endloop + endfacet + facet normal -0.828352 0.560208 0 + outer loop + vertex 26.8032 1.21715 -0.1 + vertex 26.8581 1.29842 0 + vertex 26.8581 1.29842 -0.1 + endloop + endfacet + facet normal -0.828352 0.560208 0 + outer loop + vertex 26.8581 1.29842 0 + vertex 26.8032 1.21715 -0.1 + vertex 26.8032 1.21715 0 + endloop + endfacet + facet normal -0.411544 0.91139 0 + outer loop + vertex 26.8032 1.21715 -0.1 + vertex 26.7352 1.18648 0 + vertex 26.8032 1.21715 0 + endloop + endfacet + facet normal -0.411544 0.91139 0 + outer loop + vertex 26.7352 1.18648 0 + vertex 26.8032 1.21715 -0.1 + vertex 26.7352 1.18648 -0.1 + endloop + endfacet + facet normal 0.216454 0.976293 -0 + outer loop + vertex 26.7352 1.18648 -0.1 + vertex 26.6535 1.20459 0 + vertex 26.7352 1.18648 0 + endloop + endfacet + facet normal 0.216454 0.976293 0 + outer loop + vertex 26.6535 1.20459 0 + vertex 26.7352 1.18648 -0.1 + vertex 26.6535 1.20459 -0.1 + endloop + endfacet + facet normal 0.559991 0.828498 -0 + outer loop + vertex 26.6535 1.20459 -0.1 + vertex 26.5572 1.2697 0 + vertex 26.6535 1.20459 0 + endloop + endfacet + facet normal 0.559991 0.828498 0 + outer loop + vertex 26.5572 1.2697 0 + vertex 26.6535 1.20459 -0.1 + vertex 26.5572 1.2697 -0.1 + endloop + endfacet + facet normal 0.702452 0.711731 -0 + outer loop + vertex 26.5572 1.2697 -0.1 + vertex 26.4455 1.37999 0 + vertex 26.5572 1.2697 0 + endloop + endfacet + facet normal 0.702452 0.711731 0 + outer loop + vertex 26.4455 1.37999 0 + vertex 26.5572 1.2697 -0.1 + vertex 26.4455 1.37999 -0.1 + endloop + endfacet + facet normal 0.76838 0.639993 0 + outer loop + vertex 26.4455 1.37999 0 + vertex 26.3175 1.53367 -0.1 + vertex 26.3175 1.53367 0 + endloop + endfacet + facet normal 0.76838 0.639993 0 + outer loop + vertex 26.3175 1.53367 -0.1 + vertex 26.4455 1.37999 0 + vertex 26.4455 1.37999 -0.1 + endloop + endfacet + facet normal 0.813139 0.58207 0 + outer loop + vertex 26.3175 1.53367 0 + vertex 26.0094 1.96397 -0.1 + vertex 26.0094 1.96397 0 + endloop + endfacet + facet normal 0.813139 0.58207 0 + outer loop + vertex 26.0094 1.96397 -0.1 + vertex 26.3175 1.53367 0 + vertex 26.3175 1.53367 -0.1 + endloop + endfacet + facet normal 0.812733 0.582636 0 + outer loop + vertex 26.0094 1.96397 0 + vertex 25.8138 2.23679 -0.1 + vertex 25.8138 2.23679 0 + endloop + endfacet + facet normal 0.812733 0.582636 0 + outer loop + vertex 25.8138 2.23679 -0.1 + vertex 26.0094 1.96397 0 + vertex 26.0094 1.96397 -0.1 + endloop + endfacet + facet normal 0.76488 0.644173 0 + outer loop + vertex 25.8138 2.23679 0 + vertex 25.6376 2.44612 -0.1 + vertex 25.6376 2.44612 0 + endloop + endfacet + facet normal 0.76488 0.644173 0 + outer loop + vertex 25.6376 2.44612 -0.1 + vertex 25.8138 2.23679 0 + vertex 25.8138 2.23679 -0.1 + endloop + endfacet + facet normal 0.675362 0.737487 -0 + outer loop + vertex 25.6376 2.44612 -0.1 + vertex 25.4766 2.59351 0 + vertex 25.6376 2.44612 0 + endloop + endfacet + facet normal 0.675362 0.737487 0 + outer loop + vertex 25.4766 2.59351 0 + vertex 25.6376 2.44612 -0.1 + vertex 25.4766 2.59351 -0.1 + endloop + endfacet + facet normal 0.502892 0.86435 -0 + outer loop + vertex 25.4766 2.59351 -0.1 + vertex 25.3271 2.68052 0 + vertex 25.4766 2.59351 0 + endloop + endfacet + facet normal 0.502892 0.86435 0 + outer loop + vertex 25.3271 2.68052 0 + vertex 25.4766 2.59351 -0.1 + vertex 25.3271 2.68052 -0.1 + endloop + endfacet + facet normal 0.194571 0.980889 -0 + outer loop + vertex 25.3271 2.68052 -0.1 + vertex 25.185 2.7087 0 + vertex 25.3271 2.68052 0 + endloop + endfacet + facet normal 0.194571 0.980889 0 + outer loop + vertex 25.185 2.7087 0 + vertex 25.3271 2.68052 -0.1 + vertex 25.185 2.7087 -0.1 + endloop + endfacet + facet normal -0.205381 0.978682 0 + outer loop + vertex 25.185 2.7087 -0.1 + vertex 25.0464 2.67962 0 + vertex 25.185 2.7087 0 + endloop + endfacet + facet normal -0.205381 0.978682 0 + outer loop + vertex 25.0464 2.67962 0 + vertex 25.185 2.7087 -0.1 + vertex 25.0464 2.67962 -0.1 + endloop + endfacet + facet normal -0.520731 0.853721 0 + outer loop + vertex 25.0464 2.67962 -0.1 + vertex 24.9074 2.59483 0 + vertex 25.0464 2.67962 0 + endloop + endfacet + facet normal -0.520731 0.853721 0 + outer loop + vertex 24.9074 2.59483 0 + vertex 25.0464 2.67962 -0.1 + vertex 24.9074 2.59483 -0.1 + endloop + endfacet + facet normal -0.695882 0.718157 0 + outer loop + vertex 24.9074 2.59483 -0.1 + vertex 24.764 2.4559 0 + vertex 24.9074 2.59483 0 + endloop + endfacet + facet normal -0.695882 0.718157 0 + outer loop + vertex 24.764 2.4559 0 + vertex 24.9074 2.59483 -0.1 + vertex 24.764 2.4559 -0.1 + endloop + endfacet + facet normal -0.621809 0.783169 0 + outer loop + vertex 24.764 2.4559 -0.1 + vertex 24.6285 2.34829 0 + vertex 24.764 2.4559 0 + endloop + endfacet + facet normal -0.621809 0.783169 0 + outer loop + vertex 24.6285 2.34829 0 + vertex 24.764 2.4559 -0.1 + vertex 24.6285 2.34829 -0.1 + endloop + endfacet + facet normal -0.432349 0.901706 0 + outer loop + vertex 24.6285 2.34829 -0.1 + vertex 24.4388 2.25734 0 + vertex 24.6285 2.34829 0 + endloop + endfacet + facet normal -0.432349 0.901706 0 + outer loop + vertex 24.4388 2.25734 0 + vertex 24.6285 2.34829 -0.1 + vertex 24.4388 2.25734 -0.1 + endloop + endfacet + facet normal -0.283745 0.9589 0 + outer loop + vertex 24.4388 2.25734 -0.1 + vertex 24.2201 2.19262 0 + vertex 24.4388 2.25734 0 + endloop + endfacet + facet normal -0.283745 0.9589 0 + outer loop + vertex 24.2201 2.19262 0 + vertex 24.4388 2.25734 -0.1 + vertex 24.2201 2.19262 -0.1 + endloop + endfacet + facet normal -0.128745 0.991678 0 + outer loop + vertex 24.2201 2.19262 -0.1 + vertex 23.9975 2.16372 0 + vertex 24.2201 2.19262 0 + endloop + endfacet + facet normal -0.128745 0.991678 0 + outer loop + vertex 23.9975 2.16372 0 + vertex 24.2201 2.19262 -0.1 + vertex 23.9975 2.16372 -0.1 + endloop + endfacet + facet normal -0.0892316 0.996011 0 + outer loop + vertex 23.9975 2.16372 -0.1 + vertex 23.7673 2.14309 0 + vertex 23.9975 2.16372 0 + endloop + endfacet + facet normal -0.0892316 0.996011 0 + outer loop + vertex 23.7673 2.14309 0 + vertex 23.9975 2.16372 -0.1 + vertex 23.7673 2.14309 -0.1 + endloop + endfacet + facet normal -0.173492 0.984835 0 + outer loop + vertex 23.7673 2.14309 -0.1 + vertex 23.5277 2.10089 0 + vertex 23.7673 2.14309 0 + endloop + endfacet + facet normal -0.173492 0.984835 0 + outer loop + vertex 23.5277 2.10089 0 + vertex 23.7673 2.14309 -0.1 + vertex 23.5277 2.10089 -0.1 + endloop + endfacet + facet normal -0.252811 0.967516 0 + outer loop + vertex 23.5277 2.10089 -0.1 + vertex 23.3072 2.04326 0 + vertex 23.5277 2.10089 0 + endloop + endfacet + facet normal -0.252811 0.967516 0 + outer loop + vertex 23.3072 2.04326 0 + vertex 23.5277 2.10089 -0.1 + vertex 23.3072 2.04326 -0.1 + endloop + endfacet + facet normal -0.360079 0.932922 0 + outer loop + vertex 23.3072 2.04326 -0.1 + vertex 23.0469 1.94283 0 + vertex 23.3072 2.04326 0 + endloop + endfacet + facet normal -0.360079 0.932922 0 + outer loop + vertex 23.0469 1.94283 0 + vertex 23.3072 2.04326 -0.1 + vertex 23.0469 1.94283 -0.1 + endloop + endfacet + facet normal -0.120091 0.992763 0 + outer loop + vertex 23.0469 1.94283 -0.1 + vertex 22.9727 1.93385 0 + vertex 23.0469 1.94283 0 + endloop + endfacet + facet normal -0.120091 0.992763 0 + outer loop + vertex 22.9727 1.93385 0 + vertex 23.0469 1.94283 -0.1 + vertex 22.9727 1.93385 -0.1 + endloop + endfacet + facet normal 0.220007 0.975498 -0 + outer loop + vertex 22.9727 1.93385 -0.1 + vertex 22.9112 1.94773 0 + vertex 22.9727 1.93385 0 + endloop + endfacet + facet normal 0.220007 0.975498 0 + outer loop + vertex 22.9112 1.94773 0 + vertex 22.9727 1.93385 -0.1 + vertex 22.9112 1.94773 -0.1 + endloop + endfacet + facet normal 0.582178 0.813061 -0 + outer loop + vertex 22.9112 1.94773 -0.1 + vertex 22.8622 1.9828 0 + vertex 22.9112 1.94773 0 + endloop + endfacet + facet normal 0.582178 0.813061 0 + outer loop + vertex 22.8622 1.9828 0 + vertex 22.9112 1.94773 -0.1 + vertex 22.8622 1.9828 -0.1 + endloop + endfacet + facet normal 0.831256 0.55589 0 + outer loop + vertex 22.8622 1.9828 0 + vertex 22.8257 2.03737 -0.1 + vertex 22.8257 2.03737 0 + endloop + endfacet + facet normal 0.831256 0.55589 0 + outer loop + vertex 22.8257 2.03737 -0.1 + vertex 22.8622 1.9828 0 + vertex 22.8622 1.9828 -0.1 + endloop + endfacet + facet normal 0.948775 0.315953 0 + outer loop + vertex 22.8257 2.03737 0 + vertex 22.8016 2.10976 -0.1 + vertex 22.8016 2.10976 0 + endloop + endfacet + facet normal 0.948775 0.315953 0 + outer loop + vertex 22.8016 2.10976 -0.1 + vertex 22.8257 2.03737 0 + vertex 22.8257 2.03737 -0.1 + endloop + endfacet + facet normal 0.998216 0.059713 0 + outer loop + vertex 22.8016 2.10976 0 + vertex 22.7901 2.30129 -0.1 + vertex 22.7901 2.30129 0 + endloop + endfacet + facet normal 0.998216 0.059713 0 + outer loop + vertex 22.7901 2.30129 -0.1 + vertex 22.8016 2.10976 0 + vertex 22.8016 2.10976 -0.1 + endloop + endfacet + facet normal 0.988638 -0.150314 0 + outer loop + vertex 22.7901 2.30129 0 + vertex 22.827 2.54396 -0.1 + vertex 22.827 2.54396 0 + endloop + endfacet + facet normal 0.988638 -0.150314 0 + outer loop + vertex 22.827 2.54396 -0.1 + vertex 22.7901 2.30129 0 + vertex 22.7901 2.30129 -0.1 + endloop + endfacet + facet normal 0.957496 -0.288446 0 + outer loop + vertex 22.827 2.54396 0 + vertex 22.9115 2.82433 -0.1 + vertex 22.9115 2.82433 0 + endloop + endfacet + facet normal 0.957496 -0.288446 0 + outer loop + vertex 22.9115 2.82433 -0.1 + vertex 22.827 2.54396 0 + vertex 22.827 2.54396 -0.1 + endloop + endfacet + facet normal 0.918399 -0.395656 0 + outer loop + vertex 22.9115 2.82433 0 + vertex 23.0427 3.12896 -0.1 + vertex 23.0427 3.12896 0 + endloop + endfacet + facet normal 0.918399 -0.395656 0 + outer loop + vertex 23.0427 3.12896 -0.1 + vertex 22.9115 2.82433 0 + vertex 22.9115 2.82433 -0.1 + endloop + endfacet + facet normal 0.87183 -0.489809 0 + outer loop + vertex 23.0427 3.12896 0 + vertex 23.22 3.44442 -0.1 + vertex 23.22 3.44442 0 + endloop + endfacet + facet normal 0.87183 -0.489809 0 + outer loop + vertex 23.22 3.44442 -0.1 + vertex 23.0427 3.12896 0 + vertex 23.0427 3.12896 -0.1 + endloop + endfacet + facet normal 0.879841 -0.475268 0 + outer loop + vertex 23.22 3.44442 0 + vertex 23.4183 3.81156 -0.1 + vertex 23.4183 3.81156 0 + endloop + endfacet + facet normal 0.879841 -0.475268 0 + outer loop + vertex 23.4183 3.81156 -0.1 + vertex 23.22 3.44442 0 + vertex 23.22 3.44442 -0.1 + endloop + endfacet + facet normal 0.942923 -0.33301 0 + outer loop + vertex 23.4183 3.81156 0 + vertex 23.5494 4.18291 -0.1 + vertex 23.5494 4.18291 0 + endloop + endfacet + facet normal 0.942923 -0.33301 0 + outer loop + vertex 23.5494 4.18291 -0.1 + vertex 23.4183 3.81156 0 + vertex 23.4183 3.81156 -0.1 + endloop + endfacet + facet normal 0.978031 -0.208457 0 + outer loop + vertex 23.5494 4.18291 0 + vertex 23.5897 4.3717 -0.1 + vertex 23.5897 4.3717 0 + endloop + endfacet + facet normal 0.978031 -0.208457 0 + outer loop + vertex 23.5897 4.3717 -0.1 + vertex 23.5494 4.18291 0 + vertex 23.5494 4.18291 -0.1 + endloop + endfacet + facet normal 0.992713 -0.120506 0 + outer loop + vertex 23.5897 4.3717 0 + vertex 23.6129 4.5634 -0.1 + vertex 23.6129 4.5634 0 + endloop + endfacet + facet normal 0.992713 -0.120506 0 + outer loop + vertex 23.6129 4.5634 -0.1 + vertex 23.5897 4.3717 0 + vertex 23.5897 4.3717 -0.1 + endloop + endfacet + facet normal 0.99949 -0.0319444 0 + outer loop + vertex 23.6129 4.5634 0 + vertex 23.6192 4.7586 -0.1 + vertex 23.6192 4.7586 0 + endloop + endfacet + facet normal 0.99949 -0.0319444 0 + outer loop + vertex 23.6192 4.7586 -0.1 + vertex 23.6129 4.5634 0 + vertex 23.6129 4.5634 -0.1 + endloop + endfacet + facet normal 0.998522 0.054345 0 + outer loop + vertex 23.6192 4.7586 0 + vertex 23.6083 4.95794 -0.1 + vertex 23.6083 4.95794 0 + endloop + endfacet + facet normal 0.998522 0.054345 0 + outer loop + vertex 23.6083 4.95794 -0.1 + vertex 23.6192 4.7586 0 + vertex 23.6192 4.7586 -0.1 + endloop + endfacet + facet normal 0.984692 0.174301 0 + outer loop + vertex 23.6083 4.95794 0 + vertex 23.5351 5.37146 -0.1 + vertex 23.5351 5.37146 0 + endloop + endfacet + facet normal 0.984692 0.174301 0 + outer loop + vertex 23.5351 5.37146 -0.1 + vertex 23.6083 4.95794 0 + vertex 23.6083 4.95794 -0.1 + endloop + endfacet + facet normal 0.95097 0.309282 0 + outer loop + vertex 23.5351 5.37146 0 + vertex 23.3929 5.8089 -0.1 + vertex 23.3929 5.8089 0 + endloop + endfacet + facet normal 0.95097 0.309282 0 + outer loop + vertex 23.3929 5.8089 -0.1 + vertex 23.5351 5.37146 0 + vertex 23.5351 5.37146 -0.1 + endloop + endfacet + facet normal 0.910464 0.413588 0 + outer loop + vertex 23.3929 5.8089 0 + vertex 23.1811 6.27516 -0.1 + vertex 23.1811 6.27516 0 + endloop + endfacet + facet normal 0.910464 0.413588 0 + outer loop + vertex 23.1811 6.27516 -0.1 + vertex 23.3929 5.8089 0 + vertex 23.3929 5.8089 -0.1 + endloop + endfacet + facet normal 0.871161 0.490997 0 + outer loop + vertex 23.1811 6.27516 0 + vertex 22.8992 6.77518 -0.1 + vertex 22.8992 6.77518 0 + endloop + endfacet + facet normal 0.871161 0.490997 0 + outer loop + vertex 22.8992 6.77518 -0.1 + vertex 23.1811 6.27516 0 + vertex 23.1811 6.27516 -0.1 + endloop + endfacet + facet normal 0.839072 0.54402 0 + outer loop + vertex 22.8992 6.77518 0 + vertex 22.6364 7.18064 -0.1 + vertex 22.6364 7.18064 0 + endloop + endfacet + facet normal 0.839072 0.54402 0 + outer loop + vertex 22.6364 7.18064 -0.1 + vertex 22.8992 6.77518 0 + vertex 22.8992 6.77518 -0.1 + endloop + endfacet + facet normal 0.802153 0.597118 0 + outer loop + vertex 22.6364 7.18064 0 + vertex 22.3621 7.54907 -0.1 + vertex 22.3621 7.54907 0 + endloop + endfacet + facet normal 0.802153 0.597118 0 + outer loop + vertex 22.3621 7.54907 -0.1 + vertex 22.6364 7.18064 0 + vertex 22.6364 7.18064 -0.1 + endloop + endfacet + facet normal 0.754344 0.65648 0 + outer loop + vertex 22.3621 7.54907 0 + vertex 22.0631 7.89267 -0.1 + vertex 22.0631 7.89267 0 + endloop + endfacet + facet normal 0.754344 0.65648 0 + outer loop + vertex 22.0631 7.89267 -0.1 + vertex 22.3621 7.54907 0 + vertex 22.3621 7.54907 -0.1 + endloop + endfacet + facet normal 0.700509 0.713644 -0 + outer loop + vertex 22.0631 7.89267 -0.1 + vertex 21.7259 8.22365 0 + vertex 22.0631 7.89267 0 + endloop + endfacet + facet normal 0.700509 0.713644 0 + outer loop + vertex 21.7259 8.22365 0 + vertex 22.0631 7.89267 -0.1 + vertex 21.7259 8.22365 -0.1 + endloop + endfacet + facet normal 0.647802 0.761808 -0 + outer loop + vertex 21.7259 8.22365 -0.1 + vertex 21.3371 8.55423 0 + vertex 21.7259 8.22365 0 + endloop + endfacet + facet normal 0.647802 0.761808 0 + outer loop + vertex 21.3371 8.55423 0 + vertex 21.7259 8.22365 -0.1 + vertex 21.3371 8.55423 -0.1 + endloop + endfacet + facet normal 0.602358 0.798226 -0 + outer loop + vertex 21.3371 8.55423 -0.1 + vertex 20.8834 8.89663 0 + vertex 21.3371 8.55423 0 + endloop + endfacet + facet normal 0.602358 0.798226 0 + outer loop + vertex 20.8834 8.89663 0 + vertex 21.3371 8.55423 -0.1 + vertex 20.8834 8.89663 -0.1 + endloop + endfacet + facet normal 0.567155 0.823611 -0 + outer loop + vertex 20.8834 8.89663 -0.1 + vertex 20.3513 9.26304 0 + vertex 20.8834 8.89663 0 + endloop + endfacet + facet normal 0.567155 0.823611 0 + outer loop + vertex 20.3513 9.26304 0 + vertex 20.8834 8.89663 -0.1 + vertex 20.3513 9.26304 -0.1 + endloop + endfacet + facet normal 0.542271 0.840203 -0 + outer loop + vertex 20.3513 9.26304 -0.1 + vertex 19.7274 9.66569 0 + vertex 20.3513 9.26304 0 + endloop + endfacet + facet normal 0.542271 0.840203 0 + outer loop + vertex 19.7274 9.66569 0 + vertex 20.3513 9.26304 -0.1 + vertex 19.7274 9.66569 -0.1 + endloop + endfacet + facet normal 0.509213 0.86064 -0 + outer loop + vertex 19.7274 9.66569 -0.1 + vertex 19.4723 9.81661 0 + vertex 19.7274 9.66569 0 + endloop + endfacet + facet normal 0.509213 0.86064 0 + outer loop + vertex 19.4723 9.81661 0 + vertex 19.7274 9.66569 -0.1 + vertex 19.4723 9.81661 -0.1 + endloop + endfacet + facet normal 0.451586 0.892227 -0 + outer loop + vertex 19.4723 9.81661 -0.1 + vertex 19.2206 9.94402 0 + vertex 19.4723 9.81661 0 + endloop + endfacet + facet normal 0.451586 0.892227 0 + outer loop + vertex 19.2206 9.94402 0 + vertex 19.4723 9.81661 -0.1 + vertex 19.2206 9.94402 -0.1 + endloop + endfacet + facet normal 0.382649 0.923894 -0 + outer loop + vertex 19.2206 9.94402 -0.1 + vertex 18.9645 10.0501 0 + vertex 19.2206 9.94402 0 + endloop + endfacet + facet normal 0.382649 0.923894 0 + outer loop + vertex 18.9645 10.0501 0 + vertex 19.2206 9.94402 -0.1 + vertex 18.9645 10.0501 -0.1 + endloop + endfacet + facet normal 0.308251 0.951305 -0 + outer loop + vertex 18.9645 10.0501 -0.1 + vertex 18.6964 10.137 0 + vertex 18.9645 10.0501 0 + endloop + endfacet + facet normal 0.308251 0.951305 0 + outer loop + vertex 18.6964 10.137 0 + vertex 18.9645 10.0501 -0.1 + vertex 18.6964 10.137 -0.1 + endloop + endfacet + facet normal 0.235891 0.971779 -0 + outer loop + vertex 18.6964 10.137 -0.1 + vertex 18.4085 10.2069 0 + vertex 18.6964 10.137 0 + endloop + endfacet + facet normal 0.235891 0.971779 0 + outer loop + vertex 18.4085 10.2069 0 + vertex 18.6964 10.137 -0.1 + vertex 18.4085 10.2069 -0.1 + endloop + endfacet + facet normal 0.172 0.985097 -0 + outer loop + vertex 18.4085 10.2069 -0.1 + vertex 18.093 10.2619 0 + vertex 18.4085 10.2069 0 + endloop + endfacet + facet normal 0.172 0.985097 0 + outer loop + vertex 18.093 10.2619 0 + vertex 18.4085 10.2069 -0.1 + vertex 18.093 10.2619 -0.1 + endloop + endfacet + facet normal 0.0994696 0.995041 -0 + outer loop + vertex 18.093 10.2619 -0.1 + vertex 17.3487 10.3363 0 + vertex 18.093 10.2619 0 + endloop + endfacet + facet normal 0.0994696 0.995041 0 + outer loop + vertex 17.3487 10.3363 0 + vertex 18.093 10.2619 -0.1 + vertex 17.3487 10.3363 -0.1 + endloop + endfacet + facet normal 0.0510048 0.998698 -0 + outer loop + vertex 17.3487 10.3363 -0.1 + vertex 16.499 10.3797 0 + vertex 17.3487 10.3363 0 + endloop + endfacet + facet normal 0.0510048 0.998698 0 + outer loop + vertex 16.499 10.3797 0 + vertex 17.3487 10.3363 -0.1 + vertex 16.499 10.3797 -0.1 + endloop + endfacet + facet normal -0.0333465 0.999444 0 + outer loop + vertex 16.499 10.3797 -0.1 + vertex 16.2187 10.3704 0 + vertex 16.499 10.3797 0 + endloop + endfacet + facet normal -0.0333465 0.999444 0 + outer loop + vertex 16.2187 10.3704 0 + vertex 16.499 10.3797 -0.1 + vertex 16.2187 10.3704 -0.1 + endloop + endfacet + facet normal -0.179208 0.983811 0 + outer loop + vertex 16.2187 10.3704 -0.1 + vertex 16.005 10.3315 0 + vertex 16.2187 10.3704 0 + endloop + endfacet + facet normal -0.179208 0.983811 0 + outer loop + vertex 16.005 10.3315 0 + vertex 16.2187 10.3704 -0.1 + vertex 16.005 10.3315 -0.1 + endloop + endfacet + facet normal -0.405411 0.914135 0 + outer loop + vertex 16.005 10.3315 -0.1 + vertex 15.8355 10.2563 0 + vertex 16.005 10.3315 0 + endloop + endfacet + facet normal -0.405411 0.914135 0 + outer loop + vertex 15.8355 10.2563 0 + vertex 16.005 10.3315 -0.1 + vertex 15.8355 10.2563 -0.1 + endloop + endfacet + facet normal -0.624597 0.780947 0 + outer loop + vertex 15.8355 10.2563 -0.1 + vertex 15.6879 10.1383 0 + vertex 15.8355 10.2563 0 + endloop + endfacet + facet normal -0.624597 0.780947 0 + outer loop + vertex 15.6879 10.1383 0 + vertex 15.8355 10.2563 -0.1 + vertex 15.6879 10.1383 -0.1 + endloop + endfacet + facet normal -0.749396 0.662122 0 + outer loop + vertex 15.5399 9.97068 -0.1 + vertex 15.6879 10.1383 0 + vertex 15.6879 10.1383 -0.1 + endloop + endfacet + facet normal -0.749396 0.662122 0 + outer loop + vertex 15.6879 10.1383 0 + vertex 15.5399 9.97068 -0.1 + vertex 15.5399 9.97068 0 + endloop + endfacet + facet normal -0.794739 0.606951 0 + outer loop + vertex 15.369 9.74689 -0.1 + vertex 15.5399 9.97068 0 + vertex 15.5399 9.97068 -0.1 + endloop + endfacet + facet normal -0.794739 0.606951 0 + outer loop + vertex 15.5399 9.97068 0 + vertex 15.369 9.74689 -0.1 + vertex 15.369 9.74689 0 + endloop + endfacet + facet normal -0.812079 0.583548 0 + outer loop + vertex 15.213 9.52982 -0.1 + vertex 15.369 9.74689 0 + vertex 15.369 9.74689 -0.1 + endloop + endfacet + facet normal -0.812079 0.583548 0 + outer loop + vertex 15.369 9.74689 0 + vertex 15.213 9.52982 -0.1 + vertex 15.213 9.52982 0 + endloop + endfacet + facet normal -0.851006 0.525156 0 + outer loop + vertex 15.0942 9.33737 -0.1 + vertex 15.213 9.52982 0 + vertex 15.213 9.52982 -0.1 + endloop + endfacet + facet normal -0.851006 0.525156 0 + outer loop + vertex 15.213 9.52982 0 + vertex 15.0942 9.33737 -0.1 + vertex 15.0942 9.33737 0 + endloop + endfacet + facet normal -0.909184 0.416395 0 + outer loop + vertex 15.0092 9.15168 -0.1 + vertex 15.0942 9.33737 0 + vertex 15.0942 9.33737 -0.1 + endloop + endfacet + facet normal -0.909184 0.416395 0 + outer loop + vertex 15.0942 9.33737 0 + vertex 15.0092 9.15168 -0.1 + vertex 15.0092 9.15168 0 + endloop + endfacet + facet normal -0.963304 0.268412 0 + outer loop + vertex 14.9543 8.95485 -0.1 + vertex 15.0092 9.15168 0 + vertex 15.0092 9.15168 -0.1 + endloop + endfacet + facet normal -0.963304 0.268412 0 + outer loop + vertex 15.0092 9.15168 0 + vertex 14.9543 8.95485 -0.1 + vertex 14.9543 8.95485 0 + endloop + endfacet + facet normal -0.99232 0.1237 0 + outer loop + vertex 14.9262 8.72903 -0.1 + vertex 14.9543 8.95485 0 + vertex 14.9543 8.95485 -0.1 + endloop + endfacet + facet normal -0.99232 0.1237 0 + outer loop + vertex 14.9543 8.95485 0 + vertex 14.9262 8.72903 -0.1 + vertex 14.9262 8.72903 0 + endloop + endfacet + facet normal -0.999834 0.0182102 0 + outer loop + vertex 14.9212 8.45633 -0.1 + vertex 14.9262 8.72903 0 + vertex 14.9262 8.72903 -0.1 + endloop + endfacet + facet normal -0.999834 0.0182102 0 + outer loop + vertex 14.9262 8.72903 0 + vertex 14.9212 8.45633 -0.1 + vertex 14.9212 8.45633 0 + endloop + endfacet + facet normal -0.998195 -0.0600559 0 + outer loop + vertex 14.9668 7.69881 -0.1 + vertex 14.9212 8.45633 0 + vertex 14.9212 8.45633 -0.1 + endloop + endfacet + facet normal -0.998195 -0.0600559 0 + outer loop + vertex 14.9212 8.45633 0 + vertex 14.9668 7.69881 -0.1 + vertex 14.9668 7.69881 0 + endloop + endfacet + facet normal -0.99465 -0.103302 0 + outer loop + vertex 15.0249 7.13954 -0.1 + vertex 14.9668 7.69881 0 + vertex 14.9668 7.69881 -0.1 + endloop + endfacet + facet normal -0.99465 -0.103302 0 + outer loop + vertex 14.9668 7.69881 0 + vertex 15.0249 7.13954 -0.1 + vertex 15.0249 7.13954 0 + endloop + endfacet + facet normal -0.989699 -0.143163 0 + outer loop + vertex 15.1095 6.5543 -0.1 + vertex 15.0249 7.13954 0 + vertex 15.0249 7.13954 -0.1 + endloop + endfacet + facet normal -0.989699 -0.143163 0 + outer loop + vertex 15.0249 7.13954 0 + vertex 15.1095 6.5543 -0.1 + vertex 15.1095 6.5543 0 + endloop + endfacet + facet normal -0.984174 -0.177204 0 + outer loop + vertex 15.2183 5.95043 -0.1 + vertex 15.1095 6.5543 0 + vertex 15.1095 6.5543 -0.1 + endloop + endfacet + facet normal -0.984174 -0.177204 0 + outer loop + vertex 15.1095 6.5543 0 + vertex 15.2183 5.95043 -0.1 + vertex 15.2183 5.95043 0 + endloop + endfacet + facet normal -0.978296 -0.207212 0 + outer loop + vertex 15.3486 5.33522 -0.1 + vertex 15.2183 5.95043 0 + vertex 15.2183 5.95043 -0.1 + endloop + endfacet + facet normal -0.978296 -0.207212 0 + outer loop + vertex 15.2183 5.95043 0 + vertex 15.3486 5.33522 -0.1 + vertex 15.3486 5.33522 0 + endloop + endfacet + facet normal -0.972111 -0.23452 0 + outer loop + vertex 15.498 4.716 -0.1 + vertex 15.3486 5.33522 0 + vertex 15.3486 5.33522 -0.1 + endloop + endfacet + facet normal -0.972111 -0.23452 0 + outer loop + vertex 15.3486 5.33522 0 + vertex 15.498 4.716 -0.1 + vertex 15.498 4.716 0 + endloop + endfacet + facet normal -0.965559 -0.260185 0 + outer loop + vertex 15.6639 4.10009 -0.1 + vertex 15.498 4.716 0 + vertex 15.498 4.716 -0.1 + endloop + endfacet + facet normal -0.965559 -0.260185 0 + outer loop + vertex 15.498 4.716 0 + vertex 15.6639 4.10009 -0.1 + vertex 15.6639 4.10009 0 + endloop + endfacet + facet normal -0.95471 -0.297537 0 + outer loop + vertex 16.0356 2.90743 -0.1 + vertex 15.6639 4.10009 0 + vertex 15.6639 4.10009 -0.1 + endloop + endfacet + facet normal -0.95471 -0.297537 0 + outer loop + vertex 15.6639 4.10009 0 + vertex 16.0356 2.90743 -0.1 + vertex 16.0356 2.90743 0 + endloop + endfacet + facet normal -0.941754 -0.336302 0 + outer loop + vertex 16.2363 2.34533 -0.1 + vertex 16.0356 2.90743 0 + vertex 16.0356 2.90743 -0.1 + endloop + endfacet + facet normal -0.941754 -0.336302 0 + outer loop + vertex 16.0356 2.90743 0 + vertex 16.2363 2.34533 -0.1 + vertex 16.2363 2.34533 0 + endloop + endfacet + facet normal -0.931176 -0.364571 0 + outer loop + vertex 16.4437 1.81579 -0.1 + vertex 16.2363 2.34533 0 + vertex 16.2363 2.34533 -0.1 + endloop + endfacet + facet normal -0.931176 -0.364571 0 + outer loop + vertex 16.2363 2.34533 0 + vertex 16.4437 1.81579 -0.1 + vertex 16.4437 1.81579 0 + endloop + endfacet + facet normal -0.91808 -0.396396 0 + outer loop + vertex 16.6551 1.32614 -0.1 + vertex 16.4437 1.81579 0 + vertex 16.4437 1.81579 -0.1 + endloop + endfacet + facet normal -0.91808 -0.396396 0 + outer loop + vertex 16.4437 1.81579 0 + vertex 16.6551 1.32614 -0.1 + vertex 16.6551 1.32614 0 + endloop + endfacet + facet normal -0.901015 -0.433787 0 + outer loop + vertex 16.8681 0.883681 -0.1 + vertex 16.6551 1.32614 0 + vertex 16.6551 1.32614 -0.1 + endloop + endfacet + facet normal -0.901015 -0.433787 0 + outer loop + vertex 16.6551 1.32614 0 + vertex 16.8681 0.883681 -0.1 + vertex 16.8681 0.883681 0 + endloop + endfacet + facet normal -0.877409 -0.479744 0 + outer loop + vertex 17.0802 0.495742 -0.1 + vertex 16.8681 0.883681 0 + vertex 16.8681 0.883681 -0.1 + endloop + endfacet + facet normal -0.877409 -0.479744 0 + outer loop + vertex 16.8681 0.883681 0 + vertex 17.0802 0.495742 -0.1 + vertex 17.0802 0.495742 0 + endloop + endfacet + facet normal -0.842258 -0.539075 0 + outer loop + vertex 17.2889 0.169637 -0.1 + vertex 17.0802 0.495742 0 + vertex 17.0802 0.495742 -0.1 + endloop + endfacet + facet normal -0.842258 -0.539075 0 + outer loop + vertex 17.0802 0.495742 0 + vertex 17.2889 0.169637 -0.1 + vertex 17.2889 0.169637 0 + endloop + endfacet + facet normal -0.784932 -0.619582 0 + outer loop + vertex 17.4918 -0.0873203 -0.1 + vertex 17.2889 0.169637 0 + vertex 17.2889 0.169637 -0.1 + endloop + endfacet + facet normal -0.784932 -0.619582 0 + outer loop + vertex 17.2889 0.169637 0 + vertex 17.4918 -0.0873203 -0.1 + vertex 17.4918 -0.0873203 0 + endloop + endfacet + facet normal -0.680344 -0.732893 0 + outer loop + vertex 17.4918 -0.0873203 -0.1 + vertex 17.6862 -0.267812 0 + vertex 17.4918 -0.0873203 0 + endloop + endfacet + facet normal -0.680344 -0.732893 -0 + outer loop + vertex 17.6862 -0.267812 0 + vertex 17.4918 -0.0873203 -0.1 + vertex 17.6862 -0.267812 -0.1 + endloop + endfacet + facet normal -0.560342 -0.828261 0 + outer loop + vertex 17.6862 -0.267812 -0.1 + vertex 17.8284 -0.36402 0 + vertex 17.6862 -0.267812 0 + endloop + endfacet + facet normal -0.560342 -0.828261 -0 + outer loop + vertex 17.8284 -0.36402 0 + vertex 17.6862 -0.267812 -0.1 + vertex 17.8284 -0.36402 -0.1 + endloop + endfacet + facet normal -0.436276 -0.899813 0 + outer loop + vertex 17.8284 -0.36402 -0.1 + vertex 17.9646 -0.430052 0 + vertex 17.8284 -0.36402 0 + endloop + endfacet + facet normal -0.436276 -0.899813 -0 + outer loop + vertex 17.9646 -0.430052 0 + vertex 17.8284 -0.36402 -0.1 + vertex 17.9646 -0.430052 -0.1 + endloop + endfacet + facet normal -0.23232 -0.972639 0 + outer loop + vertex 17.9646 -0.430052 -0.1 + vertex 18.1098 -0.464739 0 + vertex 17.9646 -0.430052 0 + endloop + endfacet + facet normal -0.23232 -0.972639 -0 + outer loop + vertex 18.1098 -0.464739 0 + vertex 17.9646 -0.430052 -0.1 + vertex 18.1098 -0.464739 -0.1 + endloop + endfacet + facet normal -0.0128436 -0.999918 0 + outer loop + vertex 18.1098 -0.464739 -0.1 + vertex 18.2791 -0.466914 0 + vertex 18.1098 -0.464739 0 + endloop + endfacet + facet normal -0.0128436 -0.999918 -0 + outer loop + vertex 18.2791 -0.466914 0 + vertex 18.1098 -0.464739 -0.1 + vertex 18.2791 -0.466914 -0.1 + endloop + endfacet + facet normal 0.149466 -0.988767 0 + outer loop + vertex 18.2791 -0.466914 -0.1 + vertex 18.4876 -0.435405 0 + vertex 18.2791 -0.466914 0 + endloop + endfacet + facet normal 0.149466 -0.988767 0 + outer loop + vertex 18.4876 -0.435405 0 + vertex 18.2791 -0.466914 -0.1 + vertex 18.4876 -0.435405 -0.1 + endloop + endfacet + facet normal 0.244974 -0.96953 0 + outer loop + vertex 18.4876 -0.435405 -0.1 + vertex 18.7502 -0.369046 0 + vertex 18.4876 -0.435405 0 + endloop + endfacet + facet normal 0.244974 -0.96953 0 + outer loop + vertex 18.7502 -0.369046 0 + vertex 18.4876 -0.435405 -0.1 + vertex 18.7502 -0.369046 -0.1 + endloop + endfacet + facet normal 0.307753 -0.951466 0 + outer loop + vertex 18.7502 -0.369046 -0.1 + vertex 19.4982 -0.127099 0 + vertex 18.7502 -0.369046 0 + endloop + endfacet + facet normal 0.307753 -0.951466 0 + outer loop + vertex 19.4982 -0.127099 0 + vertex 18.7502 -0.369046 -0.1 + vertex 19.4982 -0.127099 -0.1 + endloop + endfacet + facet normal 0.301432 -0.953488 0 + outer loop + vertex 19.4982 -0.127099 -0.1 + vertex 20.0432 0.0451876 0 + vertex 19.4982 -0.127099 0 + endloop + endfacet + facet normal 0.301432 -0.953488 0 + outer loop + vertex 20.0432 0.0451876 0 + vertex 19.4982 -0.127099 -0.1 + vertex 20.0432 0.0451876 -0.1 + endloop + endfacet + facet normal 0.251907 -0.967752 0 + outer loop + vertex 20.0432 0.0451876 -0.1 + vertex 20.5155 0.168137 0 + vertex 20.0432 0.0451876 0 + endloop + endfacet + facet normal 0.251907 -0.967752 0 + outer loop + vertex 20.5155 0.168137 0 + vertex 20.0432 0.0451876 -0.1 + vertex 20.5155 0.168137 -0.1 + endloop + endfacet + facet normal 0.175432 -0.984492 0 + outer loop + vertex 20.5155 0.168137 -0.1 + vertex 20.8646 0.230347 0 + vertex 20.5155 0.168137 0 + endloop + endfacet + facet normal 0.175432 -0.984492 0 + outer loop + vertex 20.8646 0.230347 0 + vertex 20.5155 0.168137 -0.1 + vertex 20.8646 0.230347 -0.1 + endloop + endfacet + facet normal 0.0422921 -0.999105 0 + outer loop + vertex 20.8646 0.230347 -0.1 + vertex 20.9772 0.235111 0 + vertex 20.8646 0.230347 0 + endloop + endfacet + facet normal 0.0422921 -0.999105 0 + outer loop + vertex 20.9772 0.235111 0 + vertex 20.8646 0.230347 -0.1 + vertex 20.9772 0.235111 -0.1 + endloop + endfacet + facet normal -0.228021 -0.973656 0 + outer loop + vertex 20.9772 0.235111 -0.1 + vertex 21.0399 0.220413 0 + vertex 20.9772 0.235111 0 + endloop + endfacet + facet normal -0.228021 -0.973656 -0 + outer loop + vertex 21.0399 0.220413 0 + vertex 20.9772 0.235111 -0.1 + vertex 21.0399 0.220413 -0.1 + endloop + endfacet + facet normal -0.836215 -0.548402 0 + outer loop + vertex 21.0726 0.170561 -0.1 + vertex 21.0399 0.220413 0 + vertex 21.0399 0.220413 -0.1 + endloop + endfacet + facet normal -0.836215 -0.548402 0 + outer loop + vertex 21.0399 0.220413 0 + vertex 21.0726 0.170561 -0.1 + vertex 21.0726 0.170561 0 + endloop + endfacet + facet normal -0.964289 -0.264852 0 + outer loop + vertex 21.099 0.0745682 -0.1 + vertex 21.0726 0.170561 0 + vertex 21.0726 0.170561 -0.1 + endloop + endfacet + facet normal -0.964289 -0.264852 0 + outer loop + vertex 21.0726 0.170561 0 + vertex 21.099 0.0745682 -0.1 + vertex 21.099 0.0745682 0 + endloop + endfacet + facet normal -0.994432 -0.105376 0 + outer loop + vertex 21.1316 -0.233279 -0.1 + vertex 21.099 0.0745682 0 + vertex 21.099 0.0745682 -0.1 + endloop + endfacet + facet normal -0.994432 -0.105376 0 + outer loop + vertex 21.099 0.0745682 0 + vertex 21.1316 -0.233279 -0.1 + vertex 21.1316 -0.233279 0 + endloop + endfacet + facet normal -0.999957 -0.00925488 0 + outer loop + vertex 21.1355 -0.658014 -0.1 + vertex 21.1316 -0.233279 0 + vertex 21.1316 -0.233279 -0.1 + endloop + endfacet + facet normal -0.999957 -0.00925488 0 + outer loop + vertex 21.1316 -0.233279 0 + vertex 21.1355 -0.658014 -0.1 + vertex 21.1355 -0.658014 0 + endloop + endfacet + facet normal -0.998524 0.0543158 0 + outer loop + vertex 21.1085 -1.15452 -0.1 + vertex 21.1355 -0.658014 0 + vertex 21.1355 -0.658014 -0.1 + endloop + endfacet + facet normal -0.998524 0.0543158 0 + outer loop + vertex 21.1355 -0.658014 0 + vertex 21.1085 -1.15452 -0.1 + vertex 21.1085 -1.15452 0 + endloop + endfacet + facet normal -0.992587 0.121535 0 + outer loop + vertex 21.0399 -1.71534 -0.1 + vertex 21.1085 -1.15452 0 + vertex 21.1085 -1.15452 -0.1 + endloop + endfacet + facet normal -0.992587 0.121535 0 + outer loop + vertex 21.1085 -1.15452 0 + vertex 21.0399 -1.71534 -0.1 + vertex 21.0399 -1.71534 0 + endloop + endfacet + facet normal -0.978633 0.205615 0 + outer loop + vertex 20.9878 -1.96317 -0.1 + vertex 21.0399 -1.71534 0 + vertex 21.0399 -1.71534 -0.1 + endloop + endfacet + facet normal -0.978633 0.205615 0 + outer loop + vertex 21.0399 -1.71534 0 + vertex 20.9878 -1.96317 -0.1 + vertex 20.9878 -1.96317 0 + endloop + endfacet + facet normal -0.959237 0.282603 0 + outer loop + vertex 20.9199 -2.19366 -0.1 + vertex 20.9878 -1.96317 0 + vertex 20.9878 -1.96317 -0.1 + endloop + endfacet + facet normal -0.959237 0.282603 0 + outer loop + vertex 20.9878 -1.96317 0 + vertex 20.9199 -2.19366 -0.1 + vertex 20.9199 -2.19366 0 + endloop + endfacet + facet normal -0.92823 0.372008 0 + outer loop + vertex 20.8331 -2.41014 -0.1 + vertex 20.9199 -2.19366 0 + vertex 20.9199 -2.19366 -0.1 + endloop + endfacet + facet normal -0.92823 0.372008 0 + outer loop + vertex 20.9199 -2.19366 0 + vertex 20.8331 -2.41014 -0.1 + vertex 20.8331 -2.41014 0 + endloop + endfacet + facet normal -0.884337 0.46685 0 + outer loop + vertex 20.7245 -2.61588 -0.1 + vertex 20.8331 -2.41014 0 + vertex 20.8331 -2.41014 -0.1 + endloop + endfacet + facet normal -0.884337 0.46685 0 + outer loop + vertex 20.8331 -2.41014 0 + vertex 20.7245 -2.61588 -0.1 + vertex 20.7245 -2.61588 0 + endloop + endfacet + facet normal -0.829583 0.558383 0 + outer loop + vertex 20.591 -2.8142 -0.1 + vertex 20.7245 -2.61588 0 + vertex 20.7245 -2.61588 -0.1 + endloop + endfacet + facet normal -0.829583 0.558383 0 + outer loop + vertex 20.7245 -2.61588 0 + vertex 20.591 -2.8142 -0.1 + vertex 20.591 -2.8142 0 + endloop + endfacet + facet normal -0.769117 0.639107 0 + outer loop + vertex 20.4297 -3.0084 -0.1 + vertex 20.591 -2.8142 0 + vertex 20.591 -2.8142 -0.1 + endloop + endfacet + facet normal -0.769117 0.639107 0 + outer loop + vertex 20.591 -2.8142 0 + vertex 20.4297 -3.0084 -0.1 + vertex 20.4297 -3.0084 0 + endloop + endfacet + facet normal -0.709135 0.705072 0 + outer loop + vertex 20.2374 -3.20177 -0.1 + vertex 20.4297 -3.0084 0 + vertex 20.4297 -3.0084 -0.1 + endloop + endfacet + facet normal -0.709135 0.705072 0 + outer loop + vertex 20.4297 -3.0084 0 + vertex 20.2374 -3.20177 -0.1 + vertex 20.2374 -3.20177 0 + endloop + endfacet + facet normal -0.654612 0.755965 0 + outer loop + vertex 20.2374 -3.20177 -0.1 + vertex 20.0112 -3.39762 0 + vertex 20.2374 -3.20177 0 + endloop + endfacet + facet normal -0.654612 0.755965 0 + outer loop + vertex 20.0112 -3.39762 0 + vertex 20.2374 -3.20177 -0.1 + vertex 20.0112 -3.39762 -0.1 + endloop + endfacet + facet normal -0.588742 0.808321 0 + outer loop + vertex 20.0112 -3.39762 -0.1 + vertex 19.4451 -3.80993 0 + vertex 20.0112 -3.39762 0 + endloop + endfacet + facet normal -0.588742 0.808321 0 + outer loop + vertex 19.4451 -3.80993 0 + vertex 20.0112 -3.39762 -0.1 + vertex 19.4451 -3.80993 -0.1 + endloop + endfacet + facet normal -0.530543 0.847658 0 + outer loop + vertex 19.4451 -3.80993 -0.1 + vertex 18.7073 -4.27174 0 + vertex 19.4451 -3.80993 0 + endloop + endfacet + facet normal -0.530543 0.847658 0 + outer loop + vertex 18.7073 -4.27174 0 + vertex 19.4451 -3.80993 -0.1 + vertex 18.7073 -4.27174 -0.1 + endloop + endfacet + facet normal -0.499058 0.866569 0 + outer loop + vertex 18.7073 -4.27174 -0.1 + vertex 17.7736 -4.80944 0 + vertex 18.7073 -4.27174 0 + endloop + endfacet + facet normal -0.499058 0.866569 0 + outer loop + vertex 17.7736 -4.80944 0 + vertex 18.7073 -4.27174 -0.1 + vertex 17.7736 -4.80944 -0.1 + endloop + endfacet + facet normal -0.476856 0.878981 0 + outer loop + vertex 17.7736 -4.80944 -0.1 + vertex 16.3254 -5.59514 0 + vertex 17.7736 -4.80944 0 + endloop + endfacet + facet normal -0.476856 0.878981 0 + outer loop + vertex 16.3254 -5.59514 0 + vertex 17.7736 -4.80944 -0.1 + vertex 16.3254 -5.59514 -0.1 + endloop + endfacet + facet normal -0.451418 0.892312 0 + outer loop + vertex 16.3254 -5.59514 -0.1 + vertex 15.6549 -5.93433 0 + vertex 16.3254 -5.59514 0 + endloop + endfacet + facet normal -0.451418 0.892312 0 + outer loop + vertex 15.6549 -5.93433 0 + vertex 16.3254 -5.59514 -0.1 + vertex 15.6549 -5.93433 -0.1 + endloop + endfacet + facet normal -0.429833 0.902908 0 + outer loop + vertex 15.6549 -5.93433 -0.1 + vertex 15.0129 -6.23993 0 + vertex 15.6549 -5.93433 0 + endloop + endfacet + facet normal -0.429833 0.902908 0 + outer loop + vertex 15.0129 -6.23993 0 + vertex 15.6549 -5.93433 -0.1 + vertex 15.0129 -6.23993 -0.1 + endloop + endfacet + facet normal -0.404408 0.914579 0 + outer loop + vertex 15.0129 -6.23993 -0.1 + vertex 14.3941 -6.51356 0 + vertex 15.0129 -6.23993 0 + endloop + endfacet + facet normal -0.404408 0.914579 0 + outer loop + vertex 14.3941 -6.51356 0 + vertex 15.0129 -6.23993 -0.1 + vertex 14.3941 -6.51356 -0.1 + endloop + endfacet + facet normal -0.375168 0.926957 0 + outer loop + vertex 14.3941 -6.51356 -0.1 + vertex 13.793 -6.75686 0 + vertex 14.3941 -6.51356 0 + endloop + endfacet + facet normal -0.375168 0.926957 0 + outer loop + vertex 13.793 -6.75686 0 + vertex 14.3941 -6.51356 -0.1 + vertex 13.793 -6.75686 -0.1 + endloop + endfacet + facet normal -0.342394 0.939557 0 + outer loop + vertex 13.793 -6.75686 -0.1 + vertex 13.2041 -6.97145 0 + vertex 13.793 -6.75686 0 + endloop + endfacet + facet normal -0.342394 0.939557 0 + outer loop + vertex 13.2041 -6.97145 0 + vertex 13.793 -6.75686 -0.1 + vertex 13.2041 -6.97145 -0.1 + endloop + endfacet + facet normal -0.306665 0.951818 0 + outer loop + vertex 13.2041 -6.97145 -0.1 + vertex 12.6221 -7.15898 0 + vertex 13.2041 -6.97145 0 + endloop + endfacet + facet normal -0.306665 0.951818 0 + outer loop + vertex 12.6221 -7.15898 0 + vertex 13.2041 -6.97145 -0.1 + vertex 12.6221 -7.15898 -0.1 + endloop + endfacet + facet normal -0.268881 0.963173 0 + outer loop + vertex 12.6221 -7.15898 -0.1 + vertex 12.0414 -7.32107 0 + vertex 12.6221 -7.15898 0 + endloop + endfacet + facet normal -0.268881 0.963173 0 + outer loop + vertex 12.0414 -7.32107 0 + vertex 12.6221 -7.15898 -0.1 + vertex 12.0414 -7.32107 -0.1 + endloop + endfacet + facet normal -0.230173 0.97315 0 + outer loop + vertex 12.0414 -7.32107 -0.1 + vertex 11.4568 -7.45935 0 + vertex 12.0414 -7.32107 0 + endloop + endfacet + facet normal -0.230173 0.97315 0 + outer loop + vertex 11.4568 -7.45935 0 + vertex 12.0414 -7.32107 -0.1 + vertex 11.4568 -7.45935 -0.1 + endloop + endfacet + facet normal -0.191808 0.981433 0 + outer loop + vertex 11.4568 -7.45935 -0.1 + vertex 10.8627 -7.57545 0 + vertex 11.4568 -7.45935 0 + endloop + endfacet + facet normal -0.191808 0.981433 0 + outer loop + vertex 10.8627 -7.57545 0 + vertex 11.4568 -7.45935 -0.1 + vertex 10.8627 -7.57545 -0.1 + endloop + endfacet + facet normal -0.155029 0.98791 0 + outer loop + vertex 10.8627 -7.57545 -0.1 + vertex 10.2538 -7.67101 0 + vertex 10.8627 -7.57545 0 + endloop + endfacet + facet normal -0.155029 0.98791 0 + outer loop + vertex 10.2538 -7.67101 0 + vertex 10.8627 -7.57545 -0.1 + vertex 10.2538 -7.67101 -0.1 + endloop + endfacet + facet normal -0.120913 0.992663 0 + outer loop + vertex 10.2538 -7.67101 -0.1 + vertex 9.62459 -7.74765 0 + vertex 10.2538 -7.67101 0 + endloop + endfacet + facet normal -0.120913 0.992663 0 + outer loop + vertex 9.62459 -7.74765 0 + vertex 10.2538 -7.67101 -0.1 + vertex 9.62459 -7.74765 -0.1 + endloop + endfacet + facet normal -0.0902671 0.995918 0 + outer loop + vertex 9.62459 -7.74765 -0.1 + vertex 8.96966 -7.80701 0 + vertex 9.62459 -7.74765 0 + endloop + endfacet + facet normal -0.0902671 0.995918 0 + outer loop + vertex 8.96966 -7.80701 0 + vertex 9.62459 -7.74765 -0.1 + vertex 8.96966 -7.80701 -0.1 + endloop + endfacet + facet normal -0.0520328 0.998645 0 + outer loop + vertex 8.96966 -7.80701 -0.1 + vertex 7.56097 -7.88041 0 + vertex 8.96966 -7.80701 0 + endloop + endfacet + facet normal -0.0520328 0.998645 0 + outer loop + vertex 7.56097 -7.88041 0 + vertex 8.96966 -7.80701 -0.1 + vertex 7.56097 -7.88041 -0.1 + endloop + endfacet + facet normal -0.0211888 0.999775 0 + outer loop + vertex 7.56097 -7.88041 -0.1 + vertex 6.04455 -7.91255 0 + vertex 7.56097 -7.88041 0 + endloop + endfacet + facet normal -0.0211888 0.999775 0 + outer loop + vertex 6.04455 -7.91255 0 + vertex 7.56097 -7.88041 -0.1 + vertex 6.04455 -7.91255 -0.1 + endloop + endfacet + facet normal 0.00984088 0.999952 -0 + outer loop + vertex 6.04455 -7.91255 -0.1 + vertex 5.49083 -7.9071 0 + vertex 6.04455 -7.91255 0 + endloop + endfacet + facet normal 0.00984088 0.999952 0 + outer loop + vertex 5.49083 -7.9071 0 + vertex 6.04455 -7.91255 -0.1 + vertex 5.49083 -7.9071 -0.1 + endloop + endfacet + facet normal 0.0493656 0.998781 -0 + outer loop + vertex 5.49083 -7.9071 -0.1 + vertex 5.0434 -7.88498 0 + vertex 5.49083 -7.9071 0 + endloop + endfacet + facet normal 0.0493656 0.998781 0 + outer loop + vertex 5.0434 -7.88498 0 + vertex 5.49083 -7.9071 -0.1 + vertex 5.0434 -7.88498 -0.1 + endloop + endfacet + facet normal 0.110735 0.99385 -0 + outer loop + vertex 5.0434 -7.88498 -0.1 + vertex 4.67971 -7.84446 0 + vertex 5.0434 -7.88498 0 + endloop + endfacet + facet normal 0.110735 0.99385 0 + outer loop + vertex 4.67971 -7.84446 0 + vertex 5.0434 -7.88498 -0.1 + vertex 4.67971 -7.84446 -0.1 + endloop + endfacet + facet normal 0.196653 0.980473 -0 + outer loop + vertex 4.67971 -7.84446 -0.1 + vertex 4.37723 -7.78379 0 + vertex 4.67971 -7.84446 0 + endloop + endfacet + facet normal 0.196653 0.980473 0 + outer loop + vertex 4.37723 -7.78379 0 + vertex 4.67971 -7.84446 -0.1 + vertex 4.37723 -7.78379 -0.1 + endloop + endfacet + facet normal 0.298658 0.95436 -0 + outer loop + vertex 4.37723 -7.78379 -0.1 + vertex 4.11342 -7.70123 0 + vertex 4.37723 -7.78379 0 + endloop + endfacet + facet normal 0.298658 0.95436 0 + outer loop + vertex 4.11342 -7.70123 0 + vertex 4.37723 -7.78379 -0.1 + vertex 4.11342 -7.70123 -0.1 + endloop + endfacet + facet normal 0.39403 0.919098 -0 + outer loop + vertex 4.11342 -7.70123 -0.1 + vertex 3.86574 -7.59505 0 + vertex 4.11342 -7.70123 0 + endloop + endfacet + facet normal 0.39403 0.919098 0 + outer loop + vertex 3.86574 -7.59505 0 + vertex 4.11342 -7.70123 -0.1 + vertex 3.86574 -7.59505 -0.1 + endloop + endfacet + facet normal 0.472054 0.88157 -0 + outer loop + vertex 3.86574 -7.59505 -0.1 + vertex 3.40104 -7.34622 0 + vertex 3.86574 -7.59505 0 + endloop + endfacet + facet normal 0.472054 0.88157 0 + outer loop + vertex 3.40104 -7.34622 0 + vertex 3.86574 -7.59505 -0.1 + vertex 3.40104 -7.34622 -0.1 + endloop + endfacet + facet normal 0.50336 0.864077 -0 + outer loop + vertex 3.40104 -7.34622 -0.1 + vertex 2.71562 -6.94693 0 + vertex 3.40104 -7.34622 0 + endloop + endfacet + facet normal 0.50336 0.864077 0 + outer loop + vertex 2.71562 -6.94693 0 + vertex 3.40104 -7.34622 -0.1 + vertex 2.71562 -6.94693 -0.1 + endloop + endfacet + facet normal 0.526285 0.850308 -0 + outer loop + vertex 2.71562 -6.94693 -0.1 + vertex 1.05193 -5.91722 0 + vertex 2.71562 -6.94693 0 + endloop + endfacet + facet normal 0.526285 0.850308 0 + outer loop + vertex 1.05193 -5.91722 0 + vertex 2.71562 -6.94693 -0.1 + vertex 1.05193 -5.91722 -0.1 + endloop + endfacet + facet normal 0.529768 0.848143 -0 + outer loop + vertex 1.05193 -5.91722 -0.1 + vertex -0.694871 -4.82613 0 + vertex 1.05193 -5.91722 0 + endloop + endfacet + facet normal 0.529768 0.848143 0 + outer loop + vertex -0.694871 -4.82613 0 + vertex 1.05193 -5.91722 -0.1 + vertex -0.694871 -4.82613 -0.1 + endloop + endfacet + facet normal 0.507777 0.861489 -0 + outer loop + vertex -0.694871 -4.82613 -0.1 + vertex -2.47177 -3.7788 0 + vertex -0.694871 -4.82613 0 + endloop + endfacet + facet normal 0.507777 0.861489 0 + outer loop + vertex -2.47177 -3.7788 0 + vertex -0.694871 -4.82613 -0.1 + vertex -2.47177 -3.7788 -0.1 + endloop + endfacet + facet normal 0.55979 0.828634 -0 + outer loop + vertex -2.47177 -3.7788 -0.1 + vertex -2.8551 -3.51984 0 + vertex -2.47177 -3.7788 0 + endloop + endfacet + facet normal 0.55979 0.828634 0 + outer loop + vertex -2.8551 -3.51984 0 + vertex -2.47177 -3.7788 -0.1 + vertex -2.8551 -3.51984 -0.1 + endloop + endfacet + facet normal 0.612658 0.790348 -0 + outer loop + vertex -2.8551 -3.51984 -0.1 + vertex -3.18232 -3.26618 0 + vertex -2.8551 -3.51984 0 + endloop + endfacet + facet normal 0.612658 0.790348 0 + outer loop + vertex -3.18232 -3.26618 0 + vertex -2.8551 -3.51984 -0.1 + vertex -3.18232 -3.26618 -0.1 + endloop + endfacet + facet normal 0.673628 0.73907 -0 + outer loop + vertex -3.18232 -3.26618 -0.1 + vertex -3.44099 -3.03042 0 + vertex -3.18232 -3.26618 0 + endloop + endfacet + facet normal 0.673628 0.73907 0 + outer loop + vertex -3.44099 -3.03042 0 + vertex -3.18232 -3.26618 -0.1 + vertex -3.44099 -3.03042 -0.1 + endloop + endfacet + facet normal 0.756151 0.654397 0 + outer loop + vertex -3.44099 -3.03042 0 + vertex -3.61865 -2.82513 -0.1 + vertex -3.61865 -2.82513 0 + endloop + endfacet + facet normal 0.756151 0.654397 0 + outer loop + vertex -3.61865 -2.82513 -0.1 + vertex -3.44099 -3.03042 0 + vertex -3.44099 -3.03042 -0.1 + endloop + endfacet + facet normal 0.887562 0.460688 0 + outer loop + vertex -3.61865 -2.82513 0 + vertex -3.70285 -2.66292 -0.1 + vertex -3.70285 -2.66292 0 + endloop + endfacet + facet normal 0.887562 0.460688 0 + outer loop + vertex -3.70285 -2.66292 -0.1 + vertex -3.61865 -2.82513 0 + vertex -3.61865 -2.82513 -0.1 + endloop + endfacet + facet normal 0.998663 0.0516973 0 + outer loop + vertex -3.70285 -2.66292 0 + vertex -3.70601 -2.60189 -0.1 + vertex -3.70601 -2.60189 0 + endloop + endfacet + facet normal 0.998663 0.0516973 0 + outer loop + vertex -3.70601 -2.60189 -0.1 + vertex -3.70285 -2.66292 0 + vertex -3.70285 -2.66292 -0.1 + endloop + endfacet + facet normal 0.877591 -0.479411 0 + outer loop + vertex -3.70601 -2.60189 0 + vertex -3.68113 -2.55635 -0.1 + vertex -3.68113 -2.55635 0 + endloop + endfacet + facet normal 0.877591 -0.479411 0 + outer loop + vertex -3.68113 -2.55635 -0.1 + vertex -3.70601 -2.60189 0 + vertex -3.70601 -2.60189 -0.1 + endloop + endfacet + facet normal 0.463305 -0.886199 0 + outer loop + vertex -3.68113 -2.55635 -0.1 + vertex -3.62666 -2.52788 0 + vertex -3.68113 -2.55635 0 + endloop + endfacet + facet normal 0.463305 -0.886199 0 + outer loop + vertex -3.62666 -2.52788 0 + vertex -3.68113 -2.55635 -0.1 + vertex -3.62666 -2.52788 -0.1 + endloop + endfacet + facet normal 0.114199 -0.993458 0 + outer loop + vertex -3.62666 -2.52788 -0.1 + vertex -3.54104 -2.51804 0 + vertex -3.62666 -2.52788 0 + endloop + endfacet + facet normal 0.114199 -0.993458 0 + outer loop + vertex -3.54104 -2.51804 0 + vertex -3.62666 -2.52788 -0.1 + vertex -3.54104 -2.51804 -0.1 + endloop + endfacet + facet normal -0.250917 -0.968009 0 + outer loop + vertex -3.54104 -2.51804 -0.1 + vertex -3.301 -2.58026 0 + vertex -3.54104 -2.51804 0 + endloop + endfacet + facet normal -0.250917 -0.968009 -0 + outer loop + vertex -3.301 -2.58026 0 + vertex -3.54104 -2.51804 -0.1 + vertex -3.301 -2.58026 -0.1 + endloop + endfacet + facet normal -0.37095 -0.928653 0 + outer loop + vertex -3.301 -2.58026 -0.1 + vertex -2.87688 -2.74967 0 + vertex -3.301 -2.58026 0 + endloop + endfacet + facet normal -0.37095 -0.928653 -0 + outer loop + vertex -2.87688 -2.74967 0 + vertex -3.301 -2.58026 -0.1 + vertex -2.87688 -2.74967 -0.1 + endloop + endfacet + facet normal -0.415868 -0.909425 0 + outer loop + vertex -2.87688 -2.74967 -0.1 + vertex -2.32857 -3.00041 0 + vertex -2.87688 -2.74967 0 + endloop + endfacet + facet normal -0.415868 -0.909425 -0 + outer loop + vertex -2.32857 -3.00041 0 + vertex -2.87688 -2.74967 -0.1 + vertex -2.32857 -3.00041 -0.1 + endloop + endfacet + facet normal -0.447064 -0.894502 0 + outer loop + vertex -2.32857 -3.00041 -0.1 + vertex -1.71595 -3.30659 0 + vertex -2.32857 -3.00041 0 + endloop + endfacet + facet normal -0.447064 -0.894502 -0 + outer loop + vertex -1.71595 -3.30659 0 + vertex -2.32857 -3.00041 -0.1 + vertex -1.71595 -3.30659 -0.1 + endloop + endfacet + facet normal -0.450995 -0.892526 0 + outer loop + vertex -1.71595 -3.30659 -0.1 + vertex -1.01669 -3.65993 0 + vertex -1.71595 -3.30659 0 + endloop + endfacet + facet normal -0.450995 -0.892526 -0 + outer loop + vertex -1.01669 -3.65993 0 + vertex -1.71595 -3.30659 -0.1 + vertex -1.01669 -3.65993 -0.1 + endloop + endfacet + facet normal -0.429074 -0.903269 0 + outer loop + vertex -1.01669 -3.65993 -0.1 + vertex -0.313177 -3.99411 0 + vertex -1.01669 -3.65993 0 + endloop + endfacet + facet normal -0.429074 -0.903269 -0 + outer loop + vertex -0.313177 -3.99411 0 + vertex -1.01669 -3.65993 -0.1 + vertex -0.313177 -3.99411 -0.1 + endloop + endfacet + facet normal -0.406667 -0.913576 0 + outer loop + vertex -0.313177 -3.99411 -0.1 + vertex 0.394112 -4.30895 0 + vertex -0.313177 -3.99411 0 + endloop + endfacet + facet normal -0.406667 -0.913576 -0 + outer loop + vertex 0.394112 -4.30895 0 + vertex -0.313177 -3.99411 -0.1 + vertex 0.394112 -4.30895 -0.1 + endloop + endfacet + facet normal -0.383759 -0.923433 0 + outer loop + vertex 0.394112 -4.30895 -0.1 + vertex 1.10471 -4.60426 0 + vertex 0.394112 -4.30895 0 + endloop + endfacet + facet normal -0.383759 -0.923433 -0 + outer loop + vertex 1.10471 -4.60426 0 + vertex 0.394112 -4.30895 -0.1 + vertex 1.10471 -4.60426 -0.1 + endloop + endfacet + facet normal -0.360336 -0.932823 0 + outer loop + vertex 1.10471 -4.60426 -0.1 + vertex 1.81816 -4.87986 0 + vertex 1.10471 -4.60426 0 + endloop + endfacet + facet normal -0.360336 -0.932823 -0 + outer loop + vertex 1.81816 -4.87986 0 + vertex 1.10471 -4.60426 -0.1 + vertex 1.81816 -4.87986 -0.1 + endloop + endfacet + facet normal -0.33638 -0.941726 0 + outer loop + vertex 1.81816 -4.87986 -0.1 + vertex 2.534 -5.13555 0 + vertex 1.81816 -4.87986 0 + endloop + endfacet + facet normal -0.33638 -0.941726 -0 + outer loop + vertex 2.534 -5.13555 0 + vertex 1.81816 -4.87986 -0.1 + vertex 2.534 -5.13555 -0.1 + endloop + endfacet + facet normal -0.311879 -0.950122 0 + outer loop + vertex 2.534 -5.13555 -0.1 + vertex 3.25174 -5.37115 0 + vertex 2.534 -5.13555 0 + endloop + endfacet + facet normal -0.311879 -0.950122 -0 + outer loop + vertex 3.25174 -5.37115 0 + vertex 2.534 -5.13555 -0.1 + vertex 3.25174 -5.37115 -0.1 + endloop + endfacet + facet normal -0.286817 -0.957985 0 + outer loop + vertex 3.25174 -5.37115 -0.1 + vertex 3.97093 -5.58648 0 + vertex 3.25174 -5.37115 0 + endloop + endfacet + facet normal -0.286817 -0.957985 -0 + outer loop + vertex 3.97093 -5.58648 0 + vertex 3.25174 -5.37115 -0.1 + vertex 3.97093 -5.58648 -0.1 + endloop + endfacet + facet normal -0.262141 -0.965029 0 + outer loop + vertex 3.97093 -5.58648 -0.1 + vertex 4.51611 -5.73457 0 + vertex 3.97093 -5.58648 0 + endloop + endfacet + facet normal -0.262141 -0.965029 -0 + outer loop + vertex 4.51611 -5.73457 0 + vertex 3.97093 -5.58648 -0.1 + vertex 4.51611 -5.73457 -0.1 + endloop + endfacet + facet normal -0.230397 -0.973097 0 + outer loop + vertex 4.51611 -5.73457 -0.1 + vertex 4.99906 -5.84891 0 + vertex 4.51611 -5.73457 0 + endloop + endfacet + facet normal -0.230397 -0.973097 -0 + outer loop + vertex 4.99906 -5.84891 0 + vertex 4.51611 -5.73457 -0.1 + vertex 4.99906 -5.84891 -0.1 + endloop + endfacet + facet normal -0.18567 -0.982612 0 + outer loop + vertex 4.99906 -5.84891 -0.1 + vertex 5.4311 -5.93055 0 + vertex 4.99906 -5.84891 0 + endloop + endfacet + facet normal -0.18567 -0.982612 -0 + outer loop + vertex 5.4311 -5.93055 0 + vertex 4.99906 -5.84891 -0.1 + vertex 5.4311 -5.93055 -0.1 + endloop + endfacet + facet normal -0.126289 -0.991994 0 + outer loop + vertex 5.4311 -5.93055 -0.1 + vertex 5.82356 -5.98052 0 + vertex 5.4311 -5.93055 0 + endloop + endfacet + facet normal -0.126289 -0.991994 -0 + outer loop + vertex 5.82356 -5.98052 0 + vertex 5.4311 -5.93055 -0.1 + vertex 5.82356 -5.98052 -0.1 + endloop + endfacet + facet normal -0.0529968 -0.998595 0 + outer loop + vertex 5.82356 -5.98052 -0.1 + vertex 6.18777 -5.99984 0 + vertex 5.82356 -5.98052 0 + endloop + endfacet + facet normal -0.0529968 -0.998595 -0 + outer loop + vertex 6.18777 -5.99984 0 + vertex 5.82356 -5.98052 -0.1 + vertex 6.18777 -5.99984 -0.1 + endloop + endfacet + facet normal 0.0295577 -0.999563 0 + outer loop + vertex 6.18777 -5.99984 -0.1 + vertex 6.53505 -5.98957 0 + vertex 6.18777 -5.99984 0 + endloop + endfacet + facet normal 0.0295577 -0.999563 0 + outer loop + vertex 6.53505 -5.98957 0 + vertex 6.18777 -5.99984 -0.1 + vertex 6.53505 -5.98957 -0.1 + endloop + endfacet + facet normal 0.112922 -0.993604 0 + outer loop + vertex 6.53505 -5.98957 -0.1 + vertex 6.87672 -5.95074 0 + vertex 6.53505 -5.98957 0 + endloop + endfacet + facet normal 0.112922 -0.993604 0 + outer loop + vertex 6.87672 -5.95074 0 + vertex 6.53505 -5.98957 -0.1 + vertex 6.87672 -5.95074 -0.1 + endloop + endfacet + facet normal 0.18762 -0.982242 0 + outer loop + vertex 6.87672 -5.95074 -0.1 + vertex 7.2241 -5.88439 0 + vertex 6.87672 -5.95074 0 + endloop + endfacet + facet normal 0.18762 -0.982242 0 + outer loop + vertex 7.2241 -5.88439 0 + vertex 6.87672 -5.95074 -0.1 + vertex 7.2241 -5.88439 -0.1 + endloop + endfacet + facet normal 0.21982 -0.975541 0 + outer loop + vertex 7.2241 -5.88439 -0.1 + vertex 7.809 -5.75259 0 + vertex 7.2241 -5.88439 0 + endloop + endfacet + facet normal 0.21982 -0.975541 0 + outer loop + vertex 7.809 -5.75259 0 + vertex 7.2241 -5.88439 -0.1 + vertex 7.809 -5.75259 -0.1 + endloop + endfacet + facet normal 0.71334 0.700818 0 + outer loop + vertex 7.809 -5.75259 0 + vertex 7.04277 -4.97268 -0.1 + vertex 7.04277 -4.97268 0 + endloop + endfacet + facet normal 0.71334 0.700818 0 + outer loop + vertex 7.04277 -4.97268 -0.1 + vertex 7.809 -5.75259 0 + vertex 7.809 -5.75259 -0.1 + endloop + endfacet + facet normal 0.735784 0.677216 0 + outer loop + vertex 7.04277 -4.97268 0 + vertex 6.78219 -4.68956 -0.1 + vertex 6.78219 -4.68956 0 + endloop + endfacet + facet normal 0.735784 0.677216 0 + outer loop + vertex 6.78219 -4.68956 -0.1 + vertex 7.04277 -4.97268 0 + vertex 7.04277 -4.97268 -0.1 + endloop + endfacet + facet normal 0.771549 0.636169 0 + outer loop + vertex 6.78219 -4.68956 0 + vertex 6.51759 -4.36865 -0.1 + vertex 6.51759 -4.36865 0 + endloop + endfacet + facet normal 0.771549 0.636169 0 + outer loop + vertex 6.51759 -4.36865 -0.1 + vertex 6.78219 -4.68956 0 + vertex 6.78219 -4.68956 -0.1 + endloop + endfacet + facet normal 0.79877 0.601637 0 + outer loop + vertex 6.51759 -4.36865 0 + vertex 6.2523 -4.01644 -0.1 + vertex 6.2523 -4.01644 0 + endloop + endfacet + facet normal 0.79877 0.601637 0 + outer loop + vertex 6.2523 -4.01644 -0.1 + vertex 6.51759 -4.36865 0 + vertex 6.51759 -4.36865 -0.1 + endloop + endfacet + facet normal 0.820534 0.571597 0 + outer loop + vertex 6.2523 -4.01644 0 + vertex 5.98964 -3.63939 -0.1 + vertex 5.98964 -3.63939 0 + endloop + endfacet + facet normal 0.820534 0.571597 0 + outer loop + vertex 5.98964 -3.63939 -0.1 + vertex 6.2523 -4.01644 0 + vertex 6.2523 -4.01644 -0.1 + endloop + endfacet + facet normal 0.846837 0.531853 0 + outer loop + vertex 5.98964 -3.63939 0 + vertex 5.48552 -2.8367 -0.1 + vertex 5.48552 -2.8367 0 + endloop + endfacet + facet normal 0.846837 0.531853 0 + outer loop + vertex 5.48552 -2.8367 -0.1 + vertex 5.98964 -3.63939 0 + vertex 5.98964 -3.63939 -0.1 + endloop + endfacet + facet normal 0.876057 0.482207 0 + outer loop + vertex 5.48552 -2.8367 0 + vertex 5.03179 -2.01239 -0.1 + vertex 5.03179 -2.01239 0 + endloop + endfacet + facet normal 0.876057 0.482207 0 + outer loop + vertex 5.03179 -2.01239 -0.1 + vertex 5.48552 -2.8367 0 + vertex 5.48552 -2.8367 -0.1 + endloop + endfacet + facet normal 0.903486 0.428618 0 + outer loop + vertex 5.03179 -2.01239 0 + vertex 4.65505 -1.21825 -0.1 + vertex 4.65505 -1.21825 0 + endloop + endfacet + facet normal 0.903486 0.428618 0 + outer loop + vertex 4.65505 -1.21825 -0.1 + vertex 5.03179 -2.01239 0 + vertex 5.03179 -2.01239 -0.1 + endloop + endfacet + facet normal 0.925537 0.378657 0 + outer loop + vertex 4.65505 -1.21825 0 + vertex 4.50386 -0.848697 -0.1 + vertex 4.50386 -0.848697 0 + endloop + endfacet + facet normal 0.925537 0.378657 0 + outer loop + vertex 4.50386 -0.848697 -0.1 + vertex 4.65505 -1.21825 0 + vertex 4.65505 -1.21825 -0.1 + endloop + endfacet + facet normal 0.942067 0.335426 0 + outer loop + vertex 4.50386 -0.848697 0 + vertex 4.38188 -0.506111 -0.1 + vertex 4.38188 -0.506111 0 + endloop + endfacet + facet normal 0.942067 0.335426 0 + outer loop + vertex 4.38188 -0.506111 -0.1 + vertex 4.50386 -0.848697 0 + vertex 4.50386 -0.848697 -0.1 + endloop + endfacet + facet normal 0.960602 0.277927 0 + outer loop + vertex 4.38188 -0.506111 0 + vertex 4.29244 -0.196974 -0.1 + vertex 4.29244 -0.196974 0 + endloop + endfacet + facet normal 0.960602 0.277927 0 + outer loop + vertex 4.29244 -0.196974 -0.1 + vertex 4.38188 -0.506111 0 + vertex 4.38188 -0.506111 -0.1 + endloop + endfacet + facet normal 0.980763 0.1952 0 + outer loop + vertex 4.29244 -0.196974 0 + vertex 4.23886 0.0722368 -0.1 + vertex 4.23886 0.0722368 0 + endloop + endfacet + facet normal 0.980763 0.1952 0 + outer loop + vertex 4.23886 0.0722368 -0.1 + vertex 4.29244 -0.196974 0 + vertex 4.29244 -0.196974 -0.1 + endloop + endfacet + facet normal 0.997919 0.0644811 0 + outer loop + vertex 4.23886 0.0722368 0 + vertex 4.22446 0.295049 -0.1 + vertex 4.22446 0.295049 0 + endloop + endfacet + facet normal 0.997919 0.0644811 0 + outer loop + vertex 4.22446 0.295049 -0.1 + vertex 4.23886 0.0722368 0 + vertex 4.23886 0.0722368 -0.1 + endloop + endfacet + facet normal 0.986595 -0.163189 0 + outer loop + vertex 4.22446 0.295049 0 + vertex 4.25257 0.464986 -0.1 + vertex 4.25257 0.464986 0 + endloop + endfacet + facet normal 0.986595 -0.163189 0 + outer loop + vertex 4.25257 0.464986 -0.1 + vertex 4.22446 0.295049 0 + vertex 4.22446 0.295049 -0.1 + endloop + endfacet + facet normal 0.930706 -0.365767 0 + outer loop + vertex 4.25257 0.464986 0 + vertex 4.33872 0.684191 -0.1 + vertex 4.33872 0.684191 0 + endloop + endfacet + facet normal 0.930706 -0.365767 0 + outer loop + vertex 4.33872 0.684191 -0.1 + vertex 4.25257 0.464986 0 + vertex 4.25257 0.464986 -0.1 + endloop + endfacet + facet normal 0.83908 -0.544009 0 + outer loop + vertex 4.33872 0.684191 0 + vertex 4.3737 0.738144 -0.1 + vertex 4.3737 0.738144 0 + endloop + endfacet + facet normal 0.83908 -0.544009 0 + outer loop + vertex 4.3737 0.738144 -0.1 + vertex 4.33872 0.684191 0 + vertex 4.33872 0.684191 -0.1 + endloop + endfacet + facet normal 0.430226 -0.902721 0 + outer loop + vertex 4.3737 0.738144 -0.1 + vertex 4.40839 0.754677 0 + vertex 4.3737 0.738144 0 + endloop + endfacet + facet normal 0.430226 -0.902721 0 + outer loop + vertex 4.40839 0.754677 0 + vertex 4.3737 0.738144 -0.1 + vertex 4.40839 0.754677 -0.1 + endloop + endfacet + facet normal -0.483736 -0.875214 0 + outer loop + vertex 4.40839 0.754677 -0.1 + vertex 4.44662 0.733548 0 + vertex 4.40839 0.754677 0 + endloop + endfacet + facet normal -0.483736 -0.875214 -0 + outer loop + vertex 4.44662 0.733548 0 + vertex 4.40839 0.754677 -0.1 + vertex 4.44662 0.733548 -0.1 + endloop + endfacet + facet normal -0.791399 -0.6113 0 + outer loop + vertex 4.49221 0.674515 -0.1 + vertex 4.44662 0.733548 0 + vertex 4.44662 0.733548 -0.1 + endloop + endfacet + facet normal -0.791399 -0.6113 0 + outer loop + vertex 4.44662 0.733548 0 + vertex 4.49221 0.674515 -0.1 + vertex 4.49221 0.674515 0 + endloop + endfacet + facet normal -0.875249 -0.483672 0 + outer loop + vertex 4.62083 0.441773 -0.1 + vertex 4.49221 0.674515 0 + vertex 4.49221 0.674515 -0.1 + endloop + endfacet + facet normal -0.875249 -0.483672 0 + outer loop + vertex 4.49221 0.674515 0 + vertex 4.62083 0.441773 -0.1 + vertex 4.62083 0.441773 0 + endloop + endfacet + facet normal -0.8234 -0.567461 0 + outer loop + vertex 4.83246 0.134689 -0.1 + vertex 4.62083 0.441773 0 + vertex 4.62083 0.441773 -0.1 + endloop + endfacet + facet normal -0.8234 -0.567461 0 + outer loop + vertex 4.62083 0.441773 0 + vertex 4.83246 0.134689 -0.1 + vertex 4.83246 0.134689 0 + endloop + endfacet + facet normal -0.783851 -0.620949 0 + outer loop + vertex 5.24358 -0.384283 -0.1 + vertex 4.83246 0.134689 0 + vertex 4.83246 0.134689 -0.1 + endloop + endfacet + facet normal -0.783851 -0.620949 0 + outer loop + vertex 4.83246 0.134689 0 + vertex 5.24358 -0.384283 -0.1 + vertex 5.24358 -0.384283 0 + endloop + endfacet + facet normal -0.766673 -0.642037 0 + outer loop + vertex 5.79491 -1.04264 -0.1 + vertex 5.24358 -0.384283 0 + vertex 5.24358 -0.384283 -0.1 + endloop + endfacet + facet normal -0.766673 -0.642037 0 + outer loop + vertex 5.24358 -0.384283 0 + vertex 5.79491 -1.04264 -0.1 + vertex 5.79491 -1.04264 0 + endloop + endfacet + facet normal -0.753766 -0.657143 0 + outer loop + vertex 6.42718 -1.76788 -0.1 + vertex 5.79491 -1.04264 0 + vertex 5.79491 -1.04264 -0.1 + endloop + endfacet + facet normal -0.753766 -0.657143 0 + outer loop + vertex 5.79491 -1.04264 0 + vertex 6.42718 -1.76788 -0.1 + vertex 6.42718 -1.76788 0 + endloop + endfacet + facet normal -0.728754 -0.684775 0 + outer loop + vertex 7.10115 -2.48513 -0.1 + vertex 6.42718 -1.76788 0 + vertex 6.42718 -1.76788 -0.1 + endloop + endfacet + facet normal -0.728754 -0.684775 0 + outer loop + vertex 6.42718 -1.76788 0 + vertex 7.10115 -2.48513 -0.1 + vertex 7.10115 -2.48513 0 + endloop + endfacet + facet normal -0.682466 -0.730918 0 + outer loop + vertex 7.10115 -2.48513 -0.1 + vertex 7.75455 -3.09522 0 + vertex 7.10115 -2.48513 0 + endloop + endfacet + facet normal -0.682466 -0.730918 -0 + outer loop + vertex 7.75455 -3.09522 0 + vertex 7.10115 -2.48513 -0.1 + vertex 7.75455 -3.09522 -0.1 + endloop + endfacet + facet normal -0.638085 -0.769966 0 + outer loop + vertex 7.75455 -3.09522 -0.1 + vertex 8.0755 -3.36119 0 + vertex 7.75455 -3.09522 0 + endloop + endfacet + facet normal -0.638085 -0.769966 -0 + outer loop + vertex 8.0755 -3.36119 0 + vertex 7.75455 -3.09522 -0.1 + vertex 8.0755 -3.36119 -0.1 + endloop + endfacet + facet normal -0.60305 -0.797703 0 + outer loop + vertex 8.0755 -3.36119 -0.1 + vertex 8.39365 -3.60171 0 + vertex 8.0755 -3.36119 0 + endloop + endfacet + facet normal -0.60305 -0.797703 -0 + outer loop + vertex 8.39365 -3.60171 0 + vertex 8.0755 -3.36119 -0.1 + vertex 8.39365 -3.60171 -0.1 + endloop + endfacet + facet normal -0.563259 -0.826281 0 + outer loop + vertex 8.39365 -3.60171 -0.1 + vertex 8.70978 -3.81721 0 + vertex 8.39365 -3.60171 0 + endloop + endfacet + facet normal -0.563259 -0.826281 -0 + outer loop + vertex 8.70978 -3.81721 0 + vertex 8.39365 -3.60171 -0.1 + vertex 8.70978 -3.81721 -0.1 + endloop + endfacet + facet normal -0.518472 -0.855094 0 + outer loop + vertex 8.70978 -3.81721 -0.1 + vertex 9.02468 -4.00814 0 + vertex 8.70978 -3.81721 0 + endloop + endfacet + facet normal -0.518472 -0.855094 -0 + outer loop + vertex 9.02468 -4.00814 0 + vertex 8.70978 -3.81721 -0.1 + vertex 9.02468 -4.00814 -0.1 + endloop + endfacet + facet normal -0.468624 -0.883398 0 + outer loop + vertex 9.02468 -4.00814 -0.1 + vertex 9.33912 -4.17495 0 + vertex 9.02468 -4.00814 0 + endloop + endfacet + facet normal -0.468624 -0.883398 -0 + outer loop + vertex 9.33912 -4.17495 0 + vertex 9.02468 -4.00814 -0.1 + vertex 9.33912 -4.17495 -0.1 + endloop + endfacet + facet normal -0.413918 -0.910314 0 + outer loop + vertex 9.33912 -4.17495 -0.1 + vertex 9.65389 -4.31807 0 + vertex 9.33912 -4.17495 0 + endloop + endfacet + facet normal -0.413918 -0.910314 -0 + outer loop + vertex 9.65389 -4.31807 0 + vertex 9.33912 -4.17495 -0.1 + vertex 9.65389 -4.31807 -0.1 + endloop + endfacet + facet normal -0.354841 -0.934927 0 + outer loop + vertex 9.65389 -4.31807 -0.1 + vertex 9.96977 -4.43796 0 + vertex 9.65389 -4.31807 0 + endloop + endfacet + facet normal -0.354841 -0.934927 -0 + outer loop + vertex 9.96977 -4.43796 0 + vertex 9.65389 -4.31807 -0.1 + vertex 9.96977 -4.43796 -0.1 + endloop + endfacet + facet normal -0.292213 -0.956353 0 + outer loop + vertex 9.96977 -4.43796 -0.1 + vertex 10.2875 -4.53506 0 + vertex 9.96977 -4.43796 0 + endloop + endfacet + facet normal -0.292213 -0.956353 -0 + outer loop + vertex 10.2875 -4.53506 0 + vertex 9.96977 -4.43796 -0.1 + vertex 10.2875 -4.53506 -0.1 + endloop + endfacet + facet normal -0.227161 -0.973857 0 + outer loop + vertex 10.2875 -4.53506 -0.1 + vertex 10.608 -4.6098 0 + vertex 10.2875 -4.53506 0 + endloop + endfacet + facet normal -0.227161 -0.973857 -0 + outer loop + vertex 10.608 -4.6098 0 + vertex 10.2875 -4.53506 -0.1 + vertex 10.608 -4.6098 -0.1 + endloop + endfacet + facet normal -0.161011 -0.986953 0 + outer loop + vertex 10.608 -4.6098 -0.1 + vertex 10.9319 -4.66264 0 + vertex 10.608 -4.6098 0 + endloop + endfacet + facet normal -0.161011 -0.986953 -0 + outer loop + vertex 10.9319 -4.66264 0 + vertex 10.608 -4.6098 -0.1 + vertex 10.9319 -4.66264 -0.1 + endloop + endfacet + facet normal -0.0951962 -0.995459 0 + outer loop + vertex 10.9319 -4.66264 -0.1 + vertex 11.26 -4.69402 0 + vertex 10.9319 -4.66264 0 + endloop + endfacet + facet normal -0.0951962 -0.995459 -0 + outer loop + vertex 11.26 -4.69402 0 + vertex 10.9319 -4.66264 -0.1 + vertex 11.26 -4.69402 -0.1 + endloop + endfacet + facet normal -0.0310839 -0.999517 0 + outer loop + vertex 11.26 -4.69402 -0.1 + vertex 11.5931 -4.70438 0 + vertex 11.26 -4.69402 0 + endloop + endfacet + facet normal -0.0310839 -0.999517 -0 + outer loop + vertex 11.5931 -4.70438 0 + vertex 11.26 -4.69402 -0.1 + vertex 11.5931 -4.70438 -0.1 + endloop + endfacet + facet normal 0.0736121 -0.997287 0 + outer loop + vertex 11.5931 -4.70438 -0.1 + vertex 12.006 -4.67391 0 + vertex 11.5931 -4.70438 0 + endloop + endfacet + facet normal 0.0736121 -0.997287 0 + outer loop + vertex 12.006 -4.67391 0 + vertex 11.5931 -4.70438 -0.1 + vertex 12.006 -4.67391 -0.1 + endloop + endfacet + facet normal 0.209942 -0.977714 0 + outer loop + vertex 12.006 -4.67391 -0.1 + vertex 12.4149 -4.5861 0 + vertex 12.006 -4.67391 0 + endloop + endfacet + facet normal 0.209942 -0.977714 0 + outer loop + vertex 12.4149 -4.5861 0 + vertex 12.006 -4.67391 -0.1 + vertex 12.4149 -4.5861 -0.1 + endloop + endfacet + facet normal 0.332988 -0.942931 0 + outer loop + vertex 12.4149 -4.5861 -0.1 + vertex 12.8106 -4.44636 0 + vertex 12.4149 -4.5861 0 + endloop + endfacet + facet normal 0.332988 -0.942931 0 + outer loop + vertex 12.8106 -4.44636 0 + vertex 12.4149 -4.5861 -0.1 + vertex 12.8106 -4.44636 -0.1 + endloop + endfacet + facet normal 0.44663 -0.894719 0 + outer loop + vertex 12.8106 -4.44636 -0.1 + vertex 13.1837 -4.26011 0 + vertex 12.8106 -4.44636 0 + endloop + endfacet + facet normal 0.44663 -0.894719 0 + outer loop + vertex 13.1837 -4.26011 0 + vertex 12.8106 -4.44636 -0.1 + vertex 13.1837 -4.26011 -0.1 + endloop + endfacet + facet normal 0.554537 -0.832159 0 + outer loop + vertex 13.1837 -4.26011 -0.1 + vertex 13.5249 -4.03275 0 + vertex 13.1837 -4.26011 0 + endloop + endfacet + facet normal 0.554537 -0.832159 0 + outer loop + vertex 13.5249 -4.03275 0 + vertex 13.1837 -4.26011 -0.1 + vertex 13.5249 -4.03275 -0.1 + endloop + endfacet + facet normal 0.65941 -0.751784 0 + outer loop + vertex 13.5249 -4.03275 -0.1 + vertex 13.8248 -3.7697 0 + vertex 13.5249 -4.03275 0 + endloop + endfacet + facet normal 0.65941 -0.751784 0 + outer loop + vertex 13.8248 -3.7697 0 + vertex 13.5249 -4.03275 -0.1 + vertex 13.8248 -3.7697 -0.1 + endloop + endfacet + facet normal 0.762012 -0.647563 0 + outer loop + vertex 13.8248 -3.7697 0 + vertex 14.0741 -3.47638 -0.1 + vertex 14.0741 -3.47638 0 + endloop + endfacet + facet normal 0.762012 -0.647563 0 + outer loop + vertex 14.0741 -3.47638 -0.1 + vertex 13.8248 -3.7697 0 + vertex 13.8248 -3.7697 -0.1 + endloop + endfacet + facet normal 0.835702 -0.549183 0 + outer loop + vertex 14.0741 -3.47638 0 + vertex 14.1768 -3.32005 -0.1 + vertex 14.1768 -3.32005 0 + endloop + endfacet + facet normal 0.835702 -0.549183 0 + outer loop + vertex 14.1768 -3.32005 -0.1 + vertex 14.0741 -3.47638 0 + vertex 14.0741 -3.47638 -0.1 + endloop + endfacet + facet normal 0.88181 -0.471605 0 + outer loop + vertex 14.1768 -3.32005 0 + vertex 14.2634 -3.15818 -0.1 + vertex 14.2634 -3.15818 0 + endloop + endfacet + facet normal 0.88181 -0.471605 0 + outer loop + vertex 14.2634 -3.15818 -0.1 + vertex 14.1768 -3.32005 0 + vertex 14.1768 -3.32005 -0.1 + endloop + endfacet + facet normal 0.950814 -0.309764 0 + outer loop + vertex 14.2634 -3.15818 0 + vertex 14.3256 -2.96711 -0.1 + vertex 14.3256 -2.96711 0 + endloop + endfacet + facet normal 0.950814 -0.309764 0 + outer loop + vertex 14.3256 -2.96711 -0.1 + vertex 14.2634 -3.15818 0 + vertex 14.2634 -3.15818 -0.1 + endloop + endfacet + facet normal 0.996178 -0.0873495 0 + outer loop + vertex 14.3256 -2.96711 0 + vertex 14.3448 -2.7489 -0.1 + vertex 14.3448 -2.7489 0 + endloop + endfacet + facet normal 0.996178 -0.0873495 0 + outer loop + vertex 14.3448 -2.7489 -0.1 + vertex 14.3256 -2.96711 0 + vertex 14.3256 -2.96711 -0.1 + endloop + endfacet + facet normal 0.995552 0.0942095 0 + outer loop + vertex 14.3448 -2.7489 0 + vertex 14.3217 -2.5049 -0.1 + vertex 14.3217 -2.5049 0 + endloop + endfacet + facet normal 0.995552 0.0942095 0 + outer loop + vertex 14.3217 -2.5049 -0.1 + vertex 14.3448 -2.7489 0 + vertex 14.3448 -2.7489 -0.1 + endloop + endfacet + facet normal 0.972391 0.233358 0 + outer loop + vertex 14.3217 -2.5049 0 + vertex 14.2572 -2.23644 -0.1 + vertex 14.2572 -2.23644 0 + endloop + endfacet + facet normal 0.972391 0.233358 0 + outer loop + vertex 14.2572 -2.23644 -0.1 + vertex 14.3217 -2.5049 0 + vertex 14.3217 -2.5049 -0.1 + endloop + endfacet + facet normal 0.940985 0.338449 0 + outer loop + vertex 14.2572 -2.23644 0 + vertex 14.1524 -1.94488 -0.1 + vertex 14.1524 -1.94488 0 + endloop + endfacet + facet normal 0.940985 0.338449 0 + outer loop + vertex 14.1524 -1.94488 -0.1 + vertex 14.2572 -2.23644 0 + vertex 14.2572 -2.23644 -0.1 + endloop + endfacet + facet normal 0.908169 0.418604 0 + outer loop + vertex 14.1524 -1.94488 0 + vertex 14.008 -1.63155 -0.1 + vertex 14.008 -1.63155 0 + endloop + endfacet + facet normal 0.908169 0.418604 0 + outer loop + vertex 14.008 -1.63155 -0.1 + vertex 14.1524 -1.94488 0 + vertex 14.1524 -1.94488 -0.1 + endloop + endfacet + facet normal 0.876739 0.480967 0 + outer loop + vertex 14.008 -1.63155 0 + vertex 13.8249 -1.29782 -0.1 + vertex 13.8249 -1.29782 0 + endloop + endfacet + facet normal 0.876739 0.480967 0 + outer loop + vertex 13.8249 -1.29782 -0.1 + vertex 14.008 -1.63155 0 + vertex 14.008 -1.63155 -0.1 + endloop + endfacet + facet normal 0.847618 0.530607 0 + outer loop + vertex 13.8249 -1.29782 0 + vertex 13.604 -0.945011 -0.1 + vertex 13.604 -0.945011 0 + endloop + endfacet + facet normal 0.847618 0.530607 0 + outer loop + vertex 13.604 -0.945011 -0.1 + vertex 13.8249 -1.29782 0 + vertex 13.8249 -1.29782 -0.1 + endloop + endfacet + facet normal 0.820927 0.571033 0 + outer loop + vertex 13.604 -0.945011 0 + vertex 13.3463 -0.574481 -0.1 + vertex 13.3463 -0.574481 0 + endloop + endfacet + facet normal 0.820927 0.571033 0 + outer loop + vertex 13.3463 -0.574481 -0.1 + vertex 13.604 -0.945011 0 + vertex 13.604 -0.945011 -0.1 + endloop + endfacet + facet normal 0.796478 0.604667 0 + outer loop + vertex 13.3463 -0.574481 0 + vertex 13.0525 -0.187573 -0.1 + vertex 13.0525 -0.187573 0 + endloop + endfacet + facet normal 0.796478 0.604667 0 + outer loop + vertex 13.0525 -0.187573 -0.1 + vertex 13.3463 -0.574481 0 + vertex 13.3463 -0.574481 -0.1 + endloop + endfacet + facet normal 0.773983 0.633206 0 + outer loop + vertex 13.0525 -0.187573 0 + vertex 12.7237 0.214368 -0.1 + vertex 12.7237 0.214368 0 + endloop + endfacet + facet normal 0.773983 0.633206 0 + outer loop + vertex 12.7237 0.214368 -0.1 + vertex 13.0525 -0.187573 0 + vertex 13.0525 -0.187573 -0.1 + endloop + endfacet + facet normal 0.753142 0.657858 0 + outer loop + vertex 12.7237 0.214368 0 + vertex 12.3607 0.629996 -0.1 + vertex 12.3607 0.629996 0 + endloop + endfacet + facet normal 0.753142 0.657858 0 + outer loop + vertex 12.3607 0.629996 -0.1 + vertex 12.7237 0.214368 0 + vertex 12.7237 0.214368 -0.1 + endloop + endfacet + facet normal 0.724343 0.68944 0 + outer loop + vertex 12.3607 0.629996 0 + vertex 11.5355 1.49693 -0.1 + vertex 11.5355 1.49693 0 + endloop + endfacet + facet normal 0.724343 0.68944 0 + outer loop + vertex 11.5355 1.49693 -0.1 + vertex 12.3607 0.629996 0 + vertex 12.3607 0.629996 -0.1 + endloop + endfacet + facet normal 0.689461 0.724323 -0 + outer loop + vertex 11.5355 1.49693 -0.1 + vertex 10.5842 2.40247 0 + vertex 11.5355 1.49693 0 + endloop + endfacet + facet normal 0.689461 0.724323 0 + outer loop + vertex 10.5842 2.40247 0 + vertex 11.5355 1.49693 -0.1 + vertex 10.5842 2.40247 -0.1 + endloop + endfacet + facet normal 0.659589 0.751627 -0 + outer loop + vertex 10.5842 2.40247 -0.1 + vertex 9.61741 3.25086 0 + vertex 10.5842 2.40247 0 + endloop + endfacet + facet normal 0.659589 0.751627 0 + outer loop + vertex 9.61741 3.25086 0 + vertex 10.5842 2.40247 -0.1 + vertex 9.61741 3.25086 -0.1 + endloop + endfacet + facet normal 0.626395 0.779506 -0 + outer loop + vertex 9.61741 3.25086 -0.1 + vertex 9.29624 3.50894 0 + vertex 9.61741 3.25086 0 + endloop + endfacet + facet normal 0.626395 0.779506 0 + outer loop + vertex 9.29624 3.50894 0 + vertex 9.61741 3.25086 -0.1 + vertex 9.29624 3.50894 -0.1 + endloop + endfacet + facet normal 0.533935 0.845526 -0 + outer loop + vertex 9.29624 3.50894 -0.1 + vertex 9.14614 3.60373 0 + vertex 9.29624 3.50894 0 + endloop + endfacet + facet normal 0.533935 0.845526 0 + outer loop + vertex 9.14614 3.60373 0 + vertex 9.29624 3.50894 -0.1 + vertex 9.14614 3.60373 -0.1 + endloop + endfacet + facet normal 0.419972 0.907537 -0 + outer loop + vertex 9.14614 3.60373 -0.1 + vertex 9.03464 3.65533 0 + vertex 9.14614 3.60373 0 + endloop + endfacet + facet normal 0.419972 0.907537 0 + outer loop + vertex 9.03464 3.65533 0 + vertex 9.14614 3.60373 -0.1 + vertex 9.03464 3.65533 -0.1 + endloop + endfacet + facet normal 0.545127 0.838353 -0 + outer loop + vertex 9.03464 3.65533 -0.1 + vertex 8.81858 3.79581 0 + vertex 9.03464 3.65533 0 + endloop + endfacet + facet normal 0.545127 0.838353 0 + outer loop + vertex 8.81858 3.79581 0 + vertex 9.03464 3.65533 -0.1 + vertex 8.81858 3.79581 -0.1 + endloop + endfacet + facet normal 0.596587 0.802549 -0 + outer loop + vertex 8.81858 3.79581 -0.1 + vertex 8.19732 4.25764 0 + vertex 8.81858 3.79581 0 + endloop + endfacet + facet normal 0.596587 0.802549 0 + outer loop + vertex 8.19732 4.25764 0 + vertex 8.81858 3.79581 -0.1 + vertex 8.19732 4.25764 -0.1 + endloop + endfacet + facet normal 0.576403 0.817166 -0 + outer loop + vertex 8.19732 4.25764 -0.1 + vertex 8.00725 4.39171 0 + vertex 8.19732 4.25764 0 + endloop + endfacet + facet normal 0.576403 0.817166 0 + outer loop + vertex 8.00725 4.39171 0 + vertex 8.19732 4.25764 -0.1 + vertex 8.00725 4.39171 -0.1 + endloop + endfacet + facet normal 0.52168 0.853141 -0 + outer loop + vertex 8.00725 4.39171 -0.1 + vertex 7.75154 4.54807 0 + vertex 8.00725 4.39171 0 + endloop + endfacet + facet normal 0.52168 0.853141 0 + outer loop + vertex 7.75154 4.54807 0 + vertex 8.00725 4.39171 -0.1 + vertex 7.75154 4.54807 -0.1 + endloop + endfacet + facet normal 0.475339 0.879803 -0 + outer loop + vertex 7.75154 4.54807 -0.1 + vertex 7.07462 4.9138 0 + vertex 7.75154 4.54807 0 + endloop + endfacet + facet normal 0.475339 0.879803 0 + outer loop + vertex 7.07462 4.9138 0 + vertex 7.75154 4.54807 -0.1 + vertex 7.07462 4.9138 -0.1 + endloop + endfacet + facet normal 0.439259 0.89836 -0 + outer loop + vertex 7.07462 4.9138 -0.1 + vertex 6.22936 5.32709 0 + vertex 7.07462 4.9138 0 + endloop + endfacet + facet normal 0.439259 0.89836 0 + outer loop + vertex 6.22936 5.32709 0 + vertex 7.07462 4.9138 -0.1 + vertex 6.22936 5.32709 -0.1 + endloop + endfacet + facet normal 0.414563 0.910021 -0 + outer loop + vertex 6.22936 5.32709 -0.1 + vertex 5.27855 5.76024 0 + vertex 6.22936 5.32709 0 + endloop + endfacet + facet normal 0.414563 0.910021 0 + outer loop + vertex 5.27855 5.76024 0 + vertex 6.22936 5.32709 -0.1 + vertex 5.27855 5.76024 -0.1 + endloop + endfacet + facet normal 0.393495 0.919327 -0 + outer loop + vertex 5.27855 5.76024 -0.1 + vertex 4.285 6.1855 0 + vertex 5.27855 5.76024 0 + endloop + endfacet + facet normal 0.393495 0.919327 0 + outer loop + vertex 4.285 6.1855 0 + vertex 5.27855 5.76024 -0.1 + vertex 4.285 6.1855 -0.1 + endloop + endfacet + facet normal 0.371607 0.92839 -0 + outer loop + vertex 4.285 6.1855 -0.1 + vertex 3.31149 6.57517 0 + vertex 4.285 6.1855 0 + endloop + endfacet + facet normal 0.371607 0.92839 0 + outer loop + vertex 3.31149 6.57517 0 + vertex 4.285 6.1855 -0.1 + vertex 3.31149 6.57517 -0.1 + endloop + endfacet + facet normal 0.344035 0.938957 -0 + outer loop + vertex 3.31149 6.57517 -0.1 + vertex 2.42084 6.9015 0 + vertex 3.31149 6.57517 0 + endloop + endfacet + facet normal 0.344035 0.938957 0 + outer loop + vertex 2.42084 6.9015 0 + vertex 3.31149 6.57517 -0.1 + vertex 2.42084 6.9015 -0.1 + endloop + endfacet + facet normal 0.301156 0.953575 -0 + outer loop + vertex 2.42084 6.9015 -0.1 + vertex 1.67583 7.13679 0 + vertex 2.42084 6.9015 0 + endloop + endfacet + facet normal 0.301156 0.953575 0 + outer loop + vertex 1.67583 7.13679 0 + vertex 2.42084 6.9015 -0.1 + vertex 1.67583 7.13679 -0.1 + endloop + endfacet + facet normal 0.313822 0.949482 -0 + outer loop + vertex 1.67583 7.13679 -0.1 + vertex 1.30727 7.25861 0 + vertex 1.67583 7.13679 0 + endloop + endfacet + facet normal 0.313822 0.949482 0 + outer loop + vertex 1.30727 7.25861 0 + vertex 1.67583 7.13679 -0.1 + vertex 1.30727 7.25861 -0.1 + endloop + endfacet + facet normal 0.372489 0.928036 -0 + outer loop + vertex 1.30727 7.25861 -0.1 + vertex 0.855811 7.43981 0 + vertex 1.30727 7.25861 0 + endloop + endfacet + facet normal 0.372489 0.928036 0 + outer loop + vertex 0.855811 7.43981 0 + vertex 1.30727 7.25861 -0.1 + vertex 0.855811 7.43981 -0.1 + endloop + endfacet + facet normal 0.420776 0.907164 -0 + outer loop + vertex 0.855811 7.43981 -0.1 + vertex -0.23691 7.94665 0 + vertex 0.855811 7.43981 0 + endloop + endfacet + facet normal 0.420776 0.907164 0 + outer loop + vertex -0.23691 7.94665 0 + vertex 0.855811 7.43981 -0.1 + vertex -0.23691 7.94665 -0.1 + endloop + endfacet + facet normal 0.458228 0.888835 -0 + outer loop + vertex -0.23691 7.94665 -0.1 + vertex -1.48458 8.58988 0 + vertex -0.23691 7.94665 0 + endloop + endfacet + facet normal 0.458228 0.888835 0 + outer loop + vertex -1.48458 8.58988 0 + vertex -0.23691 7.94665 -0.1 + vertex -1.48458 8.58988 -0.1 + endloop + endfacet + facet normal 0.484776 0.874638 -0 + outer loop + vertex -1.48458 8.58988 -0.1 + vertex -2.76946 9.30203 0 + vertex -1.48458 8.58988 0 + endloop + endfacet + facet normal 0.484776 0.874638 0 + outer loop + vertex -2.76946 9.30203 0 + vertex -1.48458 8.58988 -0.1 + vertex -2.76946 9.30203 -0.1 + endloop + endfacet + facet normal 0.509783 0.860303 -0 + outer loop + vertex -2.76946 9.30203 -0.1 + vertex -3.97378 10.0157 0 + vertex -2.76946 9.30203 0 + endloop + endfacet + facet normal 0.509783 0.860303 0 + outer loop + vertex -3.97378 10.0157 0 + vertex -2.76946 9.30203 -0.1 + vertex -3.97378 10.0157 -0.1 + endloop + endfacet + facet normal 0.541316 0.840819 -0 + outer loop + vertex -3.97378 10.0157 -0.1 + vertex -4.9798 10.6633 0 + vertex -3.97378 10.0157 0 + endloop + endfacet + facet normal 0.541316 0.840819 0 + outer loop + vertex -4.9798 10.6633 0 + vertex -3.97378 10.0157 -0.1 + vertex -4.9798 10.6633 -0.1 + endloop + endfacet + facet normal 0.578658 0.81557 -0 + outer loop + vertex -4.9798 10.6633 -0.1 + vertex -5.37165 10.9414 0 + vertex -4.9798 10.6633 0 + endloop + endfacet + facet normal 0.578658 0.81557 0 + outer loop + vertex -5.37165 10.9414 0 + vertex -4.9798 10.6633 -0.1 + vertex -5.37165 10.9414 -0.1 + endloop + endfacet + facet normal 0.621078 0.783749 -0 + outer loop + vertex -5.37165 10.9414 -0.1 + vertex -5.66976 11.1776 0 + vertex -5.37165 10.9414 0 + endloop + endfacet + facet normal 0.621078 0.783749 0 + outer loop + vertex -5.66976 11.1776 0 + vertex -5.37165 10.9414 -0.1 + vertex -5.66976 11.1776 -0.1 + endloop + endfacet + facet normal 0.700224 0.713923 -0 + outer loop + vertex -5.66976 11.1776 -0.1 + vertex -5.85942 11.3636 0 + vertex -5.66976 11.1776 0 + endloop + endfacet + facet normal 0.700224 0.713923 0 + outer loop + vertex -5.85942 11.3636 0 + vertex -5.66976 11.1776 -0.1 + vertex -5.85942 11.3636 -0.1 + endloop + endfacet + facet normal 0.822029 0.569446 0 + outer loop + vertex -5.85942 11.3636 0 + vertex -5.90899 11.4352 -0.1 + vertex -5.90899 11.4352 0 + endloop + endfacet + facet normal 0.822029 0.569446 0 + outer loop + vertex -5.90899 11.4352 -0.1 + vertex -5.85942 11.3636 0 + vertex -5.85942 11.3636 -0.1 + endloop + endfacet + facet normal 0.95697 0.290185 0 + outer loop + vertex -5.90899 11.4352 0 + vertex -5.92592 11.491 -0.1 + vertex -5.92592 11.491 0 + endloop + endfacet + facet normal 0.95697 0.290185 0 + outer loop + vertex -5.92592 11.491 -0.1 + vertex -5.90899 11.4352 0 + vertex -5.90899 11.4352 -0.1 + endloop + endfacet + facet normal 0.964129 -0.265435 0 + outer loop + vertex -5.92592 11.491 0 + vertex -5.91161 11.5429 -0.1 + vertex -5.91161 11.5429 0 + endloop + endfacet + facet normal 0.964129 -0.265435 0 + outer loop + vertex -5.91161 11.5429 -0.1 + vertex -5.92592 11.491 0 + vertex -5.92592 11.491 -0.1 + endloop + endfacet + facet normal 0.717664 -0.69639 0 + outer loop + vertex -5.91161 11.5429 0 + vertex -5.8692 11.5867 -0.1 + vertex -5.8692 11.5867 0 + endloop + endfacet + facet normal 0.717664 -0.69639 0 + outer loop + vertex -5.8692 11.5867 -0.1 + vertex -5.91161 11.5429 0 + vertex -5.91161 11.5429 -0.1 + endloop + endfacet + facet normal 0.453397 -0.891309 0 + outer loop + vertex -5.8692 11.5867 -0.1 + vertex -5.79943 11.6221 0 + vertex -5.8692 11.5867 0 + endloop + endfacet + facet normal 0.453397 -0.891309 0 + outer loop + vertex -5.79943 11.6221 0 + vertex -5.8692 11.5867 -0.1 + vertex -5.79943 11.6221 -0.1 + endloop + endfacet + facet normal 0.272626 -0.96212 0 + outer loop + vertex -5.79943 11.6221 -0.1 + vertex -5.70304 11.6495 0 + vertex -5.79943 11.6221 0 + endloop + endfacet + facet normal 0.272626 -0.96212 0 + outer loop + vertex -5.70304 11.6495 0 + vertex -5.79943 11.6221 -0.1 + vertex -5.70304 11.6495 -0.1 + endloop + endfacet + facet normal 0.111359 -0.99378 0 + outer loop + vertex -5.70304 11.6495 -0.1 + vertex -5.4334 11.6797 0 + vertex -5.70304 11.6495 0 + endloop + endfacet + facet normal 0.111359 -0.99378 0 + outer loop + vertex -5.4334 11.6797 0 + vertex -5.70304 11.6495 -0.1 + vertex -5.4334 11.6797 -0.1 + endloop + endfacet + facet normal -0.00575054 -0.999983 0 + outer loop + vertex -5.4334 11.6797 -0.1 + vertex -5.06624 11.6776 0 + vertex -5.4334 11.6797 0 + endloop + endfacet + facet normal -0.00575054 -0.999983 -0 + outer loop + vertex -5.06624 11.6776 0 + vertex -5.4334 11.6797 -0.1 + vertex -5.06624 11.6776 -0.1 + endloop + endfacet + facet normal -0.0742941 -0.997236 0 + outer loop + vertex -5.06624 11.6776 -0.1 + vertex -4.60751 11.6434 0 + vertex -5.06624 11.6776 0 + endloop + endfacet + facet normal -0.0742941 -0.997236 -0 + outer loop + vertex -4.60751 11.6434 0 + vertex -5.06624 11.6776 -0.1 + vertex -4.60751 11.6434 -0.1 + endloop + endfacet + facet normal -0.120331 -0.992734 0 + outer loop + vertex -4.60751 11.6434 -0.1 + vertex -4.06319 11.5774 0 + vertex -4.60751 11.6434 0 + endloop + endfacet + facet normal -0.120331 -0.992734 -0 + outer loop + vertex -4.06319 11.5774 0 + vertex -4.60751 11.6434 -0.1 + vertex -4.06319 11.5774 -0.1 + endloop + endfacet + facet normal -0.154416 -0.988006 0 + outer loop + vertex -4.06319 11.5774 -0.1 + vertex -3.43924 11.4799 0 + vertex -4.06319 11.5774 0 + endloop + endfacet + facet normal -0.154416 -0.988006 -0 + outer loop + vertex -3.43924 11.4799 0 + vertex -4.06319 11.5774 -0.1 + vertex -3.43924 11.4799 -0.1 + endloop + endfacet + facet normal -0.181553 -0.983381 0 + outer loop + vertex -3.43924 11.4799 -0.1 + vertex -2.74162 11.3511 0 + vertex -3.43924 11.4799 0 + endloop + endfacet + facet normal -0.181553 -0.983381 -0 + outer loop + vertex -2.74162 11.3511 0 + vertex -3.43924 11.4799 -0.1 + vertex -2.74162 11.3511 -0.1 + endloop + endfacet + facet normal -0.168602 -0.985684 0 + outer loop + vertex -2.74162 11.3511 -0.1 + vertex -2.06279 11.235 0 + vertex -2.74162 11.3511 0 + endloop + endfacet + facet normal -0.168602 -0.985684 -0 + outer loop + vertex -2.06279 11.235 0 + vertex -2.74162 11.3511 -0.1 + vertex -2.06279 11.235 -0.1 + endloop + endfacet + facet normal -0.106074 -0.994358 0 + outer loop + vertex -2.06279 11.235 -0.1 + vertex -1.45038 11.1697 0 + vertex -2.06279 11.235 0 + endloop + endfacet + facet normal -0.106074 -0.994358 -0 + outer loop + vertex -1.45038 11.1697 0 + vertex -2.06279 11.235 -0.1 + vertex -1.45038 11.1697 -0.1 + endloop + endfacet + facet normal -0.0235022 -0.999724 0 + outer loop + vertex -1.45038 11.1697 -0.1 + vertex -0.893798 11.1566 0 + vertex -1.45038 11.1697 0 + endloop + endfacet + facet normal -0.0235022 -0.999724 -0 + outer loop + vertex -0.893798 11.1566 0 + vertex -1.45038 11.1697 -0.1 + vertex -0.893798 11.1566 -0.1 + endloop + endfacet + facet normal 0.0792039 -0.996858 0 + outer loop + vertex -0.893798 11.1566 -0.1 + vertex -0.382462 11.1972 0 + vertex -0.893798 11.1566 0 + endloop + endfacet + facet normal 0.0792039 -0.996858 0 + outer loop + vertex -0.382462 11.1972 0 + vertex -0.893798 11.1566 -0.1 + vertex -0.382462 11.1972 -0.1 + endloop + endfacet + facet normal 0.197027 -0.980398 0 + outer loop + vertex -0.382462 11.1972 -0.1 + vertex 0.0942225 11.293 0 + vertex -0.382462 11.1972 0 + endloop + endfacet + facet normal 0.197027 -0.980398 0 + outer loop + vertex 0.0942225 11.293 0 + vertex -0.382462 11.1972 -0.1 + vertex 0.0942225 11.293 -0.1 + endloop + endfacet + facet normal 0.319159 -0.947701 0 + outer loop + vertex 0.0942225 11.293 -0.1 + vertex 0.546849 11.4454 0 + vertex 0.0942225 11.293 0 + endloop + endfacet + facet normal 0.319159 -0.947701 0 + outer loop + vertex 0.546849 11.4454 0 + vertex 0.0942225 11.293 -0.1 + vertex 0.546849 11.4454 -0.1 + endloop + endfacet + facet normal 0.432288 -0.901736 0 + outer loop + vertex 0.546849 11.4454 -0.1 + vertex 0.986004 11.656 0 + vertex 0.546849 11.4454 0 + endloop + endfacet + facet normal 0.432288 -0.901736 0 + outer loop + vertex 0.986004 11.656 0 + vertex 0.546849 11.4454 -0.1 + vertex 0.986004 11.656 -0.1 + endloop + endfacet + facet normal 0.52637 -0.850255 0 + outer loop + vertex 0.986004 11.656 -0.1 + vertex 1.42228 11.926 0 + vertex 0.986004 11.656 0 + endloop + endfacet + facet normal 0.52637 -0.850255 0 + outer loop + vertex 1.42228 11.926 0 + vertex 0.986004 11.656 -0.1 + vertex 1.42228 11.926 -0.1 + endloop + endfacet + facet normal 0.604613 -0.796519 0 + outer loop + vertex 1.42228 11.926 -0.1 + vertex 1.72214 12.1537 0 + vertex 1.42228 11.926 0 + endloop + endfacet + facet normal 0.604613 -0.796519 0 + outer loop + vertex 1.72214 12.1537 0 + vertex 1.42228 11.926 -0.1 + vertex 1.72214 12.1537 -0.1 + endloop + endfacet + facet normal 0.710535 -0.703661 0 + outer loop + vertex 1.72214 12.1537 0 + vertex 1.81906 12.2515 -0.1 + vertex 1.81906 12.2515 0 + endloop + endfacet + facet normal 0.710535 -0.703661 0 + outer loop + vertex 1.81906 12.2515 -0.1 + vertex 1.72214 12.1537 0 + vertex 1.72214 12.1537 -0.1 + endloop + endfacet + facet normal 0.820717 -0.571334 0 + outer loop + vertex 1.81906 12.2515 0 + vertex 1.88346 12.344 -0.1 + vertex 1.88346 12.344 0 + endloop + endfacet + facet normal 0.820717 -0.571334 0 + outer loop + vertex 1.88346 12.344 -0.1 + vertex 1.81906 12.2515 0 + vertex 1.81906 12.2515 -0.1 + endloop + endfacet + facet normal 0.936854 -0.349721 0 + outer loop + vertex 1.88346 12.344 0 + vertex 1.91748 12.4352 -0.1 + vertex 1.91748 12.4352 0 + endloop + endfacet + facet normal 0.936854 -0.349721 0 + outer loop + vertex 1.91748 12.4352 -0.1 + vertex 1.88346 12.344 0 + vertex 1.88346 12.344 -0.1 + endloop + endfacet + facet normal 0.998121 -0.0612747 0 + outer loop + vertex 1.91748 12.4352 0 + vertex 1.92323 12.5289 -0.1 + vertex 1.92323 12.5289 0 + endloop + endfacet + facet normal 0.998121 -0.0612747 0 + outer loop + vertex 1.92323 12.5289 -0.1 + vertex 1.91748 12.4352 0 + vertex 1.91748 12.4352 -0.1 + endloop + endfacet + facet normal 0.979928 0.199352 0 + outer loop + vertex 1.92323 12.5289 0 + vertex 1.90284 12.6291 -0.1 + vertex 1.90284 12.6291 0 + endloop + endfacet + facet normal 0.979928 0.199352 0 + outer loop + vertex 1.90284 12.6291 -0.1 + vertex 1.92323 12.5289 0 + vertex 1.92323 12.5289 -0.1 + endloop + endfacet + facet normal 0.928124 0.372271 0 + outer loop + vertex 1.90284 12.6291 0 + vertex 1.85843 12.7398 -0.1 + vertex 1.85843 12.7398 0 + endloop + endfacet + facet normal 0.928124 0.372271 0 + outer loop + vertex 1.85843 12.7398 -0.1 + vertex 1.90284 12.6291 0 + vertex 1.90284 12.6291 -0.1 + endloop + endfacet + facet normal 0.849902 0.526941 0 + outer loop + vertex 1.85843 12.7398 0 + vertex 1.7147 12.9716 -0.1 + vertex 1.7147 12.9716 0 + endloop + endfacet + facet normal 0.849902 0.526941 0 + outer loop + vertex 1.7147 12.9716 -0.1 + vertex 1.85843 12.7398 0 + vertex 1.85843 12.7398 -0.1 + endloop + endfacet + facet normal 0.728356 0.685198 0 + outer loop + vertex 1.7147 12.9716 0 + vertex 1.51175 13.1874 -0.1 + vertex 1.51175 13.1874 0 + endloop + endfacet + facet normal 0.728356 0.685198 0 + outer loop + vertex 1.51175 13.1874 -0.1 + vertex 1.7147 12.9716 0 + vertex 1.7147 12.9716 -0.1 + endloop + endfacet + facet normal 0.606497 0.795086 -0 + outer loop + vertex 1.51175 13.1874 -0.1 + vertex 1.25015 13.3869 0 + vertex 1.51175 13.1874 0 + endloop + endfacet + facet normal 0.606497 0.795086 0 + outer loop + vertex 1.25015 13.3869 0 + vertex 1.51175 13.1874 -0.1 + vertex 1.25015 13.3869 -0.1 + endloop + endfacet + facet normal 0.497341 0.867555 -0 + outer loop + vertex 1.25015 13.3869 -0.1 + vertex 0.930489 13.5702 0 + vertex 1.25015 13.3869 0 + endloop + endfacet + facet normal 0.497341 0.867555 0 + outer loop + vertex 0.930489 13.5702 0 + vertex 1.25015 13.3869 -0.1 + vertex 0.930489 13.5702 -0.1 + endloop + endfacet + facet normal 0.404567 0.914508 -0 + outer loop + vertex 0.930489 13.5702 -0.1 + vertex 0.55335 13.737 0 + vertex 0.930489 13.5702 0 + endloop + endfacet + facet normal 0.404567 0.914508 0 + outer loop + vertex 0.55335 13.737 0 + vertex 0.930489 13.5702 -0.1 + vertex 0.55335 13.737 -0.1 + endloop + endfacet + facet normal 0.327265 0.944933 -0 + outer loop + vertex 0.55335 13.737 -0.1 + vertex 0.119316 13.8873 0 + vertex 0.55335 13.737 0 + endloop + endfacet + facet normal 0.327265 0.944933 0 + outer loop + vertex 0.119316 13.8873 0 + vertex 0.55335 13.737 -0.1 + vertex 0.119316 13.8873 -0.1 + endloop + endfacet + facet normal 0.263047 0.964783 -0 + outer loop + vertex 0.119316 13.8873 -0.1 + vertex -0.371032 14.021 0 + vertex 0.119316 13.8873 0 + endloop + endfacet + facet normal 0.263047 0.964783 0 + outer loop + vertex -0.371032 14.021 0 + vertex 0.119316 13.8873 -0.1 + vertex -0.371032 14.021 -0.1 + endloop + endfacet + facet normal 0.209418 0.977826 -0 + outer loop + vertex -0.371032 14.021 -0.1 + vertex -0.917111 14.138 0 + vertex -0.371032 14.021 0 + endloop + endfacet + facet normal 0.209418 0.977826 0 + outer loop + vertex -0.917111 14.138 0 + vertex -0.371032 14.021 -0.1 + vertex -0.917111 14.138 -0.1 + endloop + endfacet + facet normal 0.164236 0.986421 -0 + outer loop + vertex -0.917111 14.138 -0.1 + vertex -1.51834 14.2381 0 + vertex -0.917111 14.138 0 + endloop + endfacet + facet normal 0.164236 0.986421 0 + outer loop + vertex -1.51834 14.2381 0 + vertex -0.917111 14.138 -0.1 + vertex -1.51834 14.2381 -0.1 + endloop + endfacet + facet normal 0.125776 0.992059 -0 + outer loop + vertex -1.51834 14.2381 -0.1 + vertex -2.17413 14.3212 0 + vertex -1.51834 14.2381 0 + endloop + endfacet + facet normal 0.125776 0.992059 0 + outer loop + vertex -2.17413 14.3212 0 + vertex -1.51834 14.2381 -0.1 + vertex -2.17413 14.3212 -0.1 + endloop + endfacet + facet normal 0.0926874 0.995695 -0 + outer loop + vertex -2.17413 14.3212 -0.1 + vertex -2.8839 14.3873 0 + vertex -2.17413 14.3212 0 + endloop + endfacet + facet normal 0.0926874 0.995695 0 + outer loop + vertex -2.8839 14.3873 0 + vertex -2.17413 14.3212 -0.1 + vertex -2.8839 14.3873 -0.1 + endloop + endfacet + facet normal 0.0639318 0.997954 -0 + outer loop + vertex -2.8839 14.3873 -0.1 + vertex -3.64708 14.4362 0 + vertex -2.8839 14.3873 0 + endloop + endfacet + facet normal 0.0639318 0.997954 0 + outer loop + vertex -3.64708 14.4362 0 + vertex -2.8839 14.3873 -0.1 + vertex -3.64708 14.4362 -0.1 + endloop + endfacet + facet normal 0.0386969 0.999251 -0 + outer loop + vertex -3.64708 14.4362 -0.1 + vertex -4.46307 14.4678 0 + vertex -3.64708 14.4362 0 + endloop + endfacet + facet normal 0.0386969 0.999251 0 + outer loop + vertex -4.46307 14.4678 0 + vertex -3.64708 14.4362 -0.1 + vertex -4.46307 14.4678 -0.1 + endloop + endfacet + facet normal 0.0163522 0.999866 -0 + outer loop + vertex -4.46307 14.4678 -0.1 + vertex -5.33129 14.482 0 + vertex -4.46307 14.4678 0 + endloop + endfacet + facet normal 0.0163522 0.999866 0 + outer loop + vertex -5.33129 14.482 0 + vertex -4.46307 14.4678 -0.1 + vertex -5.33129 14.482 -0.1 + endloop + endfacet + facet normal -0.00360162 0.999994 0 + outer loop + vertex -5.33129 14.482 -0.1 + vertex -6.25117 14.4787 0 + vertex -5.33129 14.482 0 + endloop + endfacet + facet normal -0.00360162 0.999994 0 + outer loop + vertex -6.25117 14.4787 0 + vertex -5.33129 14.482 -0.1 + vertex -6.25117 14.4787 -0.1 + endloop + endfacet + facet normal -0.0215556 0.999768 0 + outer loop + vertex -6.25117 14.4787 -0.1 + vertex -7.22211 14.4578 0 + vertex -6.25117 14.4787 0 + endloop + endfacet + facet normal -0.0215556 0.999768 0 + outer loop + vertex -7.22211 14.4578 0 + vertex -6.25117 14.4787 -0.1 + vertex -7.22211 14.4578 -0.1 + endloop + endfacet + facet normal -0.0376222 0.999292 0 + outer loop + vertex -7.22211 14.4578 -0.1 + vertex -9.25643 14.3812 0 + vertex -7.22211 14.4578 0 + endloop + endfacet + facet normal -0.0376222 0.999292 0 + outer loop + vertex -9.25643 14.3812 0 + vertex -7.22211 14.4578 -0.1 + vertex -9.25643 14.3812 -0.1 + endloop + endfacet + facet normal -0.0777977 0.996969 0 + outer loop + vertex -9.25643 14.3812 -0.1 + vertex -9.98725 14.3241 0 + vertex -9.25643 14.3812 0 + endloop + endfacet + facet normal -0.0777977 0.996969 0 + outer loop + vertex -9.98725 14.3241 0 + vertex -9.25643 14.3812 -0.1 + vertex -9.98725 14.3241 -0.1 + endloop + endfacet + facet normal -0.133926 0.990991 0 + outer loop + vertex -9.98725 14.3241 -0.1 + vertex -10.6249 14.238 0 + vertex -9.98725 14.3241 0 + endloop + endfacet + facet normal -0.133926 0.990991 0 + outer loop + vertex -10.6249 14.238 0 + vertex -9.98725 14.3241 -0.1 + vertex -10.6249 14.238 -0.1 + endloop + endfacet + facet normal -0.202593 0.979263 0 + outer loop + vertex -10.6249 14.238 -0.1 + vertex -11.2428 14.1101 0 + vertex -10.6249 14.238 0 + endloop + endfacet + facet normal -0.202593 0.979263 0 + outer loop + vertex -11.2428 14.1101 0 + vertex -10.6249 14.238 -0.1 + vertex -11.2428 14.1101 -0.1 + endloop + endfacet + facet normal -0.261603 0.965176 0 + outer loop + vertex -11.2428 14.1101 -0.1 + vertex -11.9142 13.9281 0 + vertex -11.2428 14.1101 0 + endloop + endfacet + facet normal -0.261603 0.965176 0 + outer loop + vertex -11.9142 13.9281 0 + vertex -11.2428 14.1101 -0.1 + vertex -11.9142 13.9281 -0.1 + endloop + endfacet + facet normal -0.297369 0.954762 0 + outer loop + vertex -11.9142 13.9281 -0.1 + vertex -12.7125 13.6795 0 + vertex -11.9142 13.9281 0 + endloop + endfacet + facet normal -0.297369 0.954762 0 + outer loop + vertex -12.7125 13.6795 0 + vertex -11.9142 13.9281 -0.1 + vertex -12.7125 13.6795 -0.1 + endloop + endfacet + facet normal -0.311908 0.950112 0 + outer loop + vertex -12.7125 13.6795 -0.1 + vertex -13.7109 13.3517 0 + vertex -12.7125 13.6795 0 + endloop + endfacet + facet normal -0.311908 0.950112 0 + outer loop + vertex -13.7109 13.3517 0 + vertex -12.7125 13.6795 -0.1 + vertex -13.7109 13.3517 -0.1 + endloop + endfacet + facet normal -0.299976 0.953947 0 + outer loop + vertex -13.7109 13.3517 -0.1 + vertex -14.949 12.9624 0 + vertex -13.7109 13.3517 0 + endloop + endfacet + facet normal -0.299976 0.953947 0 + outer loop + vertex -14.949 12.9624 0 + vertex -13.7109 13.3517 -0.1 + vertex -14.949 12.9624 -0.1 + endloop + endfacet + facet normal -0.271422 0.96246 0 + outer loop + vertex -14.949 12.9624 -0.1 + vertex -16.0795 12.6436 0 + vertex -14.949 12.9624 0 + endloop + endfacet + facet normal -0.271422 0.96246 0 + outer loop + vertex -16.0795 12.6436 0 + vertex -14.949 12.9624 -0.1 + vertex -16.0795 12.6436 -0.1 + endloop + endfacet + facet normal -0.233252 0.972416 0 + outer loop + vertex -16.0795 12.6436 -0.1 + vertex -16.9775 12.4282 0 + vertex -16.0795 12.6436 0 + endloop + endfacet + facet normal -0.233252 0.972416 0 + outer loop + vertex -16.9775 12.4282 0 + vertex -16.0795 12.6436 -0.1 + vertex -16.9775 12.4282 -0.1 + endloop + endfacet + facet normal -0.178763 0.983892 0 + outer loop + vertex -16.9775 12.4282 -0.1 + vertex -17.3003 12.3696 0 + vertex -16.9775 12.4282 0 + endloop + endfacet + facet normal -0.178763 0.983892 0 + outer loop + vertex -17.3003 12.3696 0 + vertex -16.9775 12.4282 -0.1 + vertex -17.3003 12.3696 -0.1 + endloop + endfacet + facet normal -0.0935268 0.995617 0 + outer loop + vertex -17.3003 12.3696 -0.1 + vertex -17.5181 12.3491 0 + vertex -17.3003 12.3696 0 + endloop + endfacet + facet normal -0.0935268 0.995617 0 + outer loop + vertex -17.5181 12.3491 0 + vertex -17.3003 12.3696 -0.1 + vertex -17.5181 12.3491 -0.1 + endloop + endfacet + facet normal -0.0617051 0.998094 0 + outer loop + vertex -17.5181 12.3491 -0.1 + vertex -17.9556 12.3221 0 + vertex -17.5181 12.3491 0 + endloop + endfacet + facet normal -0.0617051 0.998094 0 + outer loop + vertex -17.9556 12.3221 0 + vertex -17.5181 12.3491 -0.1 + vertex -17.9556 12.3221 -0.1 + endloop + endfacet + facet normal -0.11848 0.992956 0 + outer loop + vertex -17.9556 12.3221 -0.1 + vertex -18.5728 12.2484 0 + vertex -17.9556 12.3221 0 + endloop + endfacet + facet normal -0.11848 0.992956 0 + outer loop + vertex -18.5728 12.2484 0 + vertex -17.9556 12.3221 -0.1 + vertex -18.5728 12.2484 -0.1 + endloop + endfacet + facet normal -0.150729 0.988575 0 + outer loop + vertex -18.5728 12.2484 -0.1 + vertex -19.2876 12.1394 0 + vertex -18.5728 12.2484 0 + endloop + endfacet + facet normal -0.150729 0.988575 0 + outer loop + vertex -19.2876 12.1394 0 + vertex -18.5728 12.2484 -0.1 + vertex -19.2876 12.1394 -0.1 + endloop + endfacet + facet normal -0.179254 0.983803 0 + outer loop + vertex -19.2876 12.1394 -0.1 + vertex -20.0181 12.0063 0 + vertex -19.2876 12.1394 0 + endloop + endfacet + facet normal -0.179254 0.983803 0 + outer loop + vertex -20.0181 12.0063 0 + vertex -19.2876 12.1394 -0.1 + vertex -20.0181 12.0063 -0.1 + endloop + endfacet + facet normal -0.161235 0.986916 0 + outer loop + vertex -20.0181 12.0063 -0.1 + vertex -20.4772 11.9313 0 + vertex -20.0181 12.0063 0 + endloop + endfacet + facet normal -0.161235 0.986916 0 + outer loop + vertex -20.4772 11.9313 0 + vertex -20.0181 12.0063 -0.1 + vertex -20.4772 11.9313 -0.1 + endloop + endfacet + facet normal -0.116007 0.993248 0 + outer loop + vertex -20.4772 11.9313 -0.1 + vertex -21.0446 11.8651 0 + vertex -20.4772 11.9313 0 + endloop + endfacet + facet normal -0.116007 0.993248 0 + outer loop + vertex -21.0446 11.8651 0 + vertex -20.4772 11.9313 -0.1 + vertex -21.0446 11.8651 -0.1 + endloop + endfacet + facet normal -0.076075 0.997102 0 + outer loop + vertex -21.0446 11.8651 -0.1 + vertex -22.4311 11.7593 0 + vertex -21.0446 11.8651 0 + endloop + endfacet + facet normal -0.076075 0.997102 0 + outer loop + vertex -22.4311 11.7593 0 + vertex -21.0446 11.8651 -0.1 + vertex -22.4311 11.7593 -0.1 + endloop + endfacet + facet normal -0.0432101 0.999066 0 + outer loop + vertex -22.4311 11.7593 -0.1 + vertex -24.031 11.6901 0 + vertex -22.4311 11.7593 0 + endloop + endfacet + facet normal -0.0432101 0.999066 0 + outer loop + vertex -24.031 11.6901 0 + vertex -22.4311 11.7593 -0.1 + vertex -24.031 11.6901 -0.1 + endloop + endfacet + facet normal -0.0189053 0.999821 0 + outer loop + vertex -24.031 11.6901 -0.1 + vertex -25.698 11.6586 0 + vertex -24.031 11.6901 0 + endloop + endfacet + facet normal -0.0189053 0.999821 0 + outer loop + vertex -25.698 11.6586 0 + vertex -24.031 11.6901 -0.1 + vertex -25.698 11.6586 -0.1 + endloop + endfacet + facet normal 0.00456618 0.99999 -0 + outer loop + vertex -25.698 11.6586 -0.1 + vertex -27.2855 11.6658 0 + vertex -25.698 11.6586 0 + endloop + endfacet + facet normal 0.00456618 0.99999 0 + outer loop + vertex -27.2855 11.6658 0 + vertex -25.698 11.6586 -0.1 + vertex -27.2855 11.6658 -0.1 + endloop + endfacet + facet normal 0.034581 0.999402 -0 + outer loop + vertex -27.2855 11.6658 -0.1 + vertex -28.647 11.7129 0 + vertex -27.2855 11.6658 0 + endloop + endfacet + facet normal 0.034581 0.999402 0 + outer loop + vertex -28.647 11.7129 0 + vertex -27.2855 11.6658 -0.1 + vertex -28.647 11.7129 -0.1 + endloop + endfacet + facet normal 0.0704155 0.997518 -0 + outer loop + vertex -28.647 11.7129 -0.1 + vertex -29.1973 11.7518 0 + vertex -28.647 11.7129 0 + endloop + endfacet + facet normal 0.0704155 0.997518 0 + outer loop + vertex -29.1973 11.7518 0 + vertex -28.647 11.7129 -0.1 + vertex -29.1973 11.7518 -0.1 + endloop + endfacet + facet normal 0.111453 0.99377 -0 + outer loop + vertex -29.1973 11.7518 -0.1 + vertex -29.6362 11.801 0 + vertex -29.1973 11.7518 0 + endloop + endfacet + facet normal 0.111453 0.99377 0 + outer loop + vertex -29.6362 11.801 0 + vertex -29.1973 11.7518 -0.1 + vertex -29.6362 11.801 -0.1 + endloop + endfacet + facet normal 0.189706 0.981841 -0 + outer loop + vertex -29.6362 11.801 -0.1 + vertex -29.9453 11.8607 0 + vertex -29.6362 11.801 0 + endloop + endfacet + facet normal 0.189706 0.981841 0 + outer loop + vertex -29.9453 11.8607 0 + vertex -29.6362 11.801 -0.1 + vertex -29.9453 11.8607 -0.1 + endloop + endfacet + facet normal 0.320034 0.947406 -0 + outer loop + vertex -29.9453 11.8607 -0.1 + vertex -30.0456 11.8946 0 + vertex -29.9453 11.8607 0 + endloop + endfacet + facet normal 0.320034 0.947406 0 + outer loop + vertex -30.0456 11.8946 0 + vertex -29.9453 11.8607 -0.1 + vertex -30.0456 11.8946 -0.1 + endloop + endfacet + facet normal 0.514271 0.857628 -0 + outer loop + vertex -30.0456 11.8946 -0.1 + vertex -30.1065 11.9311 0 + vertex -30.0456 11.8946 0 + endloop + endfacet + facet normal 0.514271 0.857628 0 + outer loop + vertex -30.1065 11.9311 0 + vertex -30.0456 11.8946 -0.1 + vertex -30.1065 11.9311 -0.1 + endloop + endfacet + facet normal 0.794078 0.607816 0 + outer loop + vertex -30.1065 11.9311 0 + vertex -30.2115 12.0683 -0.1 + vertex -30.2115 12.0683 0 + endloop + endfacet + facet normal 0.794078 0.607816 0 + outer loop + vertex -30.2115 12.0683 -0.1 + vertex -30.1065 11.9311 0 + vertex -30.1065 11.9311 -0.1 + endloop + endfacet + facet normal 0.908198 0.418541 0 + outer loop + vertex -30.2115 12.0683 0 + vertex -30.2975 12.2549 -0.1 + vertex -30.2975 12.2549 0 + endloop + endfacet + facet normal 0.908198 0.418541 0 + outer loop + vertex -30.2975 12.2549 -0.1 + vertex -30.2115 12.0683 0 + vertex -30.2115 12.0683 -0.1 + endloop + endfacet + facet normal 0.964271 0.264918 0 + outer loop + vertex -30.2975 12.2549 0 + vertex -30.3556 12.4664 -0.1 + vertex -30.3556 12.4664 0 + endloop + endfacet + facet normal 0.964271 0.264918 0 + outer loop + vertex -30.3556 12.4664 -0.1 + vertex -30.2975 12.2549 0 + vertex -30.2975 12.2549 -0.1 + endloop + endfacet + facet normal 0.994966 0.10021 0 + outer loop + vertex -30.3556 12.4664 0 + vertex -30.377 12.6783 -0.1 + vertex -30.377 12.6783 0 + endloop + endfacet + facet normal 0.994966 0.10021 0 + outer loop + vertex -30.377 12.6783 -0.1 + vertex -30.3556 12.4664 0 + vertex -30.3556 12.4664 -0.1 + endloop + endfacet + facet normal 0.99734 -0.0728833 0 + outer loop + vertex -30.377 12.6783 0 + vertex -30.3621 12.8813 -0.1 + vertex -30.3621 12.8813 0 + endloop + endfacet + facet normal 0.99734 -0.0728833 0 + outer loop + vertex -30.3621 12.8813 -0.1 + vertex -30.377 12.6783 0 + vertex -30.377 12.6783 -0.1 + endloop + endfacet + facet normal 0.963268 -0.268541 0 + outer loop + vertex -30.3621 12.8813 0 + vertex -30.3387 12.9655 -0.1 + vertex -30.3387 12.9655 0 + endloop + endfacet + facet normal 0.963268 -0.268541 0 + outer loop + vertex -30.3387 12.9655 -0.1 + vertex -30.3621 12.8813 0 + vertex -30.3621 12.8813 -0.1 + endloop + endfacet + facet normal 0.886257 -0.463194 0 + outer loop + vertex -30.3387 12.9655 0 + vertex -30.3001 13.0393 -0.1 + vertex -30.3001 13.0393 0 + endloop + endfacet + facet normal 0.886257 -0.463194 0 + outer loop + vertex -30.3001 13.0393 -0.1 + vertex -30.3387 12.9655 0 + vertex -30.3387 12.9655 -0.1 + endloop + endfacet + facet normal 0.748065 -0.663625 0 + outer loop + vertex -30.3001 13.0393 0 + vertex -30.2432 13.1034 -0.1 + vertex -30.2432 13.1034 0 + endloop + endfacet + facet normal 0.748065 -0.663625 0 + outer loop + vertex -30.2432 13.1034 -0.1 + vertex -30.3001 13.0393 0 + vertex -30.3001 13.0393 -0.1 + endloop + endfacet + facet normal 0.576127 -0.81736 0 + outer loop + vertex -30.2432 13.1034 -0.1 + vertex -30.1646 13.1588 0 + vertex -30.2432 13.1034 0 + endloop + endfacet + facet normal 0.576127 -0.81736 0 + outer loop + vertex -30.1646 13.1588 0 + vertex -30.2432 13.1034 -0.1 + vertex -30.1646 13.1588 -0.1 + endloop + endfacet + facet normal 0.349457 -0.936953 0 + outer loop + vertex -30.1646 13.1588 -0.1 + vertex -29.9294 13.2465 0 + vertex -30.1646 13.1588 0 + endloop + endfacet + facet normal 0.349457 -0.936953 0 + outer loop + vertex -29.9294 13.2465 0 + vertex -30.1646 13.1588 -0.1 + vertex -29.9294 13.2465 -0.1 + endloop + endfacet + facet normal 0.170605 -0.985339 0 + outer loop + vertex -29.9294 13.2465 -0.1 + vertex -29.5683 13.309 0 + vertex -29.9294 13.2465 0 + endloop + endfacet + facet normal 0.170605 -0.985339 0 + outer loop + vertex -29.5683 13.309 0 + vertex -29.9294 13.2465 -0.1 + vertex -29.5683 13.309 -0.1 + endloop + endfacet + facet normal 0.0853267 -0.996353 0 + outer loop + vertex -29.5683 13.309 -0.1 + vertex -29.0548 13.353 0 + vertex -29.5683 13.309 0 + endloop + endfacet + facet normal 0.0853267 -0.996353 0 + outer loop + vertex -29.0548 13.353 0 + vertex -29.5683 13.309 -0.1 + vertex -29.0548 13.353 -0.1 + endloop + endfacet + facet normal 0.0369327 -0.999318 0 + outer loop + vertex -29.0548 13.353 -0.1 + vertex -27.4661 13.4117 0 + vertex -29.0548 13.353 0 + endloop + endfacet + facet normal 0.0369327 -0.999318 0 + outer loop + vertex -27.4661 13.4117 0 + vertex -29.0548 13.353 -0.1 + vertex -27.4661 13.4117 -0.1 + endloop + endfacet + facet normal 0.0488074 -0.998808 0 + outer loop + vertex -27.4661 13.4117 -0.1 + vertex -26.1544 13.4758 0 + vertex -27.4661 13.4117 0 + endloop + endfacet + facet normal 0.0488074 -0.998808 0 + outer loop + vertex -26.1544 13.4758 0 + vertex -27.4661 13.4117 -0.1 + vertex -26.1544 13.4758 -0.1 + endloop + endfacet + facet normal 0.0958463 -0.995396 0 + outer loop + vertex -26.1544 13.4758 -0.1 + vertex -24.8613 13.6003 0 + vertex -26.1544 13.4758 0 + endloop + endfacet + facet normal 0.0958463 -0.995396 0 + outer loop + vertex -24.8613 13.6003 0 + vertex -26.1544 13.4758 -0.1 + vertex -24.8613 13.6003 -0.1 + endloop + endfacet + facet normal 0.144031 -0.989573 0 + outer loop + vertex -24.8613 13.6003 -0.1 + vertex -23.579 13.787 0 + vertex -24.8613 13.6003 0 + endloop + endfacet + facet normal 0.144031 -0.989573 0 + outer loop + vertex -23.579 13.787 0 + vertex -24.8613 13.6003 -0.1 + vertex -23.579 13.787 -0.1 + endloop + endfacet + facet normal 0.192155 -0.981365 0 + outer loop + vertex -23.579 13.787 -0.1 + vertex -22.3001 14.0374 0 + vertex -23.579 13.787 0 + endloop + endfacet + facet normal 0.192155 -0.981365 0 + outer loop + vertex -22.3001 14.0374 0 + vertex -23.579 13.787 -0.1 + vertex -22.3001 14.0374 -0.1 + endloop + endfacet + facet normal 0.239032 -0.971012 0 + outer loop + vertex -22.3001 14.0374 -0.1 + vertex -21.0167 14.3533 0 + vertex -22.3001 14.0374 0 + endloop + endfacet + facet normal 0.239032 -0.971012 0 + outer loop + vertex -21.0167 14.3533 0 + vertex -22.3001 14.0374 -0.1 + vertex -21.0167 14.3533 -0.1 + endloop + endfacet + facet normal 0.283599 -0.958943 0 + outer loop + vertex -21.0167 14.3533 -0.1 + vertex -19.7213 14.7364 0 + vertex -21.0167 14.3533 0 + endloop + endfacet + facet normal 0.283599 -0.958943 0 + outer loop + vertex -19.7213 14.7364 0 + vertex -21.0167 14.3533 -0.1 + vertex -19.7213 14.7364 -0.1 + endloop + endfacet + facet normal 0.325025 -0.945706 0 + outer loop + vertex -19.7213 14.7364 -0.1 + vertex -18.4061 15.1884 0 + vertex -19.7213 14.7364 0 + endloop + endfacet + facet normal 0.325025 -0.945706 0 + outer loop + vertex -18.4061 15.1884 0 + vertex -19.7213 14.7364 -0.1 + vertex -18.4061 15.1884 -0.1 + endloop + endfacet + facet normal 0.362736 -0.931892 0 + outer loop + vertex -18.4061 15.1884 -0.1 + vertex -17.0637 15.711 0 + vertex -18.4061 15.1884 0 + endloop + endfacet + facet normal 0.362736 -0.931892 0 + outer loop + vertex -17.0637 15.711 0 + vertex -18.4061 15.1884 -0.1 + vertex -17.0637 15.711 -0.1 + endloop + endfacet + facet normal 0.385262 -0.922807 0 + outer loop + vertex -17.0637 15.711 -0.1 + vertex -16.4531 15.9659 0 + vertex -17.0637 15.711 0 + endloop + endfacet + facet normal 0.385262 -0.922807 0 + outer loop + vertex -16.4531 15.9659 0 + vertex -17.0637 15.711 -0.1 + vertex -16.4531 15.9659 -0.1 + endloop + endfacet + facet normal 0.409178 -0.912454 0 + outer loop + vertex -16.4531 15.9659 -0.1 + vertex -15.9397 16.1961 0 + vertex -16.4531 15.9659 0 + endloop + endfacet + facet normal 0.409178 -0.912454 0 + outer loop + vertex -15.9397 16.1961 0 + vertex -16.4531 15.9659 -0.1 + vertex -15.9397 16.1961 -0.1 + endloop + endfacet + facet normal 0.452989 -0.891516 0 + outer loop + vertex -15.9397 16.1961 -0.1 + vertex -15.4716 16.4339 0 + vertex -15.9397 16.1961 0 + endloop + endfacet + facet normal 0.452989 -0.891516 0 + outer loop + vertex -15.4716 16.4339 0 + vertex -15.9397 16.1961 -0.1 + vertex -15.4716 16.4339 -0.1 + endloop + endfacet + facet normal 0.505092 -0.863065 0 + outer loop + vertex -15.4716 16.4339 -0.1 + vertex -14.9972 16.7116 0 + vertex -15.4716 16.4339 0 + endloop + endfacet + facet normal 0.505092 -0.863065 0 + outer loop + vertex -14.9972 16.7116 0 + vertex -15.4716 16.4339 -0.1 + vertex -14.9972 16.7116 -0.1 + endloop + endfacet + facet normal 0.548914 -0.835879 0 + outer loop + vertex -14.9972 16.7116 -0.1 + vertex -14.4648 17.0612 0 + vertex -14.9972 16.7116 0 + endloop + endfacet + facet normal 0.548914 -0.835879 0 + outer loop + vertex -14.4648 17.0612 0 + vertex -14.9972 16.7116 -0.1 + vertex -14.4648 17.0612 -0.1 + endloop + endfacet + facet normal 0.577162 -0.81663 0 + outer loop + vertex -14.4648 17.0612 -0.1 + vertex -13.8225 17.5152 0 + vertex -14.4648 17.0612 0 + endloop + endfacet + facet normal 0.577162 -0.81663 0 + outer loop + vertex -13.8225 17.5152 0 + vertex -14.4648 17.0612 -0.1 + vertex -13.8225 17.5152 -0.1 + endloop + endfacet + facet normal 0.595448 -0.803394 0 + outer loop + vertex -13.8225 17.5152 -0.1 + vertex -12.0016 18.8648 0 + vertex -13.8225 17.5152 0 + endloop + endfacet + facet normal 0.595448 -0.803394 0 + outer loop + vertex -12.0016 18.8648 0 + vertex -13.8225 17.5152 -0.1 + vertex -12.0016 18.8648 -0.1 + endloop + endfacet + facet normal 0.610957 -0.791663 0 + outer loop + vertex -12.0016 18.8648 -0.1 + vertex -11.4702 19.2748 0 + vertex -12.0016 18.8648 0 + endloop + endfacet + facet normal 0.610957 -0.791663 0 + outer loop + vertex -11.4702 19.2748 0 + vertex -12.0016 18.8648 -0.1 + vertex -11.4702 19.2748 -0.1 + endloop + endfacet + facet normal 0.661597 -0.749859 0 + outer loop + vertex -11.4702 19.2748 -0.1 + vertex -11.1091 19.5935 0 + vertex -11.4702 19.2748 0 + endloop + endfacet + facet normal 0.661597 -0.749859 0 + outer loop + vertex -11.1091 19.5935 0 + vertex -11.4702 19.2748 -0.1 + vertex -11.1091 19.5935 -0.1 + endloop + endfacet + facet normal 0.747538 -0.664219 0 + outer loop + vertex -11.1091 19.5935 0 + vertex -10.9948 19.7221 -0.1 + vertex -10.9948 19.7221 0 + endloop + endfacet + facet normal 0.747538 -0.664219 0 + outer loop + vertex -10.9948 19.7221 -0.1 + vertex -11.1091 19.5935 0 + vertex -11.1091 19.5935 -0.1 + endloop + endfacet + facet normal 0.848145 -0.529765 0 + outer loop + vertex -10.9948 19.7221 0 + vertex -10.9261 19.832 -0.1 + vertex -10.9261 19.832 0 + endloop + endfacet + facet normal 0.848145 -0.529765 0 + outer loop + vertex -10.9261 19.832 -0.1 + vertex -10.9948 19.7221 0 + vertex -10.9948 19.7221 -0.1 + endloop + endfacet + facet normal 0.972725 -0.231962 0 + outer loop + vertex -10.9261 19.832 0 + vertex -10.904 19.9248 -0.1 + vertex -10.904 19.9248 0 + endloop + endfacet + facet normal 0.972725 -0.231962 0 + outer loop + vertex -10.904 19.9248 -0.1 + vertex -10.9261 19.832 0 + vertex -10.9261 19.832 -0.1 + endloop + endfacet + facet normal 0.949443 0.31394 0 + outer loop + vertex -10.904 19.9248 0 + vertex -10.9294 20.0018 -0.1 + vertex -10.9294 20.0018 0 + endloop + endfacet + facet normal 0.949443 0.31394 0 + outer loop + vertex -10.9294 20.0018 -0.1 + vertex -10.904 19.9248 0 + vertex -10.904 19.9248 -0.1 + endloop + endfacet + facet normal 0.645708 0.763585 -0 + outer loop + vertex -10.9294 20.0018 -0.1 + vertex -11.0035 20.0644 0 + vertex -10.9294 20.0018 0 + endloop + endfacet + facet normal 0.645708 0.763585 0 + outer loop + vertex -11.0035 20.0644 0 + vertex -10.9294 20.0018 -0.1 + vertex -11.0035 20.0644 -0.1 + endloop + endfacet + facet normal 0.372622 0.927983 -0 + outer loop + vertex -11.0035 20.0644 -0.1 + vertex -11.1271 20.114 0 + vertex -11.0035 20.0644 0 + endloop + endfacet + facet normal 0.372622 0.927983 0 + outer loop + vertex -11.1271 20.114 0 + vertex -11.0035 20.0644 -0.1 + vertex -11.1271 20.114 -0.1 + endloop + endfacet + facet normal 0.213569 0.976928 -0 + outer loop + vertex -11.1271 20.114 -0.1 + vertex -11.3013 20.1521 0 + vertex -11.1271 20.114 0 + endloop + endfacet + facet normal 0.213569 0.976928 0 + outer loop + vertex -11.3013 20.1521 0 + vertex -11.1271 20.114 -0.1 + vertex -11.3013 20.1521 -0.1 + endloop + endfacet + facet normal 0.122812 0.99243 -0 + outer loop + vertex -11.3013 20.1521 -0.1 + vertex -11.5271 20.1801 0 + vertex -11.3013 20.1521 0 + endloop + endfacet + facet normal 0.122812 0.99243 0 + outer loop + vertex -11.5271 20.1801 0 + vertex -11.3013 20.1521 -0.1 + vertex -11.5271 20.1801 -0.1 + endloop + endfacet + facet normal 0.050903 0.998704 -0 + outer loop + vertex -11.5271 20.1801 -0.1 + vertex -12.1376 20.2112 0 + vertex -11.5271 20.1801 0 + endloop + endfacet + facet normal 0.050903 0.998704 0 + outer loop + vertex -12.1376 20.2112 0 + vertex -11.5271 20.1801 -0.1 + vertex -12.1376 20.2112 -0.1 + endloop + endfacet + facet normal 0.00904467 0.999959 -0 + outer loop + vertex -12.1376 20.2112 -0.1 + vertex -12.9665 20.2187 0 + vertex -12.1376 20.2112 0 + endloop + endfacet + facet normal 0.00904467 0.999959 0 + outer loop + vertex -12.9665 20.2187 0 + vertex -12.1376 20.2112 -0.1 + vertex -12.9665 20.2187 -0.1 + endloop + endfacet + facet normal -0.0191031 0.999818 0 + outer loop + vertex -12.9665 20.2187 -0.1 + vertex -13.9037 20.2008 0 + vertex -12.9665 20.2187 0 + endloop + endfacet + facet normal -0.0191031 0.999818 0 + outer loop + vertex -13.9037 20.2008 0 + vertex -12.9665 20.2187 -0.1 + vertex -13.9037 20.2008 -0.1 + endloop + endfacet + facet normal -0.0506696 0.998715 0 + outer loop + vertex -13.9037 20.2008 -0.1 + vertex -14.8461 20.153 0 + vertex -13.9037 20.2008 0 + endloop + endfacet + facet normal -0.0506696 0.998715 0 + outer loop + vertex -14.8461 20.153 0 + vertex -13.9037 20.2008 -0.1 + vertex -14.8461 20.153 -0.1 + endloop + endfacet + facet normal -0.0837631 0.996486 0 + outer loop + vertex -14.8461 20.153 -0.1 + vertex -15.684 20.0825 0 + vertex -14.8461 20.153 0 + endloop + endfacet + facet normal -0.0837631 0.996486 0 + outer loop + vertex -15.684 20.0825 0 + vertex -14.8461 20.153 -0.1 + vertex -15.684 20.0825 -0.1 + endloop + endfacet + facet normal -0.136213 0.99068 0 + outer loop + vertex -15.684 20.0825 -0.1 + vertex -16.3079 19.9967 0 + vertex -15.684 20.0825 0 + endloop + endfacet + facet normal -0.136213 0.99068 0 + outer loop + vertex -16.3079 19.9967 0 + vertex -15.684 20.0825 -0.1 + vertex -16.3079 19.9967 -0.1 + endloop + endfacet + facet normal -0.175854 0.984416 0 + outer loop + vertex -16.3079 19.9967 -0.1 + vertex -17.2235 19.8332 0 + vertex -16.3079 19.9967 0 + endloop + endfacet + facet normal -0.175854 0.984416 0 + outer loop + vertex -17.2235 19.8332 0 + vertex -16.3079 19.9967 -0.1 + vertex -17.2235 19.8332 -0.1 + endloop + endfacet + facet normal -0.15721 0.987565 0 + outer loop + vertex -17.2235 19.8332 -0.1 + vertex -18.1791 19.6811 0 + vertex -17.2235 19.8332 0 + endloop + endfacet + facet normal -0.15721 0.987565 0 + outer loop + vertex -18.1791 19.6811 0 + vertex -17.2235 19.8332 -0.1 + vertex -18.1791 19.6811 -0.1 + endloop + endfacet + facet normal -0.133206 0.991088 0 + outer loop + vertex -18.1791 19.6811 -0.1 + vertex -20.1671 19.4139 0 + vertex -18.1791 19.6811 0 + endloop + endfacet + facet normal -0.133206 0.991088 0 + outer loop + vertex -20.1671 19.4139 0 + vertex -18.1791 19.6811 -0.1 + vertex -20.1671 19.4139 -0.1 + endloop + endfacet + facet normal -0.105044 0.994468 0 + outer loop + vertex -20.1671 19.4139 -0.1 + vertex -22.1849 19.2007 0 + vertex -20.1671 19.4139 0 + endloop + endfacet + facet normal -0.105044 0.994468 0 + outer loop + vertex -22.1849 19.2007 0 + vertex -20.1671 19.4139 -0.1 + vertex -22.1849 19.2007 -0.1 + endloop + endfacet + facet normal -0.0780607 0.996949 0 + outer loop + vertex -22.1849 19.2007 -0.1 + vertex -24.1455 19.0472 0 + vertex -22.1849 19.2007 0 + endloop + endfacet + facet normal -0.0780607 0.996949 0 + outer loop + vertex -24.1455 19.0472 0 + vertex -22.1849 19.2007 -0.1 + vertex -24.1455 19.0472 -0.1 + endloop + endfacet + facet normal -0.0485635 0.99882 0 + outer loop + vertex -24.1455 19.0472 -0.1 + vertex -25.9619 18.9589 0 + vertex -24.1455 19.0472 0 + endloop + endfacet + facet normal -0.0485635 0.99882 0 + outer loop + vertex -25.9619 18.9589 0 + vertex -24.1455 19.0472 -0.1 + vertex -25.9619 18.9589 -0.1 + endloop + endfacet + facet normal -0.0217214 0.999764 0 + outer loop + vertex -25.9619 18.9589 -0.1 + vertex -26.7887 18.9409 0 + vertex -25.9619 18.9589 0 + endloop + endfacet + facet normal -0.0217214 0.999764 0 + outer loop + vertex -26.7887 18.9409 0 + vertex -25.9619 18.9589 -0.1 + vertex -26.7887 18.9409 -0.1 + endloop + endfacet + facet normal 0.000558472 1 -0 + outer loop + vertex -26.7887 18.9409 -0.1 + vertex -27.5469 18.9414 0 + vertex -26.7887 18.9409 0 + endloop + endfacet + facet normal 0.000558472 1 0 + outer loop + vertex -27.5469 18.9414 0 + vertex -26.7887 18.9409 -0.1 + vertex -27.5469 18.9414 -0.1 + endloop + endfacet + facet normal 0.0287379 0.999587 -0 + outer loop + vertex -27.5469 18.9414 -0.1 + vertex -28.2256 18.9609 0 + vertex -27.5469 18.9414 0 + endloop + endfacet + facet normal 0.0287379 0.999587 0 + outer loop + vertex -28.2256 18.9609 0 + vertex -27.5469 18.9414 -0.1 + vertex -28.2256 18.9609 -0.1 + endloop + endfacet + facet normal 0.0666534 0.997776 -0 + outer loop + vertex -28.2256 18.9609 -0.1 + vertex -28.8137 19.0002 0 + vertex -28.2256 18.9609 0 + endloop + endfacet + facet normal 0.0666534 0.997776 0 + outer loop + vertex -28.8137 19.0002 0 + vertex -28.2256 18.9609 -0.1 + vertex -28.8137 19.0002 -0.1 + endloop + endfacet + facet normal 0.121854 0.992548 -0 + outer loop + vertex -28.8137 19.0002 -0.1 + vertex -29.3006 19.0599 0 + vertex -28.8137 19.0002 0 + endloop + endfacet + facet normal 0.121854 0.992548 0 + outer loop + vertex -29.3006 19.0599 0 + vertex -28.8137 19.0002 -0.1 + vertex -29.3006 19.0599 -0.1 + endloop + endfacet + facet normal 0.211179 0.977447 -0 + outer loop + vertex -29.3006 19.0599 -0.1 + vertex -29.6752 19.1409 0 + vertex -29.3006 19.0599 0 + endloop + endfacet + facet normal 0.211179 0.977447 0 + outer loop + vertex -29.6752 19.1409 0 + vertex -29.3006 19.0599 -0.1 + vertex -29.6752 19.1409 -0.1 + endloop + endfacet + facet normal 0.291073 0.956701 -0 + outer loop + vertex -29.6752 19.1409 -0.1 + vertex -30.5811 19.4165 0 + vertex -29.6752 19.1409 0 + endloop + endfacet + facet normal 0.291073 0.956701 0 + outer loop + vertex -30.5811 19.4165 0 + vertex -29.6752 19.1409 -0.1 + vertex -30.5811 19.4165 -0.1 + endloop + endfacet + facet normal 0.314696 0.949192 -0 + outer loop + vertex -30.5811 19.4165 -0.1 + vertex -31.4466 19.7034 0 + vertex -30.5811 19.4165 0 + endloop + endfacet + facet normal 0.314696 0.949192 0 + outer loop + vertex -31.4466 19.7034 0 + vertex -30.5811 19.4165 -0.1 + vertex -31.4466 19.7034 -0.1 + endloop + endfacet + facet normal 0.339748 0.940516 -0 + outer loop + vertex -31.4466 19.7034 -0.1 + vertex -32.271 20.0012 0 + vertex -31.4466 19.7034 0 + endloop + endfacet + facet normal 0.339748 0.940516 0 + outer loop + vertex -32.271 20.0012 0 + vertex -31.4466 19.7034 -0.1 + vertex -32.271 20.0012 -0.1 + endloop + endfacet + facet normal 0.366429 0.930446 -0 + outer loop + vertex -32.271 20.0012 -0.1 + vertex -33.0533 20.3093 0 + vertex -32.271 20.0012 0 + endloop + endfacet + facet normal 0.366429 0.930446 0 + outer loop + vertex -33.0533 20.3093 0 + vertex -32.271 20.0012 -0.1 + vertex -33.0533 20.3093 -0.1 + endloop + endfacet + facet normal 0.394948 0.918703 -0 + outer loop + vertex -33.0533 20.3093 -0.1 + vertex -33.7926 20.6272 0 + vertex -33.0533 20.3093 0 + endloop + endfacet + facet normal 0.394948 0.918703 0 + outer loop + vertex -33.7926 20.6272 0 + vertex -33.0533 20.3093 -0.1 + vertex -33.7926 20.6272 -0.1 + endloop + endfacet + facet normal 0.425556 0.904932 -0 + outer loop + vertex -33.7926 20.6272 -0.1 + vertex -34.4881 20.9542 0 + vertex -33.7926 20.6272 0 + endloop + endfacet + facet normal 0.425556 0.904932 0 + outer loop + vertex -34.4881 20.9542 0 + vertex -33.7926 20.6272 -0.1 + vertex -34.4881 20.9542 -0.1 + endloop + endfacet + facet normal 0.458522 0.888683 -0 + outer loop + vertex -34.4881 20.9542 -0.1 + vertex -35.1386 21.2899 0 + vertex -34.4881 20.9542 0 + endloop + endfacet + facet normal 0.458522 0.888683 0 + outer loop + vertex -35.1386 21.2899 0 + vertex -34.4881 20.9542 -0.1 + vertex -35.1386 21.2899 -0.1 + endloop + endfacet + facet normal 0.494132 0.869387 -0 + outer loop + vertex -35.1386 21.2899 -0.1 + vertex -35.7435 21.6336 0 + vertex -35.1386 21.2899 0 + endloop + endfacet + facet normal 0.494132 0.869387 0 + outer loop + vertex -35.7435 21.6336 0 + vertex -35.1386 21.2899 -0.1 + vertex -35.7435 21.6336 -0.1 + endloop + endfacet + facet normal 0.532679 0.846317 -0 + outer loop + vertex -35.7435 21.6336 -0.1 + vertex -36.3017 21.985 0 + vertex -35.7435 21.6336 0 + endloop + endfacet + facet normal 0.532679 0.846317 0 + outer loop + vertex -36.3017 21.985 0 + vertex -35.7435 21.6336 -0.1 + vertex -36.3017 21.985 -0.1 + endloop + endfacet + facet normal 0.574426 0.818556 -0 + outer loop + vertex -36.3017 21.985 -0.1 + vertex -36.8124 22.3433 0 + vertex -36.3017 21.985 0 + endloop + endfacet + facet normal 0.574426 0.818556 0 + outer loop + vertex -36.8124 22.3433 0 + vertex -36.3017 21.985 -0.1 + vertex -36.8124 22.3433 -0.1 + endloop + endfacet + facet normal 0.619583 0.784931 -0 + outer loop + vertex -36.8124 22.3433 -0.1 + vertex -37.2746 22.7082 0 + vertex -36.8124 22.3433 0 + endloop + endfacet + facet normal 0.619583 0.784931 0 + outer loop + vertex -37.2746 22.7082 0 + vertex -36.8124 22.3433 -0.1 + vertex -37.2746 22.7082 -0.1 + endloop + endfacet + facet normal 0.668193 0.743988 -0 + outer loop + vertex -37.2746 22.7082 -0.1 + vertex -37.6874 23.0789 0 + vertex -37.2746 22.7082 0 + endloop + endfacet + facet normal 0.668193 0.743988 0 + outer loop + vertex -37.6874 23.0789 0 + vertex -37.2746 22.7082 -0.1 + vertex -37.6874 23.0789 -0.1 + endloop + endfacet + facet normal 0.720024 0.69395 0 + outer loop + vertex -37.6874 23.0789 0 + vertex -38.0499 23.455 -0.1 + vertex -38.0499 23.455 0 + endloop + endfacet + facet normal 0.720024 0.69395 0 + outer loop + vertex -38.0499 23.455 -0.1 + vertex -37.6874 23.0789 0 + vertex -37.6874 23.0789 -0.1 + endloop + endfacet + facet normal 0.774355 0.632751 0 + outer loop + vertex -38.0499 23.455 0 + vertex -38.3611 23.836 -0.1 + vertex -38.3611 23.836 0 + endloop + endfacet + facet normal 0.774355 0.632751 0 + outer loop + vertex -38.3611 23.836 -0.1 + vertex -38.0499 23.455 0 + vertex -38.0499 23.455 -0.1 + endloop + endfacet + facet normal 0.829712 0.558192 0 + outer loop + vertex -38.3611 23.836 0 + vertex -38.6203 24.2212 -0.1 + vertex -38.6203 24.2212 0 + endloop + endfacet + facet normal 0.829712 0.558192 0 + outer loop + vertex -38.6203 24.2212 -0.1 + vertex -38.3611 23.836 0 + vertex -38.3611 23.836 -0.1 + endloop + endfacet + facet normal 0.883596 0.468251 0 + outer loop + vertex -38.6203 24.2212 0 + vertex -38.8265 24.6102 -0.1 + vertex -38.8265 24.6102 0 + endloop + endfacet + facet normal 0.883596 0.468251 0 + outer loop + vertex -38.8265 24.6102 -0.1 + vertex -38.6203 24.2212 0 + vertex -38.6203 24.2212 -0.1 + endloop + endfacet + facet normal 0.926216 0.376994 0 + outer loop + vertex -38.8265 24.6102 0 + vertex -39.0227 25.0923 -0.1 + vertex -39.0227 25.0923 0 + endloop + endfacet + facet normal 0.926216 0.376994 0 + outer loop + vertex -39.0227 25.0923 -0.1 + vertex -38.8265 24.6102 0 + vertex -38.8265 24.6102 -0.1 + endloop + endfacet + facet normal 0.967451 0.253059 0 + outer loop + vertex -39.0227 25.0923 0 + vertex -39.1186 25.4589 -0.1 + vertex -39.1186 25.4589 0 + endloop + endfacet + facet normal 0.967451 0.253059 0 + outer loop + vertex -39.1186 25.4589 -0.1 + vertex -39.0227 25.0923 0 + vertex -39.0227 25.0923 -0.1 + endloop + endfacet + facet normal 0.996684 0.0813708 0 + outer loop + vertex -39.1186 25.4589 0 + vertex -39.13 25.5984 -0.1 + vertex -39.13 25.5984 0 + endloop + endfacet + facet normal 0.996684 0.0813708 0 + outer loop + vertex -39.13 25.5984 -0.1 + vertex -39.1186 25.4589 0 + vertex -39.1186 25.4589 -0.1 + endloop + endfacet + facet normal 0.993685 -0.112203 0 + outer loop + vertex -39.13 25.5984 0 + vertex -39.1175 25.7085 -0.1 + vertex -39.1175 25.7085 0 + endloop + endfacet + facet normal 0.993685 -0.112203 0 + outer loop + vertex -39.1175 25.7085 -0.1 + vertex -39.13 25.5984 0 + vertex -39.13 25.5984 -0.1 + endloop + endfacet + facet normal 0.913337 -0.407205 0 + outer loop + vertex -39.1175 25.7085 0 + vertex -39.0817 25.7888 -0.1 + vertex -39.0817 25.7888 0 + endloop + endfacet + facet normal 0.913337 -0.407205 0 + outer loop + vertex -39.0817 25.7888 -0.1 + vertex -39.1175 25.7085 0 + vertex -39.1175 25.7085 -0.1 + endloop + endfacet + facet normal 0.651025 -0.759057 0 + outer loop + vertex -39.0817 25.7888 -0.1 + vertex -39.0229 25.8392 0 + vertex -39.0817 25.7888 0 + endloop + endfacet + facet normal 0.651025 -0.759057 0 + outer loop + vertex -39.0229 25.8392 0 + vertex -39.0817 25.7888 -0.1 + vertex -39.0229 25.8392 -0.1 + endloop + endfacet + facet normal 0.24215 -0.970239 0 + outer loop + vertex -39.0229 25.8392 -0.1 + vertex -38.9416 25.8595 0 + vertex -39.0229 25.8392 0 + endloop + endfacet + facet normal 0.24215 -0.970239 0 + outer loop + vertex -38.9416 25.8595 0 + vertex -39.0229 25.8392 -0.1 + vertex -38.9416 25.8595 -0.1 + endloop + endfacet + facet normal -0.0965024 -0.995333 0 + outer loop + vertex -38.9416 25.8595 -0.1 + vertex -38.8381 25.8495 0 + vertex -38.9416 25.8595 0 + endloop + endfacet + facet normal -0.0965024 -0.995333 -0 + outer loop + vertex -38.8381 25.8495 0 + vertex -38.9416 25.8595 -0.1 + vertex -38.8381 25.8495 -0.1 + endloop + endfacet + facet normal -0.308343 -0.951275 0 + outer loop + vertex -38.8381 25.8495 -0.1 + vertex -38.7129 25.8089 0 + vertex -38.8381 25.8495 0 + endloop + endfacet + facet normal -0.308343 -0.951275 -0 + outer loop + vertex -38.7129 25.8089 0 + vertex -38.8381 25.8495 -0.1 + vertex -38.7129 25.8089 -0.1 + endloop + endfacet + facet normal -0.437843 -0.899052 0 + outer loop + vertex -38.7129 25.8089 -0.1 + vertex -38.5664 25.7376 0 + vertex -38.7129 25.8089 0 + endloop + endfacet + facet normal -0.437843 -0.899052 -0 + outer loop + vertex -38.5664 25.7376 0 + vertex -38.7129 25.8089 -0.1 + vertex -38.5664 25.7376 -0.1 + endloop + endfacet + facet normal -0.553117 -0.833103 0 + outer loop + vertex -38.5664 25.7376 -0.1 + vertex -38.2113 25.5018 0 + vertex -38.5664 25.7376 0 + endloop + endfacet + facet normal -0.553117 -0.833103 -0 + outer loop + vertex -38.2113 25.5018 0 + vertex -38.5664 25.7376 -0.1 + vertex -38.2113 25.5018 -0.1 + endloop + endfacet + facet normal -0.638761 -0.769405 0 + outer loop + vertex -38.2113 25.5018 -0.1 + vertex -37.776 25.1404 0 + vertex -38.2113 25.5018 0 + endloop + endfacet + facet normal -0.638761 -0.769405 -0 + outer loop + vertex -37.776 25.1404 0 + vertex -38.2113 25.5018 -0.1 + vertex -37.776 25.1404 -0.1 + endloop + endfacet + facet normal -0.64475 -0.764393 0 + outer loop + vertex -37.776 25.1404 -0.1 + vertex -37.4147 24.8357 0 + vertex -37.776 25.1404 0 + endloop + endfacet + facet normal -0.64475 -0.764393 -0 + outer loop + vertex -37.4147 24.8357 0 + vertex -37.776 25.1404 -0.1 + vertex -37.4147 24.8357 -0.1 + endloop + endfacet + facet normal -0.602189 -0.798353 0 + outer loop + vertex -37.4147 24.8357 -0.1 + vertex -37.0225 24.5398 0 + vertex -37.4147 24.8357 0 + endloop + endfacet + facet normal -0.602189 -0.798353 -0 + outer loop + vertex -37.0225 24.5398 0 + vertex -37.4147 24.8357 -0.1 + vertex -37.0225 24.5398 -0.1 + endloop + endfacet + facet normal -0.562472 -0.826816 0 + outer loop + vertex -37.0225 24.5398 -0.1 + vertex -36.6025 24.2541 0 + vertex -37.0225 24.5398 0 + endloop + endfacet + facet normal -0.562472 -0.826816 -0 + outer loop + vertex -36.6025 24.2541 0 + vertex -37.0225 24.5398 -0.1 + vertex -36.6025 24.2541 -0.1 + endloop + endfacet + facet normal -0.525102 -0.851039 0 + outer loop + vertex -36.6025 24.2541 -0.1 + vertex -36.1579 23.9798 0 + vertex -36.6025 24.2541 0 + endloop + endfacet + facet normal -0.525102 -0.851039 -0 + outer loop + vertex -36.1579 23.9798 0 + vertex -36.6025 24.2541 -0.1 + vertex -36.1579 23.9798 -0.1 + endloop + endfacet + facet normal -0.489575 -0.871961 0 + outer loop + vertex -36.1579 23.9798 -0.1 + vertex -35.6921 23.7183 0 + vertex -36.1579 23.9798 0 + endloop + endfacet + facet normal -0.489575 -0.871961 -0 + outer loop + vertex -35.6921 23.7183 0 + vertex -36.1579 23.9798 -0.1 + vertex -35.6921 23.7183 -0.1 + endloop + endfacet + facet normal -0.455389 -0.890292 0 + outer loop + vertex -35.6921 23.7183 -0.1 + vertex -35.2082 23.4707 0 + vertex -35.6921 23.7183 0 + endloop + endfacet + facet normal -0.455389 -0.890292 -0 + outer loop + vertex -35.2082 23.4707 0 + vertex -35.6921 23.7183 -0.1 + vertex -35.2082 23.4707 -0.1 + endloop + endfacet + facet normal -0.422055 -0.90657 0 + outer loop + vertex -35.2082 23.4707 -0.1 + vertex -34.7094 23.2385 0 + vertex -35.2082 23.4707 0 + endloop + endfacet + facet normal -0.422055 -0.90657 -0 + outer loop + vertex -34.7094 23.2385 0 + vertex -35.2082 23.4707 -0.1 + vertex -34.7094 23.2385 -0.1 + endloop + endfacet + facet normal -0.389101 -0.921195 0 + outer loop + vertex -34.7094 23.2385 -0.1 + vertex -34.199 23.023 0 + vertex -34.7094 23.2385 0 + endloop + endfacet + facet normal -0.389101 -0.921195 -0 + outer loop + vertex -34.199 23.023 0 + vertex -34.7094 23.2385 -0.1 + vertex -34.199 23.023 -0.1 + endloop + endfacet + facet normal -0.356052 -0.934466 0 + outer loop + vertex -34.199 23.023 -0.1 + vertex -33.6803 22.8253 0 + vertex -34.199 23.023 0 + endloop + endfacet + facet normal -0.356052 -0.934466 -0 + outer loop + vertex -33.6803 22.8253 0 + vertex -34.199 23.023 -0.1 + vertex -33.6803 22.8253 -0.1 + endloop + endfacet + facet normal -0.3224 -0.946604 0 + outer loop + vertex -33.6803 22.8253 -0.1 + vertex -33.1564 22.6469 0 + vertex -33.6803 22.8253 0 + endloop + endfacet + facet normal -0.3224 -0.946604 -0 + outer loop + vertex -33.1564 22.6469 0 + vertex -33.6803 22.8253 -0.1 + vertex -33.1564 22.6469 -0.1 + endloop + endfacet + facet normal -0.287637 -0.95774 0 + outer loop + vertex -33.1564 22.6469 -0.1 + vertex -32.6306 22.489 0 + vertex -33.1564 22.6469 0 + endloop + endfacet + facet normal -0.287637 -0.95774 -0 + outer loop + vertex -32.6306 22.489 0 + vertex -33.1564 22.6469 -0.1 + vertex -32.6306 22.489 -0.1 + endloop + endfacet + facet normal -0.251171 -0.967943 0 + outer loop + vertex -32.6306 22.489 -0.1 + vertex -32.1061 22.3529 0 + vertex -32.6306 22.489 0 + endloop + endfacet + facet normal -0.251171 -0.967943 -0 + outer loop + vertex -32.1061 22.3529 0 + vertex -32.6306 22.489 -0.1 + vertex -32.1061 22.3529 -0.1 + endloop + endfacet + facet normal -0.212348 -0.977194 0 + outer loop + vertex -32.1061 22.3529 -0.1 + vertex -31.5861 22.2399 0 + vertex -32.1061 22.3529 0 + endloop + endfacet + facet normal -0.212348 -0.977194 -0 + outer loop + vertex -31.5861 22.2399 0 + vertex -32.1061 22.3529 -0.1 + vertex -31.5861 22.2399 -0.1 + endloop + endfacet + facet normal -0.170418 -0.985372 0 + outer loop + vertex -31.5861 22.2399 -0.1 + vertex -31.074 22.1513 0 + vertex -31.5861 22.2399 0 + endloop + endfacet + facet normal -0.170418 -0.985372 -0 + outer loop + vertex -31.074 22.1513 0 + vertex -31.5861 22.2399 -0.1 + vertex -31.074 22.1513 -0.1 + endloop + endfacet + facet normal -0.124476 -0.992223 0 + outer loop + vertex -31.074 22.1513 -0.1 + vertex -30.5728 22.0884 0 + vertex -31.074 22.1513 0 + endloop + endfacet + facet normal -0.124476 -0.992223 -0 + outer loop + vertex -30.5728 22.0884 0 + vertex -31.074 22.1513 -0.1 + vertex -30.5728 22.0884 -0.1 + endloop + endfacet + facet normal -0.0734593 -0.997298 0 + outer loop + vertex -30.5728 22.0884 -0.1 + vertex -30.0859 22.0525 0 + vertex -30.5728 22.0884 0 + endloop + endfacet + facet normal -0.0734593 -0.997298 -0 + outer loop + vertex -30.0859 22.0525 0 + vertex -30.5728 22.0884 -0.1 + vertex -30.0859 22.0525 -0.1 + endloop + endfacet + facet normal -0.0457633 -0.998952 0 + outer loop + vertex -30.0859 22.0525 -0.1 + vertex -28.3394 21.9725 0 + vertex -30.0859 22.0525 0 + endloop + endfacet + facet normal -0.0457633 -0.998952 -0 + outer loop + vertex -28.3394 21.9725 0 + vertex -30.0859 22.0525 -0.1 + vertex -28.3394 21.9725 -0.1 + endloop + endfacet + facet normal 0.491953 0.870622 -0 + outer loop + vertex -28.3394 21.9725 -0.1 + vertex -29.0186 22.3563 0 + vertex -28.3394 21.9725 0 + endloop + endfacet + facet normal 0.491953 0.870622 0 + outer loop + vertex -29.0186 22.3563 0 + vertex -28.3394 21.9725 -0.1 + vertex -29.0186 22.3563 -0.1 + endloop + endfacet + facet normal 0.506614 0.862173 -0 + outer loop + vertex -29.0186 22.3563 -0.1 + vertex -29.4321 22.5993 0 + vertex -29.0186 22.3563 0 + endloop + endfacet + facet normal 0.506614 0.862173 0 + outer loop + vertex -29.4321 22.5993 0 + vertex -29.0186 22.3563 -0.1 + vertex -29.4321 22.5993 -0.1 + endloop + endfacet + facet normal 0.54186 0.840469 -0 + outer loop + vertex -29.4321 22.5993 -0.1 + vertex -29.7937 22.8325 0 + vertex -29.4321 22.5993 0 + endloop + endfacet + facet normal 0.54186 0.840469 0 + outer loop + vertex -29.7937 22.8325 0 + vertex -29.4321 22.5993 -0.1 + vertex -29.7937 22.8325 -0.1 + endloop + endfacet + facet normal 0.585975 0.810329 -0 + outer loop + vertex -29.7937 22.8325 -0.1 + vertex -30.1071 23.0591 0 + vertex -29.7937 22.8325 0 + endloop + endfacet + facet normal 0.585975 0.810329 0 + outer loop + vertex -30.1071 23.0591 0 + vertex -29.7937 22.8325 -0.1 + vertex -30.1071 23.0591 -0.1 + endloop + endfacet + facet normal 0.639127 0.769101 -0 + outer loop + vertex -30.1071 23.0591 -0.1 + vertex -30.3761 23.2826 0 + vertex -30.1071 23.0591 0 + endloop + endfacet + facet normal 0.639127 0.769101 0 + outer loop + vertex -30.3761 23.2826 0 + vertex -30.1071 23.0591 -0.1 + vertex -30.3761 23.2826 -0.1 + endloop + endfacet + facet normal 0.700019 0.714124 -0 + outer loop + vertex -30.3761 23.2826 -0.1 + vertex -30.6044 23.5064 0 + vertex -30.3761 23.2826 0 + endloop + endfacet + facet normal 0.700019 0.714124 0 + outer loop + vertex -30.6044 23.5064 0 + vertex -30.3761 23.2826 -0.1 + vertex -30.6044 23.5064 -0.1 + endloop + endfacet + facet normal 0.765169 0.643829 0 + outer loop + vertex -30.6044 23.5064 0 + vertex -30.7957 23.7338 -0.1 + vertex -30.7957 23.7338 0 + endloop + endfacet + facet normal 0.765169 0.643829 0 + outer loop + vertex -30.7957 23.7338 -0.1 + vertex -30.6044 23.5064 0 + vertex -30.6044 23.5064 -0.1 + endloop + endfacet + facet normal 0.828969 0.559295 0 + outer loop + vertex -30.7957 23.7338 0 + vertex -30.9539 23.9682 -0.1 + vertex -30.9539 23.9682 0 + endloop + endfacet + facet normal 0.828969 0.559295 0 + outer loop + vertex -30.9539 23.9682 -0.1 + vertex -30.7957 23.7338 0 + vertex -30.7957 23.7338 -0.1 + endloop + endfacet + facet normal 0.885091 0.465418 0 + outer loop + vertex -30.9539 23.9682 0 + vertex -31.0826 24.213 -0.1 + vertex -31.0826 24.213 0 + endloop + endfacet + facet normal 0.885091 0.465418 0 + outer loop + vertex -31.0826 24.213 -0.1 + vertex -30.9539 23.9682 0 + vertex -30.9539 23.9682 -0.1 + endloop + endfacet + facet normal 0.929158 0.369682 0 + outer loop + vertex -31.0826 24.213 0 + vertex -31.2103 24.5339 -0.1 + vertex -31.2103 24.5339 0 + endloop + endfacet + facet normal 0.929158 0.369682 0 + outer loop + vertex -31.2103 24.5339 -0.1 + vertex -31.0826 24.213 0 + vertex -31.0826 24.213 -0.1 + endloop + endfacet + facet normal 0.975453 0.220208 0 + outer loop + vertex -31.2103 24.5339 0 + vertex -31.2656 24.779 -0.1 + vertex -31.2656 24.779 0 + endloop + endfacet + facet normal 0.975453 0.220208 0 + outer loop + vertex -31.2656 24.779 -0.1 + vertex -31.2103 24.5339 0 + vertex -31.2103 24.5339 -0.1 + endloop + endfacet + facet normal 0.99992 0.0126114 0 + outer loop + vertex -31.2656 24.779 0 + vertex -31.2668 24.8727 -0.1 + vertex -31.2668 24.8727 0 + endloop + endfacet + facet normal 0.99992 0.0126114 0 + outer loop + vertex -31.2668 24.8727 -0.1 + vertex -31.2656 24.779 0 + vertex -31.2656 24.779 -0.1 + endloop + endfacet + facet normal 0.977346 -0.211648 0 + outer loop + vertex -31.2668 24.8727 0 + vertex -31.2507 24.9472 -0.1 + vertex -31.2507 24.9472 0 + endloop + endfacet + facet normal 0.977346 -0.211648 0 + outer loop + vertex -31.2507 24.9472 -0.1 + vertex -31.2668 24.8727 0 + vertex -31.2668 24.8727 -0.1 + endloop + endfacet + facet normal 0.856395 -0.516321 0 + outer loop + vertex -31.2507 24.9472 0 + vertex -31.2175 25.0021 -0.1 + vertex -31.2175 25.0021 0 + endloop + endfacet + facet normal 0.856395 -0.516321 0 + outer loop + vertex -31.2175 25.0021 -0.1 + vertex -31.2507 24.9472 0 + vertex -31.2507 24.9472 -0.1 + endloop + endfacet + facet normal 0.578733 -0.815517 0 + outer loop + vertex -31.2175 25.0021 -0.1 + vertex -31.1676 25.0376 0 + vertex -31.2175 25.0021 0 + endloop + endfacet + facet normal 0.578733 -0.815517 0 + outer loop + vertex -31.1676 25.0376 0 + vertex -31.2175 25.0021 -0.1 + vertex -31.1676 25.0376 -0.1 + endloop + endfacet + facet normal 0.230651 -0.973037 0 + outer loop + vertex -31.1676 25.0376 -0.1 + vertex -31.1012 25.0533 0 + vertex -31.1676 25.0376 0 + endloop + endfacet + facet normal 0.230651 -0.973037 0 + outer loop + vertex -31.1012 25.0533 0 + vertex -31.1676 25.0376 -0.1 + vertex -31.1012 25.0533 -0.1 + endloop + endfacet + facet normal -0.0489514 -0.998801 0 + outer loop + vertex -31.1012 25.0533 -0.1 + vertex -31.0185 25.0493 0 + vertex -31.1012 25.0533 0 + endloop + endfacet + facet normal -0.0489514 -0.998801 -0 + outer loop + vertex -31.0185 25.0493 0 + vertex -31.1012 25.0533 -0.1 + vertex -31.0185 25.0493 -0.1 + endloop + endfacet + facet normal -0.303972 -0.952681 0 + outer loop + vertex -31.0185 25.0493 -0.1 + vertex -30.8055 24.9813 0 + vertex -31.0185 25.0493 0 + endloop + endfacet + facet normal -0.303972 -0.952681 -0 + outer loop + vertex -30.8055 24.9813 0 + vertex -31.0185 25.0493 -0.1 + vertex -30.8055 24.9813 -0.1 + endloop + endfacet + facet normal -0.475595 -0.879664 0 + outer loop + vertex -30.8055 24.9813 -0.1 + vertex -30.5308 24.8328 0 + vertex -30.8055 24.9813 0 + endloop + endfacet + facet normal -0.475595 -0.879664 -0 + outer loop + vertex -30.5308 24.8328 0 + vertex -30.8055 24.9813 -0.1 + vertex -30.5308 24.8328 -0.1 + endloop + endfacet + facet normal -0.566807 -0.82385 0 + outer loop + vertex -30.5308 24.8328 -0.1 + vertex -30.1964 24.6027 0 + vertex -30.5308 24.8328 0 + endloop + endfacet + facet normal -0.566807 -0.82385 -0 + outer loop + vertex -30.1964 24.6027 0 + vertex -30.5308 24.8328 -0.1 + vertex -30.1964 24.6027 -0.1 + endloop + endfacet + facet normal -0.552424 -0.833564 0 + outer loop + vertex -30.1964 24.6027 -0.1 + vertex -29.8023 24.3416 0 + vertex -30.1964 24.6027 0 + endloop + endfacet + facet normal -0.552424 -0.833564 -0 + outer loop + vertex -29.8023 24.3416 0 + vertex -30.1964 24.6027 -0.1 + vertex -29.8023 24.3416 -0.1 + endloop + endfacet + facet normal -0.451398 -0.892323 0 + outer loop + vertex -29.8023 24.3416 -0.1 + vertex -29.384 24.13 0 + vertex -29.8023 24.3416 0 + endloop + endfacet + facet normal -0.451398 -0.892323 -0 + outer loop + vertex -29.384 24.13 0 + vertex -29.8023 24.3416 -0.1 + vertex -29.384 24.13 -0.1 + endloop + endfacet + facet normal -0.34198 -0.939707 0 + outer loop + vertex -29.384 24.13 -0.1 + vertex -28.9359 23.9669 0 + vertex -29.384 24.13 0 + endloop + endfacet + facet normal -0.34198 -0.939707 -0 + outer loop + vertex -28.9359 23.9669 0 + vertex -29.384 24.13 -0.1 + vertex -28.9359 23.9669 -0.1 + endloop + endfacet + facet normal -0.232476 -0.972602 0 + outer loop + vertex -28.9359 23.9669 -0.1 + vertex -28.4524 23.8513 0 + vertex -28.9359 23.9669 0 + endloop + endfacet + facet normal -0.232476 -0.972602 -0 + outer loop + vertex -28.4524 23.8513 0 + vertex -28.9359 23.9669 -0.1 + vertex -28.4524 23.8513 -0.1 + endloop + endfacet + facet normal -0.130593 -0.991436 0 + outer loop + vertex -28.4524 23.8513 -0.1 + vertex -27.9279 23.7822 0 + vertex -28.4524 23.8513 0 + endloop + endfacet + facet normal -0.130593 -0.991436 -0 + outer loop + vertex -27.9279 23.7822 0 + vertex -28.4524 23.8513 -0.1 + vertex -27.9279 23.7822 -0.1 + endloop + endfacet + facet normal -0.0413274 -0.999146 0 + outer loop + vertex -27.9279 23.7822 -0.1 + vertex -27.3569 23.7586 0 + vertex -27.9279 23.7822 0 + endloop + endfacet + facet normal -0.0413274 -0.999146 -0 + outer loop + vertex -27.3569 23.7586 0 + vertex -27.9279 23.7822 -0.1 + vertex -27.3569 23.7586 -0.1 + endloop + endfacet + facet normal 0.0333972 -0.999442 0 + outer loop + vertex -27.3569 23.7586 -0.1 + vertex -26.7338 23.7794 0 + vertex -27.3569 23.7586 0 + endloop + endfacet + facet normal 0.0333972 -0.999442 0 + outer loop + vertex -26.7338 23.7794 0 + vertex -27.3569 23.7586 -0.1 + vertex -26.7338 23.7794 -0.1 + endloop + endfacet + facet normal 0.0939488 -0.995577 0 + outer loop + vertex -26.7338 23.7794 -0.1 + vertex -26.053 23.8437 0 + vertex -26.7338 23.7794 0 + endloop + endfacet + facet normal 0.0939488 -0.995577 0 + outer loop + vertex -26.053 23.8437 0 + vertex -26.7338 23.7794 -0.1 + vertex -26.053 23.8437 -0.1 + endloop + endfacet + facet normal 0.119464 -0.992839 0 + outer loop + vertex -26.053 23.8437 -0.1 + vertex -24.6523 24.0122 0 + vertex -26.053 23.8437 0 + endloop + endfacet + facet normal 0.119464 -0.992839 0 + outer loop + vertex -24.6523 24.0122 0 + vertex -26.053 23.8437 -0.1 + vertex -24.6523 24.0122 -0.1 + endloop + endfacet + facet normal 0.193693 0.981062 -0 + outer loop + vertex -24.6523 24.0122 -0.1 + vertex -26.0107 24.2804 0 + vertex -24.6523 24.0122 0 + endloop + endfacet + facet normal 0.193693 0.981062 0 + outer loop + vertex -26.0107 24.2804 0 + vertex -24.6523 24.0122 -0.1 + vertex -26.0107 24.2804 -0.1 + endloop + endfacet + facet normal 0.214134 0.976804 -0 + outer loop + vertex -26.0107 24.2804 -0.1 + vertex -26.5818 24.4056 0 + vertex -26.0107 24.2804 0 + endloop + endfacet + facet normal 0.214134 0.976804 0 + outer loop + vertex -26.5818 24.4056 0 + vertex -26.0107 24.2804 -0.1 + vertex -26.5818 24.4056 -0.1 + endloop + endfacet + facet normal 0.258173 0.966099 -0 + outer loop + vertex -26.5818 24.4056 -0.1 + vertex -27.1227 24.5501 0 + vertex -26.5818 24.4056 0 + endloop + endfacet + facet normal 0.258173 0.966099 0 + outer loop + vertex -27.1227 24.5501 0 + vertex -26.5818 24.4056 -0.1 + vertex -27.1227 24.5501 -0.1 + endloop + endfacet + facet normal 0.306051 0.952015 -0 + outer loop + vertex -27.1227 24.5501 -0.1 + vertex -27.636 24.7152 0 + vertex -27.1227 24.5501 0 + endloop + endfacet + facet normal 0.306051 0.952015 0 + outer loop + vertex -27.636 24.7152 0 + vertex -27.1227 24.5501 -0.1 + vertex -27.636 24.7152 -0.1 + endloop + endfacet + facet normal 0.356888 0.934147 -0 + outer loop + vertex -27.636 24.7152 -0.1 + vertex -28.1248 24.9019 0 + vertex -27.636 24.7152 0 + endloop + endfacet + facet normal 0.356888 0.934147 0 + outer loop + vertex -28.1248 24.9019 0 + vertex -27.636 24.7152 -0.1 + vertex -28.1248 24.9019 -0.1 + endloop + endfacet + facet normal 0.409468 0.912325 -0 + outer loop + vertex -28.1248 24.9019 -0.1 + vertex -28.5919 25.1115 0 + vertex -28.1248 24.9019 0 + endloop + endfacet + facet normal 0.409468 0.912325 0 + outer loop + vertex -28.5919 25.1115 0 + vertex -28.1248 24.9019 -0.1 + vertex -28.5919 25.1115 -0.1 + endloop + endfacet + facet normal 0.462329 0.886708 -0 + outer loop + vertex -28.5919 25.1115 -0.1 + vertex -29.0402 25.3453 0 + vertex -28.5919 25.1115 0 + endloop + endfacet + facet normal 0.462329 0.886708 0 + outer loop + vertex -29.0402 25.3453 0 + vertex -28.5919 25.1115 -0.1 + vertex -29.0402 25.3453 -0.1 + endloop + endfacet + facet normal 0.51393 0.857832 -0 + outer loop + vertex -29.0402 25.3453 -0.1 + vertex -29.4725 25.6043 0 + vertex -29.0402 25.3453 0 + endloop + endfacet + facet normal 0.51393 0.857832 0 + outer loop + vertex -29.4725 25.6043 0 + vertex -29.0402 25.3453 -0.1 + vertex -29.4725 25.6043 -0.1 + endloop + endfacet + facet normal 0.562822 0.826578 -0 + outer loop + vertex -29.4725 25.6043 -0.1 + vertex -29.8918 25.8898 0 + vertex -29.4725 25.6043 0 + endloop + endfacet + facet normal 0.562822 0.826578 0 + outer loop + vertex -29.8918 25.8898 0 + vertex -29.4725 25.6043 -0.1 + vertex -29.8918 25.8898 -0.1 + endloop + endfacet + facet normal 0.607723 0.794149 -0 + outer loop + vertex -29.8918 25.8898 -0.1 + vertex -30.6514 26.471 0 + vertex -29.8918 25.8898 0 + endloop + endfacet + facet normal 0.607723 0.794149 0 + outer loop + vertex -30.6514 26.471 0 + vertex -29.8918 25.8898 -0.1 + vertex -30.6514 26.471 -0.1 + endloop + endfacet + facet normal 0.662833 0.748767 -0 + outer loop + vertex -30.6514 26.471 -0.1 + vertex -30.9143 26.7038 0 + vertex -30.6514 26.471 0 + endloop + endfacet + facet normal 0.662833 0.748767 0 + outer loop + vertex -30.9143 26.7038 0 + vertex -30.6514 26.471 -0.1 + vertex -30.9143 26.7038 -0.1 + endloop + endfacet + facet normal 0.725171 0.688569 0 + outer loop + vertex -30.9143 26.7038 0 + vertex -31.1043 26.9038 -0.1 + vertex -31.1043 26.9038 0 + endloop + endfacet + facet normal 0.725171 0.688569 0 + outer loop + vertex -31.1043 26.9038 -0.1 + vertex -30.9143 26.7038 0 + vertex -30.9143 26.7038 -0.1 + endloop + endfacet + facet normal 0.818345 0.574727 0 + outer loop + vertex -31.1043 26.9038 0 + vertex -31.2248 27.0754 -0.1 + vertex -31.2248 27.0754 0 + endloop + endfacet + facet normal 0.818345 0.574727 0 + outer loop + vertex -31.2248 27.0754 -0.1 + vertex -31.1043 26.9038 0 + vertex -31.1043 26.9038 -0.1 + endloop + endfacet + facet normal 0.937593 0.347734 0 + outer loop + vertex -31.2248 27.0754 0 + vertex -31.2795 27.2229 -0.1 + vertex -31.2795 27.2229 0 + endloop + endfacet + facet normal 0.937593 0.347734 0 + outer loop + vertex -31.2795 27.2229 -0.1 + vertex -31.2248 27.0754 0 + vertex -31.2248 27.0754 -0.1 + endloop + endfacet + facet normal 0.99829 -0.0584589 0 + outer loop + vertex -31.2795 27.2229 0 + vertex -31.272 27.3506 -0.1 + vertex -31.272 27.3506 0 + endloop + endfacet + facet normal 0.99829 -0.0584589 0 + outer loop + vertex -31.272 27.3506 -0.1 + vertex -31.2795 27.2229 0 + vertex -31.2795 27.2229 -0.1 + endloop + endfacet + facet normal 0.861994 -0.506918 0 + outer loop + vertex -31.272 27.3506 0 + vertex -31.2059 27.4629 -0.1 + vertex -31.2059 27.4629 0 + endloop + endfacet + facet normal 0.861994 -0.506918 0 + outer loop + vertex -31.2059 27.4629 -0.1 + vertex -31.272 27.3506 0 + vertex -31.272 27.3506 -0.1 + endloop + endfacet + facet normal 0.566536 -0.824037 0 + outer loop + vertex -31.2059 27.4629 -0.1 + vertex -31.1289 27.5158 0 + vertex -31.2059 27.4629 0 + endloop + endfacet + facet normal 0.566536 -0.824037 0 + outer loop + vertex -31.1289 27.5158 0 + vertex -31.2059 27.4629 -0.1 + vertex -31.1289 27.5158 -0.1 + endloop + endfacet + facet normal 0.198224 -0.980157 0 + outer loop + vertex -31.1289 27.5158 -0.1 + vertex -31.0145 27.539 0 + vertex -31.1289 27.5158 0 + endloop + endfacet + facet normal 0.198224 -0.980157 0 + outer loop + vertex -31.0145 27.539 0 + vertex -31.1289 27.5158 -0.1 + vertex -31.0145 27.539 -0.1 + endloop + endfacet + facet normal -0.0498903 -0.998755 0 + outer loop + vertex -31.0145 27.539 -0.1 + vertex -30.8579 27.5312 0 + vertex -31.0145 27.539 0 + endloop + endfacet + facet normal -0.0498903 -0.998755 -0 + outer loop + vertex -30.8579 27.5312 0 + vertex -31.0145 27.539 -0.1 + vertex -30.8579 27.5312 -0.1 + endloop + endfacet + facet normal -0.192665 -0.981265 0 + outer loop + vertex -30.8579 27.5312 -0.1 + vertex -30.6543 27.4912 0 + vertex -30.8579 27.5312 0 + endloop + endfacet + facet normal -0.192665 -0.981265 -0 + outer loop + vertex -30.6543 27.4912 0 + vertex -30.8579 27.5312 -0.1 + vertex -30.6543 27.4912 -0.1 + endloop + endfacet + facet normal -0.304248 -0.952593 0 + outer loop + vertex -30.6543 27.4912 -0.1 + vertex -30.0875 27.3102 0 + vertex -30.6543 27.4912 0 + endloop + endfacet + facet normal -0.304248 -0.952593 -0 + outer loop + vertex -30.0875 27.3102 0 + vertex -30.6543 27.4912 -0.1 + vertex -30.0875 27.3102 -0.1 + endloop + endfacet + facet normal -0.370492 -0.928836 0 + outer loop + vertex -30.0875 27.3102 -0.1 + vertex -29.2762 26.9865 0 + vertex -30.0875 27.3102 0 + endloop + endfacet + facet normal -0.370492 -0.928836 -0 + outer loop + vertex -29.2762 26.9865 0 + vertex -30.0875 27.3102 -0.1 + vertex -29.2762 26.9865 -0.1 + endloop + endfacet + facet normal -0.380261 -0.924879 0 + outer loop + vertex -29.2762 26.9865 -0.1 + vertex -28.7314 26.7626 0 + vertex -29.2762 26.9865 0 + endloop + endfacet + facet normal -0.380261 -0.924879 -0 + outer loop + vertex -28.7314 26.7626 0 + vertex -29.2762 26.9865 -0.1 + vertex -28.7314 26.7626 -0.1 + endloop + endfacet + facet normal -0.349246 -0.937031 0 + outer loop + vertex -28.7314 26.7626 -0.1 + vertex -28.2663 26.5892 0 + vertex -28.7314 26.7626 0 + endloop + endfacet + facet normal -0.349246 -0.937031 -0 + outer loop + vertex -28.2663 26.5892 0 + vertex -28.7314 26.7626 -0.1 + vertex -28.2663 26.5892 -0.1 + endloop + endfacet + facet normal -0.29135 -0.956616 0 + outer loop + vertex -28.2663 26.5892 -0.1 + vertex -27.8395 26.4592 0 + vertex -28.2663 26.5892 0 + endloop + endfacet + facet normal -0.29135 -0.956616 -0 + outer loop + vertex -27.8395 26.4592 0 + vertex -28.2663 26.5892 -0.1 + vertex -27.8395 26.4592 -0.1 + endloop + endfacet + facet normal -0.213404 -0.976964 0 + outer loop + vertex -27.8395 26.4592 -0.1 + vertex -27.4097 26.3653 0 + vertex -27.8395 26.4592 0 + endloop + endfacet + facet normal -0.213404 -0.976964 -0 + outer loop + vertex -27.4097 26.3653 0 + vertex -27.8395 26.4592 -0.1 + vertex -27.4097 26.3653 -0.1 + endloop + endfacet + facet normal -0.13595 -0.990716 0 + outer loop + vertex -27.4097 26.3653 -0.1 + vertex -26.9353 26.3003 0 + vertex -27.4097 26.3653 0 + endloop + endfacet + facet normal -0.13595 -0.990716 -0 + outer loop + vertex -26.9353 26.3003 0 + vertex -27.4097 26.3653 -0.1 + vertex -26.9353 26.3003 -0.1 + endloop + endfacet + facet normal -0.077531 -0.99699 0 + outer loop + vertex -26.9353 26.3003 -0.1 + vertex -26.3751 26.2567 0 + vertex -26.9353 26.3003 0 + endloop + endfacet + facet normal -0.077531 -0.99699 -0 + outer loop + vertex -26.3751 26.2567 0 + vertex -26.9353 26.3003 -0.1 + vertex -26.3751 26.2567 -0.1 + endloop + endfacet + facet normal -0.0334453 -0.999441 0 + outer loop + vertex -26.3751 26.2567 -0.1 + vertex -24.8316 26.205 0 + vertex -26.3751 26.2567 0 + endloop + endfacet + facet normal -0.0334453 -0.999441 -0 + outer loop + vertex -24.8316 26.205 0 + vertex -26.3751 26.2567 -0.1 + vertex -24.8316 26.205 -0.1 + endloop + endfacet + facet normal -0.00940958 -0.999956 0 + outer loop + vertex -24.8316 26.205 -0.1 + vertex -23.1385 26.1891 0 + vertex -24.8316 26.205 0 + endloop + endfacet + facet normal -0.00940958 -0.999956 -0 + outer loop + vertex -23.1385 26.1891 0 + vertex -24.8316 26.205 -0.1 + vertex -23.1385 26.1891 -0.1 + endloop + endfacet + facet normal 0.0248422 -0.999691 0 + outer loop + vertex -23.1385 26.1891 -0.1 + vertex -22.5186 26.2045 0 + vertex -23.1385 26.1891 0 + endloop + endfacet + facet normal 0.0248422 -0.999691 0 + outer loop + vertex -22.5186 26.2045 0 + vertex -23.1385 26.1891 -0.1 + vertex -22.5186 26.2045 -0.1 + endloop + endfacet + facet normal 0.066912 -0.997759 0 + outer loop + vertex -22.5186 26.2045 -0.1 + vertex -22.0356 26.2369 0 + vertex -22.5186 26.2045 0 + endloop + endfacet + facet normal 0.066912 -0.997759 0 + outer loop + vertex -22.0356 26.2369 0 + vertex -22.5186 26.2045 -0.1 + vertex -22.0356 26.2369 -0.1 + endloop + endfacet + facet normal 0.139914 -0.990164 0 + outer loop + vertex -22.0356 26.2369 -0.1 + vertex -21.6785 26.2874 0 + vertex -22.0356 26.2369 0 + endloop + endfacet + facet normal 0.139914 -0.990164 0 + outer loop + vertex -21.6785 26.2874 0 + vertex -22.0356 26.2369 -0.1 + vertex -21.6785 26.2874 -0.1 + endloop + endfacet + facet normal 0.276553 -0.960999 0 + outer loop + vertex -21.6785 26.2874 -0.1 + vertex -21.4368 26.3569 0 + vertex -21.6785 26.2874 0 + endloop + endfacet + facet normal 0.276553 -0.960999 0 + outer loop + vertex -21.4368 26.3569 0 + vertex -21.6785 26.2874 -0.1 + vertex -21.4368 26.3569 -0.1 + endloop + endfacet + facet normal 0.462821 -0.886452 0 + outer loop + vertex -21.4368 26.3569 -0.1 + vertex -21.3558 26.3992 0 + vertex -21.4368 26.3569 0 + endloop + endfacet + facet normal 0.462821 -0.886452 0 + outer loop + vertex -21.3558 26.3992 0 + vertex -21.4368 26.3569 -0.1 + vertex -21.3558 26.3992 -0.1 + endloop + endfacet + facet normal 0.645311 -0.76392 0 + outer loop + vertex -21.3558 26.3992 -0.1 + vertex -21.2997 26.4466 0 + vertex -21.3558 26.3992 0 + endloop + endfacet + facet normal 0.645311 -0.76392 0 + outer loop + vertex -21.2997 26.4466 0 + vertex -21.3558 26.3992 -0.1 + vertex -21.2997 26.4466 -0.1 + endloop + endfacet + facet normal 0.84984 -0.527041 0 + outer loop + vertex -21.2997 26.4466 0 + vertex -21.2669 26.4994 -0.1 + vertex -21.2669 26.4994 0 + endloop + endfacet + facet normal 0.84984 -0.527041 0 + outer loop + vertex -21.2669 26.4994 -0.1 + vertex -21.2997 26.4466 0 + vertex -21.2997 26.4466 -0.1 + endloop + endfacet + facet normal 0.98379 -0.179322 0 + outer loop + vertex -21.2669 26.4994 0 + vertex -21.2563 26.5576 -0.1 + vertex -21.2563 26.5576 0 + endloop + endfacet + facet normal 0.98379 -0.179322 0 + outer loop + vertex -21.2563 26.5576 -0.1 + vertex -21.2669 26.4994 0 + vertex -21.2669 26.4994 -0.1 + endloop + endfacet + facet normal 0.837844 0.54591 0 + outer loop + vertex -21.2563 26.5576 0 + vertex -21.2799 26.5937 -0.1 + vertex -21.2799 26.5937 0 + endloop + endfacet + facet normal 0.837844 0.54591 0 + outer loop + vertex -21.2799 26.5937 -0.1 + vertex -21.2563 26.5576 0 + vertex -21.2563 26.5576 -0.1 + endloop + endfacet + facet normal 0.505324 0.86293 -0 + outer loop + vertex -21.2799 26.5937 -0.1 + vertex -21.3473 26.6332 0 + vertex -21.2799 26.5937 0 + endloop + endfacet + facet normal 0.505324 0.86293 0 + outer loop + vertex -21.3473 26.6332 0 + vertex -21.2799 26.5937 -0.1 + vertex -21.3473 26.6332 -0.1 + endloop + endfacet + facet normal 0.321132 0.947035 -0 + outer loop + vertex -21.3473 26.6332 -0.1 + vertex -21.5951 26.7172 0 + vertex -21.3473 26.6332 0 + endloop + endfacet + facet normal 0.321132 0.947035 0 + outer loop + vertex -21.5951 26.7172 0 + vertex -21.3473 26.6332 -0.1 + vertex -21.5951 26.7172 -0.1 + endloop + endfacet + facet normal 0.218663 0.9758 -0 + outer loop + vertex -21.5951 26.7172 -0.1 + vertex -21.9618 26.7994 0 + vertex -21.5951 26.7172 0 + endloop + endfacet + facet normal 0.218663 0.9758 0 + outer loop + vertex -21.9618 26.7994 0 + vertex -21.5951 26.7172 -0.1 + vertex -21.9618 26.7994 -0.1 + endloop + endfacet + facet normal 0.154639 0.987971 -0 + outer loop + vertex -21.9618 26.7994 -0.1 + vertex -22.4095 26.8695 0 + vertex -21.9618 26.7994 0 + endloop + endfacet + facet normal 0.154639 0.987971 0 + outer loop + vertex -22.4095 26.8695 0 + vertex -21.9618 26.7994 -0.1 + vertex -22.4095 26.8695 -0.1 + endloop + endfacet + facet normal 0.17991 0.983683 -0 + outer loop + vertex -22.4095 26.8695 -0.1 + vertex -22.8078 26.9423 0 + vertex -22.4095 26.8695 0 + endloop + endfacet + facet normal 0.17991 0.983683 0 + outer loop + vertex -22.8078 26.9423 0 + vertex -22.4095 26.8695 -0.1 + vertex -22.8078 26.9423 -0.1 + endloop + endfacet + facet normal 0.273496 0.961873 -0 + outer loop + vertex -22.8078 26.9423 -0.1 + vertex -23.1972 27.0531 0 + vertex -22.8078 26.9423 0 + endloop + endfacet + facet normal 0.273496 0.961873 0 + outer loop + vertex -23.1972 27.0531 0 + vertex -22.8078 26.9423 -0.1 + vertex -23.1972 27.0531 -0.1 + endloop + endfacet + facet normal 0.356994 0.934107 -0 + outer loop + vertex -23.1972 27.0531 -0.1 + vertex -23.56 27.1917 0 + vertex -23.1972 27.0531 0 + endloop + endfacet + facet normal 0.356994 0.934107 0 + outer loop + vertex -23.56 27.1917 0 + vertex -23.1972 27.0531 -0.1 + vertex -23.56 27.1917 -0.1 + endloop + endfacet + facet normal 0.441429 0.897296 -0 + outer loop + vertex -23.56 27.1917 -0.1 + vertex -23.8785 27.3484 0 + vertex -23.56 27.1917 0 + endloop + endfacet + facet normal 0.441429 0.897296 0 + outer loop + vertex -23.8785 27.3484 0 + vertex -23.56 27.1917 -0.1 + vertex -23.8785 27.3484 -0.1 + endloop + endfacet + facet normal 0.540697 0.841217 -0 + outer loop + vertex -23.8785 27.3484 -0.1 + vertex -24.1346 27.513 0 + vertex -23.8785 27.3484 0 + endloop + endfacet + facet normal 0.540697 0.841217 0 + outer loop + vertex -24.1346 27.513 0 + vertex -23.8785 27.3484 -0.1 + vertex -24.1346 27.513 -0.1 + endloop + endfacet + facet normal 0.678607 0.734501 -0 + outer loop + vertex -24.1346 27.513 -0.1 + vertex -24.3107 27.6757 0 + vertex -24.1346 27.513 0 + endloop + endfacet + facet normal 0.678607 0.734501 0 + outer loop + vertex -24.3107 27.6757 0 + vertex -24.1346 27.513 -0.1 + vertex -24.3107 27.6757 -0.1 + endloop + endfacet + facet normal 0.828129 0.560537 0 + outer loop + vertex -24.3107 27.6757 0 + vertex -24.3632 27.7532 -0.1 + vertex -24.3632 27.7532 0 + endloop + endfacet + facet normal 0.828129 0.560537 0 + outer loop + vertex -24.3632 27.7532 -0.1 + vertex -24.3107 27.6757 0 + vertex -24.3107 27.6757 -0.1 + endloop + endfacet + facet normal 0.943401 0.331655 0 + outer loop + vertex -24.3632 27.7532 0 + vertex -24.3889 27.8265 -0.1 + vertex -24.3889 27.8265 0 + endloop + endfacet + facet normal 0.943401 0.331655 0 + outer loop + vertex -24.3889 27.8265 -0.1 + vertex -24.3632 27.7532 0 + vertex -24.3632 27.7532 -0.1 + endloop + endfacet + facet normal 0.998917 -0.0465292 0 + outer loop + vertex -24.3889 27.8265 0 + vertex -24.3858 27.8943 -0.1 + vertex -24.3858 27.8943 0 + endloop + endfacet + facet normal 0.998917 -0.0465292 0 + outer loop + vertex -24.3858 27.8943 -0.1 + vertex -24.3889 27.8265 0 + vertex -24.3889 27.8265 -0.1 + endloop + endfacet + facet normal 0.871924 -0.489641 0 + outer loop + vertex -24.3858 27.8943 0 + vertex -24.3515 27.9554 -0.1 + vertex -24.3515 27.9554 0 + endloop + endfacet + facet normal 0.871924 -0.489641 0 + outer loop + vertex -24.3515 27.9554 -0.1 + vertex -24.3858 27.8943 0 + vertex -24.3858 27.8943 -0.1 + endloop + endfacet + facet normal 0.330372 -0.943851 0 + outer loop + vertex -24.3515 27.9554 -0.1 + vertex -24.2923 27.9761 0 + vertex -24.3515 27.9554 0 + endloop + endfacet + facet normal 0.330372 -0.943851 0 + outer loop + vertex -24.2923 27.9761 0 + vertex -24.3515 27.9554 -0.1 + vertex -24.2923 27.9761 -0.1 + endloop + endfacet + facet normal 0.0962711 -0.995355 0 + outer loop + vertex -24.2923 27.9761 -0.1 + vertex -24.1643 27.9885 0 + vertex -24.2923 27.9761 0 + endloop + endfacet + facet normal 0.0962711 -0.995355 0 + outer loop + vertex -24.1643 27.9885 0 + vertex -24.2923 27.9761 -0.1 + vertex -24.1643 27.9885 -0.1 + endloop + endfacet + facet normal 0.00166914 -0.999999 0 + outer loop + vertex -24.1643 27.9885 -0.1 + vertex -23.7335 27.9892 0 + vertex -24.1643 27.9885 0 + endloop + endfacet + facet normal 0.00166914 -0.999999 0 + outer loop + vertex -23.7335 27.9892 0 + vertex -24.1643 27.9885 -0.1 + vertex -23.7335 27.9892 -0.1 + endloop + endfacet + facet normal -0.048866 -0.998805 0 + outer loop + vertex -23.7335 27.9892 -0.1 + vertex -23.1232 27.9594 0 + vertex -23.7335 27.9892 0 + endloop + endfacet + facet normal -0.048866 -0.998805 -0 + outer loop + vertex -23.1232 27.9594 0 + vertex -23.7335 27.9892 -0.1 + vertex -23.1232 27.9594 -0.1 + endloop + endfacet + facet normal -0.0805478 -0.996751 0 + outer loop + vertex -23.1232 27.9594 -0.1 + vertex -22.3975 27.9007 0 + vertex -23.1232 27.9594 0 + endloop + endfacet + facet normal -0.0805478 -0.996751 -0 + outer loop + vertex -22.3975 27.9007 0 + vertex -23.1232 27.9594 -0.1 + vertex -22.3975 27.9007 -0.1 + endloop + endfacet + facet normal -0.115526 -0.993304 0 + outer loop + vertex -22.3975 27.9007 -0.1 + vertex -21.4599 27.7917 0 + vertex -22.3975 27.9007 0 + endloop + endfacet + facet normal -0.115526 -0.993304 -0 + outer loop + vertex -21.4599 27.7917 0 + vertex -22.3975 27.9007 -0.1 + vertex -21.4599 27.7917 -0.1 + endloop + endfacet + facet normal -0.170472 -0.985363 0 + outer loop + vertex -21.4599 27.7917 -0.1 + vertex -21.1001 27.7294 0 + vertex -21.4599 27.7917 0 + endloop + endfacet + facet normal -0.170472 -0.985363 -0 + outer loop + vertex -21.1001 27.7294 0 + vertex -21.4599 27.7917 -0.1 + vertex -21.1001 27.7294 -0.1 + endloop + endfacet + facet normal -0.23059 -0.973051 0 + outer loop + vertex -21.1001 27.7294 -0.1 + vertex -20.7979 27.6578 0 + vertex -21.1001 27.7294 0 + endloop + endfacet + facet normal -0.23059 -0.973051 -0 + outer loop + vertex -20.7979 27.6578 0 + vertex -21.1001 27.7294 -0.1 + vertex -20.7979 27.6578 -0.1 + endloop + endfacet + facet normal -0.312278 -0.949991 0 + outer loop + vertex -20.7979 27.6578 -0.1 + vertex -20.5419 27.5737 0 + vertex -20.7979 27.6578 0 + endloop + endfacet + facet normal -0.312278 -0.949991 -0 + outer loop + vertex -20.5419 27.5737 0 + vertex -20.7979 27.6578 -0.1 + vertex -20.5419 27.5737 -0.1 + endloop + endfacet + facet normal -0.411473 -0.911422 0 + outer loop + vertex -20.5419 27.5737 -0.1 + vertex -20.3206 27.4738 0 + vertex -20.5419 27.5737 0 + endloop + endfacet + facet normal -0.411473 -0.911422 -0 + outer loop + vertex -20.3206 27.4738 0 + vertex -20.5419 27.5737 -0.1 + vertex -20.3206 27.4738 -0.1 + endloop + endfacet + facet normal -0.51473 -0.857352 0 + outer loop + vertex -20.3206 27.4738 -0.1 + vertex -20.1227 27.3549 0 + vertex -20.3206 27.4738 0 + endloop + endfacet + facet normal -0.51473 -0.857352 -0 + outer loop + vertex -20.1227 27.3549 0 + vertex -20.3206 27.4738 -0.1 + vertex -20.1227 27.3549 -0.1 + endloop + endfacet + facet normal -0.604059 -0.79694 0 + outer loop + vertex -20.1227 27.3549 -0.1 + vertex -19.9368 27.2141 0 + vertex -20.1227 27.3549 0 + endloop + endfacet + facet normal -0.604059 -0.79694 -0 + outer loop + vertex -19.9368 27.2141 0 + vertex -20.1227 27.3549 -0.1 + vertex -19.9368 27.2141 -0.1 + endloop + endfacet + facet normal -0.64002 -0.768358 0 + outer loop + vertex -19.9368 27.2141 -0.1 + vertex -19.3233 26.703 0 + vertex -19.9368 27.2141 0 + endloop + endfacet + facet normal -0.64002 -0.768358 -0 + outer loop + vertex -19.3233 26.703 0 + vertex -19.9368 27.2141 -0.1 + vertex -19.3233 26.703 -0.1 + endloop + endfacet + facet normal 0.254038 -0.967194 0 + outer loop + vertex -19.3233 26.703 -0.1 + vertex -16.9758 27.3196 0 + vertex -19.3233 26.703 0 + endloop + endfacet + facet normal 0.254038 -0.967194 0 + outer loop + vertex -16.9758 27.3196 0 + vertex -19.3233 26.703 -0.1 + vertex -16.9758 27.3196 -0.1 + endloop + endfacet + facet normal 0.236306 -0.971679 0 + outer loop + vertex -16.9758 27.3196 -0.1 + vertex -16.0674 27.5405 0 + vertex -16.9758 27.3196 0 + endloop + endfacet + facet normal 0.236306 -0.971679 0 + outer loop + vertex -16.0674 27.5405 0 + vertex -16.9758 27.3196 -0.1 + vertex -16.0674 27.5405 -0.1 + endloop + endfacet + facet normal 0.186349 -0.982484 0 + outer loop + vertex -16.0674 27.5405 -0.1 + vertex -15.2259 27.7001 0 + vertex -16.0674 27.5405 0 + endloop + endfacet + facet normal 0.186349 -0.982484 0 + outer loop + vertex -15.2259 27.7001 0 + vertex -16.0674 27.5405 -0.1 + vertex -15.2259 27.7001 -0.1 + endloop + endfacet + facet normal 0.119004 -0.992894 0 + outer loop + vertex -15.2259 27.7001 -0.1 + vertex -14.4014 27.7989 0 + vertex -15.2259 27.7001 0 + endloop + endfacet + facet normal 0.119004 -0.992894 0 + outer loop + vertex -14.4014 27.7989 0 + vertex -15.2259 27.7001 -0.1 + vertex -14.4014 27.7989 -0.1 + endloop + endfacet + facet normal 0.0448493 -0.998994 0 + outer loop + vertex -14.4014 27.7989 -0.1 + vertex -13.5445 27.8374 0 + vertex -14.4014 27.7989 0 + endloop + endfacet + facet normal 0.0448493 -0.998994 0 + outer loop + vertex -13.5445 27.8374 0 + vertex -14.4014 27.7989 -0.1 + vertex -13.5445 27.8374 -0.1 + endloop + endfacet + facet normal -0.0227723 -0.999741 0 + outer loop + vertex -13.5445 27.8374 -0.1 + vertex -12.6053 27.816 0 + vertex -13.5445 27.8374 0 + endloop + endfacet + facet normal -0.0227723 -0.999741 -0 + outer loop + vertex -12.6053 27.816 0 + vertex -13.5445 27.8374 -0.1 + vertex -12.6053 27.816 -0.1 + endloop + endfacet + facet normal -0.0752121 -0.997168 0 + outer loop + vertex -12.6053 27.816 -0.1 + vertex -11.5342 27.7352 0 + vertex -12.6053 27.816 0 + endloop + endfacet + facet normal -0.0752121 -0.997168 -0 + outer loop + vertex -11.5342 27.7352 0 + vertex -12.6053 27.816 -0.1 + vertex -11.5342 27.7352 -0.1 + endloop + endfacet + facet normal -0.110844 -0.993838 0 + outer loop + vertex -11.5342 27.7352 -0.1 + vertex -10.2816 27.5955 0 + vertex -11.5342 27.7352 0 + endloop + endfacet + facet normal -0.110844 -0.993838 -0 + outer loop + vertex -10.2816 27.5955 0 + vertex -11.5342 27.7352 -0.1 + vertex -10.2816 27.5955 -0.1 + endloop + endfacet + facet normal -0.132367 -0.991201 0 + outer loop + vertex -10.2816 27.5955 -0.1 + vertex -8.79778 27.3973 0 + vertex -10.2816 27.5955 0 + endloop + endfacet + facet normal -0.132367 -0.991201 -0 + outer loop + vertex -8.79778 27.3973 0 + vertex -10.2816 27.5955 -0.1 + vertex -8.79778 27.3973 -0.1 + endloop + endfacet + facet normal -0.122316 -0.992491 0 + outer loop + vertex -8.79778 27.3973 -0.1 + vertex -7.89877 27.2865 0 + vertex -8.79778 27.3973 0 + endloop + endfacet + facet normal -0.122316 -0.992491 -0 + outer loop + vertex -7.89877 27.2865 0 + vertex -8.79778 27.3973 -0.1 + vertex -7.89877 27.2865 -0.1 + endloop + endfacet + facet normal -0.0652699 -0.997868 0 + outer loop + vertex -7.89877 27.2865 -0.1 + vertex -7.24334 27.2437 0 + vertex -7.89877 27.2865 0 + endloop + endfacet + facet normal -0.0652699 -0.997868 -0 + outer loop + vertex -7.24334 27.2437 0 + vertex -7.89877 27.2865 -0.1 + vertex -7.24334 27.2437 -0.1 + endloop + endfacet + facet normal 0.0157984 -0.999875 0 + outer loop + vertex -7.24334 27.2437 -0.1 + vertex -6.99768 27.2475 0 + vertex -7.24334 27.2437 0 + endloop + endfacet + facet normal 0.0157984 -0.999875 0 + outer loop + vertex -6.99768 27.2475 0 + vertex -7.24334 27.2437 -0.1 + vertex -6.99768 27.2475 -0.1 + endloop + endfacet + facet normal 0.104958 -0.994477 0 + outer loop + vertex -6.99768 27.2475 -0.1 + vertex -6.80178 27.2682 0 + vertex -6.99768 27.2475 0 + endloop + endfacet + facet normal 0.104958 -0.994477 0 + outer loop + vertex -6.80178 27.2682 0 + vertex -6.99768 27.2475 -0.1 + vertex -6.80178 27.2682 -0.1 + endloop + endfacet + facet normal 0.242196 -0.970227 0 + outer loop + vertex -6.80178 27.2682 -0.1 + vertex -6.65192 27.3056 0 + vertex -6.80178 27.2682 0 + endloop + endfacet + facet normal 0.242196 -0.970227 0 + outer loop + vertex -6.65192 27.3056 0 + vertex -6.80178 27.2682 -0.1 + vertex -6.65192 27.3056 -0.1 + endloop + endfacet + facet normal 0.449315 -0.893373 0 + outer loop + vertex -6.65192 27.3056 -0.1 + vertex -6.54439 27.3597 0 + vertex -6.65192 27.3056 0 + endloop + endfacet + facet normal 0.449315 -0.893373 0 + outer loop + vertex -6.54439 27.3597 0 + vertex -6.65192 27.3056 -0.1 + vertex -6.54439 27.3597 -0.1 + endloop + endfacet + facet normal 0.709468 -0.704738 0 + outer loop + vertex -6.54439 27.3597 0 + vertex -6.44763 27.4571 -0.1 + vertex -6.44763 27.4571 0 + endloop + endfacet + facet normal 0.709468 -0.704738 0 + outer loop + vertex -6.44763 27.4571 -0.1 + vertex -6.54439 27.3597 0 + vertex -6.54439 27.3597 -0.1 + endloop + endfacet + facet normal 0.90334 -0.428926 0 + outer loop + vertex -6.44763 27.4571 0 + vertex -6.37156 27.6173 -0.1 + vertex -6.37156 27.6173 0 + endloop + endfacet + facet normal 0.90334 -0.428926 0 + outer loop + vertex -6.37156 27.6173 -0.1 + vertex -6.44763 27.4571 0 + vertex -6.44763 27.4571 -0.1 + endloop + endfacet + facet normal 0.975305 -0.220862 0 + outer loop + vertex -6.37156 27.6173 0 + vertex -6.31368 27.8729 -0.1 + vertex -6.31368 27.8729 0 + endloop + endfacet + facet normal 0.975305 -0.220862 0 + outer loop + vertex -6.31368 27.8729 -0.1 + vertex -6.37156 27.6173 0 + vertex -6.37156 27.6173 -0.1 + endloop + endfacet + facet normal 0.994005 -0.109334 0 + outer loop + vertex -6.31368 27.8729 0 + vertex -6.27149 28.2565 -0.1 + vertex -6.27149 28.2565 0 + endloop + endfacet + facet normal 0.994005 -0.109334 0 + outer loop + vertex -6.27149 28.2565 -0.1 + vertex -6.31368 27.8729 0 + vertex -6.31368 27.8729 -0.1 + endloop + endfacet + facet normal 0.998582 -0.0532268 0 + outer loop + vertex -6.27149 28.2565 0 + vertex -6.24249 28.8007 -0.1 + vertex -6.24249 28.8007 0 + endloop + endfacet + facet normal 0.998582 -0.0532268 0 + outer loop + vertex -6.24249 28.8007 -0.1 + vertex -6.27149 28.2565 0 + vertex -6.27149 28.2565 -0.1 + endloop + endfacet + facet normal 0.999691 -0.0248385 0 + outer loop + vertex -6.24249 28.8007 0 + vertex -6.22417 29.538 -0.1 + vertex -6.22417 29.538 0 + endloop + endfacet + facet normal 0.999691 -0.0248385 0 + outer loop + vertex -6.22417 29.538 -0.1 + vertex -6.24249 28.8007 0 + vertex -6.24249 28.8007 -0.1 + endloop + endfacet + facet normal 0.999978 -0.00667916 0 + outer loop + vertex -6.22417 29.538 0 + vertex -6.20957 31.7226 -0.1 + vertex -6.20957 31.7226 0 + endloop + endfacet + facet normal 0.999978 -0.00667916 0 + outer loop + vertex -6.20957 31.7226 -0.1 + vertex -6.22417 29.538 0 + vertex -6.22417 29.538 -0.1 + endloop + endfacet + facet normal 0.999955 -0.00944041 0 + outer loop + vertex -6.20957 31.7226 0 + vertex -6.19415 33.3563 -0.1 + vertex -6.19415 33.3563 0 + endloop + endfacet + facet normal 0.999955 -0.00944041 0 + outer loop + vertex -6.19415 33.3563 -0.1 + vertex -6.20957 31.7226 0 + vertex -6.20957 31.7226 -0.1 + endloop + endfacet + facet normal 0.999658 -0.0261462 0 + outer loop + vertex -6.19415 33.3563 0 + vertex -6.15766 34.7516 -0.1 + vertex -6.15766 34.7516 0 + endloop + endfacet + facet normal 0.999658 -0.0261462 0 + outer loop + vertex -6.15766 34.7516 -0.1 + vertex -6.19415 33.3563 0 + vertex -6.19415 33.3563 -0.1 + endloop + endfacet + facet normal 0.998669 -0.0515827 0 + outer loop + vertex -6.15766 34.7516 0 + vertex -6.10555 35.7605 -0.1 + vertex -6.10555 35.7605 0 + endloop + endfacet + facet normal 0.998669 -0.0515827 0 + outer loop + vertex -6.10555 35.7605 -0.1 + vertex -6.15766 34.7516 0 + vertex -6.15766 34.7516 -0.1 + endloop + endfacet + facet normal 0.995383 -0.0959818 0 + outer loop + vertex -6.10555 35.7605 0 + vertex -6.07534 36.0738 -0.1 + vertex -6.07534 36.0738 0 + endloop + endfacet + facet normal 0.995383 -0.0959818 0 + outer loop + vertex -6.07534 36.0738 -0.1 + vertex -6.10555 35.7605 0 + vertex -6.10555 35.7605 -0.1 + endloop + endfacet + facet normal 0.980771 -0.195161 0 + outer loop + vertex -6.07534 36.0738 0 + vertex -6.04327 36.2349 -0.1 + vertex -6.04327 36.2349 0 + endloop + endfacet + facet normal 0.980771 -0.195161 0 + outer loop + vertex -6.04327 36.2349 -0.1 + vertex -6.07534 36.0738 0 + vertex -6.07534 36.0738 -0.1 + endloop + endfacet + facet normal 0.887411 -0.460979 0 + outer loop + vertex -6.04327 36.2349 0 + vertex -5.92579 36.4611 -0.1 + vertex -5.92579 36.4611 0 + endloop + endfacet + facet normal 0.887411 -0.460979 0 + outer loop + vertex -5.92579 36.4611 -0.1 + vertex -6.04327 36.2349 0 + vertex -6.04327 36.2349 -0.1 + endloop + endfacet + facet normal 0.77348 -0.633821 0 + outer loop + vertex -5.92579 36.4611 0 + vertex -5.86569 36.5344 -0.1 + vertex -5.86569 36.5344 0 + endloop + endfacet + facet normal 0.77348 -0.633821 0 + outer loop + vertex -5.86569 36.5344 -0.1 + vertex -5.92579 36.4611 0 + vertex -5.92579 36.4611 -0.1 + endloop + endfacet + facet normal 0.607425 -0.794377 0 + outer loop + vertex -5.86569 36.5344 -0.1 + vertex -5.80457 36.5812 0 + vertex -5.86569 36.5344 0 + endloop + endfacet + facet normal 0.607425 -0.794377 0 + outer loop + vertex -5.80457 36.5812 0 + vertex -5.86569 36.5344 -0.1 + vertex -5.80457 36.5812 -0.1 + endloop + endfacet + facet normal 0.306429 -0.951894 0 + outer loop + vertex -5.80457 36.5812 -0.1 + vertex -5.74234 36.6012 0 + vertex -5.80457 36.5812 0 + endloop + endfacet + facet normal 0.306429 -0.951894 0 + outer loop + vertex -5.74234 36.6012 0 + vertex -5.80457 36.5812 -0.1 + vertex -5.74234 36.6012 -0.1 + endloop + endfacet + facet normal -0.106116 -0.994354 0 + outer loop + vertex -5.74234 36.6012 -0.1 + vertex -5.67893 36.5944 0 + vertex -5.74234 36.6012 0 + endloop + endfacet + facet normal -0.106116 -0.994354 -0 + outer loop + vertex -5.67893 36.5944 0 + vertex -5.74234 36.6012 -0.1 + vertex -5.67893 36.5944 -0.1 + endloop + endfacet + facet normal -0.461592 -0.887092 0 + outer loop + vertex -5.67893 36.5944 -0.1 + vertex -5.61425 36.5608 0 + vertex -5.67893 36.5944 0 + endloop + endfacet + facet normal -0.461592 -0.887092 -0 + outer loop + vertex -5.61425 36.5608 0 + vertex -5.67893 36.5944 -0.1 + vertex -5.61425 36.5608 -0.1 + endloop + endfacet + facet normal -0.67638 -0.736553 0 + outer loop + vertex -5.61425 36.5608 -0.1 + vertex -5.54821 36.5001 0 + vertex -5.61425 36.5608 0 + endloop + endfacet + facet normal -0.67638 -0.736553 -0 + outer loop + vertex -5.54821 36.5001 0 + vertex -5.61425 36.5608 -0.1 + vertex -5.54821 36.5001 -0.1 + endloop + endfacet + facet normal -0.829388 -0.558673 0 + outer loop + vertex -5.41174 36.2975 -0.1 + vertex -5.54821 36.5001 0 + vertex -5.54821 36.5001 -0.1 + endloop + endfacet + facet normal -0.829388 -0.558673 0 + outer loop + vertex -5.54821 36.5001 0 + vertex -5.41174 36.2975 -0.1 + vertex -5.41174 36.2975 0 + endloop + endfacet + facet normal -0.909006 -0.416783 0 + outer loop + vertex -5.26884 35.9859 -0.1 + vertex -5.41174 36.2975 0 + vertex -5.41174 36.2975 -0.1 + endloop + endfacet + facet normal -0.909006 -0.416783 0 + outer loop + vertex -5.41174 36.2975 0 + vertex -5.26884 35.9859 -0.1 + vertex -5.26884 35.9859 0 + endloop + endfacet + facet normal -0.942118 -0.335281 0 + outer loop + vertex -5.11886 35.5644 -0.1 + vertex -5.26884 35.9859 0 + vertex -5.26884 35.9859 -0.1 + endloop + endfacet + facet normal -0.942118 -0.335281 0 + outer loop + vertex -5.26884 35.9859 0 + vertex -5.11886 35.5644 -0.1 + vertex -5.11886 35.5644 0 + endloop + endfacet + facet normal -0.958738 -0.28429 0 + outer loop + vertex -4.96111 35.0324 -0.1 + vertex -5.11886 35.5644 0 + vertex -5.11886 35.5644 -0.1 + endloop + endfacet + facet normal -0.958738 -0.28429 0 + outer loop + vertex -5.11886 35.5644 0 + vertex -4.96111 35.0324 -0.1 + vertex -4.96111 35.0324 0 + endloop + endfacet + facet normal -0.959965 -0.280118 0 + outer loop + vertex -4.73722 34.2652 -0.1 + vertex -4.96111 35.0324 0 + vertex -4.96111 35.0324 -0.1 + endloop + endfacet + facet normal -0.959965 -0.280118 0 + outer loop + vertex -4.96111 35.0324 0 + vertex -4.73722 34.2652 -0.1 + vertex -4.73722 34.2652 0 + endloop + endfacet + facet normal -0.950901 -0.309494 0 + outer loop + vertex -4.49616 33.5245 -0.1 + vertex -4.73722 34.2652 0 + vertex -4.73722 34.2652 -0.1 + endloop + endfacet + facet normal -0.950901 -0.309494 0 + outer loop + vertex -4.73722 34.2652 0 + vertex -4.49616 33.5245 -0.1 + vertex -4.49616 33.5245 0 + endloop + endfacet + facet normal -0.940636 -0.339418 0 + outer loop + vertex -4.23933 32.8128 -0.1 + vertex -4.49616 33.5245 0 + vertex -4.49616 33.5245 -0.1 + endloop + endfacet + facet normal -0.940636 -0.339418 0 + outer loop + vertex -4.49616 33.5245 0 + vertex -4.23933 32.8128 -0.1 + vertex -4.23933 32.8128 0 + endloop + endfacet + facet normal -0.928971 -0.370153 0 + outer loop + vertex -3.96814 32.1322 -0.1 + vertex -4.23933 32.8128 0 + vertex -4.23933 32.8128 -0.1 + endloop + endfacet + facet normal -0.928971 -0.370153 0 + outer loop + vertex -4.23933 32.8128 0 + vertex -3.96814 32.1322 -0.1 + vertex -3.96814 32.1322 0 + endloop + endfacet + facet normal -0.915636 -0.402008 0 + outer loop + vertex -3.68399 31.485 -0.1 + vertex -3.96814 32.1322 0 + vertex -3.96814 32.1322 -0.1 + endloop + endfacet + facet normal -0.915636 -0.402008 0 + outer loop + vertex -3.96814 32.1322 0 + vertex -3.68399 31.485 -0.1 + vertex -3.68399 31.485 0 + endloop + endfacet + facet normal -0.900273 -0.435326 0 + outer loop + vertex -3.38828 30.8734 -0.1 + vertex -3.68399 31.485 0 + vertex -3.68399 31.485 -0.1 + endloop + endfacet + facet normal -0.900273 -0.435326 0 + outer loop + vertex -3.68399 31.485 0 + vertex -3.38828 30.8734 -0.1 + vertex -3.38828 30.8734 0 + endloop + endfacet + facet normal -0.882395 -0.47051 0 + outer loop + vertex -3.08241 30.2998 -0.1 + vertex -3.38828 30.8734 0 + vertex -3.38828 30.8734 -0.1 + endloop + endfacet + facet normal -0.882395 -0.47051 0 + outer loop + vertex -3.38828 30.8734 0 + vertex -3.08241 30.2998 -0.1 + vertex -3.08241 30.2998 0 + endloop + endfacet + facet normal -0.861349 -0.508014 0 + outer loop + vertex -2.7678 29.7664 -0.1 + vertex -3.08241 30.2998 0 + vertex -3.08241 30.2998 -0.1 + endloop + endfacet + facet normal -0.861349 -0.508014 0 + outer loop + vertex -3.08241 30.2998 0 + vertex -2.7678 29.7664 -0.1 + vertex -2.7678 29.7664 0 + endloop + endfacet + facet normal -0.83625 -0.548349 0 + outer loop + vertex -2.44583 29.2754 -0.1 + vertex -2.7678 29.7664 0 + vertex -2.7678 29.7664 -0.1 + endloop + endfacet + facet normal -0.83625 -0.548349 0 + outer loop + vertex -2.7678 29.7664 0 + vertex -2.44583 29.2754 -0.1 + vertex -2.44583 29.2754 0 + endloop + endfacet + facet normal -0.805875 -0.592086 0 + outer loop + vertex -2.11792 28.8291 -0.1 + vertex -2.44583 29.2754 0 + vertex -2.44583 29.2754 -0.1 + endloop + endfacet + facet normal -0.805875 -0.592086 0 + outer loop + vertex -2.44583 29.2754 0 + vertex -2.11792 28.8291 -0.1 + vertex -2.11792 28.8291 0 + endloop + endfacet + facet normal -0.768548 -0.639792 0 + outer loop + vertex -1.78547 28.4297 -0.1 + vertex -2.11792 28.8291 0 + vertex -2.11792 28.8291 -0.1 + endloop + endfacet + facet normal -0.768548 -0.639792 0 + outer loop + vertex -2.11792 28.8291 0 + vertex -1.78547 28.4297 -0.1 + vertex -1.78547 28.4297 0 + endloop + endfacet + facet normal -0.721954 -0.691941 0 + outer loop + vertex -1.44988 28.0795 -0.1 + vertex -1.78547 28.4297 0 + vertex -1.78547 28.4297 -0.1 + endloop + endfacet + facet normal -0.721954 -0.691941 0 + outer loop + vertex -1.78547 28.4297 0 + vertex -1.44988 28.0795 -0.1 + vertex -1.44988 28.0795 0 + endloop + endfacet + facet normal -0.662916 -0.748694 0 + outer loop + vertex -1.44988 28.0795 -0.1 + vertex -1.11256 27.7809 0 + vertex -1.44988 28.0795 0 + endloop + endfacet + facet normal -0.662916 -0.748694 -0 + outer loop + vertex -1.11256 27.7809 0 + vertex -1.44988 28.0795 -0.1 + vertex -1.11256 27.7809 -0.1 + endloop + endfacet + facet normal -0.5872 -0.809442 0 + outer loop + vertex -1.11256 27.7809 -0.1 + vertex -0.7749 27.5359 0 + vertex -1.11256 27.7809 0 + endloop + endfacet + facet normal -0.5872 -0.809442 -0 + outer loop + vertex -0.7749 27.5359 0 + vertex -1.11256 27.7809 -0.1 + vertex -0.7749 27.5359 -0.1 + endloop + endfacet + facet normal -0.48954 -0.871981 0 + outer loop + vertex -0.7749 27.5359 -0.1 + vertex -0.438314 27.347 0 + vertex -0.7749 27.5359 0 + endloop + endfacet + facet normal -0.48954 -0.871981 -0 + outer loop + vertex -0.438314 27.347 0 + vertex -0.7749 27.5359 -0.1 + vertex -0.438314 27.347 -0.1 + endloop + endfacet + facet normal -0.364353 -0.931261 0 + outer loop + vertex -0.438314 27.347 -0.1 + vertex -0.104203 27.2162 0 + vertex -0.438314 27.347 0 + endloop + endfacet + facet normal -0.364353 -0.931261 -0 + outer loop + vertex -0.104203 27.2162 0 + vertex -0.438314 27.347 -0.1 + vertex -0.104203 27.2162 -0.1 + endloop + endfacet + facet normal -0.248562 -0.968616 0 + outer loop + vertex -0.104203 27.2162 -0.1 + vertex 0.215611 27.1342 0 + vertex -0.104203 27.2162 0 + endloop + endfacet + facet normal -0.248562 -0.968616 -0 + outer loop + vertex 0.215611 27.1342 0 + vertex -0.104203 27.2162 -0.1 + vertex 0.215611 27.1342 -0.1 + endloop + endfacet + facet normal -0.161031 -0.986949 0 + outer loop + vertex 0.215611 27.1342 -0.1 + vertex 0.505992 27.0868 0 + vertex 0.215611 27.1342 0 + endloop + endfacet + facet normal -0.161031 -0.986949 -0 + outer loop + vertex 0.505992 27.0868 0 + vertex 0.215611 27.1342 -0.1 + vertex 0.505992 27.0868 -0.1 + endloop + endfacet + facet normal -0.0401535 -0.999194 0 + outer loop + vertex 0.505992 27.0868 -0.1 + vertex 0.734953 27.0776 0 + vertex 0.505992 27.0868 0 + endloop + endfacet + facet normal -0.0401535 -0.999194 -0 + outer loop + vertex 0.734953 27.0776 0 + vertex 0.505992 27.0868 -0.1 + vertex 0.734953 27.0776 -0.1 + endloop + endfacet + facet normal 0.1315 -0.991316 0 + outer loop + vertex 0.734953 27.0776 -0.1 + vertex 0.816408 27.0884 0 + vertex 0.734953 27.0776 0 + endloop + endfacet + facet normal 0.1315 -0.991316 0 + outer loop + vertex 0.816408 27.0884 0 + vertex 0.734953 27.0776 -0.1 + vertex 0.816408 27.0884 -0.1 + endloop + endfacet + facet normal 0.371587 -0.928398 0 + outer loop + vertex 0.816408 27.0884 -0.1 + vertex 0.870515 27.1101 0 + vertex 0.816408 27.0884 0 + endloop + endfacet + facet normal 0.371587 -0.928398 0 + outer loop + vertex 0.870515 27.1101 0 + vertex 0.816408 27.0884 -0.1 + vertex 0.870515 27.1101 -0.1 + endloop + endfacet + facet normal 0.819454 -0.573145 0 + outer loop + vertex 0.870515 27.1101 0 + vertex 0.908598 27.1645 -0.1 + vertex 0.908598 27.1645 0 + endloop + endfacet + facet normal 0.819454 -0.573145 0 + outer loop + vertex 0.908598 27.1645 -0.1 + vertex 0.870515 27.1101 0 + vertex 0.870515 27.1101 -0.1 + endloop + endfacet + facet normal 0.947054 -0.321074 0 + outer loop + vertex 0.908598 27.1645 0 + vertex 0.944126 27.2693 -0.1 + vertex 0.944126 27.2693 0 + endloop + endfacet + facet normal 0.947054 -0.321074 0 + outer loop + vertex 0.944126 27.2693 -0.1 + vertex 0.908598 27.1645 0 + vertex 0.908598 27.1645 -0.1 + endloop + endfacet + facet normal 0.984285 -0.17659 0 + outer loop + vertex 0.944126 27.2693 0 + vertex 1.00441 27.6053 -0.1 + vertex 1.00441 27.6053 0 + endloop + endfacet + facet normal 0.984285 -0.17659 0 + outer loop + vertex 1.00441 27.6053 -0.1 + vertex 0.944126 27.2693 0 + vertex 0.944126 27.2693 -0.1 + endloop + endfacet + facet normal 0.996161 -0.0875344 0 + outer loop + vertex 1.00441 27.6053 0 + vertex 1.04514 28.0688 -0.1 + vertex 1.04514 28.0688 0 + endloop + endfacet + facet normal 0.996161 -0.0875344 0 + outer loop + vertex 1.04514 28.0688 -0.1 + vertex 1.00441 27.6053 0 + vertex 1.00441 27.6053 -0.1 + endloop + endfacet + facet normal 0.999619 -0.0276007 0 + outer loop + vertex 1.04514 28.0688 0 + vertex 1.0601 28.6106 -0.1 + vertex 1.0601 28.6106 0 + endloop + endfacet + facet normal 0.999619 -0.0276007 0 + outer loop + vertex 1.0601 28.6106 -0.1 + vertex 1.04514 28.0688 0 + vertex 1.04514 28.0688 -0.1 + endloop + endfacet + facet normal 0.999546 -0.0301211 0 + outer loop + vertex 1.0601 28.6106 0 + vertex 1.07949 29.2543 -0.1 + vertex 1.07949 29.2543 0 + endloop + endfacet + facet normal 0.999546 -0.0301211 0 + outer loop + vertex 1.07949 29.2543 -0.1 + vertex 1.0601 28.6106 0 + vertex 1.0601 28.6106 -0.1 + endloop + endfacet + facet normal 0.995652 -0.0931476 0 + outer loop + vertex 1.07949 29.2543 0 + vertex 1.13903 29.8907 -0.1 + vertex 1.13903 29.8907 0 + endloop + endfacet + facet normal 0.995652 -0.0931476 0 + outer loop + vertex 1.13903 29.8907 -0.1 + vertex 1.07949 29.2543 0 + vertex 1.07949 29.2543 -0.1 + endloop + endfacet + facet normal 0.987491 -0.157674 0 + outer loop + vertex 1.13903 29.8907 0 + vertex 1.24074 30.5277 -0.1 + vertex 1.24074 30.5277 0 + endloop + endfacet + facet normal 0.987491 -0.157674 0 + outer loop + vertex 1.24074 30.5277 -0.1 + vertex 1.13903 29.8907 0 + vertex 1.13903 29.8907 -0.1 + endloop + endfacet + facet normal 0.975385 -0.220507 0 + outer loop + vertex 1.24074 30.5277 0 + vertex 1.38662 31.173 -0.1 + vertex 1.38662 31.173 0 + endloop + endfacet + facet normal 0.975385 -0.220507 0 + outer loop + vertex 1.38662 31.173 -0.1 + vertex 1.24074 30.5277 0 + vertex 1.24074 30.5277 -0.1 + endloop + endfacet + facet normal 0.960327 -0.278878 0 + outer loop + vertex 1.38662 31.173 0 + vertex 1.57871 31.8344 -0.1 + vertex 1.57871 31.8344 0 + endloop + endfacet + facet normal 0.960327 -0.278878 0 + outer loop + vertex 1.57871 31.8344 -0.1 + vertex 1.38662 31.173 0 + vertex 1.38662 31.173 -0.1 + endloop + endfacet + facet normal 0.943682 -0.330853 0 + outer loop + vertex 1.57871 31.8344 0 + vertex 1.81903 32.5199 -0.1 + vertex 1.81903 32.5199 0 + endloop + endfacet + facet normal 0.943682 -0.330853 0 + outer loop + vertex 1.81903 32.5199 -0.1 + vertex 1.57871 31.8344 0 + vertex 1.57871 31.8344 -0.1 + endloop + endfacet + facet normal 0.926833 -0.375474 0 + outer loop + vertex 1.81903 32.5199 0 + vertex 2.10958 33.2371 -0.1 + vertex 2.10958 33.2371 0 + endloop + endfacet + facet normal 0.926833 -0.375474 0 + outer loop + vertex 2.10958 33.2371 -0.1 + vertex 1.81903 32.5199 0 + vertex 1.81903 32.5199 -0.1 + endloop + endfacet + facet normal 0.910903 -0.412619 0 + outer loop + vertex 2.10958 33.2371 0 + vertex 2.4524 33.9939 -0.1 + vertex 2.4524 33.9939 0 + endloop + endfacet + facet normal 0.910903 -0.412619 0 + outer loop + vertex 2.4524 33.9939 -0.1 + vertex 2.10958 33.2371 0 + vertex 2.10958 33.2371 -0.1 + endloop + endfacet + facet normal 0.897899 -0.440202 0 + outer loop + vertex 2.4524 33.9939 0 + vertex 2.84738 34.7996 -0.1 + vertex 2.84738 34.7996 0 + endloop + endfacet + facet normal 0.897899 -0.440202 0 + outer loop + vertex 2.84738 34.7996 -0.1 + vertex 2.4524 33.9939 0 + vertex 2.4524 33.9939 -0.1 + endloop + endfacet + facet normal 0.887623 -0.460571 0 + outer loop + vertex 2.84738 34.7996 0 + vertex 3.26543 35.6052 -0.1 + vertex 3.26543 35.6052 0 + endloop + endfacet + facet normal 0.887623 -0.460571 0 + outer loop + vertex 3.26543 35.6052 -0.1 + vertex 2.84738 34.7996 0 + vertex 2.84738 34.7996 -0.1 + endloop + endfacet + facet normal 0.877821 -0.478989 0 + outer loop + vertex 3.26543 35.6052 0 + vertex 3.68699 36.3778 -0.1 + vertex 3.68699 36.3778 0 + endloop + endfacet + facet normal 0.877821 -0.478989 0 + outer loop + vertex 3.68699 36.3778 -0.1 + vertex 3.26543 35.6052 0 + vertex 3.26543 35.6052 -0.1 + endloop + endfacet + facet normal 0.867241 -0.497888 0 + outer loop + vertex 3.68699 36.3778 0 + vertex 4.09252 37.0842 -0.1 + vertex 4.09252 37.0842 0 + endloop + endfacet + facet normal 0.867241 -0.497888 0 + outer loop + vertex 4.09252 37.0842 -0.1 + vertex 3.68699 36.3778 0 + vertex 3.68699 36.3778 -0.1 + endloop + endfacet + facet normal 0.853923 -0.520399 0 + outer loop + vertex 4.09252 37.0842 0 + vertex 4.46246 37.6912 -0.1 + vertex 4.46246 37.6912 0 + endloop + endfacet + facet normal 0.853923 -0.520399 0 + outer loop + vertex 4.46246 37.6912 -0.1 + vertex 4.09252 37.0842 0 + vertex 4.09252 37.0842 -0.1 + endloop + endfacet + facet normal 0.833342 -0.552757 0 + outer loop + vertex 4.46246 37.6912 0 + vertex 4.77727 38.1658 -0.1 + vertex 4.77727 38.1658 0 + endloop + endfacet + facet normal 0.833342 -0.552757 0 + outer loop + vertex 4.77727 38.1658 -0.1 + vertex 4.46246 37.6912 0 + vertex 4.46246 37.6912 -0.1 + endloop + endfacet + facet normal 0.789667 -0.613535 0 + outer loop + vertex 4.77727 38.1658 0 + vertex 5.01738 38.4749 -0.1 + vertex 5.01738 38.4749 0 + endloop + endfacet + facet normal 0.789667 -0.613535 0 + outer loop + vertex 5.01738 38.4749 -0.1 + vertex 4.77727 38.1658 0 + vertex 4.77727 38.1658 -0.1 + endloop + endfacet + facet normal 0.690746 -0.723097 0 + outer loop + vertex 5.01738 38.4749 -0.1 + vertex 5.10332 38.557 0 + vertex 5.01738 38.4749 0 + endloop + endfacet + facet normal 0.690746 -0.723097 0 + outer loop + vertex 5.10332 38.557 0 + vertex 5.01738 38.4749 -0.1 + vertex 5.10332 38.557 -0.1 + endloop + endfacet + facet normal 0.426773 -0.904359 0 + outer loop + vertex 5.10332 38.557 -0.1 + vertex 5.16325 38.5852 0 + vertex 5.10332 38.557 0 + endloop + endfacet + facet normal 0.426773 -0.904359 0 + outer loop + vertex 5.16325 38.5852 0 + vertex 5.10332 38.557 -0.1 + vertex 5.16325 38.5852 -0.1 + endloop + endfacet + facet normal -0.22248 -0.974937 0 + outer loop + vertex 5.16325 38.5852 -0.1 + vertex 5.20457 38.5758 0 + vertex 5.16325 38.5852 0 + endloop + endfacet + facet normal -0.22248 -0.974937 -0 + outer loop + vertex 5.20457 38.5758 0 + vertex 5.16325 38.5852 -0.1 + vertex 5.20457 38.5758 -0.1 + endloop + endfacet + facet normal -0.944948 0.327219 0 + outer loop + vertex 7.1242 19.0144 -0.1 + vertex 7.15267 19.0966 0 + vertex 7.15267 19.0966 -0.1 + endloop + endfacet + facet normal -0.944948 0.327219 0 + outer loop + vertex 7.15267 19.0966 0 + vertex 7.1242 19.0144 -0.1 + vertex 7.1242 19.0144 0 + endloop + endfacet + facet normal -0.999677 -0.0254292 0 + outer loop + vertex 7.1273 18.8927 -0.1 + vertex 7.1242 19.0144 0 + vertex 7.1242 19.0144 -0.1 + endloop + endfacet + facet normal -0.999677 -0.0254292 0 + outer loop + vertex 7.1242 19.0144 0 + vertex 7.1273 18.8927 -0.1 + vertex 7.1273 18.8927 0 + endloop + endfacet + facet normal -0.971548 -0.236844 0 + outer loop + vertex 7.16351 18.7442 -0.1 + vertex 7.1273 18.8927 0 + vertex 7.1273 18.8927 -0.1 + endloop + endfacet + facet normal -0.971548 -0.236844 0 + outer loop + vertex 7.1273 18.8927 0 + vertex 7.16351 18.7442 -0.1 + vertex 7.16351 18.7442 0 + endloop + endfacet + facet normal -0.922269 -0.38655 0 + outer loop + vertex 7.29207 18.4374 -0.1 + vertex 7.16351 18.7442 0 + vertex 7.16351 18.7442 -0.1 + endloop + endfacet + facet normal -0.922269 -0.38655 0 + outer loop + vertex 7.16351 18.7442 0 + vertex 7.29207 18.4374 -0.1 + vertex 7.29207 18.4374 0 + endloop + endfacet + facet normal -0.894309 -0.44745 0 + outer loop + vertex 7.49889 18.0241 -0.1 + vertex 7.29207 18.4374 0 + vertex 7.29207 18.4374 -0.1 + endloop + endfacet + facet normal -0.894309 -0.44745 0 + outer loop + vertex 7.29207 18.4374 0 + vertex 7.49889 18.0241 -0.1 + vertex 7.49889 18.0241 0 + endloop + endfacet + facet normal -0.872312 -0.488949 0 + outer loop + vertex 8.03973 17.0592 -0.1 + vertex 7.49889 18.0241 0 + vertex 7.49889 18.0241 -0.1 + endloop + endfacet + facet normal -0.872312 -0.488949 0 + outer loop + vertex 7.49889 18.0241 0 + vertex 8.03973 17.0592 -0.1 + vertex 8.03973 17.0592 0 + endloop + endfacet + facet normal -0.84697 -0.53164 0 + outer loop + vertex 8.57086 16.213 -0.1 + vertex 8.03973 17.0592 0 + vertex 8.03973 17.0592 -0.1 + endloop + endfacet + facet normal -0.84697 -0.53164 0 + outer loop + vertex 8.03973 17.0592 0 + vertex 8.57086 16.213 -0.1 + vertex 8.57086 16.213 0 + endloop + endfacet + facet normal -0.805848 -0.592122 0 + outer loop + vertex 8.76553 15.9481 -0.1 + vertex 8.57086 16.213 0 + vertex 8.57086 16.213 -0.1 + endloop + endfacet + facet normal -0.805848 -0.592122 0 + outer loop + vertex 8.57086 16.213 0 + vertex 8.76553 15.9481 -0.1 + vertex 8.76553 15.9481 0 + endloop + endfacet + facet normal -0.732738 -0.680511 0 + outer loop + vertex 8.83337 15.875 -0.1 + vertex 8.76553 15.9481 0 + vertex 8.76553 15.9481 -0.1 + endloop + endfacet + facet normal -0.732738 -0.680511 0 + outer loop + vertex 8.76553 15.9481 0 + vertex 8.83337 15.875 -0.1 + vertex 8.83337 15.875 0 + endloop + endfacet + facet normal -0.509392 -0.860535 0 + outer loop + vertex 8.83337 15.875 -0.1 + vertex 8.87708 15.8492 0 + vertex 8.83337 15.875 0 + endloop + endfacet + facet normal -0.509392 -0.860535 -0 + outer loop + vertex 8.87708 15.8492 0 + vertex 8.83337 15.875 -0.1 + vertex 8.87708 15.8492 -0.1 + endloop + endfacet + facet normal 0.216566 -0.976268 0 + outer loop + vertex 8.87708 15.8492 -0.1 + vertex 8.99158 15.8746 0 + vertex 8.87708 15.8492 0 + endloop + endfacet + facet normal 0.216566 -0.976268 0 + outer loop + vertex 8.99158 15.8746 0 + vertex 8.87708 15.8492 -0.1 + vertex 8.99158 15.8746 -0.1 + endloop + endfacet + facet normal 0.333607 -0.942712 0 + outer loop + vertex 8.99158 15.8746 -0.1 + vertex 9.19116 15.9452 0 + vertex 8.99158 15.8746 0 + endloop + endfacet + facet normal 0.333607 -0.942712 0 + outer loop + vertex 9.19116 15.9452 0 + vertex 8.99158 15.8746 -0.1 + vertex 9.19116 15.9452 -0.1 + endloop + endfacet + facet normal 0.395815 -0.91833 0 + outer loop + vertex 9.19116 15.9452 -0.1 + vertex 9.73318 16.1788 0 + vertex 9.19116 15.9452 0 + endloop + endfacet + facet normal 0.395815 -0.91833 0 + outer loop + vertex 9.73318 16.1788 0 + vertex 9.19116 15.9452 -0.1 + vertex 9.73318 16.1788 -0.1 + endloop + endfacet + facet normal 0.425917 -0.904762 0 + outer loop + vertex 9.73318 16.1788 -0.1 + vertex 10.4375 16.5104 0 + vertex 9.73318 16.1788 0 + endloop + endfacet + facet normal 0.425917 -0.904762 0 + outer loop + vertex 10.4375 16.5104 0 + vertex 9.73318 16.1788 -0.1 + vertex 10.4375 16.5104 -0.1 + endloop + endfacet + facet normal 0.716732 0.697349 0 + outer loop + vertex 10.4375 16.5104 0 + vertex 9.77546 17.1908 -0.1 + vertex 9.77546 17.1908 0 + endloop + endfacet + facet normal 0.716732 0.697349 0 + outer loop + vertex 9.77546 17.1908 -0.1 + vertex 10.4375 16.5104 0 + vertex 10.4375 16.5104 -0.1 + endloop + endfacet + facet normal 0.695522 0.718505 -0 + outer loop + vertex 9.77546 17.1908 -0.1 + vertex 9.46246 17.4938 0 + vertex 9.77546 17.1908 0 + endloop + endfacet + facet normal 0.695522 0.718505 0 + outer loop + vertex 9.46246 17.4938 0 + vertex 9.77546 17.1908 -0.1 + vertex 9.46246 17.4938 -0.1 + endloop + endfacet + facet normal 0.663067 0.74856 -0 + outer loop + vertex 9.46246 17.4938 -0.1 + vertex 9.09841 17.8163 0 + vertex 9.46246 17.4938 0 + endloop + endfacet + facet normal 0.663067 0.74856 0 + outer loop + vertex 9.09841 17.8163 0 + vertex 9.46246 17.4938 -0.1 + vertex 9.09841 17.8163 -0.1 + endloop + endfacet + facet normal 0.6264 0.779502 -0 + outer loop + vertex 9.09841 17.8163 -0.1 + vertex 8.31493 18.4459 0 + vertex 9.09841 17.8163 0 + endloop + endfacet + facet normal 0.6264 0.779502 0 + outer loop + vertex 8.31493 18.4459 0 + vertex 9.09841 17.8163 -0.1 + vertex 8.31493 18.4459 -0.1 + endloop + endfacet + facet normal 0.58921 0.80798 -0 + outer loop + vertex 8.31493 18.4459 -0.1 + vertex 7.9444 18.7161 0 + vertex 8.31493 18.4459 0 + endloop + endfacet + facet normal 0.58921 0.80798 0 + outer loop + vertex 7.9444 18.7161 0 + vertex 8.31493 18.4459 -0.1 + vertex 7.9444 18.7161 -0.1 + endloop + endfacet + facet normal 0.554709 0.832044 -0 + outer loop + vertex 7.9444 18.7161 -0.1 + vertex 7.62063 18.9319 0 + vertex 7.9444 18.7161 0 + endloop + endfacet + facet normal 0.554709 0.832044 0 + outer loop + vertex 7.62063 18.9319 0 + vertex 7.9444 18.7161 -0.1 + vertex 7.62063 18.9319 -0.1 + endloop + endfacet + facet normal 0.492817 0.870133 -0 + outer loop + vertex 7.62063 18.9319 -0.1 + vertex 7.36805 19.075 0 + vertex 7.62063 18.9319 0 + endloop + endfacet + facet normal 0.492817 0.870133 0 + outer loop + vertex 7.36805 19.075 0 + vertex 7.62063 18.9319 -0.1 + vertex 7.36805 19.075 -0.1 + endloop + endfacet + facet normal 0.313373 0.94963 -0 + outer loop + vertex 7.36805 19.075 -0.1 + vertex 7.21113 19.1268 0 + vertex 7.36805 19.075 0 + endloop + endfacet + facet normal 0.313373 0.94963 0 + outer loop + vertex 7.21113 19.1268 0 + vertex 7.36805 19.075 -0.1 + vertex 7.21113 19.1268 -0.1 + endloop + endfacet + facet normal -0.458832 0.888523 0 + outer loop + vertex 7.21113 19.1268 -0.1 + vertex 7.15267 19.0966 0 + vertex 7.21113 19.1268 0 + endloop + endfacet + facet normal -0.458832 0.888523 0 + outer loop + vertex 7.15267 19.0966 0 + vertex 7.21113 19.1268 -0.1 + vertex 7.15267 19.0966 -0.1 + endloop + endfacet + facet normal -0.0478819 0.998853 0 + outer loop + vertex -14.6988 24.986 -0.1 + vertex -15.4289 24.9511 0 + vertex -14.6988 24.986 0 + endloop + endfacet + facet normal -0.0478819 0.998853 0 + outer loop + vertex -15.4289 24.9511 0 + vertex -14.6988 24.986 -0.1 + vertex -15.4289 24.9511 -0.1 + endloop + endfacet + facet normal -0.102501 0.994733 0 + outer loop + vertex -15.4289 24.9511 -0.1 + vertex -16.0762 24.8844 0 + vertex -15.4289 24.9511 0 + endloop + endfacet + facet normal -0.102501 0.994733 0 + outer loop + vertex -16.0762 24.8844 0 + vertex -15.4289 24.9511 -0.1 + vertex -16.0762 24.8844 -0.1 + endloop + endfacet + facet normal -0.186067 0.982537 0 + outer loop + vertex -16.0762 24.8844 -0.1 + vertex -16.599 24.7853 0 + vertex -16.0762 24.8844 0 + endloop + endfacet + facet normal -0.186067 0.982537 0 + outer loop + vertex -16.599 24.7853 0 + vertex -16.0762 24.8844 -0.1 + vertex -16.599 24.7853 -0.1 + endloop + endfacet + facet normal -0.197458 0.980311 0 + outer loop + vertex -16.599 24.7853 -0.1 + vertex -17.1707 24.6702 0 + vertex -16.599 24.7853 0 + endloop + endfacet + facet normal -0.197458 0.980311 0 + outer loop + vertex -17.1707 24.6702 0 + vertex -16.599 24.7853 -0.1 + vertex -17.1707 24.6702 -0.1 + endloop + endfacet + facet normal -0.159115 0.98726 0 + outer loop + vertex -17.1707 24.6702 -0.1 + vertex -18.0818 24.5233 0 + vertex -17.1707 24.6702 0 + endloop + endfacet + facet normal -0.159115 0.98726 0 + outer loop + vertex -18.0818 24.5233 0 + vertex -17.1707 24.6702 -0.1 + vertex -18.0818 24.5233 -0.1 + endloop + endfacet + facet normal -0.140489 0.990082 0 + outer loop + vertex -18.0818 24.5233 -0.1 + vertex -19.207 24.3637 0 + vertex -18.0818 24.5233 0 + endloop + endfacet + facet normal -0.140489 0.990082 0 + outer loop + vertex -19.207 24.3637 0 + vertex -18.0818 24.5233 -0.1 + vertex -19.207 24.3637 -0.1 + endloop + endfacet + facet normal -0.125539 0.992089 0 + outer loop + vertex -19.207 24.3637 -0.1 + vertex -20.4207 24.2101 0 + vertex -19.207 24.3637 0 + endloop + endfacet + facet normal -0.125539 0.992089 0 + outer loop + vertex -20.4207 24.2101 0 + vertex -19.207 24.3637 -0.1 + vertex -20.4207 24.2101 -0.1 + endloop + endfacet + facet normal -0.117788 0.993039 0 + outer loop + vertex -20.4207 24.2101 -0.1 + vertex -23.3692 23.8604 0 + vertex -20.4207 24.2101 0 + endloop + endfacet + facet normal -0.117788 0.993039 0 + outer loop + vertex -23.3692 23.8604 0 + vertex -20.4207 24.2101 -0.1 + vertex -23.3692 23.8604 -0.1 + endloop + endfacet + facet normal -0.645441 -0.76381 0 + outer loop + vertex -23.3692 23.8604 -0.1 + vertex -22.6524 23.2546 0 + vertex -23.3692 23.8604 0 + endloop + endfacet + facet normal -0.645441 -0.76381 -0 + outer loop + vertex -22.6524 23.2546 0 + vertex -23.3692 23.8604 -0.1 + vertex -22.6524 23.2546 -0.1 + endloop + endfacet + facet normal -0.595678 -0.803224 0 + outer loop + vertex -22.6524 23.2546 -0.1 + vertex -22.3422 23.0246 0 + vertex -22.6524 23.2546 0 + endloop + endfacet + facet normal -0.595678 -0.803224 -0 + outer loop + vertex -22.3422 23.0246 0 + vertex -22.6524 23.2546 -0.1 + vertex -22.3422 23.0246 -0.1 + endloop + endfacet + facet normal -0.490603 -0.871383 0 + outer loop + vertex -22.3422 23.0246 -0.1 + vertex -22.0315 22.8497 0 + vertex -22.3422 23.0246 0 + endloop + endfacet + facet normal -0.490603 -0.871383 -0 + outer loop + vertex -22.0315 22.8497 0 + vertex -22.3422 23.0246 -0.1 + vertex -22.0315 22.8497 -0.1 + endloop + endfacet + facet normal -0.350196 -0.936677 0 + outer loop + vertex -22.0315 22.8497 -0.1 + vertex -21.755 22.7463 0 + vertex -22.0315 22.8497 0 + endloop + endfacet + facet normal -0.350196 -0.936677 -0 + outer loop + vertex -21.755 22.7463 0 + vertex -22.0315 22.8497 -0.1 + vertex -21.755 22.7463 -0.1 + endloop + endfacet + facet normal -0.169545 -0.985522 0 + outer loop + vertex -21.755 22.7463 -0.1 + vertex -21.6404 22.7266 0 + vertex -21.755 22.7463 0 + endloop + endfacet + facet normal -0.169545 -0.985522 -0 + outer loop + vertex -21.6404 22.7266 0 + vertex -21.755 22.7463 -0.1 + vertex -21.6404 22.7266 -0.1 + endloop + endfacet + facet normal 0.0467747 -0.998905 0 + outer loop + vertex -21.6404 22.7266 -0.1 + vertex -21.5474 22.7309 0 + vertex -21.6404 22.7266 0 + endloop + endfacet + facet normal 0.0467747 -0.998905 0 + outer loop + vertex -21.5474 22.7309 0 + vertex -21.6404 22.7266 -0.1 + vertex -21.5474 22.7309 -0.1 + endloop + endfacet + facet normal 0.160131 -0.987096 0 + outer loop + vertex -21.5474 22.7309 -0.1 + vertex -20.7318 22.8633 0 + vertex -21.5474 22.7309 0 + endloop + endfacet + facet normal 0.160131 -0.987096 0 + outer loop + vertex -20.7318 22.8633 0 + vertex -21.5474 22.7309 -0.1 + vertex -20.7318 22.8633 -0.1 + endloop + endfacet + facet normal 0.141843 -0.989889 0 + outer loop + vertex -20.7318 22.8633 -0.1 + vertex -19.3158 23.0662 0 + vertex -20.7318 22.8633 0 + endloop + endfacet + facet normal 0.141843 -0.989889 0 + outer loop + vertex -19.3158 23.0662 0 + vertex -20.7318 22.8633 -0.1 + vertex -19.3158 23.0662 -0.1 + endloop + endfacet + facet normal 0.145154 -0.989409 0 + outer loop + vertex -19.3158 23.0662 -0.1 + vertex -17.0412 23.3999 0 + vertex -19.3158 23.0662 0 + endloop + endfacet + facet normal 0.145154 -0.989409 0 + outer loop + vertex -17.0412 23.3999 0 + vertex -19.3158 23.0662 -0.1 + vertex -17.0412 23.3999 -0.1 + endloop + endfacet + facet normal 0.153306 -0.988179 0 + outer loop + vertex -17.0412 23.3999 -0.1 + vertex -14.1612 23.8467 0 + vertex -17.0412 23.3999 0 + endloop + endfacet + facet normal 0.153306 -0.988179 0 + outer loop + vertex -14.1612 23.8467 0 + vertex -17.0412 23.3999 -0.1 + vertex -14.1612 23.8467 -0.1 + endloop + endfacet + facet normal 0.152324 -0.988331 0 + outer loop + vertex -14.1612 23.8467 -0.1 + vertex -10.5711 24.4 0 + vertex -14.1612 23.8467 0 + endloop + endfacet + facet normal 0.152324 -0.988331 0 + outer loop + vertex -10.5711 24.4 0 + vertex -14.1612 23.8467 -0.1 + vertex -10.5711 24.4 -0.1 + endloop + endfacet + facet normal 0.28937 -0.957217 0 + outer loop + vertex -10.5711 24.4 -0.1 + vertex -10.5349 24.4109 0 + vertex -10.5711 24.4 0 + endloop + endfacet + facet normal 0.28937 -0.957217 0 + outer loop + vertex -10.5349 24.4109 0 + vertex -10.5711 24.4 -0.1 + vertex -10.5349 24.4109 -0.1 + endloop + endfacet + facet normal 0.978613 0.20571 0 + outer loop + vertex -10.5349 24.4109 0 + vertex -10.5394 24.4322 -0.1 + vertex -10.5394 24.4322 0 + endloop + endfacet + facet normal 0.978613 0.20571 0 + outer loop + vertex -10.5394 24.4322 -0.1 + vertex -10.5349 24.4109 0 + vertex -10.5349 24.4109 -0.1 + endloop + endfacet + facet normal 0.497201 0.867635 -0 + outer loop + vertex -10.5394 24.4322 -0.1 + vertex -10.6591 24.5009 0 + vertex -10.5394 24.4322 0 + endloop + endfacet + facet normal 0.497201 0.867635 0 + outer loop + vertex -10.6591 24.5009 0 + vertex -10.5394 24.4322 -0.1 + vertex -10.6591 24.5009 -0.1 + endloop + endfacet + facet normal 0.356744 0.934202 -0 + outer loop + vertex -10.6591 24.5009 -0.1 + vertex -10.9077 24.5958 0 + vertex -10.6591 24.5009 0 + endloop + endfacet + facet normal 0.356744 0.934202 0 + outer loop + vertex -10.9077 24.5958 0 + vertex -10.6591 24.5009 -0.1 + vertex -10.9077 24.5958 -0.1 + endloop + endfacet + facet normal 0.299009 0.95425 -0 + outer loop + vertex -10.9077 24.5958 -0.1 + vertex -11.2625 24.7069 0 + vertex -10.9077 24.5958 0 + endloop + endfacet + facet normal 0.299009 0.95425 0 + outer loop + vertex -11.2625 24.7069 0 + vertex -10.9077 24.5958 -0.1 + vertex -11.2625 24.7069 -0.1 + endloop + endfacet + facet normal 0.214726 0.976674 -0 + outer loop + vertex -11.2625 24.7069 -0.1 + vertex -11.7825 24.8213 0 + vertex -11.2625 24.7069 0 + endloop + endfacet + facet normal 0.214726 0.976674 0 + outer loop + vertex -11.7825 24.8213 0 + vertex -11.2625 24.7069 -0.1 + vertex -11.7825 24.8213 -0.1 + endloop + endfacet + facet normal 0.131639 0.991298 -0 + outer loop + vertex -11.7825 24.8213 -0.1 + vertex -12.4277 24.907 0 + vertex -11.7825 24.8213 0 + endloop + endfacet + facet normal 0.131639 0.991298 0 + outer loop + vertex -12.4277 24.907 0 + vertex -11.7825 24.8213 -0.1 + vertex -12.4277 24.907 -0.1 + endloop + endfacet + facet normal 0.0771921 0.997016 -0 + outer loop + vertex -12.4277 24.907 -0.1 + vertex -13.1566 24.9634 0 + vertex -12.4277 24.907 0 + endloop + endfacet + facet normal 0.0771921 0.997016 0 + outer loop + vertex -13.1566 24.9634 0 + vertex -12.4277 24.907 -0.1 + vertex -13.1566 24.9634 -0.1 + endloop + endfacet + facet normal 0.0344425 0.999407 -0 + outer loop + vertex -13.1566 24.9634 -0.1 + vertex -13.9275 24.99 0 + vertex -13.1566 24.9634 0 + endloop + endfacet + facet normal 0.0344425 0.999407 0 + outer loop + vertex -13.9275 24.99 0 + vertex -13.1566 24.9634 -0.1 + vertex -13.9275 24.99 -0.1 + endloop + endfacet + facet normal -0.00506693 0.999987 0 + outer loop + vertex -13.9275 24.99 -0.1 + vertex -14.6988 24.986 0 + vertex -13.9275 24.99 0 + endloop + endfacet + facet normal -0.00506693 0.999987 0 + outer loop + vertex -14.6988 24.986 0 + vertex -13.9275 24.99 -0.1 + vertex -14.6988 24.986 -0.1 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -110 -110 -3 + vertex -110 110 0 + vertex -110 110 -3 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -110 110 0 + vertex -110 -110 -3 + vertex -110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0919 -25.8829 0 + vertex -27.8988 -26.2055 0 + vertex -27.9236 -26.0946 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8988 -26.2055 0 + vertex -28.2888 -25.7968 0 + vertex -27.8924 -26.5154 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0919 -25.8829 0 + vertex -27.9236 -26.0946 0 + vertex -27.9636 -26.0069 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0919 -25.8829 0 + vertex -27.9636 -26.0069 0 + vertex -28.0195 -25.9379 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8988 -26.2055 0 + vertex -28.0919 -25.8829 0 + vertex -28.2888 -25.7968 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5596 -25.7117 0 + vertex -27.8924 -26.5154 0 + vertex -28.2888 -25.7968 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8924 -26.5154 0 + vertex -28.5596 -25.7117 0 + vertex -27.9393 -26.9734 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.7678 -25.6646 0 + vertex -27.9393 -26.9734 0 + vertex -28.5596 -25.7117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.9103 -14.3386 0 + vertex -21.5729 -16.4428 0 + vertex -21.5693 -15.5508 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1296 -14.5577 0 + vertex -21.5693 -15.5508 0 + vertex -21.5879 -15.2616 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.8956 -13.512 0 + vertex -35.4754 -14.1281 0 + vertex -35.4904 -13.894 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6956 -13.593 0 + vertex -35.4904 -13.894 0 + vertex -35.5189 -13.7992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6956 -13.593 0 + vertex -35.5189 -13.7992 0 + vertex -35.5622 -13.718 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.1669 -13.4677 0 + vertex -35.4754 -14.1281 0 + vertex -35.8956 -13.512 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6956 -13.593 0 + vertex -35.5622 -13.718 0 + vertex -35.6209 -13.6496 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4904 -13.894 0 + vertex -35.6956 -13.593 0 + vertex -35.8956 -13.512 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4754 -14.1281 0 + vertex -36.1669 -13.4677 0 + vertex -35.5123 -14.4274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.5145 -13.4531 0 + vertex -35.5123 -14.4274 0 + vertex -36.1669 -13.4677 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.5123 -14.4274 0 + vertex -36.5145 -13.4531 0 + vertex -35.5964 -14.799 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.7305 -13.4387 0 + vertex -35.5964 -14.799 0 + vertex -36.5145 -13.4531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.5964 -14.799 0 + vertex -36.7305 -13.4387 0 + vertex -35.7796 -15.3934 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.9216 -13.3997 0 + vertex -35.7796 -15.3934 0 + vertex -36.7305 -13.4387 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0874 -13.3385 0 + vertex -35.7796 -15.3934 0 + vertex -36.9216 -13.3997 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.7796 -15.3934 0 + vertex -37.0874 -13.3385 0 + vertex -36.0907 -16.2655 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2276 -13.2576 0 + vertex -36.0907 -16.2655 0 + vertex -37.0874 -13.3385 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.0907 -16.2655 0 + vertex -37.2276 -13.2576 0 + vertex -36.5163 -17.3821 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.3418 -13.1594 0 + vertex -36.5163 -17.3821 0 + vertex -37.2276 -13.2576 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4296 -13.0463 0 + vertex -36.5163 -17.3821 0 + vertex -37.3418 -13.1594 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.5163 -17.3821 0 + vertex -37.4296 -13.0463 0 + vertex -37.0431 -18.7102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4908 -12.9209 0 + vertex -37.0431 -18.7102 0 + vertex -37.4296 -13.0463 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3469 -21.8682 0 + vertex -37.4908 -12.9209 0 + vertex -37.5249 -12.7854 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.3834 -12.1929 0 + vertex -38.6203 24.2212 0 + vertex -37.4611 -12.3438 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4908 -12.9209 0 + vertex -38.3469 -21.8682 0 + vertex -37.0431 -18.7102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.8955 -25.4747 0 + vertex -37.5249 -12.7854 0 + vertex -37.5315 -12.6425 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.8265 24.6102 0 + vertex -37.4611 -12.3438 0 + vertex -38.6203 24.2212 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.4611 -12.3438 0 + vertex -38.8265 24.6102 0 + vertex -37.5104 -12.4945 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0227 25.0923 0 + vertex -37.5104 -12.4945 0 + vertex -38.8265 24.6102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.846 -36.863 0 + vertex -37.5104 -12.4945 0 + vertex -39.0227 25.0923 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -47.7274 -36.6957 0 + vertex -37.5104 -12.4945 0 + vertex -47.846 -36.863 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.846 -36.863 0 + vertex -39.0227 25.0923 0 + vertex -39.1186 25.4589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 110 0 + vertex -39.1186 25.4589 0 + vertex -39.13 25.5984 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -47.5785 -36.5332 0 + vertex -37.5315 -12.6425 0 + vertex -47.7274 -36.6957 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.0107 24.2804 0 + vertex -26.053 23.8437 0 + vertex -24.6523 24.0122 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.5818 24.4056 0 + vertex -26.053 23.8437 0 + vertex -26.0107 24.2804 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.5818 24.4056 0 + vertex -26.7338 23.7794 0 + vertex -26.053 23.8437 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.1227 24.5501 0 + vertex -26.7338 23.7794 0 + vertex -26.5818 24.4056 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.1227 24.5501 0 + vertex -27.3569 23.7586 0 + vertex -26.7338 23.7794 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.636 24.7152 0 + vertex -27.3569 23.7586 0 + vertex -27.1227 24.5501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.636 24.7152 0 + vertex -27.9279 23.7822 0 + vertex -27.3569 23.7586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1248 24.9019 0 + vertex -27.9279 23.7822 0 + vertex -27.636 24.7152 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1248 24.9019 0 + vertex -28.4524 23.8513 0 + vertex -27.9279 23.7822 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.9359 23.9669 0 + vertex -28.1248 24.9019 0 + vertex -28.5919 25.1115 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1248 24.9019 0 + vertex -28.9359 23.9669 0 + vertex -28.4524 23.8513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.384 24.13 0 + vertex -28.5919 25.1115 0 + vertex -29.0402 25.3453 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5919 25.1115 0 + vertex -29.384 24.13 0 + vertex -28.9359 23.9669 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.8023 24.3416 0 + vertex -29.0402 25.3453 0 + vertex -29.4725 25.6043 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0402 25.3453 0 + vertex -29.8023 24.3416 0 + vertex -29.384 24.13 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5308 24.8328 0 + vertex -29.4725 25.6043 0 + vertex -29.8918 25.8898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.4725 25.6043 0 + vertex -30.1964 24.6027 0 + vertex -29.8023 24.3416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.4725 25.6043 0 + vertex -30.5308 24.8328 0 + vertex -30.1964 24.6027 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8055 24.9813 0 + vertex -29.8918 25.8898 0 + vertex -30.6514 26.471 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.8918 25.8898 0 + vertex -30.8055 24.9813 0 + vertex -30.5308 24.8328 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1676 25.0376 0 + vertex -30.6514 26.471 0 + vertex -30.9143 26.7038 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.6514 26.471 0 + vertex -31.0185 25.0493 0 + vertex -30.8055 24.9813 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.6514 26.471 0 + vertex -31.1012 25.0533 0 + vertex -31.0185 25.0493 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1676 25.0376 0 + vertex -30.9143 26.7038 0 + vertex -31.1043 26.9038 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.6514 26.471 0 + vertex -31.1676 25.0376 0 + vertex -31.1012 25.0533 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1043 26.9038 0 + vertex -31.2175 25.0021 0 + vertex -31.1676 25.0376 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2248 27.0754 0 + vertex -31.2175 25.0021 0 + vertex -31.1043 26.9038 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2248 27.0754 0 + vertex -31.2507 24.9472 0 + vertex -31.2175 25.0021 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.2082 23.4707 0 + vertex -31.2507 24.9472 0 + vertex -31.2248 27.0754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.2082 23.4707 0 + vertex -31.2248 27.0754 0 + vertex -31.2795 27.2229 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.9294 20.0018 0 + vertex -10.9261 19.832 0 + vertex -10.904 19.9248 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.0035 20.0644 0 + vertex -10.9261 19.832 0 + vertex -10.9294 20.0018 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.9261 19.832 0 + vertex -11.0035 20.0644 0 + vertex -10.9948 19.7221 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.1271 20.114 0 + vertex -10.9948 19.7221 0 + vertex -11.0035 20.0644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.9948 19.7221 0 + vertex -11.1271 20.114 0 + vertex -11.1091 19.5935 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.3013 20.1521 0 + vertex -11.1091 19.5935 0 + vertex -11.1271 20.114 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5271 20.1801 0 + vertex -11.1091 19.5935 0 + vertex -11.3013 20.1521 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.1091 19.5935 0 + vertex -11.5271 20.1801 0 + vertex -11.4702 19.2748 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.1376 20.2112 0 + vertex -11.4702 19.2748 0 + vertex -11.5271 20.1801 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.4702 19.2748 0 + vertex -12.1376 20.2112 0 + vertex -12.0016 18.8648 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.9665 20.2187 0 + vertex -12.0016 18.8648 0 + vertex -12.1376 20.2112 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.9665 20.2187 0 + vertex -13.8225 17.5152 0 + vertex -12.0016 18.8648 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.9037 20.2008 0 + vertex -13.8225 17.5152 0 + vertex -12.9665 20.2187 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.8461 20.153 0 + vertex -13.8225 17.5152 0 + vertex -13.9037 20.2008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.8225 17.5152 0 + vertex -14.8461 20.153 0 + vertex -14.4648 17.0612 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.684 20.0825 0 + vertex -14.4648 17.0612 0 + vertex -14.8461 20.153 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.4648 17.0612 0 + vertex -15.684 20.0825 0 + vertex -14.9972 16.7116 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.3079 19.9967 0 + vertex -14.9972 16.7116 0 + vertex -15.684 20.0825 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.9972 16.7116 0 + vertex -16.3079 19.9967 0 + vertex -15.4716 16.4339 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.2235 19.8332 0 + vertex -15.4716 16.4339 0 + vertex -16.3079 19.9967 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.4716 16.4339 0 + vertex -17.2235 19.8332 0 + vertex -15.9397 16.1961 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9397 16.1961 0 + vertex -17.2235 19.8332 0 + vertex -16.4531 15.9659 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.1791 19.6811 0 + vertex -16.4531 15.9659 0 + vertex -17.2235 19.8332 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.4531 15.9659 0 + vertex -18.1791 19.6811 0 + vertex -17.0637 15.711 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1791 19.6811 0 + vertex -18.4061 15.1884 0 + vertex -17.0637 15.711 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.1671 19.4139 0 + vertex -18.4061 15.1884 0 + vertex -18.1791 19.6811 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.4061 15.1884 0 + vertex -20.1671 19.4139 0 + vertex -19.7213 14.7364 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.1849 19.2007 0 + vertex -19.7213 14.7364 0 + vertex -20.1671 19.4139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7213 14.7364 0 + vertex -22.1849 19.2007 0 + vertex -21.0167 14.3533 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1849 19.2007 0 + vertex -22.3001 14.0374 0 + vertex -21.0167 14.3533 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.1455 19.0472 0 + vertex -22.3001 14.0374 0 + vertex -22.1849 19.2007 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.3001 14.0374 0 + vertex -24.1455 19.0472 0 + vertex -23.579 13.787 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1455 19.0472 0 + vertex -24.8613 13.6003 0 + vertex -23.579 13.787 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.9619 18.9589 0 + vertex -24.8613 13.6003 0 + vertex -24.1455 19.0472 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.9619 18.9589 0 + vertex -26.1544 13.4758 0 + vertex -24.8613 13.6003 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.7887 18.9409 0 + vertex -26.1544 13.4758 0 + vertex -25.9619 18.9589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.7887 18.9409 0 + vertex -27.4661 13.4117 0 + vertex -26.1544 13.4758 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.5469 18.9414 0 + vertex -27.4661 13.4117 0 + vertex -26.7887 18.9409 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2256 18.9609 0 + vertex -27.4661 13.4117 0 + vertex -27.5469 18.9414 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0548 13.353 0 + vertex -28.2256 18.9609 0 + vertex -28.8137 19.0002 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2256 18.9609 0 + vertex -29.0548 13.353 0 + vertex -27.4661 13.4117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.3006 19.0599 0 + vertex -29.0548 13.353 0 + vertex -28.8137 19.0002 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.3006 19.0599 0 + vertex -29.5683 13.309 0 + vertex -29.0548 13.353 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.6752 19.1409 0 + vertex -29.5683 13.309 0 + vertex -29.3006 19.0599 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.6752 19.1409 0 + vertex -29.9294 13.2465 0 + vertex -29.5683 13.309 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5811 19.4165 0 + vertex -29.9294 13.2465 0 + vertex -29.6752 19.1409 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9294 13.2465 0 + vertex -30.5811 19.4165 0 + vertex -30.1646 13.1588 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.4466 19.7034 0 + vertex -30.1646 13.1588 0 + vertex -30.5811 19.4165 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1646 13.1588 0 + vertex -31.4466 19.7034 0 + vertex -30.2432 13.1034 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.271 20.0012 0 + vertex -30.2432 13.1034 0 + vertex -31.4466 19.7034 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.0533 20.3093 0 + vertex -30.3001 13.0393 0 + vertex -32.271 20.0012 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2432 13.1034 0 + vertex -32.271 20.0012 0 + vertex -30.3001 13.0393 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.6083 4.95794 0 + vertex 23.6129 4.5634 0 + vertex 23.6192 4.7586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.6083 4.95794 0 + vertex 23.5897 4.3717 0 + vertex 23.6129 4.5634 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.6083 4.95794 0 + vertex 23.5494 4.18291 0 + vertex 23.5897 4.3717 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.4183 3.81156 0 + vertex 23.6083 4.95794 0 + vertex 23.5351 5.37146 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.6083 4.95794 0 + vertex 23.4183 3.81156 0 + vertex 23.5494 4.18291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.22 3.44442 0 + vertex 23.5351 5.37146 0 + vertex 23.3929 5.8089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5351 5.37146 0 + vertex 23.22 3.44442 0 + vertex 23.4183 3.81156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1811 6.27516 0 + vertex 23.22 3.44442 0 + vertex 23.3929 5.8089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1811 6.27516 0 + vertex 23.0427 3.12896 0 + vertex 23.22 3.44442 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8992 6.77518 0 + vertex 23.0427 3.12896 0 + vertex 23.1811 6.27516 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.6639 4.10009 0 + vertex 23.0427 3.12896 0 + vertex 22.8992 6.77518 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 16.0356 2.90743 0 + vertex 23.0427 3.12896 0 + vertex 15.6639 4.10009 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0427 3.12896 0 + vertex 16.0356 2.90743 0 + vertex 22.9115 2.82433 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6639 4.10009 0 + vertex 22.8992 6.77518 0 + vertex 22.6364 7.18064 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4871 9.26334 0 + vertex 26.9615 2.94949 0 + vertex 26.9647 2.16551 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9103 6.51977 0 + vertex 27.0158 7.30485 0 + vertex 26.9517 6.92758 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2208 8.08714 0 + vertex 26.9294 3.98634 0 + vertex 26.9615 2.94949 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0158 7.30485 0 + vertex 26.9103 6.51977 0 + vertex 26.8894 6.05157 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2208 8.08714 0 + vertex 26.8894 6.05157 0 + vertex 26.8871 5.49316 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2208 8.08714 0 + vertex 26.8871 5.49316 0 + vertex 26.9294 3.98634 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.8032 1.21715 0 + vertex 41.156 -19.2119 0 + vertex 26.8581 1.29842 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.156 -19.2119 0 + vertex 26.8032 1.21715 0 + vertex 40.4513 -19.4233 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.4513 -19.4233 0 + vertex 26.8032 1.21715 0 + vertex 39.5298 -19.7361 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9647 2.16551 0 + vertex 27.5397 9.70386 0 + vertex 27.4871 9.26334 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9615 2.94949 0 + vertex 27.4871 9.26334 0 + vertex 27.4176 8.86037 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9615 2.94949 0 + vertex 27.4176 8.86037 0 + vertex 27.3295 8.47496 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9615 2.94949 0 + vertex 27.3295 8.47496 0 + vertex 27.2208 8.08714 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.5298 -19.7361 0 + vertex 26.8032 1.21715 0 + vertex 29.9546 -19.4981 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8894 6.05157 0 + vertex 27.1048 7.68143 0 + vertex 27.0158 7.30485 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.1048 7.68143 0 + vertex 26.8894 6.05157 0 + vertex 27.2208 8.08714 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.9546 -19.4981 0 + vertex 26.8032 1.21715 0 + vertex 29.5013 -19.3404 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.5013 -19.3404 0 + vertex 26.8032 1.21715 0 + vertex 29.0007 -19.2301 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.7352 1.18648 0 + vertex 29.0007 -19.2301 0 + vertex 26.8032 1.21715 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.0007 -19.2301 0 + vertex 26.7352 1.18648 0 + vertex 28.4483 -19.1654 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.6819 -11.0243 0 + vertex 28.4483 -19.1654 0 + vertex 26.7352 1.18648 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4483 -19.1654 0 + vertex 19.6819 -11.0243 0 + vertex 27.8398 -19.1444 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9199 -2.19366 0 + vertex 26.7352 1.18648 0 + vertex 26.6535 1.20459 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1085 -1.15452 0 + vertex 26.6535 1.20459 0 + vertex 26.5572 1.2697 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.6895 -11.13 0 + vertex 27.8398 -19.1444 0 + vertex 19.6819 -11.0243 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.9975 2.16372 0 + vertex 26.5572 1.2697 0 + vertex 26.4455 1.37999 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2201 2.19262 0 + vertex 26.4455 1.37999 0 + vertex 26.3175 1.53367 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.4388 2.25734 0 + vertex 26.3175 1.53367 0 + vertex 26.0094 1.96397 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.8398 -19.1444 0 + vertex 19.6895 -11.13 0 + vertex 27.1629 -19.1581 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6285 2.34829 0 + vertex 26.0094 1.96397 0 + vertex 25.8138 2.23679 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.764 2.4559 0 + vertex 25.8138 2.23679 0 + vertex 25.6376 2.44612 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.764 2.4559 0 + vertex 25.6376 2.44612 0 + vertex 25.4766 2.59351 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7352 1.18648 0 + vertex 20.8331 -2.41014 0 + vertex 20.7245 -2.61588 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.9074 2.59483 0 + vertex 25.4766 2.59351 0 + vertex 25.3271 2.68052 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.0464 2.67962 0 + vertex 25.3271 2.68052 0 + vertex 25.185 2.7087 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3271 2.68052 0 + vertex 25.0464 2.67962 0 + vertex 24.9074 2.59483 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8138 2.23679 0 + vertex 24.764 2.4559 0 + vertex 24.6285 2.34829 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.4766 2.59351 0 + vertex 24.9074 2.59483 0 + vertex 24.764 2.4559 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0094 1.96397 0 + vertex 24.6285 2.34829 0 + vertex 24.4388 2.25734 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1629 -19.1581 0 + vertex 19.6895 -11.13 0 + vertex 26.5531 -19.2026 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.3175 1.53367 0 + vertex 24.4388 2.25734 0 + vertex 24.2201 2.19262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5531 -19.2026 0 + vertex 19.6598 -11.2975 0 + vertex 25.9886 -19.284 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.4455 1.37999 0 + vertex 24.2201 2.19262 0 + vertex 23.9975 2.16372 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5572 1.2697 0 + vertex 23.9975 2.16372 0 + vertex 21.1355 -0.658014 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0469 1.94283 0 + vertex 23.9975 2.16372 0 + vertex 23.7673 2.14309 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.6598 -11.2975 0 + vertex 26.5531 -19.2026 0 + vertex 19.6895 -11.13 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0469 1.94283 0 + vertex 23.7673 2.14309 0 + vertex 23.5277 2.10089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0469 1.94283 0 + vertex 23.5277 2.10089 0 + vertex 23.3072 2.04326 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7352 1.18648 0 + vertex 20.9199 -2.19366 0 + vertex 20.8331 -2.41014 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.9975 2.16372 0 + vertex 23.0469 1.94283 0 + vertex 21.1355 -0.658014 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1316 -0.233279 0 + vertex 23.0469 1.94283 0 + vertex 22.9727 1.93385 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.099 0.0745682 0 + vertex 22.9727 1.93385 0 + vertex 22.9112 1.94773 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0726 0.170561 0 + vertex 22.9112 1.94773 0 + vertex 22.8622 1.9828 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0399 0.220413 0 + vertex 22.8622 1.9828 0 + vertex 22.8257 2.03737 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0399 0.220413 0 + vertex 22.8257 2.03737 0 + vertex 22.8016 2.10976 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9772 0.235111 0 + vertex 22.8016 2.10976 0 + vertex 22.7901 2.30129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9115 2.82433 0 + vertex 16.2363 2.34533 0 + vertex 22.827 2.54396 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6639 4.10009 0 + vertex 22.6364 7.18064 0 + vertex 22.3621 7.54907 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.6535 1.20459 0 + vertex 21.1085 -1.15452 0 + vertex 21.0399 -1.71534 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6639 4.10009 0 + vertex 22.3621 7.54907 0 + vertex 22.0631 7.89267 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6639 4.10009 0 + vertex 22.0631 7.89267 0 + vertex 21.7259 8.22365 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5572 1.2697 0 + vertex 21.1355 -0.658014 0 + vertex 21.1085 -1.15452 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.498 4.716 0 + vertex 21.7259 8.22365 0 + vertex 21.3371 8.55423 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.6535 1.20459 0 + vertex 21.0399 -1.71534 0 + vertex 20.9878 -1.96317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.6535 1.20459 0 + vertex 20.9878 -1.96317 0 + vertex 20.9199 -2.19366 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.5653 -11.6083 0 + vertex 25.9886 -19.284 0 + vertex 19.6598 -11.2975 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.1479 -12.7477 0 + vertex 25.4477 -19.4082 0 + vertex 19.5653 -11.6083 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9086 -19.5812 0 + vertex 18.3699 -14.7241 0 + vertex 24.3497 -19.8089 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.3699 -14.7241 0 + vertex 24.9086 -19.5812 0 + vertex 19.1479 -12.7477 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.9886 -19.284 0 + vertex 19.5653 -11.6083 0 + vertex 25.4477 -19.4082 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7352 1.18648 0 + vertex 20.7245 -2.61588 0 + vertex 19.6583 -10.9333 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6583 -10.9333 0 + vertex 20.7245 -2.61588 0 + vertex 20.591 -2.8142 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6583 -10.9333 0 + vertex 20.591 -2.8142 0 + vertex 20.4297 -3.0084 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.3497 -19.8089 0 + vertex 18.3699 -14.7241 0 + vertex 23.7493 -20.0973 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6172 -10.8571 0 + vertex 20.4297 -3.0084 0 + vertex 20.2374 -3.20177 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6172 -10.8571 0 + vertex 20.2374 -3.20177 0 + vertex 20.0112 -3.39762 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7493 -20.0973 0 + vertex 18.3699 -14.7241 0 + vertex 23.0854 -20.4525 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.1638 -17.7131 0 + vertex 23.0854 -20.4525 0 + vertex 18.3699 -14.7241 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0854 -20.4525 0 + vertex 17.1638 -17.7131 0 + vertex 22.3543 -20.8886 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.3543 -20.8886 0 + vertex 17.1638 -17.7131 0 + vertex 21.6485 -21.3703 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6485 -21.3703 0 + vertex 17.1638 -17.7131 0 + vertex 20.9665 -21.899 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9665 -21.899 0 + vertex 17.1638 -17.7131 0 + vertex 20.3071 -22.4759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3071 -22.4759 0 + vertex 17.1638 -17.7131 0 + vertex 19.6689 -23.1024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6689 -23.1024 0 + vertex 17.1638 -17.7131 0 + vertex 19.0503 -23.7798 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.5952 -23.8342 0 + vertex 19.0503 -23.7798 0 + vertex 17.1638 -17.7131 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0503 -23.7798 0 + vertex 14.5952 -23.8342 0 + vertex 18.4501 -24.5093 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4501 -24.5093 0 + vertex 14.5952 -23.8342 0 + vertex 17.8667 -25.2923 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.8667 -25.2923 0 + vertex 14.5952 -23.8342 0 + vertex 17.4656 -25.8764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.4656 -25.8764 0 + vertex 14.5952 -23.8342 0 + vertex 17.0901 -26.4624 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.0901 -26.4624 0 + vertex 14.5952 -23.8342 0 + vertex 16.7406 -27.0496 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.7406 -27.0496 0 + vertex 14.5952 -23.8342 0 + vertex 16.4172 -27.6373 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8097 -28.1484 0 + vertex 16.4172 -27.6373 0 + vertex 14.5952 -23.8342 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4172 -27.6373 0 + vertex 12.8097 -28.1484 0 + vertex 16.1203 -28.2246 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.1203 -28.2246 0 + vertex 12.8097 -28.1484 0 + vertex 15.8502 -28.8109 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8502 -28.8109 0 + vertex 12.8097 -28.1484 0 + vertex 15.6071 -29.3953 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6071 -29.3953 0 + vertex 12.8097 -28.1484 0 + vertex 15.3912 -29.9771 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0447 -30.0547 0 + vertex 15.3912 -29.9771 0 + vertex 12.8097 -28.1484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3912 -29.9771 0 + vertex 12.0447 -30.0547 0 + vertex 15.2028 -30.5555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9098 -31.6993 0 + vertex 11.5005 -31.4602 0 + vertex 14.8056 -32.2631 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.5005 -31.4602 0 + vertex 14.9098 -31.6993 0 + vertex 12.0447 -30.0547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0423 -31.1299 0 + vertex 12.0447 -30.0547 0 + vertex 14.9098 -31.6993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2028 -30.5555 0 + vertex 12.0447 -30.0547 0 + vertex 15.0423 -31.1299 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0186 22.3563 0 + vertex -30.0859 22.0525 0 + vertex -28.3394 21.9725 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.4321 22.5993 0 + vertex -30.0859 22.0525 0 + vertex -29.0186 22.3563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.7937 22.8325 0 + vertex -30.0859 22.0525 0 + vertex -29.4321 22.5993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1071 23.0591 0 + vertex -30.0859 22.0525 0 + vertex -29.7937 22.8325 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5728 22.0884 0 + vertex -30.1071 23.0591 0 + vertex -30.3761 23.2826 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1071 23.0591 0 + vertex -30.5728 22.0884 0 + vertex -30.0859 22.0525 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.074 22.1513 0 + vertex -30.3761 23.2826 0 + vertex -30.6044 23.5064 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.5861 22.2399 0 + vertex -30.6044 23.5064 0 + vertex -30.7957 23.7338 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1061 22.3529 0 + vertex -30.7957 23.7338 0 + vertex -30.9539 23.9682 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3761 23.2826 0 + vertex -31.074 22.1513 0 + vertex -30.5728 22.0884 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1061 22.3529 0 + vertex -30.9539 23.9682 0 + vertex -31.0826 24.213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.6306 22.489 0 + vertex -31.0826 24.213 0 + vertex -31.2103 24.5339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.1564 22.6469 0 + vertex -31.2103 24.5339 0 + vertex -31.2656 24.779 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.6044 23.5064 0 + vertex -31.5861 22.2399 0 + vertex -31.074 22.1513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.199 23.023 0 + vertex -31.2656 24.779 0 + vertex -31.2668 24.8727 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -34.7094 23.2385 0 + vertex -31.2507 24.9472 0 + vertex -35.2082 23.4707 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.06691 -19.2358 0 + vertex -17.4002 -11.6639 0 + vertex -17.3941 -11.77 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9775 12.4282 0 + vertex -17.4268 -11.5861 0 + vertex -17.4002 -11.6639 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9775 12.4282 0 + vertex -17.4764 -11.5321 0 + vertex -17.4268 -11.5861 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5514 -11.4978 0 + vertex -17.3003 12.3696 0 + vertex -17.5181 12.3491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9775 12.4282 0 + vertex -17.5514 -11.4978 0 + vertex -17.4764 -11.5321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5181 12.3491 0 + vertex -17.7876 -11.4712 0 + vertex -17.5514 -11.4978 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5728 12.2484 0 + vertex -17.5181 12.3491 0 + vertex -17.9556 12.3221 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5181 12.3491 0 + vertex -18.5728 12.2484 0 + vertex -17.7876 -11.4712 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.2876 12.1394 0 + vertex -17.7876 -11.4712 0 + vertex -18.5728 12.2484 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.0181 12.0063 0 + vertex -17.7876 -11.4712 0 + vertex -19.2876 12.1394 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.4772 11.9313 0 + vertex -17.7876 -11.4712 0 + vertex -20.0181 12.0063 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -21.0446 11.8651 0 + vertex -17.7876 -11.4712 0 + vertex -20.4772 11.9313 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.4311 11.7593 0 + vertex -17.7876 -11.4712 0 + vertex -21.0446 11.8651 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 0 + vertex -22.4311 11.7593 0 + vertex -24.031 11.6901 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.175 -11.3523 0 + vertex -24.031 11.6901 0 + vertex -25.698 11.6586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4311 11.7593 0 + vertex -27.175 -11.3523 0 + vertex -17.7876 -11.4712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2855 11.6658 0 + vertex -27.175 -11.3523 0 + vertex -25.698 11.6586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.647 11.7129 0 + vertex -27.175 -11.3523 0 + vertex -27.2855 11.6658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 0 + vertex -28.647 11.7129 0 + vertex -29.1973 11.7518 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 0 + vertex -29.1973 11.7518 0 + vertex -29.6362 11.801 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.0944 -11.3029 0 + vertex -29.6362 11.801 0 + vertex -29.9453 11.8607 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.7011 -11.3017 0 + vertex -29.9453 11.8607 0 + vertex -30.0456 11.8946 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6555 -11.3595 0 + vertex -30.0456 11.8946 0 + vertex -30.1065 11.9311 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.527 -11.5152 0 + vertex -30.1065 11.9311 0 + vertex -30.2115 12.0683 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.9755 -11.7636 0 + vertex -30.2115 12.0683 0 + vertex -30.2975 12.2549 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2746 22.7082 0 + vertex -30.2975 12.2549 0 + vertex -30.3556 12.4664 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3001 13.0393 0 + vertex -33.0533 20.3093 0 + vertex -30.3387 12.9655 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.7926 20.6272 0 + vertex -30.3387 12.9655 0 + vertex -33.0533 20.3093 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3387 12.9655 0 + vertex -33.7926 20.6272 0 + vertex -30.3621 12.8813 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.647 11.7129 0 + vertex -32.0944 -11.3029 0 + vertex -27.175 -11.3523 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.4881 20.9542 0 + vertex -30.3621 12.8813 0 + vertex -33.7926 20.6272 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.1386 21.2899 0 + vertex -30.3621 12.8813 0 + vertex -34.4881 20.9542 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9453 11.8607 0 + vertex -33.7011 -11.3017 0 + vertex -32.0944 -11.3029 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3621 12.8813 0 + vertex -35.1386 21.2899 0 + vertex -30.377 12.6783 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.7435 21.6336 0 + vertex -30.377 12.6783 0 + vertex -35.1386 21.2899 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0456 11.8946 0 + vertex -34.8583 -11.3197 0 + vertex -33.7011 -11.3017 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.3017 21.985 0 + vertex -30.377 12.6783 0 + vertex -35.7435 21.6336 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.0456 11.8946 0 + vertex -35.6555 -11.3595 0 + vertex -34.8583 -11.3197 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 12.6783 0 + vertex -36.3017 21.985 0 + vertex -30.3556 12.4664 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1065 11.9311 0 + vertex -36.1819 -11.4238 0 + vertex -35.6555 -11.3595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.8124 22.3433 0 + vertex -30.3556 12.4664 0 + vertex -36.3017 21.985 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1065 11.9311 0 + vertex -36.527 -11.5152 0 + vertex -36.1819 -11.4238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2115 12.0683 0 + vertex -36.7802 -11.6364 0 + vertex -36.527 -11.5152 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2746 22.7082 0 + vertex -30.3556 12.4664 0 + vertex -36.8124 22.3433 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2115 12.0683 0 + vertex -36.9755 -11.7636 0 + vertex -36.7802 -11.6364 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2975 12.2549 0 + vertex -37.2746 22.7082 0 + vertex -37.1409 -11.9004 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2975 12.2549 0 + vertex -37.1409 -11.9004 0 + vertex -36.9755 -11.7636 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6874 23.0789 0 + vertex -37.1409 -11.9004 0 + vertex -37.2746 22.7082 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.1409 -11.9004 0 + vertex -37.6874 23.0789 0 + vertex -37.2767 -12.0443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.0499 23.455 0 + vertex -37.2767 -12.0443 0 + vertex -37.6874 23.0789 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3611 23.836 0 + vertex -37.2767 -12.0443 0 + vertex -38.0499 23.455 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2767 -12.0443 0 + vertex -38.3611 23.836 0 + vertex -37.3834 -12.1929 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6203 24.2212 0 + vertex -37.3834 -12.1929 0 + vertex -38.3611 23.836 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.15561 -22.5851 0 + vertex -8.45645 -23.4267 0 + vertex -8.48242 -23.1923 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.39946 -22.5595 0 + vertex -8.45645 -23.4267 0 + vertex -9.15561 -22.5851 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.94827 -22.6394 0 + vertex -8.48242 -23.1923 0 + vertex -8.54451 -22.9989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.45645 -23.4267 0 + vertex -9.39946 -22.5595 0 + vertex -8.46654 -23.7044 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.77736 -22.7249 0 + vertex -8.54451 -22.9989 0 + vertex -8.64279 -22.8439 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.67988 -22.56 0 + vertex -8.46654 -23.7044 0 + vertex -9.39946 -22.5595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.54451 -22.9989 0 + vertex -8.77736 -22.7249 0 + vertex -8.94827 -22.6394 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.48242 -23.1923 0 + vertex -8.94827 -22.6394 0 + vertex -9.15561 -22.5851 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.46654 -23.7044 0 + vertex -9.67988 -22.56 0 + vertex -8.51259 -24.0278 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.0796 -22.6123 0 + vertex -8.51259 -24.0278 0 + vertex -9.67988 -22.56 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.51259 -24.0278 0 + vertex -10.0796 -22.6123 0 + vertex -8.59455 -24.3995 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.5344 -22.7271 0 + vertex -8.59455 -24.3995 0 + vertex -10.0796 -22.6123 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.59455 -24.3995 0 + vertex -10.5344 -22.7271 0 + vertex -8.71232 -24.8218 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.9881 -22.8877 0 + vertex -8.71232 -24.8218 0 + vertex -10.5344 -22.7271 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.3849 -23.0769 0 + vertex -8.71232 -24.8218 0 + vertex -10.9881 -22.8877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.71232 -24.8218 0 + vertex -11.3849 -23.0769 0 + vertex -9.05502 -25.8283 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.9359 -23.4045 0 + vertex -9.05502 -25.8283 0 + vertex -11.3849 -23.0769 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.4007 -23.7203 0 + vertex -9.05502 -25.8283 0 + vertex -11.9359 -23.4045 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.7941 -24.0414 0 + vertex -9.05502 -25.8283 0 + vertex -12.4007 -23.7203 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.2098 -26.3227 0 + vertex -9.5401 -27.0667 0 + vertex -13.9508 -25.7195 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.3777 -29.1914 0 + vertex -9.5401 -27.0667 0 + vertex -14.2098 -26.3227 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.05502 -25.8283 0 + vertex -12.7941 -24.0414 0 + vertex -9.5401 -27.0667 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5815 -32.143 0 + vertex -15.3777 -29.1914 0 + vertex -11.9595 -33.0513 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.131 -24.3848 0 + vertex -9.5401 -27.0667 0 + vertex -12.7941 -24.0414 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.8163 -32.7116 0 + vertex -11.9595 -33.0513 0 + vertex -15.3777 -29.1914 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.4262 -24.7676 0 + vertex -9.5401 -27.0667 0 + vertex -13.131 -24.3848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.9595 -33.0513 0 + vertex -16.8163 -32.7116 0 + vertex -12.3268 -33.8339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.3268 -33.8339 0 + vertex -16.8163 -32.7116 0 + vertex -12.6843 -34.4922 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5401 -27.0667 0 + vertex -13.4262 -24.7676 0 + vertex -13.6945 -25.2068 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6843 -34.4922 0 + vertex -16.8163 -32.7116 0 + vertex -13.0331 -35.0276 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5401 -27.0667 0 + vertex -13.6945 -25.2068 0 + vertex -13.9508 -25.7195 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5401 -27.0667 0 + vertex -15.3777 -29.1914 0 + vertex -11.5815 -32.143 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.0331 -35.0276 0 + vertex -16.8163 -32.7116 0 + vertex -13.2045 -35.2497 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -14.4713 -35.9816 0 + vertex -13.2045 -35.2497 0 + vertex -16.8163 -32.7116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.2045 -35.2497 0 + vertex -14.4713 -35.9816 0 + vertex -13.3741 -35.4417 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.3741 -35.4417 0 + vertex -14.4713 -35.9816 0 + vertex -13.5421 -35.6036 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -14.3614 -35.9691 0 + vertex -13.5421 -35.6036 0 + vertex -14.4713 -35.9816 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.5421 -35.6036 0 + vertex -14.3614 -35.9691 0 + vertex -13.7085 -35.7356 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.8736 -35.838 0 + vertex -14.3614 -35.9691 0 + vertex -14.0373 -35.911 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.0373 -35.911 0 + vertex -14.3614 -35.9691 0 + vertex -14.1999 -35.9546 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.7085 -35.7356 0 + vertex -14.3614 -35.9691 0 + vertex -13.8736 -35.838 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.1674 -33.591 0 + vertex -14.4713 -35.9816 0 + vertex -16.8163 -32.7116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.4713 -35.9816 0 + vertex -17.1674 -33.591 0 + vertex -14.5979 -36.0176 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.5979 -36.0176 0 + vertex -17.1674 -33.591 0 + vertex -14.8831 -36.1495 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.4329 -34.3072 0 + vertex -14.8831 -36.1495 0 + vertex -17.1674 -33.591 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -16.5729 -36.2152 0 + vertex -14.8831 -36.1495 0 + vertex -17.4329 -34.3072 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -16.3106 -36.4662 0 + vertex -15.4564 -36.5832 0 + vertex -16.4249 -36.334 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.4564 -36.5832 0 + vertex -16.237 -36.6071 0 + vertex -15.7439 -36.902 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.2485 -36.9225 0 + vertex -15.8411 -37.0399 0 + vertex -16.2109 -36.752 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.8411 -37.0399 0 + vertex -16.2485 -36.9225 0 + vertex -15.9096 -37.1689 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.3508 -37.1428 0 + vertex -15.9096 -37.1689 0 + vertex -16.2485 -36.9225 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.7439 -36.902 0 + vertex -16.2109 -36.752 0 + vertex -15.8411 -37.0399 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -16.2109 -36.752 0 + vertex -15.7439 -36.902 0 + vertex -16.237 -36.6071 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -16.237 -36.6071 0 + vertex -15.4564 -36.5832 0 + vertex -16.3106 -36.4662 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -16.4249 -36.334 0 + vertex -15.1813 -36.3448 0 + vertex -16.5729 -36.2152 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.1813 -36.3448 0 + vertex -16.4249 -36.334 0 + vertex -15.4564 -36.5832 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.8831 -36.1495 0 + vertex -16.5729 -36.2152 0 + vertex -15.1813 -36.3448 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.5729 -36.2152 0 + vertex -17.4329 -34.3072 0 + vertex -16.7476 -36.1146 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.7476 -36.1146 0 + vertex -17.4329 -34.3072 0 + vertex -16.942 -36.0369 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.6153 -34.8741 0 + vertex -16.942 -36.0369 0 + vertex -17.4329 -34.3072 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.942 -36.0369 0 + vertex -17.6153 -34.8741 0 + vertex -17.1493 -35.9869 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.7168 -35.3062 0 + vertex -17.1493 -35.9869 0 + vertex -17.6153 -34.8741 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.738 -35.4761 0 + vertex -17.1493 -35.9869 0 + vertex -17.7168 -35.3062 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.1493 -35.9869 0 + vertex -17.738 -35.4761 0 + vertex -17.3625 -35.9691 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.7399 -35.6175 0 + vertex -17.3625 -35.9691 0 + vertex -17.738 -35.4761 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3625 -35.9691 0 + vertex -17.7399 -35.6175 0 + vertex -17.4702 -35.9608 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -17.7228 -35.7323 0 + vertex -17.4702 -35.9608 0 + vertex -17.7399 -35.6175 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4702 -35.9608 0 + vertex -17.7228 -35.7323 0 + vertex -17.5603 -35.9348 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -17.6869 -35.8223 0 + vertex -17.5603 -35.9348 0 + vertex -17.7228 -35.7323 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5603 -35.9348 0 + vertex -17.6869 -35.8223 0 + vertex -17.6327 -35.8892 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.56309 -35.9367 0 + vertex -7.30266 -36.7536 0 + vertex -7.29619 -36.8569 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97004 -33.2395 0 + vertex -7.32635 -36.6539 0 + vertex -7.30266 -36.7536 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.13453 -33.8652 0 + vertex -3.97004 -33.2395 0 + vertex -7.70823 -32.8163 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97004 -33.2395 0 + vertex -7.36727 -36.5579 0 + vertex -7.32635 -36.6539 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97004 -33.2395 0 + vertex -7.50076 -36.3769 0 + vertex -7.36727 -36.5579 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97004 -33.2395 0 + vertex -8.13453 -33.8652 0 + vertex -7.50076 -36.3769 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.50076 -36.3769 0 + vertex -8.13453 -33.8652 0 + vertex -7.70312 -36.2106 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.32474 -34.384 0 + vertex -7.70312 -36.2106 0 + vertex -8.13453 -33.8652 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.70312 -36.2106 0 + vertex -8.32474 -34.384 0 + vertex -7.97432 -36.0592 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.55649 -35.3052 0 + vertex -7.97432 -36.0592 0 + vertex -8.32474 -34.384 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.97432 -36.0592 0 + vertex -8.55649 -35.3052 0 + vertex -8.30497 -35.8814 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30497 -35.8814 0 + vertex -8.55649 -35.3052 0 + vertex -8.41808 -35.7975 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.57785 -35.4236 0 + vertex -8.41808 -35.7975 0 + vertex -8.55649 -35.3052 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.41808 -35.7975 0 + vertex -8.57785 -35.4236 0 + vertex -8.49955 -35.7129 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -8.57707 -35.529 0 + vertex -8.49955 -35.7129 0 + vertex -8.57785 -35.4236 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.49955 -35.7129 0 + vertex -8.57707 -35.529 0 + vertex -8.55176 -35.6244 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.88346 12.344 0 + vertex 1.92323 12.5289 0 + vertex 1.90284 12.6291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.92323 12.5289 0 + vertex 1.88346 12.344 0 + vertex 1.91748 12.4352 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.81906 12.2515 0 + vertex 1.90284 12.6291 0 + vertex 1.85843 12.7398 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.90284 12.6291 0 + vertex 1.81906 12.2515 0 + vertex 1.88346 12.344 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.85843 12.7398 0 + vertex 1.72214 12.1537 0 + vertex 1.81906 12.2515 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.7147 12.9716 0 + vertex 1.72214 12.1537 0 + vertex 1.85843 12.7398 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.42228 11.926 0 + vertex 1.7147 12.9716 0 + vertex 1.51175 13.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.7147 12.9716 0 + vertex 1.42228 11.926 0 + vertex 1.72214 12.1537 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.25015 13.3869 0 + vertex 1.42228 11.926 0 + vertex 1.51175 13.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.25015 13.3869 0 + vertex 0.986004 11.656 0 + vertex 1.42228 11.926 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.930489 13.5702 0 + vertex 0.986004 11.656 0 + vertex 1.25015 13.3869 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.55335 13.737 0 + vertex 0.986004 11.656 0 + vertex 0.930489 13.5702 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.55335 13.737 0 + vertex 0.546849 11.4454 0 + vertex 0.986004 11.656 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.119316 13.8873 0 + vertex 0.546849 11.4454 0 + vertex 0.55335 13.737 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.119316 13.8873 0 + vertex 0.0942225 11.293 0 + vertex 0.546849 11.4454 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.382462 11.1972 0 + vertex 0.119316 13.8873 0 + vertex -0.371032 14.021 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.119316 13.8873 0 + vertex -0.382462 11.1972 0 + vertex 0.0942225 11.293 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.371032 14.021 0 + vertex -0.893798 11.1566 0 + vertex -0.382462 11.1972 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.917111 14.138 0 + vertex -0.893798 11.1566 0 + vertex -0.371032 14.021 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.917111 14.138 0 + vertex -1.45038 11.1697 0 + vertex -0.893798 11.1566 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.51834 14.2381 0 + vertex -1.45038 11.1697 0 + vertex -0.917111 14.138 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.51834 14.2381 0 + vertex -2.06279 11.235 0 + vertex -1.45038 11.1697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.17413 14.3212 0 + vertex -2.06279 11.235 0 + vertex -1.51834 14.2381 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.17413 14.3212 0 + vertex -2.74162 11.3511 0 + vertex -2.06279 11.235 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.8839 14.3873 0 + vertex -2.74162 11.3511 0 + vertex -2.17413 14.3212 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.8839 14.3873 0 + vertex -3.43924 11.4799 0 + vertex -2.74162 11.3511 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.64708 14.4362 0 + vertex -3.43924 11.4799 0 + vertex -2.8839 14.3873 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.64708 14.4362 0 + vertex -4.06319 11.5774 0 + vertex -3.43924 11.4799 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.46307 14.4678 0 + vertex -4.06319 11.5774 0 + vertex -3.64708 14.4362 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.46307 14.4678 0 + vertex -4.60751 11.6434 0 + vertex -4.06319 11.5774 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.46307 14.4678 0 + vertex -5.06624 11.6776 0 + vertex -4.60751 11.6434 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.33129 14.482 0 + vertex -5.06624 11.6776 0 + vertex -4.46307 14.4678 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.33129 14.482 0 + vertex -5.4334 11.6797 0 + vertex -5.06624 11.6776 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.33129 14.482 0 + vertex -5.70304 11.6495 0 + vertex -5.4334 11.6797 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.25117 14.4787 0 + vertex -5.70304 11.6495 0 + vertex -5.33129 14.482 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.70304 11.6495 0 + vertex -6.25117 14.4787 0 + vertex -5.79943 11.6221 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.79943 11.6221 0 + vertex -6.25117 14.4787 0 + vertex -5.8692 11.5867 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.22211 14.4578 0 + vertex -5.8692 11.5867 0 + vertex -6.25117 14.4787 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8692 11.5867 0 + vertex -7.22211 14.4578 0 + vertex -5.91161 11.5429 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.25643 14.3812 0 + vertex -5.91161 11.5429 0 + vertex -7.22211 14.4578 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -17.4002 -11.6639 0 + vertex -6.14058 -19.1411 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.91161 11.5429 0 + vertex -9.25643 14.3812 0 + vertex -5.92592 11.491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -7.11547 -19.1706 0 + vertex -6.14058 -19.1411 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -7.63584 -19.198 0 + vertex -7.11547 -19.1706 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -8.06691 -19.2358 0 + vertex -7.63584 -19.198 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.06691 -19.2358 0 + vertex -17.3941 -11.77 0 + vertex -8.43701 -19.2929 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -12.0792 -19.1571 0 + vertex -8.43701 -19.2929 0 + vertex -17.3941 -11.77 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.98725 14.3241 0 + vertex -5.92592 11.491 0 + vertex -9.25643 14.3812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.43701 -19.2929 0 + vertex -12.0792 -19.1571 0 + vertex -8.77447 -19.378 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -11.9023 -19.2259 0 + vertex -8.77447 -19.378 0 + vertex -12.0792 -19.1571 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.6249 14.238 0 + vertex -5.92592 11.491 0 + vertex -9.98725 14.3241 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.77447 -19.378 0 + vertex -11.9023 -19.2259 0 + vertex -9.10766 -19.4997 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.2428 14.1101 0 + vertex -5.92592 11.491 0 + vertex -10.6249 14.238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.92592 11.491 0 + vertex -11.2428 14.1101 0 + vertex -11.9142 13.9281 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -11.7723 -19.3375 0 + vertex -9.46489 -19.667 0 + vertex -11.9023 -19.2259 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.6707 -19.9072 0 + vertex -10.3649 -20.1728 0 + vertex -11.6557 -19.6804 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.3649 -20.1728 0 + vertex -11.6899 -19.4898 0 + vertex -11.6557 -19.6804 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.87453 -19.8884 0 + vertex -11.6899 -19.4898 0 + vertex -10.3649 -20.1728 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -11.6899 -19.4898 0 + vertex -9.87453 -19.8884 0 + vertex -11.7723 -19.3375 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.92592 11.491 0 + vertex -11.9142 13.9281 0 + vertex -12.7125 13.6795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.46489 -19.667 0 + vertex -11.7723 -19.3375 0 + vertex -9.87453 -19.8884 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.10766 -19.4997 0 + vertex -11.9023 -19.2259 0 + vertex -9.46489 -19.667 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.4339 -12.0833 0 + vertex -12.0792 -19.1571 0 + vertex -17.3941 -11.77 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.7109 13.3517 0 + vertex -5.92592 11.491 0 + vertex -12.7125 13.6795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0792 -19.1571 0 + vertex -17.4339 -12.0833 0 + vertex -12.302 -19.1333 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.949 12.9624 0 + vertex -5.92592 11.491 0 + vertex -13.7109 13.3517 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.5116 -12.3759 0 + vertex -12.302 -19.1333 0 + vertex -17.4339 -12.0833 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.0795 12.6436 0 + vertex -5.92592 11.491 0 + vertex -14.949 12.9624 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.6664 -12.8441 0 + vertex -12.302 -19.1333 0 + vertex -17.5116 -12.3759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -5.92592 11.491 0 + vertex -16.0795 12.6436 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.302 -19.1333 0 + vertex -17.6664 -12.8441 0 + vertex -12.6849 -19.1929 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -16.0795 12.6436 0 + vertex -16.9775 12.4282 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5514 -11.4978 0 + vertex -16.9775 12.4282 0 + vertex -17.3003 12.3696 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.1466 -14.1495 0 + vertex -12.6849 -19.1929 0 + vertex -17.6664 -12.8441 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6849 -19.1929 0 + vertex -18.1466 -14.1495 0 + vertex -13.3483 -19.3556 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.3483 -19.3556 0 + vertex -18.1466 -14.1495 0 + vertex -14.1989 -19.5967 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.7537 -15.6836 0 + vertex -14.1989 -19.5967 0 + vertex -18.1466 -14.1495 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1989 -19.5967 0 + vertex -18.7537 -15.6836 0 + vertex -15.1436 -19.8912 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.3667 -17.1305 0 + vertex -15.1436 -19.8912 0 + vertex -18.7537 -15.6836 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.1436 -19.8912 0 + vertex -19.3667 -17.1305 0 + vertex -16.9393 -20.461 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.4996 -17.3696 0 + vertex -16.9393 -20.461 0 + vertex -19.3667 -17.1305 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9393 -20.461 0 + vertex -19.4996 -17.3696 0 + vertex -17.9865 -20.7653 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.6713 -17.584 0 + vertex -17.9865 -20.7653 0 + vertex -19.4996 -17.3696 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.8743 -17.7693 0 + vertex -17.9865 -20.7653 0 + vertex -19.6713 -17.584 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.9865 -20.7653 0 + vertex -19.8743 -17.7693 0 + vertex -18.1109 -20.8023 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1109 -20.8023 0 + vertex -19.8743 -17.7693 0 + vertex -18.2248 -20.8552 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.1009 -17.9213 0 + vertex -18.2248 -20.8552 0 + vertex -19.8743 -17.7693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.2248 -20.8552 0 + vertex -20.1009 -17.9213 0 + vertex -18.3284 -20.924 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.3435 -18.0357 0 + vertex -18.3284 -20.924 0 + vertex -20.1009 -17.9213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.3284 -20.924 0 + vertex -20.3435 -18.0357 0 + vertex -18.4218 -21.0091 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.7355 -20.1677 0 + vertex -10.3649 -20.1728 0 + vertex -11.6707 -19.9072 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.3649 -20.1728 0 + vertex -11.7355 -20.1677 0 + vertex -11.5073 -20.829 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.851 -20.4599 0 + vertex -11.5073 -20.829 0 + vertex -11.7355 -20.1677 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0288 -20.9134 0 + vertex -11.5073 -20.829 0 + vertex -11.851 -20.4599 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5073 -20.829 0 + vertex -12.0288 -20.9134 0 + vertex -11.8784 -21.0286 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0594 -21.0513 0 + vertex -11.8784 -21.0286 0 + vertex -12.0288 -20.9134 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.8784 -21.0286 0 + vertex -12.0594 -21.0513 0 + vertex -12.0427 -21.102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.0427 -21.102 0 + vertex -12.0594 -21.0513 0 + vertex -12.0573 -21.0889 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3267 -22.6747 0 + vertex -17.2249 -22.8126 0 + vertex -17.2578 -22.7276 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4374 -22.6462 0 + vertex -17.2249 -22.8126 0 + vertex -17.3267 -22.6747 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2249 -22.8126 0 + vertex -17.4374 -22.6462 0 + vertex -17.2226 -22.9371 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.8061 -22.6324 0 + vertex -17.2226 -22.9371 0 + vertex -17.4374 -22.6462 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2226 -22.9371 0 + vertex -17.8061 -22.6324 0 + vertex -17.2873 -23.335 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.1091 -22.6172 0 + vertex -17.2873 -23.335 0 + vertex -17.8061 -22.6324 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2873 -23.335 0 + vertex -18.1091 -22.6172 0 + vertex -17.4084 -23.7485 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.3541 -22.5704 0 + vertex -17.4084 -23.7485 0 + vertex -18.1091 -22.6172 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4084 -23.7485 0 + vertex -18.3541 -22.5704 0 + vertex -17.6656 -24.469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5429 -22.4899 0 + vertex -17.6656 -24.469 0 + vertex -18.3541 -22.5704 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6769 -22.3738 0 + vertex -17.6656 -24.469 0 + vertex -18.5429 -22.4899 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.6656 -24.469 0 + vertex -18.6769 -22.3738 0 + vertex -18.5311 -26.6889 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.116 -21.2395 0 + vertex -18.6769 -22.3738 0 + vertex -18.7577 -22.2202 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.116 -21.2395 0 + vertex -18.7577 -22.2202 0 + vertex -18.7869 -22.0269 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.4218 -21.0091 0 + vertex -20.3435 -18.0357 0 + vertex -18.5053 -21.1105 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.5945 -18.108 0 + vertex -18.5053 -21.1105 0 + vertex -20.3435 -18.0357 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5053 -21.1105 0 + vertex -20.5945 -18.108 0 + vertex -18.5788 -21.2283 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.8463 -18.1339 0 + vertex -18.5788 -21.2283 0 + vertex -20.5945 -18.108 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.6874 -20.0641 0 + vertex -18.5788 -21.2283 0 + vertex -22.5978 -19.6581 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.8608 -20.5868 0 + vertex -18.6967 -21.5139 0 + vertex -22.6874 -20.0641 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.116 -21.2395 0 + vertex -18.7869 -22.0269 0 + vertex -22.8608 -20.5868 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6967 -21.5139 0 + vertex -22.8608 -20.5868 0 + vertex -18.766 -21.7922 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5788 -21.2283 0 + vertex -20.8463 -18.1339 0 + vertex -22.5978 -19.6581 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.585 -19.4947 0 + vertex -20.8463 -18.1339 0 + vertex -21.0912 -18.1093 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.594 -19.3555 0 + vertex -21.0912 -18.1093 0 + vertex -21.2545 -18.0693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6769 -22.3738 0 + vertex -23.116 -21.2395 0 + vertex -24.3958 -24.3815 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.625 -19.2389 0 + vertex -21.2545 -18.0693 0 + vertex -21.378 -18.0171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6782 -19.1432 0 + vertex -21.378 -18.0171 0 + vertex -21.4669 -17.9347 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.7539 -19.0668 0 + vertex -21.4669 -17.9347 0 + vertex -21.5263 -17.8042 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.9739 -18.9651 0 + vertex -21.5263 -17.8042 0 + vertex -21.5614 -17.6077 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1186 -18.9365 0 + vertex -21.5614 -17.6077 0 + vertex -21.5774 -17.3273 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.766 -21.7922 0 + vertex -22.8608 -20.5868 0 + vertex -18.7869 -22.0269 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5729 -16.4428 0 + vertex -22.9103 -14.3386 0 + vertex -23.3301 -14.2877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.9412 -14.6683 0 + vertex -21.5879 -15.2616 0 + vertex -21.6284 -15.0493 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.7989 -14.7733 0 + vertex -21.6284 -15.0493 0 + vertex -21.6966 -14.8935 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.6284 -15.0493 0 + vertex -21.7989 -14.7733 0 + vertex -21.9412 -14.6683 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5788 -21.2283 0 + vertex -22.6874 -20.0641 0 + vertex -18.6967 -21.5139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5879 -15.2616 0 + vertex -21.9412 -14.6683 0 + vertex -22.1296 -14.5577 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5693 -15.5508 0 + vertex -22.1296 -14.5577 0 + vertex -22.3213 -14.4724 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.8463 -18.1339 0 + vertex -22.585 -19.4947 0 + vertex -22.5978 -19.6581 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5693 -15.5508 0 + vertex -22.3213 -14.4724 0 + vertex -22.5778 -14.3998 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6769 -22.3738 0 + vertex -24.3958 -24.3815 0 + vertex -18.5311 -26.6889 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5693 -15.5508 0 + vertex -22.5778 -14.3998 0 + vertex -22.9103 -14.3386 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.9793 -25.8003 0 + vertex -18.5311 -26.6889 0 + vertex -24.3958 -24.3815 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5311 -26.6889 0 + vertex -24.9793 -25.8003 0 + vertex -19.7699 -29.7113 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.0912 -18.1093 0 + vertex -22.594 -19.3555 0 + vertex -22.585 -19.4947 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2545 -18.0693 0 + vertex -22.625 -19.2389 0 + vertex -22.594 -19.3555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.378 -18.0171 0 + vertex -22.6782 -19.1432 0 + vertex -22.625 -19.2389 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.4669 -17.9347 0 + vertex -22.7539 -19.0668 0 + vertex -22.6782 -19.1432 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5263 -17.8042 0 + vertex -22.8524 -19.008 0 + vertex -22.7539 -19.0668 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.6632 -18.9241 0 + vertex -21.5729 -16.4428 0 + vertex -23.3301 -14.2877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5263 -17.8042 0 + vertex -22.9739 -18.9651 0 + vertex -22.8524 -19.008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5614 -17.6077 0 + vertex -23.1186 -18.9365 0 + vertex -22.9739 -18.9651 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.4791 -18.9156 0 + vertex -21.5729 -16.4428 0 + vertex -23.6632 -18.9241 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5774 -17.3273 0 + vertex -23.4791 -18.9156 0 + vertex -23.1186 -18.9365 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5729 -16.4428 0 + vertex -23.4791 -18.9156 0 + vertex -21.5774 -17.3273 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4767 -14.2125 0 + vertex -23.6632 -18.9241 0 + vertex -23.3301 -14.2877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.6632 -18.9241 0 + vertex -24.4767 -14.2125 0 + vertex -23.8226 -18.954 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8226 -18.954 0 + vertex -24.4767 -14.2125 0 + vertex -23.9653 -19.0124 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.1077 -14.1654 0 + vertex -23.9653 -19.0124 0 + vertex -24.4767 -14.2125 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.9653 -19.0124 0 + vertex -26.1077 -14.1654 0 + vertex -24.0993 -19.1062 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0993 -19.1062 0 + vertex -26.1077 -14.1654 0 + vertex -24.2328 -19.2424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2328 -19.2424 0 + vertex -26.1077 -14.1654 0 + vertex -24.3738 -19.4278 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2448 -14.1442 0 + vertex -24.3738 -19.4278 0 + vertex -26.1077 -14.1654 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3738 -19.4278 0 + vertex -28.2448 -14.1442 0 + vertex -24.7108 -19.9745 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.1223 -16.1487 0 + vertex -24.7108 -19.9745 0 + vertex -28.2448 -14.1442 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.4477 -16.8607 0 + vertex -24.7108 -19.9745 0 + vertex -31.1223 -16.1487 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.7108 -19.9745 0 + vertex -31.4477 -16.8607 0 + vertex -24.9407 -20.3516 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.9407 -20.3516 0 + vertex -31.4477 -16.8607 0 + vertex -25.1784 -20.695 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1784 -20.695 0 + vertex -31.4477 -16.8607 0 + vertex -25.4267 -21.0057 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.4267 -21.0057 0 + vertex -31.4477 -16.8607 0 + vertex -25.6884 -21.2849 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.6884 -21.2849 0 + vertex -31.4477 -16.8607 0 + vertex -25.9661 -21.5339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.9661 -21.5339 0 + vertex -31.4477 -16.8607 0 + vertex -26.2627 -21.7538 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.2627 -21.7538 0 + vertex -31.4477 -16.8607 0 + vertex -26.5809 -21.9457 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.5809 -21.9457 0 + vertex -31.8034 -17.6899 0 + vertex -26.9234 -22.1109 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.9234 -22.1109 0 + vertex -31.8034 -17.6899 0 + vertex -27.2929 -22.2506 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2929 -22.2506 0 + vertex -31.8034 -17.6899 0 + vertex -27.6923 -22.3658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.678 -15.2903 0 + vertex -28.2448 -14.1442 0 + vertex -28.9898 -14.1579 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -31.8034 -17.6899 0 + vertex -26.5809 -21.9457 0 + vertex -31.4477 -16.8607 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.5215 -14.964 0 + vertex -28.9898 -14.1579 0 + vertex -29.549 -14.1906 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.6923 -22.3658 0 + vertex -31.8034 -17.6899 0 + vertex -28.1242 -22.4577 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.4158 -14.7057 0 + vertex -29.549 -14.1906 0 + vertex -29.9449 -14.2443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 -14.5514 0 + vertex -29.9449 -14.2443 0 + vertex -30.1999 -14.321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.9898 -14.1579 0 + vertex -30.5215 -14.964 0 + vertex -30.678 -15.2903 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 -14.5514 0 + vertex -30.1999 -14.321 0 + vertex -30.2816 -14.3686 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 -14.5514 0 + vertex -30.2816 -14.3686 0 + vertex -30.3364 -14.4227 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.377 -14.5514 0 + vertex -30.3364 -14.4227 0 + vertex -30.3673 -14.4836 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9449 -14.2443 0 + vertex -30.377 -14.5514 0 + vertex -30.4158 -14.7057 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.549 -14.1906 0 + vertex -30.4158 -14.7057 0 + vertex -30.5215 -14.964 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2448 -14.1442 0 + vertex -30.678 -15.2903 0 + vertex -30.8691 -15.6487 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2448 -14.1442 0 + vertex -30.8691 -15.6487 0 + vertex -31.1223 -16.1487 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1242 -22.4577 0 + vertex -31.8034 -17.6899 0 + vertex -28.5914 -22.5277 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -32.1476 -18.5412 0 + vertex -28.5914 -22.5277 0 + vertex -31.8034 -17.6899 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5914 -22.5277 0 + vertex -32.1476 -18.5412 0 + vertex -29.0966 -22.5767 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0966 -22.5767 0 + vertex -32.1476 -18.5412 0 + vertex -29.6427 -22.606 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.6427 -22.606 0 + vertex -32.1476 -18.5412 0 + vertex -30.2322 -22.6168 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2322 -22.6168 0 + vertex -32.1476 -18.5412 0 + vertex -30.868 -22.6102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.868 -22.6102 0 + vertex -32.1476 -18.5412 0 + vertex -31.8095 -22.5865 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -33.2902 -21.4299 0 + vertex -31.8095 -22.5865 0 + vertex -32.1476 -18.5412 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.8095 -22.5865 0 + vertex -33.2902 -21.4299 0 + vertex -32.5132 -22.5543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.5132 -22.5543 0 + vertex -33.2902 -21.4299 0 + vertex -33.0067 -22.5002 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -33.4325 -21.7956 0 + vertex -33.0067 -22.5002 0 + vertex -33.2902 -21.4299 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.0067 -22.5002 0 + vertex -33.4325 -21.7956 0 + vertex -33.1833 -22.4608 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -33.503 -22.0719 0 + vertex -33.1833 -22.4608 0 + vertex -33.4325 -21.7956 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.1833 -22.4608 0 + vertex -33.503 -22.0719 0 + vertex -33.3177 -22.4108 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.3177 -22.4108 0 + vertex -33.503 -22.0719 0 + vertex -33.4135 -22.3486 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -33.5026 -22.1809 0 + vertex -33.4135 -22.3486 0 + vertex -33.503 -22.0719 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.4135 -22.3486 0 + vertex -33.5026 -22.1809 0 + vertex -33.4739 -22.2725 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.8031 -31.5911 0 + vertex -21.2682 -33.2523 0 + vertex -23.5218 -31.031 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.2375 -32.3527 0 + vertex -21.2682 -33.2523 0 + vertex -23.8031 -31.5911 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2682 -33.2523 0 + vertex -24.2375 -32.3527 0 + vertex -21.6072 -34.0169 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.6072 -34.0169 0 + vertex -24.2375 -32.3527 0 + vertex -21.9074 -34.6287 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.5218 -31.031 0 + vertex -21.2682 -33.2523 0 + vertex -23.4513 -30.847 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.7839 -33.2498 0 + vertex -21.9074 -34.6287 0 + vertex -24.2375 -32.3527 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7699 -29.7113 0 + vertex -23.4345 -30.738 0 + vertex -21.2682 -33.2523 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.9074 -34.6287 0 + vertex -24.7839 -33.2498 0 + vertex -22.1824 -35.1035 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1824 -35.1035 0 + vertex -24.7839 -33.2498 0 + vertex -22.4463 -35.4568 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.665 -35.9691 0 + vertex -22.4463 -35.4568 0 + vertex -24.7839 -33.2498 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.4513 -30.847 0 + vertex -21.2682 -33.2523 0 + vertex -23.4345 -30.738 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.4345 -30.738 0 + vertex -19.7699 -29.7113 0 + vertex -23.4571 -30.6716 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7699 -29.7113 0 + vertex -23.5012 -30.6026 0 + vertex -23.4571 -30.6716 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7699 -29.7113 0 + vertex -23.6433 -30.465 0 + vertex -23.5012 -30.6026 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.8399 -30.3412 0 + vertex -19.7699 -29.7113 0 + vertex -24.9793 -25.8003 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.7699 -29.7113 0 + vertex -23.8399 -30.3412 0 + vertex -23.6433 -30.465 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.4624 -26.9141 0 + vertex -23.8399 -30.3412 0 + vertex -24.9793 -25.8003 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8399 -30.3412 0 + vertex -25.4624 -26.9141 0 + vertex -24.0701 -30.2475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0701 -30.2475 0 + vertex -25.4624 -26.9141 0 + vertex -24.2803 -30.1833 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.8688 -27.7587 0 + vertex -24.2803 -30.1833 0 + vertex -25.4624 -26.9141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2803 -30.1833 0 + vertex -25.8688 -27.7587 0 + vertex -24.455 -30.1541 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.455 -30.1541 0 + vertex -25.8688 -27.7587 0 + vertex -24.5406 -30.1604 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.0506 -28.0911 0 + vertex -24.5406 -30.1604 0 + vertex -25.8688 -27.7587 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.5406 -30.1604 0 + vertex -26.0506 -28.0911 0 + vertex -24.6311 -30.1847 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.2221 -28.3696 0 + vertex -24.6311 -30.1847 0 + vertex -26.0506 -28.0911 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.6311 -30.1847 0 + vertex -26.2221 -28.3696 0 + vertex -24.8452 -30.2998 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.3861 -28.5987 0 + vertex -24.8452 -30.2998 0 + vertex -26.2221 -28.3696 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.5458 -28.7827 0 + vertex -24.8452 -30.2998 0 + vertex -26.3861 -28.5987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8452 -30.2998 0 + vertex -26.5458 -28.7827 0 + vertex -25.1341 -30.5242 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.7039 -28.9262 0 + vertex -25.1341 -30.5242 0 + vertex -26.5458 -28.7827 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1341 -30.5242 0 + vertex -26.7039 -28.9262 0 + vertex -25.5344 -30.8827 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.8635 -29.0336 0 + vertex -25.5344 -30.8827 0 + vertex -26.7039 -28.9262 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.0275 -29.1093 0 + vertex -25.5344 -30.8827 0 + vertex -26.8635 -29.0336 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.1989 -29.1579 0 + vertex -25.5344 -30.8827 0 + vertex -27.0275 -29.1093 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.5344 -30.8827 0 + vertex -27.1989 -29.1579 0 + vertex -26.8166 -32.1012 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.3805 -29.1838 0 + vertex -26.8166 -32.1012 0 + vertex -27.1989 -29.1579 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.5755 -29.1914 0 + vertex -26.8166 -32.1012 0 + vertex -27.3805 -29.1838 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.9775 -29.1782 0 + vertex -26.8166 -32.1012 0 + vertex -27.5755 -29.1914 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.8166 -32.1012 0 + vertex -27.9775 -29.1782 0 + vertex -27.3602 -32.5933 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.0989 -29.15 0 + vertex -27.3602 -32.5933 0 + vertex -27.9775 -29.1782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.3602 -32.5933 0 + vertex -28.0989 -29.15 0 + vertex -27.924 -33.0516 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.176 -29.097 0 + vertex -27.924 -33.0516 0 + vertex -28.0989 -29.15 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.2461 -34.4632 0 + vertex -28.176 -29.097 0 + vertex -28.2154 -29.0113 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.176 -29.097 0 + vertex -28.5012 -33.4718 0 + vertex -27.924 -33.0516 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1303 -25.4759 0 + vertex -28.2154 -29.0113 0 + vertex -28.2235 -28.8853 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0734 -25.6205 0 + vertex -27.9393 -26.9734 0 + vertex -28.7678 -25.6646 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9179 -25.5457 0 + vertex -27.9393 -26.9734 0 + vertex -29.0734 -25.6205 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.9393 -26.9734 0 + vertex -29.9179 -25.5457 0 + vertex -28.1721 -28.4809 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.9759 -25.4949 0 + vertex -28.1721 -28.4809 0 + vertex -29.9179 -25.5457 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1721 -28.4809 0 + vertex -30.9759 -25.4949 0 + vertex -28.2235 -28.8853 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1303 -25.4759 0 + vertex -28.2235 -28.8853 0 + vertex -30.9759 -25.4949 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.176 -29.097 0 + vertex -29.0852 -33.8499 0 + vertex -28.5012 -33.4718 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.176 -29.097 0 + vertex -29.669 -34.1817 0 + vertex -29.0852 -33.8499 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2154 -29.0113 0 + vertex -32.1303 -25.4759 0 + vertex -36.4516 -28.8697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.176 -29.097 0 + vertex -30.2461 -34.4632 0 + vertex -29.669 -34.1817 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2154 -29.0113 0 + vertex -36.4516 -28.8697 0 + vertex -30.8095 -34.6902 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2154 -29.0113 0 + vertex -30.8095 -34.6902 0 + vertex -30.2461 -34.4632 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -31.9023 -34.9414 0 + vertex -30.8095 -34.6902 0 + vertex -36.4516 -28.8697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8095 -34.6902 0 + vertex -31.5797 -34.902 0 + vertex -31.3526 -34.8586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8095 -34.6902 0 + vertex -31.9023 -34.9414 0 + vertex -31.5797 -34.902 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.9023 -34.9414 0 + vertex -36.4516 -28.8697 0 + vertex -32.7769 -35.0076 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4707 -26.6225 0 + vertex -32.1303 -25.4759 0 + vertex -34.9509 -25.4747 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.4516 -28.8697 0 + vertex -32.1303 -25.4759 0 + vertex -35.4707 -26.6225 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.7769 -35.0076 0 + vertex -36.4516 -28.8697 0 + vertex -33.8615 -35.0556 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -37.5165 -31.4193 0 + vertex -33.8615 -35.0556 0 + vertex -36.4516 -28.8697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.8615 -35.0556 0 + vertex -37.5165 -31.4193 0 + vertex -35.0412 -35.0835 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.0412 -35.0835 0 + vertex -37.5165 -31.4193 0 + vertex -36.2012 -35.0898 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -38.3711 -33.5534 0 + vertex -36.2012 -35.0898 0 + vertex -37.5165 -31.4193 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.2012 -35.0898 0 + vertex -38.3711 -33.5534 0 + vertex -37.2267 -35.0727 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2267 -35.0727 0 + vertex -38.3711 -33.5534 0 + vertex -38.0027 -35.0306 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -38.6277 -34.2404 0 + vertex -38.0027 -35.0306 0 + vertex -38.3711 -33.5534 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.0027 -35.0306 0 + vertex -38.6277 -34.2404 0 + vertex -38.2613 -34.9997 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.2613 -34.9997 0 + vertex -38.6277 -34.2404 0 + vertex -38.4144 -34.9619 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.4144 -34.9619 0 + vertex -38.6277 -34.2404 0 + vertex -38.5336 -34.8886 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6277 -34.2404 0 + vertex -38.6312 -34.7874 0 + vertex -38.5336 -34.8886 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -38.7214 -34.5543 0 + vertex -38.6312 -34.7874 0 + vertex -38.6277 -34.2404 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.6312 -34.7874 0 + vertex -38.7214 -34.5543 0 + vertex -38.6971 -34.6715 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.3082 -35.9449 0 + vertex -22.4463 -35.4568 0 + vertex -23.665 -35.9691 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.5782 -35.5929 0 + vertex -23.3082 -35.9449 0 + vertex -22.7126 -35.7044 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.7126 -35.7044 0 + vertex -23.3082 -35.9449 0 + vertex -22.8511 -35.7934 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8511 -35.7934 0 + vertex -23.3082 -35.9449 0 + vertex -22.9953 -35.8619 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.9953 -35.8619 0 + vertex -23.3082 -35.9449 0 + vertex -23.1471 -35.9117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4463 -35.4568 0 + vertex -23.3082 -35.9449 0 + vertex -22.5782 -35.5929 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.665 -35.9691 0 + vertex -24.7839 -33.2498 0 + vertex -23.8593 -35.9891 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -25.4011 -34.2168 0 + vertex -23.8593 -35.9891 0 + vertex -24.7839 -33.2498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.8593 -35.9891 0 + vertex -25.4011 -34.2168 0 + vertex -24.0497 -36.0458 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0497 -36.0458 0 + vertex -25.4011 -34.2168 0 + vertex -24.2334 -36.1344 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.0482 -35.1877 0 + vertex -24.2334 -36.1344 0 + vertex -25.4011 -34.2168 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2334 -36.1344 0 + vertex -26.0482 -35.1877 0 + vertex -24.4077 -36.2501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4077 -36.2501 0 + vertex -26.0482 -35.1877 0 + vertex -24.57 -36.3881 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.57 -36.3881 0 + vertex -26.0482 -35.1877 0 + vertex -24.7177 -36.5437 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.7177 -36.5437 0 + vertex -26.0482 -35.1877 0 + vertex -24.8479 -36.7119 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.6839 -36.0968 0 + vertex -24.8479 -36.7119 0 + vertex -26.0482 -35.1877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8479 -36.7119 0 + vertex -26.6839 -36.0968 0 + vertex -24.9582 -36.888 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.0457 -37.0673 0 + vertex -26.6839 -36.0968 0 + vertex -25.1078 -37.2448 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.9582 -36.888 0 + vertex -26.6839 -36.0968 0 + vertex -25.0457 -37.0673 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2799 26.5937 0 + vertex -21.2669 26.4994 0 + vertex -21.2563 26.5576 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.3473 26.6332 0 + vertex -21.2669 26.4994 0 + vertex -21.2799 26.5937 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.2669 26.4994 0 + vertex -21.3473 26.6332 0 + vertex -21.2997 26.4466 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.3473 26.6332 0 + vertex -21.3558 26.3992 0 + vertex -21.2997 26.4466 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.3473 26.6332 0 + vertex -21.4368 26.3569 0 + vertex -21.3558 26.3992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5951 26.7172 0 + vertex -21.4368 26.3569 0 + vertex -21.3473 26.6332 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5951 26.7172 0 + vertex -21.6785 26.2874 0 + vertex -21.4368 26.3569 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.9618 26.7994 0 + vertex -21.6785 26.2874 0 + vertex -21.5951 26.7172 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.9618 26.7994 0 + vertex -22.0356 26.2369 0 + vertex -21.6785 26.2874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4095 26.8695 0 + vertex -22.0356 26.2369 0 + vertex -21.9618 26.7994 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4095 26.8695 0 + vertex -22.5186 26.2045 0 + vertex -22.0356 26.2369 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8078 26.9423 0 + vertex -22.5186 26.2045 0 + vertex -22.4095 26.8695 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8078 26.9423 0 + vertex -23.1385 26.1891 0 + vertex -22.5186 26.2045 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.1972 27.0531 0 + vertex -23.1385 26.1891 0 + vertex -22.8078 26.9423 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.56 27.1917 0 + vertex -23.1385 26.1891 0 + vertex -23.1972 27.0531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8316 26.205 0 + vertex -23.56 27.1917 0 + vertex -23.8785 27.3484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8316 26.205 0 + vertex -23.8785 27.3484 0 + vertex -24.1346 27.513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8316 26.205 0 + vertex -24.1346 27.513 0 + vertex -24.3107 27.6757 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.56 27.1917 0 + vertex -24.8316 26.205 0 + vertex -23.1385 26.1891 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3632 27.7532 0 + vertex -24.8316 26.205 0 + vertex -24.3107 27.6757 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3751 26.2567 0 + vertex -24.3632 27.7532 0 + vertex -24.3889 27.8265 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.1768 -3.32005 0 + vertex 14.3448 -2.7489 0 + vertex 14.3217 -2.5049 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.3448 -2.7489 0 + vertex 14.2634 -3.15818 0 + vertex 14.3256 -2.96711 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0741 -3.47638 0 + vertex 14.3217 -2.5049 0 + vertex 14.2572 -2.23644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.3448 -2.7489 0 + vertex 14.1768 -3.32005 0 + vertex 14.2634 -3.15818 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.8248 -3.7697 0 + vertex 14.2572 -2.23644 0 + vertex 14.1524 -1.94488 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.3217 -2.5049 0 + vertex 14.0741 -3.47638 0 + vertex 14.1768 -3.32005 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5249 -4.03275 0 + vertex 14.1524 -1.94488 0 + vertex 14.008 -1.63155 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.1837 -4.26011 0 + vertex 14.008 -1.63155 0 + vertex 13.8249 -1.29782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2572 -2.23644 0 + vertex 13.8248 -3.7697 0 + vertex 14.0741 -3.47638 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.4149 -4.5861 0 + vertex 13.8249 -1.29782 0 + vertex 13.604 -0.945011 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.1524 -1.94488 0 + vertex 13.5249 -4.03275 0 + vertex 13.8248 -3.7697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.26 -4.69402 0 + vertex 13.604 -0.945011 0 + vertex 13.3463 -0.574481 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.008 -1.63155 0 + vertex 13.1837 -4.26011 0 + vertex 13.5249 -4.03275 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.608 -4.6098 0 + vertex 13.3463 -0.574481 0 + vertex 13.0525 -0.187573 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.8249 -1.29782 0 + vertex 12.8106 -4.44636 0 + vertex 13.1837 -4.26011 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.65389 -4.31807 0 + vertex 13.0525 -0.187573 0 + vertex 12.7237 0.214368 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.8249 -1.29782 0 + vertex 12.4149 -4.5861 0 + vertex 12.8106 -4.44636 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.02468 -4.00814 0 + vertex 12.7237 0.214368 0 + vertex 12.3607 0.629996 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.604 -0.945011 0 + vertex 12.006 -4.67391 0 + vertex 12.4149 -4.5861 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.604 -0.945011 0 + vertex 11.5931 -4.70438 0 + vertex 12.006 -4.67391 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.0755 -3.36119 0 + vertex 12.3607 0.629996 0 + vertex 11.5355 1.49693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.604 -0.945011 0 + vertex 11.26 -4.69402 0 + vertex 11.5931 -4.70438 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3463 -0.574481 0 + vertex 10.9319 -4.66264 0 + vertex 11.26 -4.69402 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3463 -0.574481 0 + vertex 10.608 -4.6098 0 + vertex 10.9319 -4.66264 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.10115 -2.48513 0 + vertex 11.5355 1.49693 0 + vertex 10.5842 2.40247 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.0525 -0.187573 0 + vertex 10.2875 -4.53506 0 + vertex 10.608 -4.6098 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.0525 -0.187573 0 + vertex 9.96977 -4.43796 0 + vertex 10.2875 -4.53506 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.0525 -0.187573 0 + vertex 9.65389 -4.31807 0 + vertex 9.96977 -4.43796 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.79491 -1.04264 0 + vertex 10.5842 2.40247 0 + vertex 9.61741 3.25086 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.7237 0.214368 0 + vertex 9.33912 -4.17495 0 + vertex 9.65389 -4.31807 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.03464 3.65533 0 + vertex 9.61741 3.25086 0 + vertex 9.29624 3.50894 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.03464 3.65533 0 + vertex 9.29624 3.50894 0 + vertex 9.14614 3.60373 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.61741 3.25086 0 + vertex 9.03464 3.65533 0 + vertex 5.79491 -1.04264 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.7237 0.214368 0 + vertex 9.02468 -4.00814 0 + vertex 9.33912 -4.17495 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.24358 -0.384283 0 + vertex 9.03464 3.65533 0 + vertex 8.81858 3.79581 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3607 0.629996 0 + vertex 8.70978 -3.81721 0 + vertex 9.02468 -4.00814 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3607 0.629996 0 + vertex 8.39365 -3.60171 0 + vertex 8.70978 -3.81721 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62083 0.441773 0 + vertex 8.81858 3.79581 0 + vertex 8.19732 4.25764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3607 0.629996 0 + vertex 8.0755 -3.36119 0 + vertex 8.39365 -3.60171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.49221 0.674515 0 + vertex 8.19732 4.25764 0 + vertex 8.00725 4.39171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5355 1.49693 0 + vertex 7.75455 -3.09522 0 + vertex 8.0755 -3.36119 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.49221 0.674515 0 + vertex 8.00725 4.39171 0 + vertex 7.75154 4.54807 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5355 1.49693 0 + vertex 7.10115 -2.48513 0 + vertex 7.75455 -3.09522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.44662 0.733548 0 + vertex 7.75154 4.54807 0 + vertex 7.07462 4.9138 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5842 2.40247 0 + vertex 6.42718 -1.76788 0 + vertex 7.10115 -2.48513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.40839 0.754677 0 + vertex 7.07462 4.9138 0 + vertex 6.22936 5.32709 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5842 2.40247 0 + vertex 5.79491 -1.04264 0 + vertex 6.42718 -1.76788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.40839 0.754677 0 + vertex 6.22936 5.32709 0 + vertex 5.27855 5.76024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.03464 3.65533 0 + vertex 5.24358 -0.384283 0 + vertex 5.79491 -1.04264 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.81858 3.79581 0 + vertex 4.83246 0.134689 0 + vertex 5.24358 -0.384283 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.19732 4.25764 0 + vertex 4.49221 0.674515 0 + vertex 4.62083 0.441773 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.81858 3.79581 0 + vertex 4.62083 0.441773 0 + vertex 4.83246 0.134689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.75154 4.54807 0 + vertex 4.44662 0.733548 0 + vertex 4.49221 0.674515 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07462 4.9138 0 + vertex 4.40839 0.754677 0 + vertex 4.44662 0.733548 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.285 6.1855 0 + vertex 4.40839 0.754677 0 + vertex 5.27855 5.76024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.40839 0.754677 0 + vertex 4.285 6.1855 0 + vertex 4.3737 0.738144 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.31149 6.57517 0 + vertex 4.3737 0.738144 0 + vertex 4.285 6.1855 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.42084 6.9015 0 + vertex 4.3737 0.738144 0 + vertex 3.31149 6.57517 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.3737 0.738144 0 + vertex 2.42084 6.9015 0 + vertex 4.33872 0.684191 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.67583 7.13679 0 + vertex 4.33872 0.684191 0 + vertex 2.42084 6.9015 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.30727 7.25861 0 + vertex 4.33872 0.684191 0 + vertex 1.67583 7.13679 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex 3.25174 -5.37115 0 + vertex 3.97093 -5.58648 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex 2.534 -5.13555 0 + vertex 3.25174 -5.37115 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.33872 0.684191 0 + vertex 1.30727 7.25861 0 + vertex 4.25257 0.464986 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex 1.81816 -4.87986 0 + vertex 2.534 -5.13555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.87688 -2.74967 0 + vertex 4.25257 0.464986 0 + vertex 1.30727 7.25861 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -2.32857 -3.00041 0 + vertex 4.25257 0.464986 0 + vertex -2.87688 -2.74967 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex 1.10471 -4.60426 0 + vertex 1.81816 -4.87986 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.87688 -2.74967 0 + vertex 1.30727 7.25861 0 + vertex 0.855811 7.43981 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex 0.394112 -4.30895 0 + vertex 1.10471 -4.60426 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.301 -2.58026 0 + vertex 0.855811 7.43981 0 + vertex -0.23691 7.94665 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex -0.313177 -3.99411 0 + vertex 0.394112 -4.30895 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex -1.01669 -3.65993 0 + vertex -0.313177 -3.99411 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.54104 -2.51804 0 + vertex -0.23691 7.94665 0 + vertex -1.48458 8.58988 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex -1.71595 -3.30659 0 + vertex -1.01669 -3.65993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22446 0.295049 0 + vertex -2.32857 -3.00041 0 + vertex -1.71595 -3.30659 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.62666 -2.52788 0 + vertex -1.48458 8.58988 0 + vertex -2.76946 9.30203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.25257 0.464986 0 + vertex -2.32857 -3.00041 0 + vertex 4.22446 0.295049 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.855811 7.43981 0 + vertex -3.301 -2.58026 0 + vertex -2.87688 -2.74967 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.23691 7.94665 0 + vertex -3.54104 -2.51804 0 + vertex -3.301 -2.58026 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.48458 8.58988 0 + vertex -3.62666 -2.52788 0 + vertex -3.54104 -2.51804 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.76946 9.30203 0 + vertex -3.68113 -2.55635 0 + vertex -3.62666 -2.52788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.97378 10.0157 0 + vertex -3.68113 -2.55635 0 + vertex -2.76946 9.30203 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.59396 -25.347 0 + vertex -1.45361 -26.5684 0 + vertex -4.25232 -24.3543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -3.84473 -21.6547 0 + vertex -3.82849 -22.2203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -3.87719 -21.3353 0 + vertex -3.84473 -21.6547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -3.91934 -21.0662 0 + vertex -3.87719 -21.3353 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.9798 10.6633 0 + vertex -3.68113 -2.55635 0 + vertex -3.97378 10.0157 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.37165 10.9414 0 + vertex -3.68113 -2.55635 0 + vertex -4.9798 10.6633 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -3.97677 -20.8354 0 + vertex -3.91934 -21.0662 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.05507 -20.6308 0 + vertex -3.97677 -20.8354 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.15983 -20.4402 0 + vertex -4.05507 -20.6308 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.29663 -20.2518 0 + vertex -4.15983 -20.4402 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.47107 -20.0532 0 + vertex -4.29663 -20.2518 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.68872 -19.8327 0 + vertex -4.47107 -20.0532 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -4.93899 -19.592 0 + vertex -4.68872 -19.8327 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.66976 11.1776 0 + vertex -3.68113 -2.55635 0 + vertex -5.37165 10.9414 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -5.14898 -19.4116 0 + vertex -4.93899 -19.592 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -5.34642 -19.2839 0 + vertex -5.14898 -19.4116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.68113 -2.55635 0 + vertex -5.66976 11.1776 0 + vertex -3.70601 -2.60189 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -5.55901 -19.2012 0 + vertex -5.34642 -19.2839 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.85942 11.3636 0 + vertex -3.70601 -2.60189 0 + vertex -5.66976 11.1776 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -5.8145 -19.1562 0 + vertex -5.55901 -19.2012 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -5.85942 11.3636 0 + vertex -5.90899 11.4352 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.85942 11.3636 0 + vertex -17.4002 -11.6639 0 + vertex -3.70601 -2.60189 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -5.90899 11.4352 0 + vertex -5.92592 11.491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.70285 -2.66292 0 + vertex -6.14058 -19.1411 0 + vertex -5.8145 -19.1562 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.04277 -4.97268 0 + vertex 7.2241 -5.88439 0 + vertex 7.809 -5.75259 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.04277 -4.97268 0 + vertex 6.87672 -5.95074 0 + vertex 7.2241 -5.88439 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.53505 -5.98957 0 + vertex 7.04277 -4.97268 0 + vertex 6.78219 -4.68956 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.04277 -4.97268 0 + vertex 6.53505 -5.98957 0 + vertex 6.87672 -5.95074 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.82356 -5.98052 0 + vertex 6.78219 -4.68956 0 + vertex 6.51759 -4.36865 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.4311 -5.93055 0 + vertex 6.51759 -4.36865 0 + vertex 6.2523 -4.01644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.78219 -4.68956 0 + vertex 6.18777 -5.99984 0 + vertex 6.53505 -5.98957 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.99906 -5.84891 0 + vertex 6.2523 -4.01644 0 + vertex 5.98964 -3.63939 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.78219 -4.68956 0 + vertex 5.82356 -5.98052 0 + vertex 6.18777 -5.99984 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 5.98964 -3.63939 0 + vertex 5.48552 -2.8367 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.51759 -4.36865 0 + vertex 5.4311 -5.93055 0 + vertex 5.82356 -5.98052 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 5.48552 -2.8367 0 + vertex 5.03179 -2.01239 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.2523 -4.01644 0 + vertex 4.99906 -5.84891 0 + vertex 5.4311 -5.93055 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 5.03179 -2.01239 0 + vertex 4.65505 -1.21825 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.98964 -3.63939 0 + vertex 4.51611 -5.73457 0 + vertex 4.99906 -5.84891 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 4.65505 -1.21825 0 + vertex 4.50386 -0.848697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 4.50386 -0.848697 0 + vertex 4.38188 -0.506111 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 4.38188 -0.506111 0 + vertex 4.29244 -0.196974 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 4.29244 -0.196974 0 + vertex 4.23886 0.0722368 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.97093 -5.58648 0 + vertex 4.23886 0.0722368 0 + vertex 4.22446 0.295049 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.98964 -3.63939 0 + vertex 3.97093 -5.58648 0 + vertex 4.51611 -5.73457 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.7369 -35.0944 0 + vertex 12.2214 -34.9805 0 + vertex 12.2468 -35.1875 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.73 -32.8205 0 + vertex 11.1661 -32.3709 0 + vertex 14.6832 -33.3707 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6656 -33.913 0 + vertex 12.1503 -34.7994 0 + vertex 12.2214 -34.9805 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.8827 -34.5351 0 + vertex 14.6832 -33.3707 0 + vertex 11.1661 -32.3709 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6656 -33.913 0 + vertex 12.0364 -34.6492 0 + vertex 12.1503 -34.7994 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 12.0364 -34.6492 0 + vertex 14.6832 -33.3707 0 + vertex 11.8827 -34.5351 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6832 -33.3707 0 + vertex 12.0364 -34.6492 0 + vertex 14.6656 -33.913 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.9267 -33.0747 0 + vertex 11.8827 -34.5351 0 + vertex 11.1661 -32.3709 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8827 -34.5351 0 + vertex 10.9267 -33.0747 0 + vertex 11.6919 -34.4621 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6919 -34.4621 0 + vertex 10.9267 -33.0747 0 + vertex 11.4668 -34.4353 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.7819 -33.5982 0 + vertex 11.4668 -34.4353 0 + vertex 10.9267 -33.0747 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.7449 -33.8005 0 + vertex 11.4668 -34.4353 0 + vertex 10.7819 -33.5982 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4668 -34.4353 0 + vertex 10.7449 -33.8005 0 + vertex 11.143 -34.4171 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.7315 -33.9677 0 + vertex 11.143 -34.4171 0 + vertex 10.7449 -33.8005 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.143 -34.4171 0 + vertex 10.7315 -33.9677 0 + vertex 11.016 -34.3915 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 10.7415 -34.103 0 + vertex 11.016 -34.3915 0 + vertex 10.7315 -33.9677 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.016 -34.3915 0 + vertex 10.7415 -34.103 0 + vertex 10.9123 -34.3507 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 10.775 -34.2097 0 + vertex 10.9123 -34.3507 0 + vertex 10.7415 -34.103 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9123 -34.3507 0 + vertex 10.775 -34.2097 0 + vertex 10.832 -34.2912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0881 -14.3092 0 + vertex 14.1362 -14.4186 0 + vertex 14.1363 -14.3424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0003 -14.2763 0 + vertex 14.1362 -14.4186 0 + vertex 14.0881 -14.3092 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.1362 -14.4186 0 + vertex 14.0003 -14.2763 0 + vertex 14.0967 -14.5873 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.7222 -14.2141 0 + vertex 14.0967 -14.5873 0 + vertex 14.0003 -14.2763 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0967 -14.5873 0 + vertex 13.7222 -14.2141 0 + vertex 13.9185 -15.1524 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3346 -14.1615 0 + vertex 13.9185 -15.1524 0 + vertex 13.7222 -14.2141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8698 -14.1239 0 + vertex 13.9185 -15.1524 0 + vertex 13.3346 -14.1615 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.9185 -15.1524 0 + vertex 12.8698 -14.1239 0 + vertex 13.6397 -15.9386 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.7363 -14.0885 0 + vertex 13.6397 -15.9386 0 + vertex 12.8698 -14.1239 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.6397 -15.9386 0 + vertex 12.7363 -14.0885 0 + vertex 13.2984 -16.8469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6087 -14.0056 0 + vertex 13.2984 -16.8469 0 + vertex 12.7363 -14.0885 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0711 -19.1496 0 + vertex 13.2984 -16.8469 0 + vertex 12.6087 -14.0056 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0711 -19.1496 0 + vertex 12.6087 -14.0056 0 + vertex 12.5013 -13.8876 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.72114 -19.1409 0 + vertex 12.5013 -13.8876 0 + vertex 12.4287 -13.7469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.76754 -19.1712 0 + vertex 12.4287 -13.7469 0 + vertex 12.3997 -13.6324 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.80885 -19.2424 0 + vertex 12.3997 -13.6324 0 + vertex 12.3889 -13.5153 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 10.602 -19.227 0 + vertex 13.2984 -16.8469 0 + vertex 10.3591 -19.1774 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.8205 29.3224 0 + vertex 15.0694 29.0611 0 + vertex 12.0304 29.9363 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0694 29.0611 0 + vertex 11.8205 29.3224 0 + vertex 15.0552 28.7509 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.8169 27.5343 0 + vertex 15.0574 28.4965 0 + vertex 11.7656 27.9858 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.903 27.1234 0 + vertex 15.0574 28.4965 0 + vertex 11.8169 27.5343 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.7675 28.9061 0 + vertex 15.0552 28.7509 0 + vertex 11.8205 29.3224 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 0 + vertex 12.2572 26.3514 0 + vertex 12.3979 26.1543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.9082 29.6745 0 + vertex 12.0304 29.9363 0 + vertex 11.965 29.8184 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0304 29.9363 0 + vertex 11.9082 29.6745 0 + vertex 11.8205 29.3224 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 0 + vertex 12.1339 26.5589 0 + vertex 12.2572 26.3514 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0552 28.7509 0 + vertex 11.7675 28.9061 0 + vertex 15.0574 28.4965 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 0 + vertex 12.0241 26.7794 0 + vertex 12.1339 26.5589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 0 + vertex 11.7675 28.9061 0 + vertex 11.7492 28.4518 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 12.0241 26.7794 0 + vertex 15.0574 28.4965 0 + vertex 11.903 27.1234 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0574 28.4965 0 + vertex 11.7492 28.4518 0 + vertex 11.7656 27.9858 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.7548 16.6154 0 + vertex 24.8294 16.7672 0 + vertex 24.8232 16.8925 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.659 16.5397 0 + vertex 24.8232 16.8925 0 + vertex 24.789 17.0321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8294 16.7672 0 + vertex 24.7548 16.6154 0 + vertex 24.8049 16.6725 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5483 17.3222 0 + vertex 24.789 17.0321 0 + vertex 24.7291 17.1695 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5483 17.3222 0 + vertex 24.7291 17.1695 0 + vertex 24.6602 17.253 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8232 16.8925 0 + vertex 24.659 16.5397 0 + vertex 24.7548 16.6154 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.789 17.0321 0 + vertex 24.5483 17.3222 0 + vertex 24.659 16.5397 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.386 17.3783 0 + vertex 24.659 16.5397 0 + vertex 24.5483 17.3222 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.386 17.3783 0 + vertex 24.3498 16.3417 0 + vertex 24.659 16.5397 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.166 17.4223 0 + vertex 24.3498 16.3417 0 + vertex 24.386 17.3783 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.166 17.4223 0 + vertex 23.9148 16.0975 0 + vertex 24.3498 16.3417 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5226 17.4791 0 + vertex 23.9148 16.0975 0 + vertex 24.166 17.4223 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5226 17.4791 0 + vertex 23.3919 15.8262 0 + vertex 23.9148 16.0975 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.5588 17.5015 0 + vertex 23.3919 15.8262 0 + vertex 23.5226 17.4791 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.5588 17.5015 0 + vertex 22.2336 15.278 0 + vertex 23.3919 15.8262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0506 17.5236 0 + vertex 22.2336 15.278 0 + vertex 22.5588 17.5015 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2336 15.278 0 + vertex 21.0506 17.5236 0 + vertex 21.6737 15.039 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6737 15.039 0 + vertex 21.0506 17.5236 0 + vertex 21.1771 14.8489 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2276 17.5562 0 + vertex 21.1771 14.8489 0 + vertex 21.0506 17.5236 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.1771 14.8489 0 + vertex 20.2276 17.5562 0 + vertex 20.8452 14.735 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8452 14.735 0 + vertex 20.2276 17.5562 0 + vertex 20.5722 14.6577 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5722 14.6577 0 + vertex 20.2276 17.5562 0 + vertex 20.327 14.6203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4469 14.7833 0 + vertex 20.2276 17.5562 0 + vertex 20.1284 17.5777 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2276 17.5562 0 + vertex 20.0785 14.6265 0 + vertex 20.327 14.6203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4469 14.7833 0 + vertex 20.1284 17.5777 0 + vertex 20.0333 17.6179 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4281 15.1559 0 + vertex 20.0333 17.6179 0 + vertex 19.9424 17.6771 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4281 15.1559 0 + vertex 19.9424 17.6771 0 + vertex 19.8554 17.7553 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2276 17.5562 0 + vertex 19.7955 14.6797 0 + vertex 20.0785 14.6265 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.448 15.5385 0 + vertex 19.8554 17.7553 0 + vertex 19.6934 17.9694 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.448 15.5385 0 + vertex 19.6934 17.9694 0 + vertex 19.5469 18.2611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2276 17.5562 0 + vertex 19.4469 14.7833 0 + vertex 19.7955 14.6797 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.6072 15.8977 0 + vertex 19.5469 18.2611 0 + vertex 19.4153 18.6317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8738 16.2527 0 + vertex 19.4153 18.6317 0 + vertex 19.2984 19.082 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2162 16.623 0 + vertex 19.2984 19.082 0 + vertex 19.1956 19.6132 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6028 17.0277 0 + vertex 19.1956 19.6132 0 + vertex 19.1065 20.2262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.1667 22.8321 0 + vertex 19.1065 20.2262 0 + vertex 19.0081 20.8787 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6752 22.6222 0 + vertex 19.0081 20.8787 0 + vertex 18.892 21.4494 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4732 22.2317 0 + vertex 18.892 21.4494 0 + vertex 18.7726 21.8767 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4732 22.2317 0 + vertex 18.7726 21.8767 0 + vertex 18.7163 22.0174 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4732 22.2317 0 + vertex 18.7163 22.0174 0 + vertex 18.6646 22.0992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.892 21.4494 0 + vertex 18.4732 22.2317 0 + vertex 18.127 22.4141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0333 17.6179 0 + vertex 18.4281 15.1559 0 + vertex 19.4469 14.7833 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.892 21.4494 0 + vertex 18.127 22.4141 0 + vertex 17.6752 22.6222 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0081 20.8787 0 + vertex 17.6752 22.6222 0 + vertex 17.1667 22.8321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.8554 17.7553 0 + vertex 17.448 15.5385 0 + vertex 18.4281 15.1559 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.1065 20.2262 0 + vertex 17.1667 22.8321 0 + vertex 14.0017 17.4864 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5469 18.2611 0 + vertex 16.6072 15.8977 0 + vertex 17.448 15.5385 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4153 18.6317 0 + vertex 15.8738 16.2527 0 + vertex 16.6072 15.8977 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.3813 18.0182 0 + vertex 17.1667 22.8321 0 + vertex 15.5173 23.4995 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.2984 19.082 0 + vertex 15.2162 16.623 0 + vertex 15.8738 16.2527 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.1956 19.6132 0 + vertex 14.6028 17.0277 0 + vertex 15.2162 16.623 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6914 19.6646 0 + vertex 15.5173 23.4995 0 + vertex 14.0281 24.1527 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.1065 20.2262 0 + vertex 14.0017 17.4864 0 + vertex 14.6028 17.0277 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9846 20.5521 0 + vertex 14.0281 24.1527 0 + vertex 13.7923 24.2655 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.6869 21.0368 0 + vertex 13.7923 24.2655 0 + vertex 13.5553 24.3991 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.1667 22.8321 0 + vertex 13.3813 18.0182 0 + vertex 14.0017 17.4864 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.3935 21.5973 0 + vertex 13.5553 24.3991 0 + vertex 13.085 24.7212 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5173 23.4995 0 + vertex 12.71 18.6425 0 + vertex 13.3813 18.0182 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0801 22.2703 0 + vertex 13.085 24.7212 0 + vertex 12.6316 25.1032 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.72206 23.0922 0 + vertex 12.6316 25.1032 0 + vertex 12.2092 25.5292 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5173 23.4995 0 + vertex 12.1494 19.1886 0 + vertex 12.71 18.6425 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.38213 23.8626 0 + vertex 12.2092 25.5292 0 + vertex 11.8324 25.9834 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5173 23.4995 0 + vertex 11.6914 19.6646 0 + vertex 12.1494 19.1886 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.08206 24.476 0 + vertex 11.8324 25.9834 0 + vertex 11.5154 26.4501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.80411 24.9522 0 + vertex 11.5154 26.4501 0 + vertex 11.3839 26.6832 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0281 24.1527 0 + vertex 11.3113 20.1069 0 + vertex 11.6914 19.6646 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.6679 25.145 0 + vertex 11.3839 26.6832 0 + vertex 11.2726 26.9135 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.53058 25.3107 0 + vertex 11.2726 26.9135 0 + vertex 11.1835 27.139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.38993 25.4519 0 + vertex 11.1835 27.139 0 + vertex 11.1184 27.3577 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.24373 25.571 0 + vertex 11.1184 27.3577 0 + vertex 11.0734 27.5937 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.08977 25.6705 0 + vertex 11.0734 27.5937 0 + vertex 11.0484 27.8474 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.0281 24.1527 0 + vertex 10.9846 20.5521 0 + vertex 11.3113 20.1069 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.92584 25.7528 0 + vertex 11.0484 27.8474 0 + vertex 11.0419 28.1143 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.9476 30.6899 0 + vertex 4.89167 37.3134 0 + vertex 11.8311 30.6195 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.73361 37.0399 0 + vertex 11.8311 30.6195 0 + vertex 4.89167 37.3134 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.31688 36.0346 0 + vertex 11.8311 30.6195 0 + vertex 4.73361 37.0399 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.1227 35.3375 0 + vertex 11.8311 30.6195 0 + vertex 4.31688 36.0346 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8311 30.6195 0 + vertex 3.94762 34.5584 0 + vertex 11.7177 30.5077 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.68366 32.8976 0 + vertex 11.6088 30.3591 0 + vertex 3.79886 33.7332 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.94762 34.5584 0 + vertex 11.8311 30.6195 0 + vertex 4.1227 35.3375 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.7177 30.5077 0 + vertex 3.79886 33.7332 0 + vertex 11.6088 30.3591 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.52293 36.6141 0 + vertex 4.73361 37.0399 0 + vertex 4.62814 36.8484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.73361 37.0399 0 + vertex 4.52293 36.6141 0 + vertex 4.31688 36.0346 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.6088 30.3591 0 + vertex 3.68366 32.8976 0 + vertex 11.5057 30.1782 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.79886 33.7332 0 + vertex 11.7177 30.5077 0 + vertex 3.94762 34.5584 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.60924 32.0876 0 + vertex 11.5057 30.1782 0 + vertex 3.68366 32.8976 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.58282 31.3388 0 + vertex 11.5057 30.1782 0 + vertex 3.60924 32.0876 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5057 30.1782 0 + vertex 5.05276 27.3884 0 + vertex 5.39739 26.9794 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5057 30.1782 0 + vertex 4.69711 27.8759 0 + vertex 5.05276 27.3884 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 3.59957 30.3654 0 + vertex 11.5057 30.1782 0 + vertex 3.58282 31.3388 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5057 30.1782 0 + vertex 4.32553 28.4461 0 + vertex 4.69711 27.8759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5057 30.1782 0 + vertex 4.09087 28.8303 0 + vertex 4.32553 28.4461 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5057 30.1782 0 + vertex 3.59957 30.3654 0 + vertex 4.09087 28.8303 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.09087 28.8303 0 + vertex 3.59957 30.3654 0 + vertex 3.91157 29.1502 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 3.63162 30.0135 0 + vertex 3.91157 29.1502 0 + vertex 3.59957 30.3654 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.91157 29.1502 0 + vertex 3.63162 30.0135 0 + vertex 3.78021 29.4348 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.78021 29.4348 0 + vertex 3.63162 30.0135 0 + vertex 3.68937 29.7129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.45361 -26.5684 0 + vertex -4.59396 -25.347 0 + vertex -1.72295 -27.0315 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.05721 -26.548 0 + vertex -1.72295 -27.0315 0 + vertex -4.59396 -25.347 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.72295 -27.0315 0 + vertex -5.05721 -26.548 0 + vertex -2.23947 -28.0146 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.23947 -28.0146 0 + vertex -5.05721 -26.548 0 + vertex -2.71481 -29.043 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.65492 -27.9982 0 + vertex -2.71481 -29.043 0 + vertex -5.05721 -26.548 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.71481 -29.043 0 + vertex -5.65492 -27.9982 0 + vertex -3.135 -30.0798 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.39994 -29.738 0 + vertex -3.135 -30.0798 0 + vertex -5.65492 -27.9982 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.135 -30.0798 0 + vertex -6.39994 -29.738 0 + vertex -3.4861 -31.0878 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.4477 -19.4082 0 + vertex 19.1479 -12.7477 0 + vertex 24.9086 -19.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7352 1.18648 0 + vertex 19.6583 -10.9333 0 + vertex 19.6819 -11.0243 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.4297 -3.0084 0 + vertex 19.6172 -10.8571 0 + vertex 19.6583 -10.9333 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0112 -3.39762 0 + vertex 19.557 -10.7956 0 + vertex 19.6172 -10.8571 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.4451 -3.80993 0 + vertex 19.557 -10.7956 0 + vertex 20.0112 -3.39762 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.557 -10.7956 0 + vertex 19.4451 -3.80993 0 + vertex 19.4763 -10.749 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 18.7073 -4.27174 0 + vertex 19.4763 -10.749 0 + vertex 19.4451 -3.80993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4763 -10.749 0 + vertex 18.7073 -4.27174 0 + vertex 19.3736 -10.7173 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.7736 -4.80944 0 + vertex 19.3736 -10.7173 0 + vertex 18.7073 -4.27174 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3736 -10.7173 0 + vertex 17.7736 -4.80944 0 + vertex 19.0963 -10.6988 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0963 -10.6988 0 + vertex 17.7736 -4.80944 0 + vertex 18.7132 -10.7406 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 16.3254 -5.59514 0 + vertex 18.7132 -10.7406 0 + vertex 17.7736 -4.80944 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.7132 -10.7406 0 + vertex 16.3254 -5.59514 0 + vertex 18.2126 -10.843 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.6549 -5.93433 0 + vertex 18.2126 -10.843 0 + vertex 16.3254 -5.59514 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.2126 -10.843 0 + vertex 15.6549 -5.93433 0 + vertex 17.5824 -11.0066 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.0129 -6.23993 0 + vertex 17.5824 -11.0066 0 + vertex 15.6549 -5.93433 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.5824 -11.0066 0 + vertex 15.0129 -6.23993 0 + vertex 16.811 -11.2316 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 14.3941 -6.51356 0 + vertex 16.811 -11.2316 0 + vertex 15.0129 -6.23993 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.793 -6.75686 0 + vertex 16.811 -11.2316 0 + vertex 14.3941 -6.51356 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.793 -6.75686 0 + vertex 13.7217 -12.1451 0 + vertex 16.811 -11.2316 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 13.2041 -6.97145 0 + vertex 13.7217 -12.1451 0 + vertex 13.793 -6.75686 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.6221 -7.15898 0 + vertex 13.7217 -12.1451 0 + vertex 13.2041 -6.97145 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0414 -7.32107 0 + vertex 13.7217 -12.1451 0 + vertex 12.6221 -7.15898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.7217 -12.1451 0 + vertex 12.0414 -7.32107 0 + vertex 13.4022 -12.26 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.4568 -7.45935 0 + vertex 13.4022 -12.26 0 + vertex 12.0414 -7.32107 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.4022 -12.26 0 + vertex 11.4568 -7.45935 0 + vertex 13.1153 -12.4148 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.8627 -7.57545 0 + vertex 13.1153 -12.4148 0 + vertex 11.4568 -7.45935 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.1153 -12.4148 0 + vertex 10.8627 -7.57545 0 + vertex 12.8673 -12.6015 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.2538 -7.67101 0 + vertex 12.8673 -12.6015 0 + vertex 10.8627 -7.57545 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 10.8168 -19.3006 0 + vertex 12.5806 -18.6336 0 + vertex 10.602 -19.227 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.8673 -12.6015 0 + vertex 10.2538 -7.67101 0 + vertex 12.6645 -12.8127 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.62459 -7.74765 0 + vertex 12.6645 -12.8127 0 + vertex 10.2538 -7.67101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.5806 -18.6336 0 + vertex 11.0203 -19.4009 0 + vertex 12.2803 -19.3138 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.5538 -19.7266 0 + vertex 12.2803 -19.3138 0 + vertex 11.2294 -19.5302 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2803 -19.3138 0 + vertex 11.5538 -19.7266 0 + vertex 12.0697 -19.7199 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.7902 -19.8211 0 + vertex 12.0697 -19.7199 0 + vertex 11.5538 -19.7266 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.881 -19.8313 0 + vertex 12.0697 -19.7199 0 + vertex 11.7902 -19.8211 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6645 -12.8127 0 + vertex 9.62459 -7.74765 0 + vertex 12.513 -13.0405 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0185 -19.7802 0 + vertex 11.881 -19.8313 0 + vertex 11.9563 -19.8175 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0697 -19.7199 0 + vertex 11.881 -19.8313 0 + vertex 12.0185 -19.7802 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.96966 -7.80701 0 + vertex 12.513 -13.0405 0 + vertex 9.62459 -7.74765 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.2294 -19.5302 0 + vertex 12.2803 -19.3138 0 + vertex 11.0203 -19.4009 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.0203 -19.4009 0 + vertex 12.5806 -18.6336 0 + vertex 10.8168 -19.3006 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.2984 -16.8469 0 + vertex 10.602 -19.227 0 + vertex 12.5806 -18.6336 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.513 -13.0405 0 + vertex 8.96966 -7.80701 0 + vertex 12.419 -13.2773 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.2984 -16.8469 0 + vertex 10.0711 -19.1496 0 + vertex 10.3591 -19.1774 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.56097 -7.88041 0 + vertex 12.419 -13.2773 0 + vertex 8.96966 -7.80701 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.5013 -13.8876 0 + vertex 9.72114 -19.1409 0 + vertex 10.0711 -19.1496 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.419 -13.2773 0 + vertex 7.56097 -7.88041 0 + vertex 12.3889 -13.5153 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.4287 -13.7469 0 + vertex 8.76754 -19.1712 0 + vertex 9.72114 -19.1409 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.04455 -7.91255 0 + vertex 12.3889 -13.5153 0 + vertex 7.56097 -7.88041 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3997 -13.6324 0 + vertex 7.80885 -19.2424 0 + vertex 8.76754 -19.1712 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 7.42262 -19.2967 0 + vertex 12.3889 -13.5153 0 + vertex 6.04455 -7.91255 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3889 -13.5153 0 + vertex 7.42262 -19.2967 0 + vertex 7.80885 -19.2424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.42262 -19.2967 0 + vertex 6.04455 -7.91255 0 + vertex 7.07441 -19.3694 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.49083 -7.9071 0 + vertex 7.07441 -19.3694 0 + vertex 6.04455 -7.91255 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.07441 -19.3694 0 + vertex 5.49083 -7.9071 0 + vertex 6.74616 -19.4649 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.0434 -7.88498 0 + vertex 6.74616 -19.4649 0 + vertex 5.49083 -7.9071 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.74616 -19.4649 0 + vertex 5.0434 -7.88498 0 + vertex 6.41984 -19.5879 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.67971 -7.84446 0 + vertex 6.41984 -19.5879 0 + vertex 5.0434 -7.88498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.41984 -19.5879 0 + vertex 4.67971 -7.84446 0 + vertex 6.07737 -19.7427 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.37723 -7.78379 0 + vertex 6.07737 -19.7427 0 + vertex 4.67971 -7.84446 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.07737 -19.7427 0 + vertex 4.37723 -7.78379 0 + vertex 5.70074 -19.9339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.70074 -19.9339 0 + vertex 4.37723 -7.78379 0 + vertex 5.20766 -20.2058 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.11342 -7.70123 0 + vertex 5.20766 -20.2058 0 + vertex 4.37723 -7.78379 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.20766 -20.2058 0 + vertex 4.11342 -7.70123 0 + vertex 4.71458 -20.5006 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.86574 -7.59505 0 + vertex 4.71458 -20.5006 0 + vertex 4.11342 -7.70123 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.71458 -20.5006 0 + vertex 3.86574 -7.59505 0 + vertex 4.22328 -20.8168 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.40104 -7.34622 0 + vertex 4.22328 -20.8168 0 + vertex 3.86574 -7.59505 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.22328 -20.8168 0 + vertex 3.40104 -7.34622 0 + vertex 3.73558 -21.1527 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.71562 -6.94693 0 + vertex 3.73558 -21.1527 0 + vertex 3.40104 -7.34622 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex 3.73558 -21.1527 0 + vertex 2.71562 -6.94693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.73558 -21.1527 0 + vertex -3.82849 -22.2203 0 + vertex 3.25328 -21.5067 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex 2.71562 -6.94693 0 + vertex 1.05193 -5.91722 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.25328 -21.5067 0 + vertex -3.82849 -22.2203 0 + vertex 2.77819 -21.8771 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.77819 -21.8771 0 + vertex -3.82849 -22.2203 0 + vertex 2.31211 -22.2625 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex 1.05193 -5.91722 0 + vertex -0.694871 -4.82613 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.31211 -22.2625 0 + vertex -3.82849 -22.2203 0 + vertex 1.85684 -22.661 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.85684 -22.661 0 + vertex -3.82849 -22.2203 0 + vertex 1.4142 -23.0712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -0.694871 -4.82613 0 + vertex -2.47177 -3.7788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.4142 -23.0712 0 + vertex -3.82849 -22.2203 0 + vertex 0.985991 -23.4913 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.985991 -23.4913 0 + vertex -3.82849 -22.2203 0 + vertex 0.574011 -23.9198 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -2.47177 -3.7788 0 + vertex -2.8551 -3.51984 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.574011 -23.9198 0 + vertex -3.82849 -22.2203 0 + vertex 0.18007 -24.355 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.84589 -22.5177 0 + vertex 0.18007 -24.355 0 + vertex -3.82849 -22.2203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -2.8551 -3.51984 0 + vertex -3.18232 -3.26618 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.88244 -22.8317 0 + vertex 0.18007 -24.355 0 + vertex -3.84589 -22.5177 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -3.18232 -3.26618 0 + vertex -3.44099 -3.03042 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.18007 -24.355 0 + vertex -3.88244 -22.8317 0 + vertex -0.194025 -24.7953 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.93975 -23.1672 0 + vertex -0.194025 -24.7953 0 + vertex -3.88244 -22.8317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -3.44099 -3.03042 0 + vertex -3.61865 -2.82513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.194025 -24.7953 0 + vertex -3.93975 -23.1672 0 + vertex -0.546472 -25.2391 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.01943 -23.5295 0 + vertex -0.546472 -25.2391 0 + vertex -3.93975 -23.1672 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.546472 -25.2391 0 + vertex -4.01943 -23.5295 0 + vertex -0.875463 -25.6847 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.82849 -22.2203 0 + vertex -3.61865 -2.82513 0 + vertex -3.70285 -2.66292 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.25232 -24.3543 0 + vertex -0.875463 -25.6847 0 + vertex -4.01943 -23.5295 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.875463 -25.6847 0 + vertex -4.25232 -24.3543 0 + vertex -1.17919 -26.1306 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4002 -11.6639 0 + vertex -3.70285 -2.66292 0 + vertex -3.70601 -2.60189 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.17919 -26.1306 0 + vertex -4.25232 -24.3543 0 + vertex -1.45361 -26.5684 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0469 1.94283 0 + vertex 21.1316 -0.233279 0 + vertex 21.1355 -0.658014 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9727 1.93385 0 + vertex 21.099 0.0745682 0 + vertex 21.1316 -0.233279 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9112 1.94773 0 + vertex 21.0726 0.170561 0 + vertex 21.099 0.0745682 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8622 1.9828 0 + vertex 21.0399 0.220413 0 + vertex 21.0726 0.170561 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8016 2.10976 0 + vertex 20.9772 0.235111 0 + vertex 21.0399 0.220413 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.498 4.716 0 + vertex 21.3371 8.55423 0 + vertex 20.8834 8.89663 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.7901 2.30129 0 + vertex 20.8646 0.230347 0 + vertex 20.9772 0.235111 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 20.5155 0.168137 0 + vertex 22.827 2.54396 0 + vertex 16.2363 2.34533 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3486 5.33522 0 + vertex 20.8834 8.89663 0 + vertex 20.3513 9.26304 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.7901 2.30129 0 + vertex 20.5155 0.168137 0 + vertex 20.8646 0.230347 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2183 5.95043 0 + vertex 20.3513 9.26304 0 + vertex 19.7274 9.66569 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.827 2.54396 0 + vertex 20.5155 0.168137 0 + vertex 22.7901 2.30129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1095 6.5543 0 + vertex 19.7274 9.66569 0 + vertex 19.4723 9.81661 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1095 6.5543 0 + vertex 19.4723 9.81661 0 + vertex 19.2206 9.94402 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1095 6.5543 0 + vertex 19.2206 9.94402 0 + vertex 18.9645 10.0501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5155 0.168137 0 + vertex 16.2363 2.34533 0 + vertex 20.0432 0.0451876 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0249 7.13954 0 + vertex 18.9645 10.0501 0 + vertex 18.6964 10.137 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 16.4437 1.81579 0 + vertex 20.0432 0.0451876 0 + vertex 16.2363 2.34533 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0249 7.13954 0 + vertex 18.6964 10.137 0 + vertex 18.4085 10.2069 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 16.6551 1.32614 0 + vertex 20.0432 0.0451876 0 + vertex 16.4437 1.81579 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 16.8681 0.883681 0 + vertex 19.4982 -0.127099 0 + vertex 16.6551 1.32614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0249 7.13954 0 + vertex 18.4085 10.2069 0 + vertex 18.093 10.2619 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 17.0802 0.495742 0 + vertex 19.4982 -0.127099 0 + vertex 16.8681 0.883681 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 17.2889 0.169637 0 + vertex 18.7502 -0.369046 0 + vertex 17.0802 0.495742 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 17.4918 -0.0873203 0 + vertex 18.7502 -0.369046 0 + vertex 17.2889 0.169637 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.7502 -0.369046 0 + vertex 17.4918 -0.0873203 0 + vertex 18.4876 -0.435405 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9668 7.69881 0 + vertex 18.093 10.2619 0 + vertex 17.3487 10.3363 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4876 -0.435405 0 + vertex 17.6862 -0.267812 0 + vertex 18.2791 -0.466914 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 17.8284 -0.36402 0 + vertex 18.2791 -0.466914 0 + vertex 17.6862 -0.267812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.1098 -0.464739 0 + vertex 17.8284 -0.36402 0 + vertex 17.9646 -0.430052 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.2791 -0.466914 0 + vertex 17.8284 -0.36402 0 + vertex 18.1098 -0.464739 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9212 8.45633 0 + vertex 17.3487 10.3363 0 + vertex 16.499 10.3797 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 17.6862 -0.267812 0 + vertex 18.4876 -0.435405 0 + vertex 17.4918 -0.0873203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4982 -0.127099 0 + vertex 17.0802 0.495742 0 + vertex 18.7502 -0.369046 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5399 9.97068 0 + vertex 16.499 10.3797 0 + vertex 16.2187 10.3704 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0432 0.0451876 0 + vertex 16.6551 1.32614 0 + vertex 19.4982 -0.127099 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6879 10.1383 0 + vertex 16.2187 10.3704 0 + vertex 16.005 10.3315 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.6879 10.1383 0 + vertex 16.005 10.3315 0 + vertex 15.8355 10.2563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2187 10.3704 0 + vertex 15.6879 10.1383 0 + vertex 15.5399 9.97068 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 16.2363 2.34533 0 + vertex 22.9115 2.82433 0 + vertex 16.0356 2.90743 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.499 10.3797 0 + vertex 15.5399 9.97068 0 + vertex 15.369 9.74689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7259 8.22365 0 + vertex 15.498 4.716 0 + vertex 15.6639 4.10009 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.213 9.52982 0 + vertex 16.499 10.3797 0 + vertex 15.369 9.74689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8834 8.89663 0 + vertex 15.3486 5.33522 0 + vertex 15.498 4.716 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3513 9.26304 0 + vertex 15.2183 5.95043 0 + vertex 15.3486 5.33522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.499 10.3797 0 + vertex 15.213 9.52982 0 + vertex 14.9212 8.45633 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7274 9.66569 0 + vertex 15.1095 6.5543 0 + vertex 15.2183 5.95043 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9262 8.72903 0 + vertex 15.213 9.52982 0 + vertex 15.0942 9.33737 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9645 10.0501 0 + vertex 15.0249 7.13954 0 + vertex 15.1095 6.5543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9543 8.95485 0 + vertex 15.0942 9.33737 0 + vertex 15.0092 9.15168 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.093 10.2619 0 + vertex 14.9668 7.69881 0 + vertex 15.0249 7.13954 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0942 9.33737 0 + vertex 14.9543 8.95485 0 + vertex 14.9262 8.72903 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.213 9.52982 0 + vertex 14.9262 8.72903 0 + vertex 14.9212 8.45633 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.3487 10.3363 0 + vertex 14.9212 8.45633 0 + vertex 14.9668 7.69881 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3467 17.5167 0 + vertex 26.0933 17.5963 0 + vertex 26.0696 17.9605 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.4856 17.2443 0 + vertex 26.0933 17.5963 0 + vertex 25.3467 17.5167 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.163 17.7384 0 + vertex 26.0696 17.9605 0 + vertex 26.0009 18.2942 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.6037 16.9917 0 + vertex 26.0803 17.2678 0 + vertex 25.4856 17.2443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0803 17.2678 0 + vertex 25.6037 16.9917 0 + vertex 26.0434 17.0172 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.0501 17.8316 0 + vertex 26.0009 18.2942 0 + vertex 25.8914 18.5921 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.7157 16.8274 0 + vertex 26.0434 17.0172 0 + vertex 25.6037 16.9917 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0434 17.0172 0 + vertex 25.7157 16.8274 0 + vertex 25.9855 16.8461 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9207 17.9138 0 + vertex 25.8914 18.5921 0 + vertex 25.7448 18.8483 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.8187 16.7495 0 + vertex 25.9855 16.8461 0 + vertex 25.7157 16.8274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.9855 16.8461 0 + vertex 25.8187 16.7495 0 + vertex 25.9096 16.7563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9207 17.9138 0 + vertex 25.7448 18.8483 0 + vertex 25.5652 19.0574 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.9096 16.7563 0 + vertex 25.8187 16.7495 0 + vertex 25.8659 16.7424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9207 17.9138 0 + vertex 25.5652 19.0574 0 + vertex 25.3564 19.2137 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0933 17.5963 0 + vertex 25.4856 17.2443 0 + vertex 26.0803 17.2678 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 0 + vertex 25.2614 17.6336 0 + vertex 25.3467 17.5167 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0696 17.9605 0 + vertex 25.163 17.7384 0 + vertex 25.2614 17.6336 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 0 + vertex 25.3564 19.2137 0 + vertex 25.1224 19.3115 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0009 18.2942 0 + vertex 25.0501 17.8316 0 + vertex 25.163 17.7384 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 0 + vertex 25.1224 19.3115 0 + vertex 24.9972 19.3368 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8914 18.5921 0 + vertex 24.9207 17.9138 0 + vertex 25.0501 17.8316 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 0 + vertex 24.9972 19.3368 0 + vertex 24.8672 19.3454 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6059 18.0475 0 + vertex 24.8672 19.3454 0 + vertex 24.6124 19.3722 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3564 19.2137 0 + vertex 24.6059 18.0475 0 + vertex 24.9207 17.9138 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2049 18.1437 0 + vertex 24.6124 19.3722 0 + vertex 24.2514 19.4451 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.6124 19.3722 0 + vertex 24.2049 18.1437 0 + vertex 24.6059 18.0475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.7039 18.207 0 + vertex 24.2514 19.4451 0 + vertex 23.8321 19.5531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2514 19.4451 0 + vertex 23.7039 18.207 0 + vertex 24.2049 18.1437 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0891 18.2417 0 + vertex 23.8321 19.5531 0 + vertex 23.4027 19.6849 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.8321 19.5531 0 + vertex 23.0891 18.2417 0 + vertex 23.7039 18.207 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9977 19.8472 0 + vertex 23.0891 18.2417 0 + vertex 23.4027 19.6849 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.3468 18.2522 0 + vertex 22.9977 19.8472 0 + vertex 22.6486 20.047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.5679 18.2611 0 + vertex 22.6486 20.047 0 + vertex 22.3515 20.2895 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9977 19.8472 0 + vertex 22.3468 18.2522 0 + vertex 23.0891 18.2417 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.5679 18.2611 0 + vertex 22.3515 20.2895 0 + vertex 22.2213 20.4283 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.8522 19.3078 0 + vertex 22.2213 20.4283 0 + vertex 22.1028 20.5797 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.753 19.8896 0 + vertex 22.1028 20.5797 0 + vertex 21.8989 20.9229 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6713 20.6529 0 + vertex 21.8989 20.9229 0 + vertex 21.7362 21.3239 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.58 21.4118 0 + vertex 21.7362 21.3239 0 + vertex 21.6111 21.7881 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6486 20.047 0 + vertex 21.5679 18.2611 0 + vertex 22.3468 18.2522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5238 21.6908 0 + vertex 21.6111 21.7881 0 + vertex 21.5197 22.3204 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4538 21.9215 0 + vertex 21.5197 22.3204 0 + vertex 21.4205 22.8275 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3646 22.1178 0 + vertex 21.4205 22.8275 0 + vertex 21.3493 23.064 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3646 22.1178 0 + vertex 21.3493 23.064 0 + vertex 21.2635 23.2891 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.2511 22.2936 0 + vertex 21.2635 23.2891 0 + vertex 21.1632 23.503 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.2511 22.2936 0 + vertex 21.1632 23.503 0 + vertex 21.0482 23.7058 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.8989 20.9229 0 + vertex 19.6713 20.6529 0 + vertex 19.753 19.8896 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.108 22.463 0 + vertex 21.0482 23.7058 0 + vertex 20.9184 23.8976 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.108 22.463 0 + vertex 20.9184 23.8976 0 + vertex 20.7738 24.0784 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.1028 20.5797 0 + vertex 19.753 19.8896 0 + vertex 19.8522 19.3078 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.108 22.463 0 + vertex 20.7738 24.0784 0 + vertex 20.6143 24.2484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2213 20.4283 0 + vertex 20.9709 18.304 0 + vertex 21.5679 18.2611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9302 22.6398 0 + vertex 20.6143 24.2484 0 + vertex 20.4398 24.4076 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2213 20.4283 0 + vertex 19.8522 19.3078 0 + vertex 20.9709 18.304 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9302 22.6398 0 + vertex 20.4398 24.4076 0 + vertex 20.2502 24.5562 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9709 18.304 0 + vertex 19.8522 19.3078 0 + vertex 20.7319 18.3459 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.9169 19.0772 0 + vertex 20.7319 18.3459 0 + vertex 19.8522 19.3078 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.6454 22.8797 0 + vertex 20.2502 24.5562 0 + vertex 20.0455 24.6942 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.7319 18.3459 0 + vertex 19.9169 19.0772 0 + vertex 20.5281 18.4055 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.9962 18.8829 0 + vertex 20.5281 18.4055 0 + vertex 19.9169 19.0772 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.5281 18.4055 0 + vertex 19.9962 18.8829 0 + vertex 20.3561 18.486 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3561 18.486 0 + vertex 20.0935 18.7216 0 + vertex 20.2124 18.5903 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 20.0935 18.7216 0 + vertex 20.3561 18.486 0 + vertex 19.9962 18.8829 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.6454 22.8797 0 + vertex 20.0455 24.6942 0 + vertex 19.5904 24.9388 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7362 21.3239 0 + vertex 19.58 21.4118 0 + vertex 19.6713 20.6529 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6111 21.7881 0 + vertex 19.5238 21.6908 0 + vertex 19.58 21.4118 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.5197 22.3204 0 + vertex 19.4538 21.9215 0 + vertex 19.5238 21.6908 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4205 22.8275 0 + vertex 19.3646 22.1178 0 + vertex 19.4538 21.9215 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.2635 23.2891 0 + vertex 19.2511 22.2936 0 + vertex 19.3646 22.1178 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0482 23.7058 0 + vertex 19.108 22.463 0 + vertex 19.2511 22.2936 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.318 23.1114 0 + vertex 19.5904 24.9388 0 + vertex 19.0737 25.1422 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.6143 24.2484 0 + vertex 18.9302 22.6398 0 + vertex 19.108 22.463 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2502 24.5562 0 + vertex 18.6454 22.8797 0 + vertex 18.9302 22.6398 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.9883 23.3086 0 + vertex 19.0737 25.1422 0 + vertex 18.5685 25.3244 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5904 24.9388 0 + vertex 18.318 23.1114 0 + vertex 18.6454 22.8797 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6969 23.4449 0 + vertex 18.5685 25.3244 0 + vertex 18.1033 25.5216 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0737 25.1422 0 + vertex 17.9883 23.3086 0 + vertex 18.318 23.1114 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.5685 25.3244 0 + vertex 17.6969 23.4449 0 + vertex 17.9883 23.3086 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6707 25.7385 0 + vertex 17.6969 23.4449 0 + vertex 18.1033 25.5216 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2809 23.9862 0 + vertex 17.6707 25.7385 0 + vertex 17.2631 25.98 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2809 23.9862 0 + vertex 17.2631 25.98 0 + vertex 16.873 26.2508 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1328 24.4531 0 + vertex 16.873 26.2508 0 + vertex 16.4932 26.5558 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6707 25.7385 0 + vertex 16.2809 23.9862 0 + vertex 17.6969 23.4449 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1328 24.4531 0 + vertex 16.4932 26.5558 0 + vertex 16.116 26.8997 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2197 24.8651 0 + vertex 16.116 26.8997 0 + vertex 15.734 27.2872 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5086 25.2416 0 + vertex 15.734 27.2872 0 + vertex 15.344 27.7317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.9664 25.6018 0 + vertex 15.344 27.7317 0 + vertex 15.2193 27.9155 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3979 26.1543 0 + vertex 15.2193 27.9155 0 + vertex 15.1337 28.0941 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.873 26.2508 0 + vertex 15.1328 24.4531 0 + vertex 16.2809 23.9862 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3979 26.1543 0 + vertex 15.1337 28.0941 0 + vertex 15.0817 28.2827 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3979 26.1543 0 + vertex 15.0817 28.2827 0 + vertex 15.0574 28.4965 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.116 26.8997 0 + vertex 14.2197 24.8651 0 + vertex 15.1328 24.4531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1102 29.496 0 + vertex 12.23 30.2784 0 + vertex 15.0694 29.0611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.6826 -24.0317 0 + vertex 38.119 -36.6694 0 + vertex 38.1248 -36.8464 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.3703 -24.1311 0 + vertex 38.0969 -36.5276 0 + vertex 38.119 -36.6694 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.2305 -29.6614 0 + vertex 38.0509 -36.4146 0 + vertex 38.0969 -36.5276 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.444 -31.6395 0 + vertex 38.0509 -36.4146 0 + vertex 38.2305 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0509 -36.4146 0 + vertex 37.444 -31.6395 0 + vertex 37.9736 -36.3241 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.8389 -33.2656 0 + vertex 37.9736 -36.3241 0 + vertex 37.444 -31.6395 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.9736 -36.3241 0 + vertex 36.8389 -33.2656 0 + vertex 37.8576 -36.2498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.8576 -36.2498 0 + vertex 36.8389 -33.2656 0 + vertex 37.6954 -36.1853 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.4479 -34.448 0 + vertex 37.6954 -36.1853 0 + vertex 36.8389 -33.2656 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.6954 -36.1853 0 + vertex 36.4479 -34.448 0 + vertex 37.203 -36.0604 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.3428 -34.844 0 + vertex 37.203 -36.0604 0 + vertex 36.4479 -34.448 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.3035 -35.0946 0 + vertex 37.203 -36.0604 0 + vertex 36.3428 -34.844 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.203 -36.0604 0 + vertex 36.3035 -35.0946 0 + vertex 36.6812 -35.9318 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.2992 -35.3418 0 + vertex 36.6812 -35.9318 0 + vertex 36.3035 -35.0946 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 36.3089 -35.532 0 + vertex 36.6812 -35.9318 0 + vertex 36.2992 -35.3418 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 36.3422 -35.6758 0 + vertex 36.5187 -35.8653 0 + vertex 36.3089 -35.532 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.6812 -35.9318 0 + vertex 36.3089 -35.532 0 + vertex 36.5187 -35.8653 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.5187 -35.8653 0 + vertex 36.3422 -35.6758 0 + vertex 36.4089 -35.7834 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.9993 -20.1225 0 + vertex 110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.9745 -19.9807 0 + vertex 47.9993 -20.1225 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.9233 -19.8512 0 + vertex 47.9745 -19.9807 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.845 -19.7221 0 + vertex 47.9233 -19.8512 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.7384 -19.5813 0 + vertex 47.845 -19.7221 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 47.6302 -19.4614 0 + vertex 47.7384 -19.5813 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.4995 15.0808 0 + vertex 47.6302 -19.4614 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.6302 -19.4614 0 + vertex 27.4995 15.0808 0 + vertex 47.5127 -19.3635 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 27.5539 14.7505 0 + vertex 47.5127 -19.3635 0 + vertex 27.4995 15.0808 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 27.5896 14.3319 0 + vertex 47.5127 -19.3635 0 + vertex 27.5539 14.7505 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.5127 -19.3635 0 + vertex 27.5896 14.3319 0 + vertex 47.3799 -19.2858 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 27.6103 13.7945 0 + vertex 47.3799 -19.2858 0 + vertex 27.5896 14.3319 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 27.6211 12.2412 0 + vertex 47.3799 -19.2858 0 + vertex 27.6103 13.7945 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.6024 10.7775 0 + vertex 47.3799 -19.2858 0 + vertex 27.6211 12.2412 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.3799 -19.2858 0 + vertex 27.6024 10.7775 0 + vertex 47.2257 -19.2263 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.5775 10.2019 0 + vertex 47.2257 -19.2263 0 + vertex 27.6024 10.7775 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.5397 9.70386 0 + vertex 47.2257 -19.2263 0 + vertex 27.5775 10.2019 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2257 -19.2263 0 + vertex 27.5397 9.70386 0 + vertex 47.044 -19.1833 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.9647 2.16551 0 + vertex 47.044 -19.1833 0 + vertex 27.5397 9.70386 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.044 -19.1833 0 + vertex 26.9647 2.16551 0 + vertex 46.8289 -19.1548 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.391 -19.1898 0 + vertex 41.7426 -19.1572 0 + vertex 44.9905 -19.265 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 42.162 -19.859 0 + vertex 42.9547 -20.2657 0 + vertex 42.1595 -19.6516 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.1212 -20.0931 0 + vertex 42.9547 -20.2657 0 + vertex 42.162 -19.859 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.4033 -19.9696 0 + vertex 42.1595 -19.6516 0 + vertex 42.9547 -20.2657 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 42.1595 -19.6516 0 + vertex 43.4033 -19.9696 0 + vertex 42.1149 -19.4743 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 41.9051 -19.2238 0 + vertex 44.6026 -19.3768 0 + vertex 41.7426 -19.1572 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.8201 -19.7253 0 + vertex 42.1149 -19.4743 0 + vertex 43.4033 -19.9696 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.6026 -19.3768 0 + vertex 41.9051 -19.2238 0 + vertex 44.2162 -19.5289 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.2162 -19.5289 0 + vertex 42.0297 -19.3306 0 + vertex 43.8201 -19.7253 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 42.1149 -19.4743 0 + vertex 43.8201 -19.7253 0 + vertex 42.0297 -19.3306 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 42.0297 -19.3306 0 + vertex 44.2162 -19.5289 0 + vertex 41.9051 -19.2238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.8289 -19.1548 0 + vertex 26.9647 2.16551 0 + vertex 46.274 -19.1343 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.9324 1.61996 0 + vertex 46.274 -19.1343 0 + vertex 26.9647 2.16551 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.274 -19.1343 0 + vertex 26.9324 1.61996 0 + vertex 45.8151 -19.1475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.8151 -19.1475 0 + vertex 26.901 1.43209 0 + vertex 45.391 -19.1898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.3957 -19.1543 0 + vertex 26.8581 1.29842 0 + vertex 41.156 -19.2119 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 30.3649 -19.705 0 + vertex 38.4916 -20.1181 0 + vertex 29.9546 -19.4981 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.4916 -20.1181 0 + vertex 30.3649 -19.705 0 + vertex 37.4642 -20.5001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.4642 -20.5001 0 + vertex 30.3649 -19.705 0 + vertex 36.5724 -20.813 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 30.7365 -19.9631 0 + vertex 36.5724 -20.813 0 + vertex 30.3649 -19.705 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.5724 -20.813 0 + vertex 30.7365 -19.9631 0 + vertex 35.9118 -21.0243 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 35.4013 -21.1287 0 + vertex 35.9118 -21.0243 0 + vertex 30.7365 -19.9631 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 32.0349 -22.2828 0 + vertex 34.6318 -22.2927 0 + vertex 34.653 -22.0706 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 31.6784 -25.7224 0 + vertex 33.8561 -30.1753 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.5092 -26.3899 0 + vertex 33.8561 -30.1753 0 + vertex 31.6003 -26.0834 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.2435 -26.857 0 + vertex 33.8561 -30.1753 0 + vertex 31.3939 -26.6463 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 32.0619 -22.7991 0 + vertex 32.0372 -23.3848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.9549 -21.8223 0 + vertex 34.653 -22.0706 0 + vertex 34.713 -21.8554 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8204 -21.404 0 + vertex 34.713 -21.8554 0 + vertex 34.8063 -21.6543 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 31.074 -20.2742 0 + vertex 35.4013 -21.1287 0 + vertex 30.7365 -19.9631 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 32.0349 -22.2828 0 + vertex 32.0619 -22.7991 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.653 -22.0706 0 + vertex 31.9549 -21.8223 0 + vertex 32.0349 -22.2828 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 31.3816 -20.64 0 + vertex 35.2304 -21.2043 0 + vertex 31.074 -20.2742 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.713 -21.8554 0 + vertex 31.8204 -21.404 0 + vertex 31.9549 -21.8223 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.9274 -21.474 0 + vertex 31.8204 -21.404 0 + vertex 34.8063 -21.6543 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 31.8204 -21.404 0 + vertex 34.9274 -21.474 0 + vertex 31.6298 -21.0145 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.0706 -21.3217 0 + vertex 31.6298 -21.0145 0 + vertex 34.9274 -21.474 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 31.6298 -21.0145 0 + vertex 35.0706 -21.3217 0 + vertex 31.3816 -20.64 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.2304 -21.2043 0 + vertex 31.3816 -20.64 0 + vertex 35.0706 -21.3217 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.9118 -21.0243 0 + vertex 35.4013 -21.1287 0 + vertex 35.5778 -21.102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.5436 -19.1343 0 + vertex 26.8581 1.29842 0 + vertex 41.3957 -19.1543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.391 -19.1898 0 + vertex 26.901 1.43209 0 + vertex 41.7426 -19.1572 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7426 -19.1572 0 + vertex 26.901 1.43209 0 + vertex 41.5436 -19.1343 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.8581 1.29842 0 + vertex 41.5436 -19.1343 0 + vertex 26.901 1.43209 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.4013 -21.1287 0 + vertex 31.074 -20.2742 0 + vertex 35.2304 -21.2043 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.5298 -19.7361 0 + vertex 29.9546 -19.4981 0 + vertex 38.4916 -20.1181 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.901 1.43209 0 + vertex 45.8151 -19.1475 0 + vertex 26.9324 1.61996 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.9905 -19.265 0 + vertex 41.7426 -19.1572 0 + vertex 44.6026 -19.3768 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 27.4227 15.3534 0 + vertex 27.4995 15.0808 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.5691 18.3624 0 + vertex 27.4227 15.3534 0 + vertex 110 110 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 26.6332 18.0815 0 + vertex 27.4227 15.3534 0 + vertex 26.5691 18.3624 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 26.6784 17.7808 0 + vertex 27.3198 15.5987 0 + vertex 26.6332 18.0815 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3198 15.5987 0 + vertex 26.6784 17.7808 0 + vertex 27.1872 15.8473 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1872 15.8473 0 + vertex 26.7051 17.4601 0 + vertex 27.0139 16.2113 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.0139 16.2113 0 + vertex 26.7051 17.4601 0 + vertex 26.8653 16.6367 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.8653 16.6367 0 + vertex 26.7051 17.4601 0 + vertex 26.7571 17.0706 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 26.7051 17.4601 0 + vertex 27.1872 15.8473 0 + vertex 26.6784 17.7808 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4227 15.3534 0 + vertex 26.6332 18.0815 0 + vertex 27.3198 15.5987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 26.4859 18.624 0 + vertex 26.5691 18.3624 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 26.3832 18.8665 0 + vertex 26.4859 18.624 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 26.2605 19.0904 0 + vertex 26.3832 18.8665 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 26.1176 19.296 0 + vertex 26.2605 19.0904 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 25.9541 19.4837 0 + vertex 26.1176 19.296 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.4677 24.3609 0 + vertex 25.9541 19.4837 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.9541 19.4837 0 + vertex 21.4677 24.3609 0 + vertex 25.7697 19.6539 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.6182 24.144 0 + vertex 25.7697 19.6539 0 + vertex 21.4677 24.3609 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.7697 19.6539 0 + vertex 21.6182 24.144 0 + vertex 25.5639 19.8069 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.7423 23.9135 0 + vertex 25.5639 19.8069 0 + vertex 21.6182 24.144 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.5639 19.8069 0 + vertex 21.7423 23.9135 0 + vertex 25.3364 19.943 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3364 19.943 0 + vertex 21.8437 23.6658 0 + vertex 25.087 20.0627 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.926 23.397 0 + vertex 25.087 20.0627 0 + vertex 21.8437 23.6658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.087 20.0627 0 + vertex 21.926 23.397 0 + vertex 24.8151 20.1664 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.8151 20.1664 0 + vertex 21.9928 23.1034 0 + vertex 24.5205 20.2543 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.0944 22.427 0 + vertex 24.2028 20.3268 0 + vertex 21.9928 23.1034 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2028 20.3268 0 + vertex 22.0944 22.427 0 + vertex 23.8617 20.3844 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.2815 21.5943 0 + vertex 23.8617 20.3844 0 + vertex 22.1689 21.9813 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.8617 20.3844 0 + vertex 22.2815 21.5943 0 + vertex 23.4814 20.4643 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.4341 21.2638 0 + vertex 23.1504 20.59 0 + vertex 22.2815 21.5943 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1504 20.59 0 + vertex 22.4341 21.2638 0 + vertex 22.8668 20.7638 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.7421 20.8693 0 + vertex 22.4341 21.2638 0 + vertex 22.6286 20.9877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8668 20.7638 0 + vertex 22.4341 21.2638 0 + vertex 22.7421 20.8693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.4814 20.4643 0 + vertex 22.2815 21.5943 0 + vertex 23.1504 20.59 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.1689 21.9813 0 + vertex 23.8617 20.3844 0 + vertex 22.0944 22.427 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5205 20.2543 0 + vertex 21.9928 23.1034 0 + vertex 24.2028 20.3268 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.9928 23.1034 0 + vertex 24.8151 20.1664 0 + vertex 21.926 23.397 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.8437 23.6658 0 + vertex 25.3364 19.943 0 + vertex 21.7423 23.9135 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 21.2873 24.568 0 + vertex 21.4677 24.3609 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 21.0733 24.7691 0 + vertex 21.2873 24.568 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.4091 30.0386 0 + vertex 21.0733 24.7691 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0733 24.7691 0 + vertex 15.4091 30.0386 0 + vertex 20.8221 24.9679 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8221 24.9679 0 + vertex 15.4091 30.0386 0 + vertex 20.53 25.168 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.53 25.168 0 + vertex 15.4091 30.0386 0 + vertex 20.1936 25.3734 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1936 25.3734 0 + vertex 15.4091 30.0386 0 + vertex 19.3729 25.8147 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 15.49 29.8698 0 + vertex 19.3729 25.8147 0 + vertex 15.4091 30.0386 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.3729 25.8147 0 + vertex 15.49 29.8698 0 + vertex 18.3311 26.3216 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 15.5622 29.5773 0 + vertex 18.3311 26.3216 0 + vertex 15.49 29.8698 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6504 26.6607 0 + vertex 15.5622 29.5773 0 + vertex 17.0889 26.9817 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 15.6202 29.1601 0 + vertex 17.0889 26.9817 0 + vertex 15.5622 29.5773 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.0889 26.9817 0 + vertex 15.6202 29.1601 0 + vertex 16.6359 27.2959 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.6359 27.2959 0 + vertex 15.6202 29.1601 0 + vertex 16.4467 27.454 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 15.6927 28.7106 0 + vertex 16.4467 27.454 0 + vertex 15.6202 29.1601 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2806 27.6146 0 + vertex 15.6927 28.7106 0 + vertex 16.1362 27.7792 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.1362 27.7792 0 + vertex 15.6927 28.7106 0 + vertex 16.0121 27.9491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.0121 27.9491 0 + vertex 15.6927 28.7106 0 + vertex 15.9071 28.1258 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.9071 28.1258 0 + vertex 15.6927 28.7106 0 + vertex 15.8197 28.3106 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.8197 28.3106 0 + vertex 15.6927 28.7106 0 + vertex 15.7487 28.5051 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4467 27.454 0 + vertex 15.6927 28.7106 0 + vertex 16.2806 27.6146 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3311 26.3216 0 + vertex 15.5622 29.5773 0 + vertex 17.6504 26.6607 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 15.3672 30.0768 0 + vertex 15.4091 30.0386 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.23504 38.5484 0 + vertex 15.3672 30.0768 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3672 30.0768 0 + vertex 5.23504 38.5484 0 + vertex 15.3252 30.0845 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.23 30.2784 0 + vertex 15.1102 29.496 0 + vertex 12.2821 30.4122 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1701 29.8123 0 + vertex 12.2821 30.4122 0 + vertex 15.1102 29.496 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.2821 30.4122 0 + vertex 15.1701 29.8123 0 + vertex 12.3025 30.5214 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.734 27.2872 0 + vertex 13.5086 25.2416 0 + vertex 14.2197 24.8651 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.344 27.7317 0 + vertex 13.2184 25.4225 0 + vertex 13.5086 25.2416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3025 30.5214 0 + vertex 15.1701 29.8123 0 + vertex 15.2437 30.0088 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.344 27.7317 0 + vertex 12.9664 25.6018 0 + vertex 13.2184 25.4225 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2193 27.9155 0 + vertex 12.7484 25.782 0 + vertex 12.9664 25.6018 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2193 27.9155 0 + vertex 12.5603 25.9653 0 + vertex 12.7484 25.782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2193 27.9155 0 + vertex 12.3979 26.1543 0 + vertex 12.5603 25.9653 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0304 29.9363 0 + vertex 15.0694 29.0611 0 + vertex 12.23 30.2784 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.291 30.606 0 + vertex 15.2437 30.0088 0 + vertex 15.2838 30.0618 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 5.26494 38.4452 0 + vertex 15.3252 30.0845 0 + vertex 5.23504 38.5484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2437 30.0088 0 + vertex 12.291 30.606 0 + vertex 12.3025 30.5214 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2838 30.0618 0 + vertex 12.2478 30.6663 0 + vertex 12.291 30.606 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 12.1728 30.7024 0 + vertex 15.3252 30.0845 0 + vertex 5.26494 38.4452 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3252 30.0845 0 + vertex 12.2478 30.6663 0 + vertex 15.2838 30.0618 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 12.2478 30.6663 0 + vertex 15.3252 30.0845 0 + vertex 12.1728 30.7024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1728 30.7024 0 + vertex 5.26494 38.4452 0 + vertex 12.0661 30.7144 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.7923 24.2655 0 + vertex 10.6869 21.0368 0 + vertex 10.9846 20.5521 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.55919 25.8755 0 + vertex 11.0419 28.1143 0 + vertex 11.0528 28.3898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5553 24.3991 0 + vertex 10.3935 21.5973 0 + vertex 10.6869 21.0368 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.085 24.7212 0 + vertex 10.0801 22.2703 0 + vertex 10.3935 21.5973 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.55919 25.8755 0 + vertex 11.0528 28.3898 0 + vertex 11.1213 28.9486 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6316 25.1032 0 + vertex 9.72206 23.0922 0 + vertex 10.0801 22.2703 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.39739 26.9794 0 + vertex 11.1213 28.9486 0 + vertex 11.2437 29.4873 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2092 25.5292 0 + vertex 9.38213 23.8626 0 + vertex 9.72206 23.0922 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.8324 25.9834 0 + vertex 9.08206 24.476 0 + vertex 9.38213 23.8626 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.39739 26.9794 0 + vertex 11.2437 29.4873 0 + vertex 11.4096 29.9696 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5154 26.4501 0 + vertex 8.80411 24.9522 0 + vertex 9.08206 24.476 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.39739 26.9794 0 + vertex 11.4096 29.9696 0 + vertex 11.5057 30.1782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.3839 26.6832 0 + vertex 8.6679 25.145 0 + vertex 8.80411 24.9522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.2726 26.9135 0 + vertex 8.53058 25.3107 0 + vertex 8.6679 25.145 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.02596 37.5856 0 + vertex 11.9476 30.6899 0 + vertex 5.13345 37.8458 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1835 27.139 0 + vertex 8.38993 25.4519 0 + vertex 8.53058 25.3107 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1184 27.3577 0 + vertex 8.24373 25.571 0 + vertex 8.38993 25.4519 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0734 27.5937 0 + vertex 8.08977 25.6705 0 + vertex 8.24373 25.571 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.13345 37.8458 0 + vertex 11.9476 30.6899 0 + vertex 5.21112 38.083 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0484 27.8474 0 + vertex 7.92584 25.7528 0 + vertex 8.08977 25.6705 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0419 28.1143 0 + vertex 7.55919 25.8755 0 + vertex 7.92584 25.7528 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1213 28.9486 0 + vertex 5.39739 26.9794 0 + vertex 7.12606 25.9588 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1213 28.9486 0 + vertex 7.12606 25.9588 0 + vertex 7.55919 25.8755 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0661 30.7144 0 + vertex 5.21112 38.083 0 + vertex 11.9476 30.6899 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 5.73586 26.6445 0 + vertex 7.12606 25.9588 0 + vertex 5.39739 26.9794 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 6.07308 26.3793 0 + vertex 7.12606 25.9588 0 + vertex 5.73586 26.6445 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.25596 38.2865 0 + vertex 12.0661 30.7144 0 + vertex 5.26494 38.4452 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.89167 37.3134 0 + vertex 11.9476 30.6899 0 + vertex 5.02596 37.5856 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.12606 25.9588 0 + vertex 6.07308 26.3793 0 + vertex 6.76329 26.0408 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.76329 26.0408 0 + vertex 6.07308 26.3793 0 + vertex 6.41393 26.1795 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.21112 38.083 0 + vertex 12.0661 30.7144 0 + vertex 5.25596 38.2865 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 5.20457 38.5758 0 + vertex 5.23504 38.5484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 110 110 0 + vertex 5.16325 38.5852 0 + vertex 5.20457 38.5758 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -110 110 0 + vertex 5.16325 38.5852 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.438314 27.347 0 + vertex 1.04514 28.0688 0 + vertex 1.0601 28.6106 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.11256 27.7809 0 + vertex 1.0601 28.6106 0 + vertex 1.07949 29.2543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04514 28.0688 0 + vertex -0.438314 27.347 0 + vertex -0.104203 27.2162 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.505992 27.0868 0 + vertex 1.00441 27.6053 0 + vertex 0.215611 27.1342 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.00441 27.6053 0 + vertex 0.505992 27.0868 0 + vertex 0.944126 27.2693 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.78547 28.4297 0 + vertex 1.07949 29.2543 0 + vertex 1.13903 29.8907 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.944126 27.2693 0 + vertex 0.734953 27.0776 0 + vertex 0.908598 27.1645 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.816408 27.0884 0 + vertex 0.908598 27.1645 0 + vertex 0.734953 27.0776 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.908598 27.1645 0 + vertex 0.816408 27.0884 0 + vertex 0.870515 27.1101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.44583 29.2754 0 + vertex 1.13903 29.8907 0 + vertex 1.24074 30.5277 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.734953 27.0776 0 + vertex 0.944126 27.2693 0 + vertex 0.505992 27.0868 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.08241 30.2998 0 + vertex 1.24074 30.5277 0 + vertex 1.38662 31.173 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04514 28.0688 0 + vertex 0.215611 27.1342 0 + vertex 1.00441 27.6053 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.38828 30.8734 0 + vertex 1.38662 31.173 0 + vertex 1.57871 31.8344 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.96814 32.1322 0 + vertex 1.57871 31.8344 0 + vertex 1.81903 32.5199 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.215611 27.1342 0 + vertex 1.04514 28.0688 0 + vertex -0.104203 27.2162 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.23933 32.8128 0 + vertex 1.81903 32.5199 0 + vertex 2.10958 33.2371 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.0601 28.6106 0 + vertex -0.7749 27.5359 0 + vertex -0.438314 27.347 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.73722 34.2652 0 + vertex 2.10958 33.2371 0 + vertex 2.4524 33.9939 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.96111 35.0324 0 + vertex 2.4524 33.9939 0 + vertex 2.84738 34.7996 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.0601 28.6106 0 + vertex -1.11256 27.7809 0 + vertex -0.7749 27.5359 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.11886 35.5644 0 + vertex 2.84738 34.7996 0 + vertex 3.26543 35.6052 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.41174 36.2975 0 + vertex 3.26543 35.6052 0 + vertex 3.68699 36.3778 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.07949 29.2543 0 + vertex -1.44988 28.0795 0 + vertex -1.11256 27.7809 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.41174 36.2975 0 + vertex 3.68699 36.3778 0 + vertex 4.09252 37.0842 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.54821 36.5001 0 + vertex 4.09252 37.0842 0 + vertex 4.46246 37.6912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.07949 29.2543 0 + vertex -1.78547 28.4297 0 + vertex -1.44988 28.0795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.61425 36.5608 0 + vertex 4.46246 37.6912 0 + vertex 4.77727 38.1658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.13903 29.8907 0 + vertex -2.11792 28.8291 0 + vertex -1.78547 28.4297 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.13903 29.8907 0 + vertex -2.44583 29.2754 0 + vertex -2.11792 28.8291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.61425 36.5608 0 + vertex 4.77727 38.1658 0 + vertex 5.01738 38.4749 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.24074 30.5277 0 + vertex -2.7678 29.7664 0 + vertex -2.44583 29.2754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.24074 30.5277 0 + vertex -3.08241 30.2998 0 + vertex -2.7678 29.7664 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.38662 31.173 0 + vertex -3.38828 30.8734 0 + vertex -3.08241 30.2998 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.67893 36.5944 0 + vertex 5.01738 38.4749 0 + vertex 5.10332 38.557 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.57871 31.8344 0 + vertex -3.68399 31.485 0 + vertex -3.38828 30.8734 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.57871 31.8344 0 + vertex -3.96814 32.1322 0 + vertex -3.68399 31.485 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.81903 32.5199 0 + vertex -4.23933 32.8128 0 + vertex -3.96814 32.1322 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -5.74234 36.6012 0 + vertex 5.16325 38.5852 0 + vertex -110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.4524 33.9939 0 + vertex -4.96111 35.0324 0 + vertex -4.73722 34.2652 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.10958 33.2371 0 + vertex -4.49616 33.5245 0 + vertex -4.23933 32.8128 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.10958 33.2371 0 + vertex -4.73722 34.2652 0 + vertex -4.49616 33.5245 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.84738 34.7996 0 + vertex -5.11886 35.5644 0 + vertex -4.96111 35.0324 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.26543 35.6052 0 + vertex -5.26884 35.9859 0 + vertex -5.11886 35.5644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.26543 35.6052 0 + vertex -5.41174 36.2975 0 + vertex -5.26884 35.9859 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.09252 37.0842 0 + vertex -5.54821 36.5001 0 + vertex -5.41174 36.2975 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.46246 37.6912 0 + vertex -5.61425 36.5608 0 + vertex -5.54821 36.5001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.01738 38.4749 0 + vertex -5.67893 36.5944 0 + vertex -5.61425 36.5608 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.10332 38.557 0 + vertex -5.74234 36.6012 0 + vertex -5.67893 36.5944 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.16325 38.5852 0 + vertex -5.74234 36.6012 0 + vertex 5.10332 38.557 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.2816 27.5955 0 + vertex -6.22417 29.538 0 + vertex -6.20957 31.7226 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5342 27.7352 0 + vertex -6.20957 31.7226 0 + vertex -6.19415 33.3563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.22417 29.538 0 + vertex -10.2816 27.5955 0 + vertex -8.79778 27.3973 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -7.89877 27.2865 0 + vertex -6.24249 28.8007 0 + vertex -8.79778 27.3973 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.24249 28.8007 0 + vertex -7.89877 27.2865 0 + vertex -6.27149 28.2565 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.6053 27.816 0 + vertex -6.19415 33.3563 0 + vertex -6.15766 34.7516 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -7.24334 27.2437 0 + vertex -6.27149 28.2565 0 + vertex -7.89877 27.2865 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -6.99768 27.2475 0 + vertex -6.31368 27.8729 0 + vertex -7.24334 27.2437 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.5445 27.8374 0 + vertex -6.15766 34.7516 0 + vertex -6.10555 35.7605 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -6.80178 27.2682 0 + vertex -6.31368 27.8729 0 + vertex -6.99768 27.2475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.31368 27.8729 0 + vertex -6.80178 27.2682 0 + vertex -6.37156 27.6173 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.37156 27.6173 0 + vertex -6.65192 27.3056 0 + vertex -6.44763 27.4571 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.4014 27.7989 0 + vertex -6.10555 35.7605 0 + vertex -6.07534 36.0738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.44763 27.4571 0 + vertex -6.65192 27.3056 0 + vertex -6.54439 27.3597 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -6.65192 27.3056 0 + vertex -6.37156 27.6173 0 + vertex -6.80178 27.2682 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.2259 27.7001 0 + vertex -6.07534 36.0738 0 + vertex -6.04327 36.2349 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.27149 28.2565 0 + vertex -7.24334 27.2437 0 + vertex -6.31368 27.8729 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.22417 29.538 0 + vertex -8.79778 27.3973 0 + vertex -6.24249 28.8007 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.20957 31.7226 0 + vertex -11.5342 27.7352 0 + vertex -10.2816 27.5955 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.4599 27.7917 0 + vertex -6.04327 36.2349 0 + vertex -5.92579 36.4611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.19415 33.3563 0 + vertex -12.6053 27.816 0 + vertex -11.5342 27.7352 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.15766 34.7516 0 + vertex -13.5445 27.8374 0 + vertex -12.6053 27.816 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.7335 27.9892 0 + vertex -5.92579 36.4611 0 + vertex -5.86569 36.5344 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.10555 35.7605 0 + vertex -14.4014 27.7989 0 + vertex -13.5445 27.8374 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.07534 36.0738 0 + vertex -15.2259 27.7001 0 + vertex -14.4014 27.7989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.04327 36.2349 0 + vertex -16.0674 27.5405 0 + vertex -15.2259 27.7001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.04327 36.2349 0 + vertex -20.7979 27.6578 0 + vertex -16.0674 27.5405 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -20.5419 27.5737 0 + vertex -16.0674 27.5405 0 + vertex -20.7979 27.6578 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0145 27.539 0 + vertex -5.86569 36.5344 0 + vertex -5.80457 36.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 0 + vertex -19.9368 27.2141 0 + vertex -19.3233 26.703 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 0 + vertex -20.1227 27.3549 0 + vertex -19.9368 27.2141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 0 + vertex -20.3206 27.4738 0 + vertex -20.1227 27.3549 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.74234 36.6012 0 + vertex -110 110 0 + vertex -5.80457 36.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9758 27.3196 0 + vertex -20.5419 27.5737 0 + vertex -20.3206 27.4738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.0674 27.5405 0 + vertex -20.5419 27.5737 0 + vertex -16.9758 27.3196 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.04327 36.2349 0 + vertex -21.1001 27.7294 0 + vertex -20.7979 27.6578 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -31.0145 27.539 0 + vertex -5.80457 36.5812 0 + vertex -110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.04327 36.2349 0 + vertex -21.4599 27.7917 0 + vertex -21.1001 27.7294 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.92579 36.4611 0 + vertex -22.3975 27.9007 0 + vertex -21.4599 27.7917 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.92579 36.4611 0 + vertex -23.1232 27.9594 0 + vertex -22.3975 27.9007 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.92579 36.4611 0 + vertex -23.7335 27.9892 0 + vertex -23.1232 27.9594 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.86569 36.5344 0 + vertex -24.1643 27.9885 0 + vertex -23.7335 27.9892 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.86569 36.5344 0 + vertex -24.2923 27.9761 0 + vertex -24.1643 27.9885 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.3751 26.2567 0 + vertex -24.3889 27.8265 0 + vertex -24.3858 27.8943 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3632 27.7532 0 + vertex -26.3751 26.2567 0 + vertex -24.8316 26.205 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.8395 26.4592 0 + vertex -24.3858 27.8943 0 + vertex -24.3515 27.9554 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3858 27.8943 0 + vertex -26.9353 26.3003 0 + vertex -26.3751 26.2567 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3858 27.8943 0 + vertex -27.4097 26.3653 0 + vertex -26.9353 26.3003 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.86569 36.5344 0 + vertex -31.0145 27.539 0 + vertex -24.2923 27.9761 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -29.2762 26.9865 0 + vertex -24.3515 27.9554 0 + vertex -30.0875 27.3102 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -28.7314 26.7626 0 + vertex -24.3515 27.9554 0 + vertex -29.2762 26.9865 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -27.8395 26.4592 0 + vertex -24.3515 27.9554 0 + vertex -28.2663 26.5892 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3858 27.8943 0 + vertex -27.8395 26.4592 0 + vertex -27.4097 26.3653 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -28.2663 26.5892 0 + vertex -24.3515 27.9554 0 + vertex -28.7314 26.7626 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3515 27.9554 0 + vertex -30.6543 27.4912 0 + vertex -30.0875 27.3102 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -30.8579 27.5312 0 + vertex -24.2923 27.9761 0 + vertex -31.0145 27.539 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3515 27.9554 0 + vertex -30.8579 27.5312 0 + vertex -30.6543 27.4912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.2923 27.9761 0 + vertex -30.8579 27.5312 0 + vertex -24.3515 27.9554 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.0225 24.5398 0 + vertex -31.2795 27.2229 0 + vertex -31.272 27.3506 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.7957 23.7338 0 + vertex -32.1061 22.3529 0 + vertex -31.5861 22.2399 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0826 24.213 0 + vertex -32.6306 22.489 0 + vertex -32.1061 22.3529 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2103 24.5339 0 + vertex -33.1564 22.6469 0 + vertex -32.6306 22.489 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2656 24.779 0 + vertex -33.6803 22.8253 0 + vertex -33.1564 22.6469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2656 24.779 0 + vertex -34.199 23.023 0 + vertex -33.6803 22.8253 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.5664 25.7376 0 + vertex -31.272 27.3506 0 + vertex -31.2059 27.4629 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2668 24.8727 0 + vertex -34.7094 23.2385 0 + vertex -34.199 23.023 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2507 24.9472 0 + vertex -34.7094 23.2385 0 + vertex -31.2668 24.8727 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2795 27.2229 0 + vertex -35.6921 23.7183 0 + vertex -35.2082 23.4707 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2795 27.2229 0 + vertex -36.1579 23.9798 0 + vertex -35.6921 23.7183 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2795 27.2229 0 + vertex -36.6025 24.2541 0 + vertex -36.1579 23.9798 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.8381 25.8495 0 + vertex -31.2059 27.4629 0 + vertex -31.1289 27.5158 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2795 27.2229 0 + vertex -37.0225 24.5398 0 + vertex -36.6025 24.2541 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0145 27.539 0 + vertex -110 110 0 + vertex -31.1289 27.5158 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 0 + vertex -38.2113 25.5018 0 + vertex -37.776 25.1404 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 0 + vertex -37.4147 24.8357 0 + vertex -37.0225 24.5398 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 0 + vertex -37.776 25.1404 0 + vertex -37.4147 24.8357 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.272 27.3506 0 + vertex -38.5664 25.7376 0 + vertex -38.2113 25.5018 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2059 27.4629 0 + vertex -38.7129 25.8089 0 + vertex -38.5664 25.7376 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -38.9416 25.8595 0 + vertex -31.1289 27.5158 0 + vertex -110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2059 27.4629 0 + vertex -38.8381 25.8495 0 + vertex -38.7129 25.8089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1289 27.5158 0 + vertex -38.9416 25.8595 0 + vertex -38.8381 25.8495 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -39.8955 -25.4747 0 + vertex -37.5315 -12.6425 0 + vertex -47.5785 -36.5332 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -47.4015 -36.3788 0 + vertex -39.8955 -25.4747 0 + vertex -47.5785 -36.5332 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.8955 -25.4747 0 + vertex -47.4015 -36.3788 0 + vertex -41.2695 -28.6585 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -41.2695 -28.6585 0 + vertex -47.1985 -36.2359 0 + vertex -42.2252 -30.9405 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -42.2252 -30.9405 0 + vertex -46.9715 -36.1082 0 + vertex -42.7651 -32.2453 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -46.7228 -35.999 0 + vertex -42.7651 -32.2453 0 + vertex -46.9715 -36.1082 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -42.7651 -32.2453 0 + vertex -46.4544 -35.9117 0 + vertex -43.2426 -33.2915 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -43.2426 -33.2915 0 + vertex -46.4544 -35.9117 0 + vertex -43.4655 -33.7273 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -43.4655 -33.7273 0 + vertex -46.1684 -35.8499 0 + vertex -43.682 -34.1098 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -43.682 -34.1098 0 + vertex -46.1684 -35.8499 0 + vertex -43.8952 -34.443 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -45.8475 -35.7893 0 + vertex -43.8952 -34.443 0 + vertex -46.1684 -35.8499 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -45.5508 -35.7136 0 + vertex -44.108 -34.7306 0 + vertex -45.8475 -35.7893 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.108 -34.7306 0 + vertex -45.5508 -35.7136 0 + vertex -44.3237 -34.9765 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.3237 -34.9765 0 + vertex -45.5508 -35.7136 0 + vertex -44.5451 -35.1844 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.7755 -35.3583 0 + vertex -45.5508 -35.7136 0 + vertex -45.0179 -35.5019 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -45.0179 -35.5019 0 + vertex -45.5508 -35.7136 0 + vertex -45.2753 -35.6191 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 110 0 + vertex -39.13 25.5984 0 + vertex -39.1175 25.7085 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.5451 -35.1844 0 + vertex -45.5508 -35.7136 0 + vertex -44.7755 -35.3583 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -43.8952 -34.443 0 + vertex -45.8475 -35.7893 0 + vertex -44.108 -34.7306 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -46.1684 -35.8499 0 + vertex -43.4655 -33.7273 0 + vertex -46.4544 -35.9117 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -46.4544 -35.9117 0 + vertex -42.7651 -32.2453 0 + vertex -46.7228 -35.999 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -46.9715 -36.1082 0 + vertex -42.2252 -30.9405 0 + vertex -47.1985 -36.2359 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -47.1985 -36.2359 0 + vertex -41.2695 -28.6585 0 + vertex -47.4015 -36.3788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5249 -12.7854 0 + vertex -39.8955 -25.4747 0 + vertex -38.3469 -21.8682 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5104 -12.4945 0 + vertex -47.7274 -36.6957 0 + vertex -37.5315 -12.6425 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.1186 25.4589 0 + vertex -47.9322 -37.0315 0 + vertex -47.846 -36.863 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.1186 25.4589 0 + vertex -110 110 0 + vertex -47.9322 -37.0315 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -47.984 -37.1977 0 + vertex -110 110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9322 -37.0315 0 + vertex -110 110 0 + vertex -47.984 -37.1977 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0817 25.7888 0 + vertex -110 110 0 + vertex -39.1175 25.7085 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0229 25.8392 0 + vertex -110 110 0 + vertex -39.0817 25.7888 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.9416 25.8595 0 + vertex -110 110 0 + vertex -39.0229 25.8392 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.9987 -20.2887 0 + vertex 110 -110 0 + vertex 47.9993 -20.1225 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.9737 -20.4912 0 + vertex 110 -110 0 + vertex 47.9987 -20.2887 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.8542 -21.0531 0 + vertex 110 -110 0 + vertex 47.9737 -20.4912 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.7155 -21.5429 0 + vertex 110 -110 0 + vertex 47.8542 -21.0531 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.5422 -21.9981 0 + vertex 110 -110 0 + vertex 47.7155 -21.5429 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.3383 -22.4165 0 + vertex 110 -110 0 + vertex 47.5422 -21.9981 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.1074 -22.796 0 + vertex 110 -110 0 + vertex 47.3383 -22.4165 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 46.8534 -23.1343 0 + vertex 110 -110 0 + vertex 47.1074 -22.796 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0668 -37.4245 0 + vertex 46.8534 -23.1343 0 + vertex 46.5801 -23.4293 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0668 -37.4245 0 + vertex 46.5801 -23.4293 0 + vertex 46.2914 -23.6786 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.103 -37.2562 0 + vertex 46.2914 -23.6786 0 + vertex 45.9909 -23.8802 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.1248 -36.8464 0 + vertex 45.9909 -23.8802 0 + vertex 45.6826 -24.0317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.119 -36.6694 0 + vertex 45.6826 -24.0317 0 + vertex 45.3703 -24.1311 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.2305 -29.6614 0 + vertex 45.3703 -24.1311 0 + vertex 45.0576 -24.176 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.342 -26.9688 0 + vertex 45.0576 -24.176 0 + vertex 44.7485 -24.1643 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 39.342 -26.9688 0 + vertex 44.7485 -24.1643 0 + vertex 44.4468 -24.0937 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.0406 -25.46 0 + vertex 44.4468 -24.0937 0 + vertex 44.1563 -23.9621 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.3103 -23.9223 0 + vertex 44.1563 -23.9621 0 + vertex 43.8807 -23.7673 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.7898 -23.5063 0 + vertex 43.8807 -23.7673 0 + vertex 43.6239 -23.5069 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.2267 -23.1657 0 + vertex 43.6239 -23.5069 0 + vertex 43.3873 -23.2523 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.2267 -23.1657 0 + vertex 43.3873 -23.2523 0 + vertex 43.1493 -23.0437 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.5728 -22.9356 0 + vertex 43.1493 -23.0437 0 + vertex 42.9376 -22.9028 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.6968 -22.8729 0 + vertex 42.9376 -22.9028 0 + vertex 42.8503 -22.8644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.6968 -22.8729 0 + vertex 42.8503 -22.8644 0 + vertex 42.7799 -22.851 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.9376 -22.9028 0 + vertex 42.6968 -22.8729 0 + vertex 42.5728 -22.9356 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.1493 -23.0437 0 + vertex 42.5728 -22.9356 0 + vertex 42.2267 -23.1657 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.6239 -23.5069 0 + vertex 42.2267 -23.1657 0 + vertex 41.7898 -23.5063 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 43.8807 -23.7673 0 + vertex 41.7898 -23.5063 0 + vertex 41.3103 -23.9223 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1563 -23.9621 0 + vertex 41.3103 -23.9223 0 + vertex 40.922 -24.2835 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1563 -23.9621 0 + vertex 40.922 -24.2835 0 + vertex 40.604 -24.6171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1563 -23.9621 0 + vertex 40.604 -24.6171 0 + vertex 40.3218 -24.9877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1563 -23.9621 0 + vertex 40.3218 -24.9877 0 + vertex 40.0406 -25.46 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.4468 -24.0937 0 + vertex 40.0406 -25.46 0 + vertex 39.7256 -26.0988 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.4468 -24.0937 0 + vertex 39.7256 -26.0988 0 + vertex 39.342 -26.9688 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.0576 -24.176 0 + vertex 39.342 -26.9688 0 + vertex 38.2305 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.0969 -36.5276 0 + vertex 45.3703 -24.1311 0 + vertex 38.2305 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.9909 -23.8802 0 + vertex 38.1248 -36.8464 0 + vertex 38.103 -37.2562 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.2914 -23.6786 0 + vertex 38.103 -37.2562 0 + vertex 38.0668 -37.4245 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.8534 -23.1343 0 + vertex 38.0668 -37.4245 0 + vertex 110 -110 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 38.0057 -37.5705 0 + vertex 110 -110 0 + vertex 38.0668 -37.4245 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.9137 -37.6957 0 + vertex 110 -110 0 + vertex 38.0057 -37.5705 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.7849 -37.8018 0 + vertex 110 -110 0 + vertex 37.9137 -37.6957 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.6132 -37.8903 0 + vertex 110 -110 0 + vertex 37.7849 -37.8018 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.3927 -37.9628 0 + vertex 110 -110 0 + vertex 37.6132 -37.8903 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.1174 -38.0208 0 + vertex 110 -110 0 + vertex 37.3927 -37.9628 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.7812 -38.066 0 + vertex 110 -110 0 + vertex 37.1174 -38.0208 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.9024 -38.1241 0 + vertex 110 -110 0 + vertex 36.7812 -38.066 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 34.7085 -38.1497 0 + vertex 110 -110 0 + vertex 35.9024 -38.1241 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 33.1514 -38.1555 0 + vertex 110 -110 0 + vertex 34.7085 -38.1497 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.1824 -38.1409 0 + vertex 110 -110 0 + vertex 33.1514 -38.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3202 -38.5182 0 + vertex 31.1824 -38.1409 0 + vertex 29.8192 -38.0948 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3202 -38.5182 0 + vertex 29.8192 -38.0948 0 + vertex 29.3448 -38.0588 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.8717 -38.4255 0 + vertex 29.3448 -38.0588 0 + vertex 28.9979 -38.0135 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4197 -38.2833 0 + vertex 28.9979 -38.0135 0 + vertex 28.7706 -37.9584 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6041 -37.8201 0 + vertex 28.7706 -37.9584 0 + vertex 28.6548 -37.8931 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4965 -36.9693 0 + vertex 26.4377 -35.4824 0 + vertex 28.4495 -37.1014 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.0012 -35.834 0 + vertex 28.4495 -37.1014 0 + vertex 26.4377 -35.4824 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4495 -37.1014 0 + vertex 26.0012 -35.834 0 + vertex 28.4243 -37.2355 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4243 -37.2355 0 + vertex 26.0012 -35.834 0 + vertex 28.4219 -37.3704 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.5601 -36.1579 0 + vertex 28.4219 -37.3704 0 + vertex 26.0012 -35.834 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4219 -37.3704 0 + vertex 25.5601 -36.1579 0 + vertex 28.443 -37.5048 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.1006 -36.4644 0 + vertex 28.443 -37.5048 0 + vertex 25.5601 -36.1579 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.443 -37.5048 0 + vertex 25.1006 -36.4644 0 + vertex 28.4883 -37.6376 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.6091 -36.7642 0 + vertex 28.4883 -37.6376 0 + vertex 25.1006 -36.4644 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4883 -37.6376 0 + vertex 24.6091 -36.7642 0 + vertex 28.5587 -37.7674 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.0719 -37.0678 0 + vertex 28.5587 -37.7674 0 + vertex 24.6091 -36.7642 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.5587 -37.7674 0 + vertex 24.0719 -37.0678 0 + vertex 28.6548 -37.8931 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.2902 -37.4839 0 + vertex 28.6548 -37.8931 0 + vertex 24.0719 -37.0678 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.6041 -37.8201 0 + vertex 28.6548 -37.8931 0 + vertex 23.2902 -37.4839 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.7706 -37.9584 0 + vertex 22.6041 -37.8201 0 + vertex 21.9889 -38.084 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.7706 -37.9584 0 + vertex 21.9889 -38.084 0 + vertex 21.4197 -38.2833 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.9979 -38.0135 0 + vertex 21.4197 -38.2833 0 + vertex 20.8717 -38.4255 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.3448 -38.0588 0 + vertex 20.8717 -38.4255 0 + vertex 20.3202 -38.5182 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.1824 -38.1409 0 + vertex 20.3202 -38.5182 0 + vertex 110 -110 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.7403 -38.5689 0 + vertex 110 -110 0 + vertex 20.3202 -38.5182 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.1073 -38.5852 0 + vertex 110 -110 0 + vertex 19.7403 -38.5689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4669 -38.5591 0 + vertex 110 -110 0 + vertex 19.1073 -38.5852 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.34756 -38.4712 0 + vertex 18.4669 -38.5591 0 + vertex 18.1792 -38.5233 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.55983 -38.4413 0 + vertex 18.1792 -38.5233 0 + vertex 17.9062 -38.4707 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.81563 -38.3852 0 + vertex 17.9062 -38.4707 0 + vertex 17.6424 -38.4 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.47346 -38.1927 0 + vertex 17.6424 -38.4 0 + vertex 17.3825 -38.3101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.35232 -37.8908 0 + vertex 17.3825 -38.3101 0 + vertex 17.1211 -38.1997 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.35232 -37.8908 0 + vertex 17.1211 -38.1997 0 + vertex 16.8529 -38.0675 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.2137 -37.0171 0 + vertex 16.8529 -38.0675 0 + vertex 16.342 -37.7658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5307 -36.9119 0 + vertex 16.342 -37.7658 0 + vertex 16.1153 -37.6039 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.8056 -32.2631 0 + vertex 11.5005 -31.4602 0 + vertex 14.73 -32.8205 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.1661 -32.3709 0 + vertex 14.73 -32.8205 0 + vertex 11.5005 -31.4602 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2214 -34.9805 0 + vertex 14.6774 -34.4466 0 + vertex 14.6656 -33.913 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.2214 -34.9805 0 + vertex 14.7369 -35.0944 0 + vertex 14.6774 -34.4466 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2239 -35.4151 0 + vertex 14.7369 -35.0944 0 + vertex 12.2468 -35.1875 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.7369 -35.0944 0 + vertex 12.2239 -35.4151 0 + vertex 14.8496 -35.6738 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.1496 -35.6584 0 + vertex 14.8496 -35.6738 0 + vertex 12.2239 -35.4151 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.8496 -35.6738 0 + vertex 12.1496 -35.6584 0 + vertex 14.927 -35.9398 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0956 -35.7642 0 + vertex 14.927 -35.9398 0 + vertex 12.1496 -35.6584 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.927 -35.9398 0 + vertex 12.0956 -35.7642 0 + vertex 15.0191 -36.1911 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0181 -35.8752 0 + vertex 15.0191 -36.1911 0 + vertex 12.0956 -35.7642 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0191 -36.1911 0 + vertex 12.0181 -35.8752 0 + vertex 15.1264 -36.4284 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.8034 -36.1064 0 + vertex 15.1264 -36.4284 0 + vertex 12.0181 -35.8752 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1264 -36.4284 0 + vertex 11.8034 -36.1064 0 + vertex 15.2493 -36.6526 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2493 -36.6526 0 + vertex 11.8034 -36.1064 0 + vertex 15.3884 -36.8644 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.5264 -36.339 0 + vertex 15.3884 -36.8644 0 + vertex 11.8034 -36.1064 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3884 -36.8644 0 + vertex 11.5264 -36.339 0 + vertex 15.544 -37.0647 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.208 -36.5595 0 + vertex 15.544 -37.0647 0 + vertex 11.5264 -36.339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.544 -37.0647 0 + vertex 11.208 -36.5595 0 + vertex 15.7167 -37.2541 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.8691 -36.7549 0 + vertex 15.7167 -37.2541 0 + vertex 11.208 -36.5595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.7167 -37.2541 0 + vertex 10.8691 -36.7549 0 + vertex 15.907 -37.4336 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.907 -37.4336 0 + vertex 10.8691 -36.7549 0 + vertex 16.1153 -37.6039 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.5307 -36.9119 0 + vertex 16.1153 -37.6039 0 + vertex 10.8691 -36.7549 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.342 -37.7658 0 + vertex 10.5307 -36.9119 0 + vertex 10.2137 -37.0171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8529 -38.0675 0 + vertex 10.2137 -37.0171 0 + vertex 8.4835 -37.477 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.94379 -37.3156 0 + vertex 10.2137 -37.0171 0 + vertex 9.93892 -37.0575 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.37163 -37.1827 0 + vertex 9.93892 -37.0575 0 + vertex 9.71926 -37.0921 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.93892 -37.0575 0 + vertex 9.37163 -37.1827 0 + vertex 8.94379 -37.3156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.2137 -37.0171 0 + vertex 8.94379 -37.3156 0 + vertex 8.4835 -37.477 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8529 -38.0675 0 + vertex 8.4835 -37.477 0 + vertex 7.35232 -37.8908 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.3825 -38.3101 0 + vertex 7.35232 -37.8908 0 + vertex 6.47346 -38.1927 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.6424 -38.4 0 + vertex 6.47346 -38.1927 0 + vertex 5.81563 -38.3852 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.9062 -38.4707 0 + vertex 5.81563 -38.3852 0 + vertex 5.55983 -38.4413 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.1792 -38.5233 0 + vertex 5.55983 -38.4413 0 + vertex 5.34756 -38.4712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4669 -38.5591 0 + vertex 5.34756 -38.4712 0 + vertex 110 -110 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.17491 -38.475 0 + vertex 110 -110 0 + vertex 5.34756 -38.4712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.974434 -38.4962 0 + vertex 5.17491 -38.475 0 + vertex 5.03796 -38.4533 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.32439 -38.26 0 + vertex 5.03796 -38.4533 0 + vertex 4.93281 -38.4063 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.26446 -37.4494 0 + vertex 4.74716 -37.8041 0 + vertex 4.72035 -37.4346 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.65588 -37.2809 0 + vertex 4.72035 -37.4346 0 + vertex 4.69132 -37.3222 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.72035 -37.4346 0 + vertex 4.65588 -37.2809 0 + vertex 4.26446 -37.4494 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.74716 -37.8041 0 + vertex 4.26446 -37.4494 0 + vertex 4.76904 -38.117 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.45158 -37.8545 0 + vertex 4.76904 -38.117 0 + vertex 4.26446 -37.4494 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.76904 -38.117 0 + vertex 3.45158 -37.8545 0 + vertex 4.80226 -38.2378 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.80226 -38.2378 0 + vertex 3.45158 -37.8545 0 + vertex 4.85555 -38.3343 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.20396 -37.9704 0 + vertex 4.85555 -38.3343 0 + vertex 3.45158 -37.8545 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.85555 -38.3343 0 + vertex 3.20396 -37.9704 0 + vertex 4.93281 -38.4063 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.93102 -38.0768 0 + vertex 4.93281 -38.4063 0 + vertex 3.20396 -37.9704 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.32439 -38.26 0 + vertex 4.93281 -38.4063 0 + vertex 2.93102 -38.0768 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.03796 -38.4533 0 + vertex 2.32439 -38.26 0 + vertex 1.66207 -38.4009 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.03796 -38.4533 0 + vertex 1.66207 -38.4009 0 + vertex 0.974434 -38.4962 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.17491 -38.475 0 + vertex 0.974434 -38.4962 0 + vertex 0.291868 -38.543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.17491 -38.475 0 + vertex 0.291868 -38.543 0 + vertex 110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.355246 -38.538 0 + vertex 110 -110 0 + vertex 0.291868 -38.543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.84865 -38.1451 0 + vertex -0.355246 -38.538 0 + vertex -0.936529 -38.478 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.657 -38.0883 0 + vertex -0.936529 -38.478 0 + vertex -1.19299 -38.4265 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30871 -38.0303 0 + vertex -1.19299 -38.4265 0 + vertex -1.4216 -38.36 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.30871 -38.0303 0 + vertex -1.4216 -38.36 0 + vertex -1.69347 -38.2465 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.0676 -37.9462 0 + vertex -1.69347 -38.2465 0 + vertex -1.95525 -38.0993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.4861 -31.0878 0 + vertex -6.39994 -29.738 0 + vertex -3.75417 -32.0301 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.75417 -32.0301 0 + vertex -6.39994 -29.738 0 + vertex -3.8527 -32.4651 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.70823 -32.8163 0 + vertex -3.8527 -32.4651 0 + vertex -6.39994 -29.738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.8527 -32.4651 0 + vertex -7.70823 -32.8163 0 + vertex -3.92523 -32.8697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.92523 -32.8697 0 + vertex -7.70823 -32.8163 0 + vertex -3.97004 -33.2395 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.98536 -33.5697 0 + vertex -3.97004 -33.2395 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.97277 -33.9877 0 + vertex -3.98536 -33.5697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.93569 -34.3989 0 + vertex -3.97277 -33.9877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.87516 -34.8013 0 + vertex -3.93569 -34.3989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.79219 -35.193 0 + vertex -3.87516 -34.8013 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.68783 -35.5721 0 + vertex -3.79219 -35.193 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30266 -36.7536 0 + vertex -3.56309 -35.9367 0 + vertex -3.68783 -35.5721 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.56309 -35.9367 0 + vertex -7.29619 -36.8569 0 + vertex -3.41901 -36.2848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.30695 -36.9638 0 + vertex -3.41901 -36.2848 0 + vertex -7.29619 -36.8569 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.41901 -36.2848 0 + vertex -7.30695 -36.9638 0 + vertex -3.25661 -36.6145 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.38017 -37.1883 0 + vertex -3.25661 -36.6145 0 + vertex -7.30695 -36.9638 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.25661 -36.6145 0 + vertex -7.38017 -37.1883 0 + vertex -3.07693 -36.924 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.07693 -36.924 0 + vertex -7.38017 -37.1883 0 + vertex -2.88099 -37.2112 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.52232 -37.4271 0 + vertex -2.88099 -37.2112 0 + vertex -7.38017 -37.1883 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.88099 -37.2112 0 + vertex -7.52232 -37.4271 0 + vertex -2.66982 -37.4742 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.73344 -37.6801 0 + vertex -2.66982 -37.4742 0 + vertex -7.52232 -37.4271 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.66982 -37.4742 0 + vertex -7.73344 -37.6801 0 + vertex -2.44446 -37.7112 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.8903 -37.8311 0 + vertex -2.44446 -37.7112 0 + vertex -7.73344 -37.6801 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.44446 -37.7112 0 + vertex -7.8903 -37.8311 0 + vertex -2.20592 -37.9202 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.20592 -37.9202 0 + vertex -7.8903 -37.8311 0 + vertex -1.95525 -38.0993 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.0676 -37.9462 0 + vertex -1.95525 -38.0993 0 + vertex -7.8903 -37.8311 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.69347 -38.2465 0 + vertex -8.0676 -37.9462 0 + vertex -8.30871 -38.0303 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.19299 -38.4265 0 + vertex -8.30871 -38.0303 0 + vertex -8.657 -38.0883 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.936529 -38.478 0 + vertex -8.657 -38.0883 0 + vertex -9.15585 -38.1249 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.936529 -38.478 0 + vertex -9.15585 -38.1249 0 + vertex -9.84865 -38.1451 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.355246 -38.538 0 + vertex -9.84865 -38.1451 0 + vertex -110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -9.84865 -38.1451 0 + vertex -11.9896 -38.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -11.9896 -38.1555 0 + vertex -14.1677 -38.1469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -14.1677 -38.1469 0 + vertex -14.8486 -38.1282 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.0369 -38.1201 0 + vertex -14.8486 -38.1282 0 + vertex -15.316 -38.0928 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.5664 -38.0841 0 + vertex -15.316 -38.0928 0 + vertex -15.614 -38.0352 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.2437 -38.0218 0 + vertex -15.614 -38.0352 0 + vertex -15.7132 -37.9965 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9096 -37.1689 0 + vertex -16.3508 -37.1428 0 + vertex -15.9511 -37.293 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9511 -37.293 0 + vertex -16.3508 -37.1428 0 + vertex -15.9675 -37.4163 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.5023 -37.3844 0 + vertex -15.9675 -37.4163 0 + vertex -16.3508 -37.1428 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9675 -37.4163 0 + vertex -16.5023 -37.3844 0 + vertex -15.9604 -37.5428 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9604 -37.5428 0 + vertex -16.5023 -37.3844 0 + vertex -15.9316 -37.6764 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.6872 -37.6188 0 + vertex -15.9316 -37.6764 0 + vertex -16.5023 -37.3844 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9316 -37.6764 0 + vertex -16.6872 -37.6188 0 + vertex -15.8777 -37.8324 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.8516 -37.795 0 + vertex -15.8777 -37.8324 0 + vertex -16.6872 -37.6188 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.8777 -37.8324 0 + vertex -16.8516 -37.795 0 + vertex -15.8396 -37.8957 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.8396 -37.8957 0 + vertex -16.8516 -37.795 0 + vertex -15.7865 -37.9502 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.0213 -37.9274 0 + vertex -15.7865 -37.9502 0 + vertex -16.8516 -37.795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.7865 -37.9502 0 + vertex -17.0213 -37.9274 0 + vertex -15.7132 -37.9965 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.2437 -38.0218 0 + vertex -15.7132 -37.9965 0 + vertex -17.0213 -37.9274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.614 -38.0352 0 + vertex -17.2437 -38.0218 0 + vertex -17.5664 -38.0841 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.316 -38.0928 0 + vertex -17.5664 -38.0841 0 + vertex -18.0369 -38.1201 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.8486 -38.1282 0 + vertex -18.0369 -38.1201 0 + vertex -110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -18.0369 -38.1201 0 + vertex -18.7028 -38.1359 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -18.7028 -38.1359 0 + vertex -20.8109 -38.1301 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -20.8109 -38.1301 0 + vertex -23.4866 -38.0828 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2718 -38.1638 0 + vertex -23.4866 -38.0828 0 + vertex -24.3782 -38.0456 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2718 -38.1638 0 + vertex -24.3782 -38.0456 0 + vertex -24.7978 -38.0047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2718 -38.1638 0 + vertex -24.7978 -38.0047 0 + vertex -24.9442 -37.9384 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.2673 -36.8782 0 + vertex -25.1078 -37.2448 0 + vertex -26.6839 -36.0968 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1078 -37.2448 0 + vertex -27.2673 -36.8782 0 + vertex -25.1419 -37.4158 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1419 -37.4158 0 + vertex -27.2673 -36.8782 0 + vertex -25.1453 -37.5754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1453 -37.5754 0 + vertex -27.2673 -36.8782 0 + vertex -25.1152 -37.719 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2718 -38.1638 0 + vertex -25.1152 -37.719 0 + vertex -27.2673 -36.8782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.1152 -37.719 0 + vertex -28.2718 -38.1638 0 + vertex -25.0491 -37.8416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.0491 -37.8416 0 + vertex -28.2718 -38.1638 0 + vertex -24.9442 -37.9384 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4866 -38.0828 0 + vertex -28.2718 -38.1638 0 + vertex -110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -28.2718 -38.1638 0 + vertex -37.6203 -38.1325 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -37.6203 -38.1325 0 + vertex -41.2883 -38.1087 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -41.2883 -38.1087 0 + vertex -44.3648 -38.0673 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -44.3648 -38.0673 0 + vertex -46.5272 -38.014 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -46.5272 -38.014 0 + vertex -47.1648 -37.9848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -47.1648 -37.9848 0 + vertex -47.4529 -37.9547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -110 -110 0 + vertex -47.4529 -37.9547 0 + vertex -47.6522 -37.8745 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.984 -37.1977 0 + vertex -110 -110 0 + vertex -47.9993 -37.3583 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.355246 -38.538 0 + vertex -110 -110 0 + vertex 110 -110 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.8044 -37.7712 0 + vertex -110 -110 0 + vertex -47.6522 -37.8745 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9115 -37.6485 0 + vertex -110 -110 0 + vertex -47.8044 -37.7712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9758 -37.5097 0 + vertex -110 -110 0 + vertex -47.9115 -37.6485 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9993 -37.3583 0 + vertex -110 -110 0 + vertex -47.9758 -37.5097 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.9547 -20.2657 0 + vertex 42.1212 -20.0931 0 + vertex 42.3117 -20.6924 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.0356 -20.3507 0 + vertex 42.3117 -20.6924 0 + vertex 42.1212 -20.0931 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.9515 -20.5727 0 + vertex 42.3117 -20.6924 0 + vertex 42.0356 -20.3507 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.3117 -20.6924 0 + vertex 41.9515 -20.5727 0 + vertex 42.1116 -20.8028 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.9099 -20.7296 0 + vertex 42.1116 -20.8028 0 + vertex 41.9515 -20.5727 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.1116 -20.8028 0 + vertex 41.9099 -20.7296 0 + vertex 41.9827 -20.8453 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 41.9179 -20.8207 0 + vertex 41.9827 -20.8453 0 + vertex 41.9099 -20.7296 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.9827 -20.8453 0 + vertex 41.9179 -20.8207 0 + vertex 41.9427 -20.8413 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.1157 -22.9178 0 + vertex 36.3671 -23.1585 0 + vertex 36.3539 -23.0402 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.1157 -22.9178 0 + vertex 36.3539 -23.0402 0 + vertex 36.3224 -22.9562 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.9442 -22.9618 0 + vertex 36.3671 -23.1585 0 + vertex 36.1157 -22.9178 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.2034 -22.8943 0 + vertex 36.3224 -22.9562 0 + vertex 36.2723 -22.9073 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3224 -22.9562 0 + vertex 36.2034 -22.8943 0 + vertex 36.1157 -22.9178 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.3671 -23.1585 0 + vertex 35.9442 -22.9618 0 + vertex 36.362 -23.3104 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.362 -23.3104 0 + vertex 35.9442 -22.9618 0 + vertex 36.2977 -23.7121 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.7166 -22.9783 0 + vertex 36.2977 -23.7121 0 + vertex 35.9442 -22.9618 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.4626 -22.9668 0 + vertex 36.2977 -23.7121 0 + vertex 35.7166 -22.9783 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.2977 -23.7121 0 + vertex 35.4626 -22.9668 0 + vertex 36.1622 -24.2394 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.2118 -22.9271 0 + vertex 36.1622 -24.2394 0 + vertex 35.4626 -22.9668 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.1622 -24.2394 0 + vertex 35.2118 -22.9271 0 + vertex 35.957 -24.8864 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.9345 -22.8399 0 + vertex 35.957 -24.8864 0 + vertex 35.2118 -22.9271 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.957 -24.8864 0 + vertex 34.9345 -22.8399 0 + vertex 35.6833 -25.6471 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.8338 -22.7839 0 + vertex 35.6833 -25.6471 0 + vertex 34.9345 -22.8399 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7558 -22.7166 0 + vertex 35.6833 -25.6471 0 + vertex 34.8338 -22.7839 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.6833 -25.6471 0 + vertex 34.7558 -22.7166 0 + vertex 35.3422 -26.5156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6986 -22.636 0 + vertex 35.3422 -26.5156 0 + vertex 34.7558 -22.7166 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 34.6986 -22.636 0 + vertex 34.6602 -22.54 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 34.6602 -22.54 0 + vertex 34.6385 -22.4262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6986 -22.636 0 + vertex 33.8561 -30.1753 0 + vertex 35.3422 -26.5156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 34.6385 -22.4262 0 + vertex 34.6318 -22.2927 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 32.0372 -23.3848 0 + vertex 31.9625 -24.0535 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 31.9625 -24.0535 0 + vertex 31.8392 -24.8188 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.6318 -22.2927 0 + vertex 31.8392 -24.8188 0 + vertex 31.6784 -25.7224 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 31.6784 -25.7224 0 + vertex 31.6003 -26.0834 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.3939 -26.6463 0 + vertex 33.8561 -30.1753 0 + vertex 31.5092 -26.3899 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.047 -27.0266 0 + vertex 33.8561 -30.1753 0 + vertex 31.2435 -26.857 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.7934 -27.1595 0 + vertex 33.8561 -30.1753 0 + vertex 31.047 -27.0266 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 30.2299 -31.0524 0 + vertex 33.1139 -32.0001 0 + vertex 30.2187 -30.9454 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.1034 -31.4773 0 + vertex 33.1139 -32.0001 0 + vertex 30.1726 -31.3179 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.1139 -32.0001 0 + vertex 30.1034 -31.4773 0 + vertex 32.5373 -33.371 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.8827 -31.8517 0 + vertex 32.5373 -33.371 0 + vertex 30.1034 -31.4773 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.2146 -31.1764 0 + vertex 33.1139 -32.0001 0 + vertex 30.2299 -31.0524 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.5499 -32.3032 0 + vertex 32.5373 -33.371 0 + vertex 29.8827 -31.8517 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 30.2187 -30.9454 0 + vertex 33.8561 -30.1753 0 + vertex 30.1812 -30.855 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.5373 -33.371 0 + vertex 29.5499 -32.3032 0 + vertex 32.0766 -34.3595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1179 -30.7807 0 + vertex 33.8561 -30.1753 0 + vertex 30.7934 -27.1595 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.1028 -32.8352 0 + vertex 32.0766 -34.3595 0 + vertex 29.5499 -32.3032 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.9008 -30.6099 0 + vertex 30.7934 -27.1595 0 + vertex 30.4717 -27.2602 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.0766 -34.3595 0 + vertex 29.1028 -32.8352 0 + vertex 31.8743 -34.7329 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8743 -34.7329 0 + vertex 29.1028 -32.8352 0 + vertex 31.6824 -35.0376 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.1726 -31.3179 0 + vertex 33.1139 -32.0001 0 + vertex 30.2146 -31.1764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 30.2187 -30.9454 0 + vertex 33.1139 -32.0001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8561 -30.1753 0 + vertex 30.1179 -30.7807 0 + vertex 30.1812 -30.855 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.7002 -30.4984 0 + vertex 30.4717 -27.2602 0 + vertex 30.0709 -27.3331 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.7934 -27.1595 0 + vertex 29.9008 -30.6099 0 + vertex 30.1179 -30.7807 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.4717 -27.2602 0 + vertex 29.7002 -30.4984 0 + vertex 29.9008 -30.6099 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.58 -27.3827 0 + vertex 29.7002 -30.4984 0 + vertex 30.0709 -27.3331 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.58 -27.3827 0 + vertex 29.5048 -30.449 0 + vertex 29.7002 -30.4984 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.988 -27.4135 0 + vertex 29.5048 -30.449 0 + vertex 29.58 -27.3827 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.5048 -30.449 0 + vertex 28.988 -27.4135 0 + vertex 29.3033 -30.4642 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.3033 -30.4642 0 + vertex 28.988 -27.4135 0 + vertex 29.0845 -30.5466 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.4568 -27.4364 0 + vertex 29.0845 -30.5466 0 + vertex 28.988 -27.4135 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.0845 -30.5466 0 + vertex 27.4568 -27.4364 0 + vertex 28.8369 -30.6989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.8369 -30.6989 0 + vertex 27.4568 -27.4364 0 + vertex 28.5495 -30.9236 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.5495 -30.9236 0 + vertex 27.4568 -27.4364 0 + vertex 28.2108 -31.2235 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.3891 -27.4375 0 + vertex 28.2108 -31.2235 0 + vertex 27.4568 -27.4364 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.2108 -31.2235 0 + vertex 25.3891 -27.4375 0 + vertex 27.276 -32.055 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.276 -32.055 0 + vertex 25.3891 -27.4375 0 + vertex 26.4309 -32.7448 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.4309 -32.7448 0 + vertex 25.3891 -27.4375 0 + vertex 25.6577 -33.3022 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3891 -27.4375 0 + vertex 25.2926 -33.5342 0 + vertex 25.6577 -33.3022 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3891 -27.4375 0 + vertex 24.9388 -33.7368 0 + vertex 25.2926 -33.5342 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.5256 -29.5327 0 + vertex 24.9388 -33.7368 0 + vertex 25.3891 -27.4375 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9388 -33.7368 0 + vertex 19.5256 -29.5327 0 + vertex 24.5942 -33.911 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.3985 -30.306 0 + vertex 24.5942 -33.911 0 + vertex 19.5256 -29.5327 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5942 -33.911 0 + vertex 19.3985 -30.306 0 + vertex 24.2566 -34.0582 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.9237 -34.1793 0 + vertex 19.3985 -30.306 0 + vertex 23.5933 -34.2758 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5933 -34.2758 0 + vertex 19.3985 -30.306 0 + vertex 23.2634 -34.3487 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.3204 -31.0557 0 + vertex 23.2634 -34.3487 0 + vertex 19.3985 -30.306 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.2634 -34.3487 0 + vertex 19.3204 -31.0557 0 + vertex 22.9315 -34.3992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.9315 -34.3992 0 + vertex 19.3204 -31.0557 0 + vertex 22.5956 -34.4285 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.5956 -34.4285 0 + vertex 19.3204 -31.0557 0 + vertex 22.2534 -34.4379 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2534 -34.4379 0 + vertex 19.3204 -31.0557 0 + vertex 21.8355 -34.4151 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.2935 -31.7496 0 + vertex 21.8355 -34.4151 0 + vertex 19.3204 -31.0557 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.8355 -34.4151 0 + vertex 19.2935 -31.7496 0 + vertex 21.43 -34.349 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.9171 -28.0436 0 + vertex 25.3891 -27.4375 0 + vertex 20.1247 -27.4424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.6992 -28.7679 0 + vertex 25.3891 -27.4375 0 + vertex 19.9171 -28.0436 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5256 -29.5327 0 + vertex 25.3891 -27.4375 0 + vertex 19.6992 -28.7679 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.2566 -34.0582 0 + vertex 19.3985 -30.306 0 + vertex 23.9237 -34.1793 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.43 -34.349 0 + vertex 19.2935 -31.7496 0 + vertex 21.0421 -34.2419 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0421 -34.2419 0 + vertex 19.2935 -31.7496 0 + vertex 20.6768 -34.0963 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.6768 -34.0963 0 + vertex 19.2935 -31.7496 0 + vertex 20.3392 -33.9144 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.3203 -32.3556 0 + vertex 20.3392 -33.9144 0 + vertex 19.2935 -31.7496 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.3392 -33.9144 0 + vertex 19.3203 -32.3556 0 + vertex 20.0345 -33.6987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0345 -33.6987 0 + vertex 19.3203 -32.3556 0 + vertex 19.7677 -33.4516 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.3545 -32.6156 0 + vertex 19.7677 -33.4516 0 + vertex 19.3203 -32.3556 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 19.403 -32.8415 0 + vertex 19.7677 -33.4516 0 + vertex 19.3545 -32.6156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7677 -33.4516 0 + vertex 19.403 -32.8415 0 + vertex 19.5439 -33.1754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5439 -33.1754 0 + vertex 19.403 -32.8415 0 + vertex 19.466 -33.0295 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.6824 -35.0376 0 + vertex 29.1028 -32.8352 0 + vertex 31.4948 -35.2825 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.4948 -35.2825 0 + vertex 29.1028 -32.8352 0 + vertex 31.3052 -35.4767 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.3052 -35.4767 0 + vertex 29.1028 -32.8352 0 + vertex 31.1075 -35.6291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.1075 -35.6291 0 + vertex 29.1028 -32.8352 0 + vertex 30.8955 -35.7486 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.8955 -35.7486 0 + vertex 29.1028 -32.8352 0 + vertex 30.6629 -35.8443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.6629 -35.8443 0 + vertex 29.1028 -32.8352 0 + vertex 30.4037 -35.9251 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.539 -33.4515 0 + vertex 30.4037 -35.9251 0 + vertex 29.1028 -32.8352 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.4037 -35.9251 0 + vertex 28.539 -33.4515 0 + vertex 29.7804 -36.0779 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.7804 -36.0779 0 + vertex 28.539 -33.4515 0 + vertex 29.5705 -36.1356 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.856 -34.1555 0 + vertex 29.5705 -36.1356 0 + vertex 28.539 -33.4515 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.5705 -36.1356 0 + vertex 27.856 -34.1555 0 + vertex 29.3757 -36.2065 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.3757 -36.2065 0 + vertex 27.856 -34.1555 0 + vertex 29.1966 -36.2895 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.1966 -36.2895 0 + vertex 27.856 -34.1555 0 + vertex 29.034 -36.3831 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.3514 -34.6537 0 + vertex 29.034 -36.3831 0 + vertex 27.856 -34.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.034 -36.3831 0 + vertex 27.3514 -34.6537 0 + vertex 28.8888 -36.4863 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.8888 -36.4863 0 + vertex 27.3514 -34.6537 0 + vertex 28.7617 -36.5978 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.8832 -35.0925 0 + vertex 28.7617 -36.5978 0 + vertex 27.3514 -34.6537 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.7617 -36.5978 0 + vertex 26.8832 -35.0925 0 + vertex 28.6534 -36.7163 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.6534 -36.7163 0 + vertex 26.8832 -35.0925 0 + vertex 28.5648 -36.8405 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.5648 -36.8405 0 + vertex 26.4377 -35.4824 0 + vertex 28.4965 -36.9693 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.4377 -35.4824 0 + vertex 28.5648 -36.8405 0 + vertex 26.8832 -35.0925 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5394 24.4322 0 + vertex -10.5711 24.4 0 + vertex -10.5349 24.4109 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.6591 24.5009 0 + vertex -10.5711 24.4 0 + vertex -10.5394 24.4322 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.9077 24.5958 0 + vertex -10.5711 24.4 0 + vertex -10.6591 24.5009 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.2625 24.7069 0 + vertex -10.5711 24.4 0 + vertex -10.9077 24.5958 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1612 23.8467 0 + vertex -11.2625 24.7069 0 + vertex -11.7825 24.8213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1612 23.8467 0 + vertex -11.7825 24.8213 0 + vertex -12.4277 24.907 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1612 23.8467 0 + vertex -12.4277 24.907 0 + vertex -13.1566 24.9634 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1612 23.8467 0 + vertex -13.1566 24.9634 0 + vertex -13.9275 24.99 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.2625 24.7069 0 + vertex -14.1612 23.8467 0 + vertex -10.5711 24.4 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.6988 24.986 0 + vertex -14.1612 23.8467 0 + vertex -13.9275 24.99 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15.4289 24.9511 0 + vertex -14.1612 23.8467 0 + vertex -14.6988 24.986 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.0412 23.3999 0 + vertex -15.4289 24.9511 0 + vertex -16.0762 24.8844 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.0412 23.3999 0 + vertex -16.0762 24.8844 0 + vertex -16.599 24.7853 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.4289 24.9511 0 + vertex -17.0412 23.3999 0 + vertex -14.1612 23.8467 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.1707 24.6702 0 + vertex -17.0412 23.3999 0 + vertex -16.599 24.7853 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -18.0818 24.5233 0 + vertex -17.0412 23.3999 0 + vertex -17.1707 24.6702 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -19.3158 23.0662 0 + vertex -18.0818 24.5233 0 + vertex -19.207 24.3637 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.0818 24.5233 0 + vertex -19.3158 23.0662 0 + vertex -17.0412 23.3999 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.4207 24.2101 0 + vertex -19.3158 23.0662 0 + vertex -19.207 24.3637 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4207 24.2101 0 + vertex -20.7318 22.8633 0 + vertex -19.3158 23.0662 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4207 24.2101 0 + vertex -21.5474 22.7309 0 + vertex -20.7318 22.8633 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.0315 22.8497 0 + vertex -21.5474 22.7309 0 + vertex -20.4207 24.2101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5474 22.7309 0 + vertex -21.755 22.7463 0 + vertex -21.6404 22.7266 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5474 22.7309 0 + vertex -22.0315 22.8497 0 + vertex -21.755 22.7463 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4207 24.2101 0 + vertex -22.3422 23.0246 0 + vertex -22.0315 22.8497 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4207 24.2101 0 + vertex -22.6524 23.2546 0 + vertex -22.3422 23.0246 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -22.6524 23.2546 0 + vertex -20.4207 24.2101 0 + vertex -23.3692 23.8604 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.12348 -21.5274 0 + vertex 10.1807 -23.3758 0 + vertex 10.149 -22.9513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.50498 -21.5121 0 + vertex 10.149 -22.9513 0 + vertex 10.1103 -22.7594 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.71946 -21.5983 0 + vertex 10.1807 -23.3758 0 + vertex 8.12348 -21.5274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.85925 -21.5524 0 + vertex 10.1103 -22.7594 0 + vertex 10.0571 -22.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.85925 -21.5524 0 + vertex 10.0571 -22.5812 0 + vertex 9.99008 -22.4166 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.1807 -23.3758 0 + vertex 7.71946 -21.5983 0 + vertex 10.1598 -23.7848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.99008 -22.4166 0 + vertex 9.90973 -22.2656 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.90973 -22.2656 0 + vertex 9.81668 -22.1284 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.29763 -21.7251 0 + vertex 10.1598 -23.7848 0 + vertex 7.71946 -21.5983 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.81668 -22.1284 0 + vertex 9.71152 -22.0048 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.71152 -22.0048 0 + vertex 9.59484 -21.895 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.18157 -21.6481 0 + vertex 9.59484 -21.895 0 + vertex 9.46723 -21.7989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.1598 -23.7848 0 + vertex 7.29763 -21.7251 0 + vertex 10.0892 -24.2416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.99008 -22.4166 0 + vertex 9.18157 -21.6481 0 + vertex 8.85925 -21.5524 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.8627 -21.9079 0 + vertex 10.0892 -24.2416 0 + vertex 7.29763 -21.7251 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.1103 -22.7594 0 + vertex 8.85925 -21.5524 0 + vertex 8.50498 -21.5121 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.149 -22.9513 0 + vertex 8.50498 -21.5121 0 + vertex 8.12348 -21.5274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0892 -24.2416 0 + vertex 6.8627 -21.9079 0 + vertex 9.95745 -24.7805 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.41939 -22.1469 0 + vertex 9.95745 -24.7805 0 + vertex 6.8627 -21.9079 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.97241 -22.4422 0 + vertex 9.95745 -24.7805 0 + vertex 6.41939 -22.1469 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.52647 -22.794 0 + vertex 9.75283 -25.4359 0 + vertex 5.97241 -22.4422 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.95745 -24.7805 0 + vertex 5.97241 -22.4422 0 + vertex 9.75283 -25.4359 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.75283 -25.4359 0 + vertex 5.52647 -22.794 0 + vertex 9.46376 -26.2422 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.08628 -23.2024 0 + vertex 9.46376 -26.2422 0 + vertex 5.52647 -22.794 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.45147 -23.8871 0 + vertex 9.46376 -26.2422 0 + vertex 5.08628 -23.2024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46376 -26.2422 0 + vertex 4.45147 -23.8871 0 + vertex 9.07864 -27.2338 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.85887 -24.6213 0 + vertex 9.07864 -27.2338 0 + vertex 4.45147 -23.8871 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.31148 -25.3951 0 + vertex 9.07864 -27.2338 0 + vertex 3.85887 -24.6213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.07864 -27.2338 0 + vertex 3.31148 -25.3951 0 + vertex 7.97377 -29.9101 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.81229 -26.1986 0 + vertex 7.97377 -29.9101 0 + vertex 3.31148 -25.3951 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.36428 -27.0218 0 + vertex 7.97377 -29.9101 0 + vertex 2.81229 -26.1986 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.97046 -27.8549 0 + vertex 7.97377 -29.9101 0 + vertex 2.36428 -27.0218 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.97377 -29.9101 0 + vertex 1.97046 -27.8549 0 + vertex 7.44603 -31.1479 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.63381 -28.6878 0 + vertex 7.44603 -31.1479 0 + vertex 1.97046 -27.8549 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.35733 -29.5107 0 + vertex 7.44603 -31.1479 0 + vertex 1.63381 -28.6878 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.44603 -31.1479 0 + vertex 1.35733 -29.5107 0 + vertex 7.00854 -32.1311 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.144 -30.3137 0 + vertex 7.00854 -32.1311 0 + vertex 1.35733 -29.5107 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.00854 -32.1311 0 + vertex 1.144 -30.3137 0 + vertex 6.63949 -32.8952 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.99682 -31.0867 0 + vertex 6.63949 -32.8952 0 + vertex 1.144 -30.3137 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.63949 -32.8952 0 + vertex 0.99682 -31.0867 0 + vertex 6.31707 -33.4759 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.918778 -31.8199 0 + vertex 6.31707 -33.4759 0 + vertex 0.99682 -31.0867 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.31707 -33.4759 0 + vertex 0.918778 -31.8199 0 + vertex 6.01946 -33.9088 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 5.05744 -34.678 0 + vertex 6.01946 -33.9088 0 + vertex 0.918778 -31.8199 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.01946 -33.9088 0 + vertex 5.41146 -34.4742 0 + vertex 5.87315 -34.0811 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.87315 -34.0811 0 + vertex 5.41146 -34.4742 0 + vertex 5.72486 -34.2297 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.01946 -33.9088 0 + vertex 5.05744 -34.678 0 + vertex 5.41146 -34.4742 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.906618 -32.1685 0 + vertex 5.05744 -34.678 0 + vertex 0.918778 -31.8199 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.05744 -34.678 0 + vertex 0.906618 -32.1685 0 + vertex 4.59905 -34.8756 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 0.912865 -32.5034 0 + vertex 4.59905 -34.8756 0 + vertex 0.906618 -32.1685 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.59905 -34.8756 0 + vertex 0.912865 -32.5034 0 + vertex 4.12685 -35.011 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 0.937893 -32.8234 0 + vertex 4.12685 -35.011 0 + vertex 0.912865 -32.5034 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.12685 -35.011 0 + vertex 0.937893 -32.8234 0 + vertex 3.65273 -35.0844 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 0.982074 -33.1272 0 + vertex 3.65273 -35.0844 0 + vertex 0.937893 -32.8234 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.65273 -35.0844 0 + vertex 0.982074 -33.1272 0 + vertex 3.18861 -35.0966 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.04578 -33.4136 0 + vertex 3.18861 -35.0966 0 + vertex 0.982074 -33.1272 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.18861 -35.0966 0 + vertex 1.04578 -33.4136 0 + vertex 2.7464 -35.0478 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.1294 -33.6813 0 + vertex 2.7464 -35.0478 0 + vertex 1.04578 -33.4136 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.7464 -35.0478 0 + vertex 1.1294 -33.6813 0 + vertex 2.53723 -35.0007 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.23329 -33.9292 0 + vertex 2.53723 -35.0007 0 + vertex 1.1294 -33.6813 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.53723 -35.0007 0 + vertex 1.23329 -33.9292 0 + vertex 2.33801 -34.9386 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.33801 -34.9386 0 + vertex 1.23329 -33.9292 0 + vertex 2.15022 -34.8616 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.35782 -34.1559 0 + vertex 2.15022 -34.8616 0 + vertex 1.23329 -33.9292 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.15022 -34.8616 0 + vertex 1.35782 -34.1559 0 + vertex 1.97535 -34.7696 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.8149 -34.6627 0 + vertex 1.50339 -34.3603 0 + vertex 1.67035 -34.5411 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.97535 -34.7696 0 + vertex 1.50339 -34.3603 0 + vertex 1.8149 -34.6627 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.50339 -34.3603 0 + vertex 1.97535 -34.7696 0 + vertex 1.35782 -34.1559 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.77546 17.1908 0 + vertex 9.73318 16.1788 0 + vertex 10.4375 16.5104 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.57086 16.213 0 + vertex 9.77546 17.1908 0 + vertex 9.46246 17.4938 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.77546 17.1908 0 + vertex 9.19116 15.9452 0 + vertex 9.73318 16.1788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.03973 17.0592 0 + vertex 9.46246 17.4938 0 + vertex 9.09841 17.8163 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.77546 17.1908 0 + vertex 8.57086 16.213 0 + vertex 9.19116 15.9452 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 8.76553 15.9481 0 + vertex 9.19116 15.9452 0 + vertex 8.57086 16.213 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 8.83337 15.875 0 + vertex 8.99158 15.8746 0 + vertex 8.76553 15.9481 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.99158 15.8746 0 + vertex 8.83337 15.875 0 + vertex 8.87708 15.8492 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.19116 15.9452 0 + vertex 8.76553 15.9481 0 + vertex 8.99158 15.8746 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.03973 17.0592 0 + vertex 9.09841 17.8163 0 + vertex 8.31493 18.4459 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.46246 17.4938 0 + vertex 8.03973 17.0592 0 + vertex 8.57086 16.213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.49889 18.0241 0 + vertex 8.31493 18.4459 0 + vertex 7.9444 18.7161 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.29207 18.4374 0 + vertex 7.9444 18.7161 0 + vertex 7.62063 18.9319 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.31493 18.4459 0 + vertex 7.49889 18.0241 0 + vertex 8.03973 17.0592 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.16351 18.7442 0 + vertex 7.62063 18.9319 0 + vertex 7.36805 19.075 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.9444 18.7161 0 + vertex 7.29207 18.4374 0 + vertex 7.49889 18.0241 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 0 + vertex 7.36805 19.075 0 + vertex 7.21113 19.1268 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.62063 18.9319 0 + vertex 7.16351 18.7442 0 + vertex 7.29207 18.4374 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.1242 19.0144 0 + vertex 7.21113 19.1268 0 + vertex 7.15267 19.0966 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.36805 19.075 0 + vertex 7.1273 18.8927 0 + vertex 7.16351 18.7442 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.36805 19.075 0 + vertex 7.1242 19.0144 0 + vertex 7.1273 18.8927 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.8138 -21.8092 0 + vertex 27.4312 -23.3865 0 + vertex 27.4186 -23.1088 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0922 -21.8157 0 + vertex 27.4186 -23.1088 0 + vertex 27.3785 -22.8574 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4312 -23.3865 0 + vertex 25.8138 -21.8092 0 + vertex 27.4161 -23.6904 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.3449 -21.8501 0 + vertex 27.3785 -22.8574 0 + vertex 27.3111 -22.6325 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.51 -21.8307 0 + vertex 27.4161 -23.6904 0 + vertex 25.8138 -21.8092 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5717 -21.9122 0 + vertex 27.3111 -22.6325 0 + vertex 27.2166 -22.4344 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7726 -22.0019 0 + vertex 27.2166 -22.4344 0 + vertex 27.0952 -22.2631 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7726 -22.0019 0 + vertex 27.0952 -22.2631 0 + vertex 26.9471 -22.1189 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.2166 -22.4344 0 + vertex 26.7726 -22.0019 0 + vertex 26.5717 -21.9122 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3111 -22.6325 0 + vertex 26.5717 -21.9122 0 + vertex 26.3449 -21.8501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3785 -22.8574 0 + vertex 26.3449 -21.8501 0 + vertex 26.0922 -21.8157 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4186 -23.1088 0 + vertex 26.0922 -21.8157 0 + vertex 25.8138 -21.8092 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.435 -24.8188 0 + vertex 27.4161 -23.6904 0 + vertex 25.51 -21.8307 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.4161 -23.6904 0 + vertex 24.435 -24.8188 0 + vertex 27.373 -24.0204 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.435 -24.8188 0 + vertex 25.51 -21.8307 0 + vertex 25.181 -21.8805 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.435 -24.8188 0 + vertex 25.181 -21.8805 0 + vertex 24.827 -21.9586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.435 -24.8188 0 + vertex 24.827 -21.9586 0 + vertex 24.5319 -22.0421 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.373 -24.0204 0 + vertex 24.435 -24.8188 0 + vertex 27.2401 -24.8188 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.2621 -22.1397 0 + vertex 24.435 -24.8188 0 + vertex 24.5319 -22.0421 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.0091 -22.2567 0 + vertex 24.435 -24.8188 0 + vertex 24.2621 -22.1397 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.7644 -22.3987 0 + vertex 24.435 -24.8188 0 + vertex 24.0091 -22.2567 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.5194 -22.5712 0 + vertex 24.435 -24.8188 0 + vertex 23.7644 -22.3987 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.2657 -22.7795 0 + vertex 24.435 -24.8188 0 + vertex 23.5194 -22.5712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.435 -24.8188 0 + vertex 23.2657 -22.7795 0 + vertex 23.3459 -24.8032 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.6979 -23.3258 0 + vertex 23.3459 -24.8032 0 + vertex 23.2657 -22.7795 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.2832 -23.7683 0 + vertex 23.3459 -24.8032 0 + vertex 22.6979 -23.3258 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.3459 -24.8032 0 + vertex 22.2832 -23.7683 0 + vertex 22.454 -24.761 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.9437 -24.1601 0 + vertex 22.454 -24.761 0 + vertex 22.2832 -23.7683 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.9437 -24.1601 0 + vertex 21.8514 -24.6984 0 + vertex 22.454 -24.761 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.7143 -24.4589 0 + vertex 21.8514 -24.6984 0 + vertex 21.9437 -24.1601 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7143 -24.4589 0 + vertex 21.6873 -24.6616 0 + vertex 21.8514 -24.6984 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.6518 -24.5601 0 + vertex 21.6873 -24.6616 0 + vertex 21.7143 -24.4589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6873 -24.6616 0 + vertex 21.6518 -24.5601 0 + vertex 21.63 -24.6221 0 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 110 -110 0 + vertex 110 110 -3 + vertex 110 110 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 110 110 -3 + vertex 110 -110 0 + vertex 110 -110 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -110 -110 -3 + vertex 110 110 -3 + vertex 110 -110 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 110 110 -3 + vertex -110 -110 -3 + vertex -110 110 -3 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -110 -110 -3 + vertex 110 -110 0 + vertex -110 -110 0 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 110 -110 0 + vertex -110 -110 -3 + vertex 110 -110 -3 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 110 110 -3 + vertex -110 110 0 + vertex 110 110 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -110 110 0 + vertex 110 110 -3 + vertex -110 110 -3 + endloop + endfacet +endsolid OpenSCAD_Model From 9edf2b5b0bd8f4d22210ea2d3eb85e0a53806fb6 Mon Sep 17 00:00:00 2001 From: KangDroid Date: Thu, 30 Aug 2018 16:53:07 +0900 Subject: [PATCH 133/364] Re-Enable fullscreen shortcut and add menu on ViewMenu --- resources/qml/Actions.qml | 1 + resources/qml/Menus/ViewMenu.qml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index d5572298f7..cc11e609f5 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -75,6 +75,7 @@ Item Action { id:toggleFullScreenAction + shortcut: StandardKey.FullScreen; text: catalog.i18nc("@action:inmenu","Toggle Fu&ll Screen"); iconName: "view-fullscreen"; } diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 6bbb0b1e2e..9a2e603673 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -73,4 +73,7 @@ Menu MenuSeparator {} MenuItem { action: Cura.Actions.expandSidebar; } + + MenuSeparator {} + MenuItem { action: Cura.Actions.toggleFullScreen; } } From fb1033ad9903ec197da4f6c339c258afc0bfe7ec Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 3 Sep 2018 10:03:11 +0200 Subject: [PATCH 134/364] Add the compatible machine families property to printerOutputModel This is used by the cluster to indicate by which families of printers the job can be displayed CL-894 --- cura/PrinterOutput/PrintJobOutputModel.py | 15 ++++++++++-- cura/PrinterOutput/PrinterOutputModel.py | 2 +- .../ClusterUM3OutputDevice.py | 4 ++-- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 23 +++++++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index 373f816373..535836eb5e 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, List from PyQt5.QtCore import QUrl from PyQt5.QtGui import QImage @@ -23,6 +23,7 @@ class PrintJobOutputModel(QObject): ownerChanged = pyqtSignal() configurationChanged = pyqtSignal() previewImageChanged = pyqtSignal() + compatibleMachineFamiliesChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: super().__init__(parent) @@ -36,11 +37,21 @@ class PrintJobOutputModel(QObject): self._owner = "" # Who started/owns the print job? self._configuration = None # type: Optional[ConfigurationModel] - + self._compatible_machine_families = [] # type: List[str] self._preview_image_id = 0 self._preview_image = None + @pyqtProperty("QStringList", notify=compatibleMachineFamiliesChanged) + def compatibleMachineFamilies(self): + # Hack; Some versions of cluster will return a family more than once... + return set(self._compatible_machine_families) + + def setCompatibleMachineFamilies(self, compatible_machine_families: List[str]) -> None: + if self._compatible_machine_families != compatible_machine_families: + self._compatible_machine_families = compatible_machine_families + self.compatibleMachineFamiliesChanged.emit() + @pyqtProperty(QUrl, notify=previewImageChanged) def preview_image_url(self): self._preview_image_id += 1 diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index ba567b7bac..f009a33178 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -35,7 +35,7 @@ class PrinterOutputModel(QObject): self._key = "" # Unique identifier self._controller = output_controller self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)] - self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer + self._printer_configuration = ConfigurationModel() # 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 diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 7506a870a9..e0d996c80e 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -131,7 +131,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): raise OutputDeviceError.WriteRequestFailedError(i18n_catalog.i18nc("@info:status", "There are no file formats available to write with!")) preferred_format = file_formats[0] - #J ust take the first file format available. + # Just take the first file format available. if file_handler is not None: writer = file_handler.getWriterByMimeType(cast(str, preferred_format["mime_type"])) else: @@ -552,7 +552,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): configuration.setExtruderConfigurations(extruders) print_job.updateConfiguration(configuration) - + print_job.setCompatibleMachineFamilies(data["compatible_machine_families"]) print_job.stateChanged.connect(self._printJobStateChanged) return print_job diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index e54e70043e..1d5e5e6ce5 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -290,7 +290,30 @@ Item onOpened: visible = true } + Row + { + id: printerFamilyPills + spacing: 0.5 * UM.Theme.getSize("default_margin").width + anchors + { + left: parent.left + right: parent.right + bottom: extrudersInfo.top + bottomMargin: UM.Theme.getSize("default_margin").height + } + height: childrenRect.height + Repeater + { + model: printJob.compatibleMachineFamilies + delegate: PrinterFamilyPill + { + text: modelData + color: UM.Theme.getColor("viewport_background") + padding: 3 + } + } + } // PrintCore && Material config Row { From 2e5b11af9d1c60b72cc2c9bca3e4a1410e4e60a5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 3 Sep 2018 10:05:20 +0200 Subject: [PATCH 135/364] Fixed codestyle issue Switching between codestyles is hard :( --- cura/PrinterOutput/PrintJobOutputModel.py | 2 +- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 2 +- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index 535836eb5e..c8d813f17c 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -53,7 +53,7 @@ class PrintJobOutputModel(QObject): self.compatibleMachineFamiliesChanged.emit() @pyqtProperty(QUrl, notify=previewImageChanged) - def preview_image_url(self): + def previewImageUrl(self): self._preview_image_id += 1 # There is an image provider that is called "camera". In order to ensure that the image qml object, that # requires a QUrl to function, updates correctly we add an increasing number. This causes to see the QUrl diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index dbc5465056..aa81ad85ff 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -480,7 +480,7 @@ Component Image { id: printJobPreview - source: modelData.activePrintJob != null ? modelData.activePrintJob.preview_image_url : "" + source: modelData.activePrintJob != null ? modelData.activePrintJob.previewImageUrl : "" anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter width: parent.width / 2 diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 1d5e5e6ce5..c3e445d933 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -80,7 +80,7 @@ Item Image { - source: printJob.preview_image_url + source: printJob.previewImageUrl anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: totalTimeLabel.bottom From b7d7091de88315415e39365985873a6ecd06f515 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 3 Sep 2018 10:26:27 +0200 Subject: [PATCH 136/364] Add padding around the printer icons CL-893 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index aa81ad85ff..3a0c37e830 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -135,30 +135,38 @@ Component onClicked: base.collapsed = !base.collapsed } - UM.RecolorImage + Item { id: machineIcon + // Yeah, this is hardcoded now, but I can't think of a good way to fix this. + // The UI is going to get another update soon, so it's probably not worth the effort... + width: 58 + height: 58 anchors.top: parent.top anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.left: parent.left - source: + + UM.RecolorImage { - switch(modelData.type) + anchors.centerIn: parent + source: { - case "Ultimaker 3": - return "UM3-icon.svg" - case "Ultimaker 3 Extended": - return "UM3x-icon.svg" - case "Ultimaker S5": - return "UMs5-icon.svg" + switch(modelData.type) + { + case "Ultimaker 3": + return "UM3-icon.svg" + case "Ultimaker 3 Extended": + return "UM3x-icon.svg" + case "Ultimaker S5": + return "UMs5-icon.svg" + } } + width: sourceSize.width + height: sourceSize.height + + color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } - width: sourceSize.width - height: sourceSize.height - - color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") } - Item { height: childrenRect.height From 1136033f9799ed1249dfb4f988511a12853b1a12 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 3 Sep 2018 10:50:07 +0200 Subject: [PATCH 137/364] Remove superfluous check for 'ok T:' This check is never hit because if there is 'ok T:' in the bytes array then it will have hit the first check for 'ok ' and 'T:'. --- plugins/USBPrinting/USBPrinterOutputDevice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 45b566fcab..4ceda52875 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -326,7 +326,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): if self._firmware_name is None: self.sendCommand("M115") - if (b"ok " in line and b"T:" in line) or b"ok T:" in line or line.startswith(b"T:") or b"ok B:" in line or line.startswith(b"B:"): # Temperature message. 'T:' for extruder and 'B:' for bed + if (b"ok " in line and b"T:" in line) or line.startswith(b"T:") or b"ok B:" in line or line.startswith(b"B:"): # Temperature message. 'T:' for extruder and 'B:' for bed extruder_temperature_matches = re.findall(b"T(\d*): ?([\d\.]+) ?\/?([\d\.]+)?", line) # Update all temperature values matched_extruder_nrs = [] From 6df029971d2f0dc4070959c892f2d79c3cf1cb04 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 3 Sep 2018 11:02:24 +0200 Subject: [PATCH 138/364] Don't crash if layer height is a formula We obtain the layer height here but that might be a formula so we should evaluate that formula here. Fixes #4005. --- cura/Machines/Models/QualityProfilesDropDownMenuModel.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index 59c4f4fa5b..dc2482ed45 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -6,10 +6,10 @@ from PyQt5.QtCore import Qt from UM.Application import Application from UM.Logger import Logger from UM.Qt.ListModel import ListModel +from UM.Settings.SettingFunction import SettingFunction from cura.Machines.QualityManager import QualityGroup - # # QML Model for all built-in quality profiles. This model is used for the drop-down quality menu. # @@ -106,4 +106,8 @@ class QualityProfilesDropDownMenuModel(ListModel): 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() + return float(layer_height) From 149a47e5a779c0ae10fbccf82c7dccf4ce1dce53 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 3 Sep 2018 11:15:25 +0200 Subject: [PATCH 139/364] Remove double keys from right click menu, remove backspaceSelectionAction because not used CURA-5642 --- resources/qml/Actions.qml | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 21e6eebf58..db230ebca7 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -110,28 +110,28 @@ Item Action { id: view3DCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&3D View"); + text: catalog.i18nc("@action:inmenu menubar:view","3D View"); onTriggered: UM.Controller.rotateView("3d", 0); } Action { id: viewFrontCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Front View"); + text: catalog.i18nc("@action:inmenu menubar:view","Front View"); onTriggered: UM.Controller.rotateView("home", 0); } Action { id: viewTopCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Top View"); + text: catalog.i18nc("@action:inmenu menubar:view","Top View"); onTriggered: UM.Controller.rotateView("y", 90); } Action { id: viewLeftSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Left Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Left Side View"); onTriggered: UM.Controller.rotateView("x", 90); } @@ -229,23 +229,13 @@ Item Action { id: deleteSelectionAction; - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount); + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-delete"; shortcut: StandardKey.Delete; onTriggered: CuraActions.deleteSelection(); } - Action //Also add backspace as the same function as delete because on Macintosh keyboards the button called "delete" is actually a backspace, and the user expects it to function as a delete. - { - id: backspaceSelectionAction - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount) - enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection - iconName: "edit-delete" - shortcut: StandardKey.Backspace - onTriggered: CuraActions.deleteSelection() - } - Action { id: centerSelectionAction; @@ -328,7 +318,7 @@ Item Action { id: selectAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Select All Models"); + text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models"); enabled: UM.Controller.toolsEnabled; iconName: "edit-select-all"; shortcut: "Ctrl+A"; @@ -338,7 +328,7 @@ Item Action { id: deleteAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Clear Build Plate"); + text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate"); enabled: UM.Controller.toolsEnabled; iconName: "edit-delete"; shortcut: "Ctrl+D"; @@ -348,7 +338,7 @@ Item Action { id: reloadAllAction; - text: catalog.i18nc("@action:inmenu menubar:file","Re&load All Models"); + text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models"); iconName: "document-revert"; shortcut: "F5" onTriggered: CuraApplication.reloadAll(); From 39694637580695978fac3a52b268272a6e64d535 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 3 Sep 2018 11:16:17 +0200 Subject: [PATCH 140/364] Remove the old "not setup as group" notification CL-896 --- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index a3bfdeb843..73ddbaf61a 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -23,23 +23,6 @@ Component name: "cura" } - Label - { - id: activePrintersLabel - font: UM.Theme.getFont("large") - - anchors - { - top: parent.top - topMargin: UM.Theme.getSize("default_margin").height * 2 // a bit more spacing to give it some breathing room - horizontalCenter: parent.horizontalCenter - } - - text: OutputDevice.printers.length == 0 ? catalog.i18nc("@label: arg 1 is group name", "%1 is not set up to host a group of connected Ultimaker 3 printers").arg(Cura.MachineManager.printerOutputDevices[0].name) : "" - - visible: OutputDevice.printers.length == 0 - } - Label { id: manageQueueLabel From ab572e9de24806963c9523bb4023011de3662a50 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 3 Sep 2018 14:03:44 +0200 Subject: [PATCH 141/364] SettingFunction evaluation needs a stack to provide values Note that this is still not correct. When the value gets evaluated, we need to evaluate it with that container in the stack(s), but this case, the stack may have other containers, so the evaluation can give incorrect values because its context is simply not correct. This change only prevents it from breaking because it's missing a provider. --- cura/Machines/Models/QualityProfilesDropDownMenuModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index dc2482ed45..a01cc1194f 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -108,6 +108,6 @@ class QualityProfilesDropDownMenuModel(ListModel): layer_height = container.getProperty("layer_height", "value") if isinstance(layer_height, SettingFunction): - layer_height = layer_height() + layer_height = layer_height(global_stack) return float(layer_height) From bf1d3b964f87ad587f5cb2cb2c02ea5a3d167b35 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 3 Sep 2018 14:30:05 +0200 Subject: [PATCH 142/364] Skip loading a reply if it's not later handled. Contributes to CURA-5670. --- .../qml/ToolboxDownloadsGridTile.qml | 2 +- .../qml/ToolboxDownloadsShowcaseTile.qml | 2 +- plugins/Toolbox/src/Toolbox.py | 30 ++++++++++--------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml index ebd4c006f8..4366db041c 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml @@ -9,7 +9,7 @@ import UM 1.1 as UM Item { - property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfPackagesByAuthor(model.id) : 1 + property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1 property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) height: childrenRect.height Layout.alignment: Qt.AlignTop | Qt.AlignLeft diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml index 15d1ae302c..845bbe8f91 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml @@ -9,7 +9,7 @@ import UM 1.1 as UM Rectangle { - property int packageCount: toolbox.viewCategory == "material" ? toolbox.getTotalNumberOfPackagesByAuthor(model.id) : 1 + property int packageCount: toolbox.viewCategory == "material" ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1 property int installedPackages: toolbox.viewCategory == "material" ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) id: tileBase width: UM.Theme.getSize("toolbox_thumbnail_large").width + (2 * UM.Theme.getSize("default_lining").width) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 52b00f5069..615fc06ebc 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -514,10 +514,11 @@ class Toolbox(QObject, Extension): count += 1 return count + # This slot is only used to get the number of material packages by author, not any other type of packages. @pyqtSlot(str, result = int) - def getTotalNumberOfPackagesByAuthor(self, author_id: str) -> int: + def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["packages"]: + for package in self._metadata["materials_available"]: if package["author"]["author_id"] == author_id: count += 1 return count @@ -606,8 +607,21 @@ class Toolbox(QObject, Extension): self.resetDownload() return + # HACK: These request are not handled independently at this moment, but together from the "packages" call + do_not_handle = [ + "materials_available", + "materials_showcase", + "plugins_available", + "plugins_showcase", + ] + if reply.operation() == QNetworkAccessManager.GetOperation: for type, url in self._request_urls.items(): + + # HACK: Do nothing because we'll handle these from the "packages" call + if type in do_not_handle: + return + if reply.url() == url: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: try: @@ -623,18 +637,6 @@ class Toolbox(QObject, Extension): if not self._models[type]: Logger.log("e", "Could not find the %s model.", type) break - - # HACK - do_not_handle = [ - "materials_available", - "materials_showcase", - "plugins_available", - "plugins_showcase", - ] - - # Do nothing because we'll handle these from the "packages" call - if type in do_not_handle: - return self._metadata[type] = json_data["data"] self._models[type].setMetadata(self._metadata[type]) From b638b2274a25070aad0450d0e1fe0c4103ee7d3c Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 3 Sep 2018 15:12:52 +0200 Subject: [PATCH 143/364] Count only the material packages by author, not all packages. Contributes to CURA-5670. --- plugins/Toolbox/src/Toolbox.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 615fc06ebc..00864c6b4e 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -518,9 +518,10 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = int) def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["materials_available"]: - if package["author"]["author_id"] == author_id: - count += 1 + for package in self._metadata["packages"]: + if package["package_type"] == "material": + if package["author"]["author_id"] == author_id: + count += 1 return count @pyqtSlot(str, result = bool) From dd778f0450219cbc2f7309eeb08bc20065bd51af Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 4 Sep 2018 13:27:17 +0200 Subject: [PATCH 144/364] Add enabled state to printer, so that it can be displayed. This ensures that if a printer is set to "Not available", that the interface can correctly show it CL-896 --- cura/PrinterOutput/PrinterOutputModel.py | 11 +++++++++++ plugins/UM3NetworkPrinting/ClusterControlItem.qml | 13 ++++++++++++- plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 1 + .../UM3NetworkPrinting/ClusterUM3OutputDevice.py | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index f009a33178..36ae04fe48 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -26,6 +26,7 @@ class PrinterOutputModel(QObject): buildplateChanged = pyqtSignal() cameraChanged = pyqtSignal() configurationChanged = pyqtSignal() + enabledChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None: super().__init__(parent) @@ -43,12 +44,22 @@ class PrinterOutputModel(QObject): self._is_preheating = False self._printer_type = "" self._buildplate_name = None + self._enabled = True self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] self._camera = None + @pyqtProperty(bool, notify=enabledChanged) + def enabled(self) -> bool: + return self._enabled + + def updateEnabled(self, enabled: bool) -> None: + if self._enabled != enabled: + self._enabled = enabled + self.enabledChanged.emit() + @pyqtProperty(str, constant = True) def firmwareVersion(self): return self._firmware_version diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 3a0c37e830..e91d2844a8 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -192,7 +192,18 @@ Component Label { id: activeJobLabel - text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" + text: + { + if(!modelData.enabled) + { + return catalog.i18nc("@label:status", "Not available") + } + if(modelData.activePrintjob != null) + { + return modelData.activePrintJob.name + } + return catalog.i18nc("@label:status", "Waiting") + } anchors.top: machineNameLabel.bottom width: parent.width elide: Text.ElideRight diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 73ddbaf61a..3132dca81c 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -23,6 +23,7 @@ Component name: "cura" } + Label { id: manageQueueLabel diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index e0d996c80e..3b7d575938 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -595,6 +595,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): printer.updateName(data["friendly_name"]) printer.updateKey(data["uuid"]) printer.updateType(data["machine_variant"]) + printer.updateEnabled(data["enabled"]) # 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): From 132366fa61a685068fa1e9dc246ed533c0960bac Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 4 Sep 2018 13:42:24 +0200 Subject: [PATCH 145/364] Revert "Add enabled state to printer, so that it can be displayed." This reverts commit dd778f0450219cbc2f7309eeb08bc20065bd51af. --- cura/PrinterOutput/PrinterOutputModel.py | 11 ----------- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 13 +------------ plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 1 - .../UM3NetworkPrinting/ClusterUM3OutputDevice.py | 1 - 4 files changed, 1 insertion(+), 25 deletions(-) diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index 36ae04fe48..f009a33178 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -26,7 +26,6 @@ class PrinterOutputModel(QObject): buildplateChanged = pyqtSignal() cameraChanged = pyqtSignal() configurationChanged = pyqtSignal() - enabledChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None: super().__init__(parent) @@ -44,22 +43,12 @@ class PrinterOutputModel(QObject): self._is_preheating = False self._printer_type = "" self._buildplate_name = None - self._enabled = True self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] self._camera = None - @pyqtProperty(bool, notify=enabledChanged) - def enabled(self) -> bool: - return self._enabled - - def updateEnabled(self, enabled: bool) -> None: - if self._enabled != enabled: - self._enabled = enabled - self.enabledChanged.emit() - @pyqtProperty(str, constant = True) def firmwareVersion(self): return self._firmware_version diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index e91d2844a8..3a0c37e830 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -192,18 +192,7 @@ Component Label { id: activeJobLabel - text: - { - if(!modelData.enabled) - { - return catalog.i18nc("@label:status", "Not available") - } - if(modelData.activePrintjob != null) - { - return modelData.activePrintJob.name - } - return catalog.i18nc("@label:status", "Waiting") - } + text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" anchors.top: machineNameLabel.bottom width: parent.width elide: Text.ElideRight diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 3132dca81c..73ddbaf61a 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -23,7 +23,6 @@ Component name: "cura" } - Label { id: manageQueueLabel diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 3b7d575938..e0d996c80e 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -595,7 +595,6 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): printer.updateName(data["friendly_name"]) printer.updateKey(data["uuid"]) printer.updateType(data["machine_variant"]) - printer.updateEnabled(data["enabled"]) # 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): From be4357c6355f1010165bdf4a29c84f2ed84c7a98 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 4 Sep 2018 13:45:16 +0200 Subject: [PATCH 146/364] Show different state when printer is disabled CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 3a0c37e830..3ab2a2411e 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -192,7 +192,18 @@ Component Label { id: activeJobLabel - text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "waiting" + text: + { + if (modelData.state == "disabled") + { + return catalog.i18nc("@label", "Not available") + } + if (modelData.activePrintJob != null) + { + return modelData.activePrintJob.name + } + return catalog.i18nc("@label", "Waiting") + } anchors.top: machineNameLabel.bottom width: parent.width elide: Text.ElideRight From b02769912f97ff159ea191f0e7f5aa84625e5f48 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 09:42:20 +0200 Subject: [PATCH 147/364] Don't print slower than 1mm/s If you set the wall printing speed to 10, it would through inheritance result in an outer wall printing speed of 0. No longer. --- resources/variants/ultimaker2_plus_0.4.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index 544728f8a4..d9d982ef11 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -12,5 +12,5 @@ hardware_type = nozzle machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.05 speed_wall = =round(speed_print / 1.25, 1) -speed_wall_0 = =1 if speed_wall < 10 else (speed_wall - 10) +speed_wall_0 = =min(speed_wall - 10, 1) speed_topbottom = =round(speed_print / 2.25, 1) From a0302684d6f7b62d50ac738794f01e91315e919b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 10:06:37 +0200 Subject: [PATCH 148/364] Add handling for cluster print jobs that are in error state CL-896 --- .../ClusterUM3OutputDevice.py | 17 ++++++++++++--- .../UM3NetworkPrinting/PrintJobInfoBlock.qml | 21 ++++++++++++++++++- plugins/UM3NetworkPrinting/warning-icon.svg | 1 + 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 plugins/UM3NetworkPrinting/warning-icon.svg diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index e0d996c80e..3e562adf14 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -352,7 +352,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): @pyqtProperty("QVariantList", notify = printJobsChanged) def queuedPrintJobs(self) -> List[PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if print_job.state == "queued"] + 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[PrintJobOutputModel]: @@ -474,7 +474,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._updatePrintJob(print_job, print_job_data) - if print_job.state != "queued": # Print job should be assigned to a printer. + 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 @@ -559,9 +559,20 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _updatePrintJob(self, print_job: PrintJobOutputModel, data: Dict[str, Any]) -> None: print_job.updateTimeTotal(data["time_total"]) print_job.updateTimeElapsed(data["time_elapsed"]) - print_job.updateState(data["status"]) + 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"]) + + def _createMaterialOutputModel(self, material_data) -> MaterialOutputModel: containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", GUID=material_data["guid"]) if containers: diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index c3e445d933..2cd0a4b206 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -80,11 +80,26 @@ Item Image { + id: printJobPreview source: printJob.previewImageUrl anchors.top: ownerName.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: totalTimeLabel.bottom width: height + opacity: printJob.state == "error" ? 0.5 : 1.0 + } + + UM.RecolorImage + { + id: statusImage + anchors.centerIn: printJobPreview + source: printJob.state == "error" ? "aborted-icon.svg" : "" + visible: source != "" + width: 0.5 * printJobPreview.width + height: 0.5 * printJobPreview.height + sourceSize.width: width + sourceSize.height: height + color: "black" } Label @@ -121,7 +136,11 @@ Item { if(printJob.assignedPrinter == null) { - return catalog.i18nc("@label", "Waiting for: first available") + if(printJob.state == "error") + { + return catalog.i18nc("@label", "Waiting for: Unavailable printer") + } + return catalog.i18nc("@label", "Waiting for: First available") } else { diff --git a/plugins/UM3NetworkPrinting/warning-icon.svg b/plugins/UM3NetworkPrinting/warning-icon.svg new file mode 100644 index 0000000000..1e5359a5eb --- /dev/null +++ b/plugins/UM3NetworkPrinting/warning-icon.svg @@ -0,0 +1 @@ +warning-icon \ No newline at end of file From 7ad2e670743f57bd75fe90681bc299c81c8c0cc2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 10:09:44 +0200 Subject: [PATCH 149/364] Fix margins for active print job name in printer tile for cluster CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 3ab2a2411e..92e07afba6 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -323,7 +323,9 @@ Component id: printJobName text: modelData.activePrintJob != null ? modelData.activePrintJob.name : "" font: UM.Theme.getFont("default_bold") - width: parent.width + anchors.left: parent.left + anchors.right: contextButton.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width elide: Text.ElideRight } Label From 1b9deb27908f1c1bac036ac49da26491d32d5f60 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 10:25:20 +0200 Subject: [PATCH 150/364] Add unreachable label if a printer can not be reached inside a cluster CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 92e07afba6..2084612772 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -197,6 +197,9 @@ Component if (modelData.state == "disabled") { return catalog.i18nc("@label", "Not available") + } else if (modelData.state == "unreachable") + { + return catalog.i18nc("@label", "Unreachable") } if (modelData.activePrintJob != null) { From ef5107e02594c30c510e1a7acf39fb078b6b5e28 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 11:42:49 +0200 Subject: [PATCH 151/364] Update modified setting keys --- plugins/SliceInfoPlugin/SliceInfo.py | 2 +- plugins/SliceInfoPlugin/example_data.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 48c1d2ab20..d92a4f3376 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -178,7 +178,7 @@ class SliceInfo(QObject, Extension): data["quality_profile"] = global_stack.quality.getMetaData().get("quality_type") - data["user_modified_setting_keys"] = ",".join(self._getUserModifiedSettingKeys()) + data["user_modified_setting_keys"] = self._getUserModifiedSettingKeys() data["models"] = [] # Listing all files placed on the build plate diff --git a/plugins/SliceInfoPlugin/example_data.json b/plugins/SliceInfoPlugin/example_data.json index 3f0a9fb388..5fc4175e60 100644 --- a/plugins/SliceInfoPlugin/example_data.json +++ b/plugins/SliceInfoPlugin/example_data.json @@ -56,7 +56,7 @@ } ], "quality_profile": "fast", - "user_modified_setting_keys": "layer_height,wall_line_width,infill_sparse_density", + "user_modified_setting_keys": ["layer_height", "wall_line_width", "infill_sparse_density"], "models": [ { "hash": "b72789b9beb5366dff20b1cf501020c3d4d4df7dc2295ecd0fddd0a6436df070", From 882cc000acffeb14df0869a70f4bc6dac27a5b07 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 13:15:09 +0200 Subject: [PATCH 152/364] Move to top is now disabled for the first job CL-896 --- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 2cd0a4b206..723ccfe456 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -216,7 +216,7 @@ Item popup.close() } width: parent.width - enabled: OutputDevice.printJobs[0].key != printJob.key + enabled: OutputDevice.queuedPrintJobs[0].key != printJob.key anchors.top: parent.top anchors.topMargin: 10 hoverEnabled: true From cd6832544bd97659a25b3891002309f0abf8f631 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 13:17:33 +0200 Subject: [PATCH 153/364] Fix for compatible_machine_families breaking for older firmwares Older firmwares didn't have the compatible_machine_families field yet. Cl-894 --- plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 3e562adf14..353a67ccd0 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -552,7 +552,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): configuration.setExtruderConfigurations(extruders) print_job.updateConfiguration(configuration) - print_job.setCompatibleMachineFamilies(data["compatible_machine_families"]) + print_job.setCompatibleMachineFamilies(data.get("compatible_machine_families", [])) print_job.stateChanged.connect(self._printJobStateChanged) return print_job From 7096c7382b4899662fbd7c880c92b97a5d6ebbcc Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 13:43:24 +0200 Subject: [PATCH 154/364] Add width to labels in printcore qml object. This ensures that the elide works correctly CL-896 --- plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml | 3 ++- plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index e6f2372874..539d8385c9 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -69,6 +69,7 @@ Item } font: UM.Theme.getFont("default_bold") elide: Text.ElideRight + width: parent.width } Label @@ -84,7 +85,7 @@ Item } anchors.top: materialLabel.bottom elide: Text.ElideRight - + width: parent.width opacity: 0.6 font: UM.Theme.getFont("default") } diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml index 723ccfe456..d50ee769d3 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml @@ -351,7 +351,7 @@ Item PrintCoreConfiguration { id: leftExtruderInfo - width: Math.round(parent.width / 2) + width: Math.round(parent.width / 2) printCoreConfiguration: printJob.configuration.extruderConfigurations[0] } From 5be65688a06093873af4b0672837ccce385f5c72 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 13:48:47 +0200 Subject: [PATCH 155/364] Change label to action required In some cases it's not a configuration change that's required, so this is a more correct label CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2084612772..ac5ec325b0 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -646,7 +646,7 @@ Component case "resuming": return catalog.i18nc("@label:status", "Resuming") case "queued": - return catalog.i18nc("@label:status", "Configuration change") + return catalog.i18nc("@label:status", "Action required") default: OutputDevice.formatDuration(modelData.activePrintJob.timeTotal - modelData.activePrintJob.timeElapsed) } From 23cd46824fd656199adfb197430fb2aee54ec271 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 13:52:41 +0200 Subject: [PATCH 156/364] Ensure that printer icon has disabled color if the printer is disabled CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index ac5ec325b0..9dbe386195 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -164,7 +164,20 @@ Component width: sourceSize.width height: sourceSize.height - color: modelData.activePrintJob != undefined ? UM.Theme.getColor("primary") : UM.Theme.getColor("setting_control_disabled") + color: + { + if(modelData.state == "disabled") + { + return UM.Theme.getColor("setting_control_disabled") + } + + if(modelData.activePrintJob != undefined) + { + return UM.Theme.getColor("primary") + } + + return UM.Theme.getColor("setting_control_disabled") + } } } Item From 8e66686d6fbe304af54059539697bc0eb4966c9e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 14:06:18 +0200 Subject: [PATCH 157/364] Change "waiting" lable to "available" Cl-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 9dbe386195..689922de8a 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -218,7 +218,7 @@ Component { return modelData.activePrintJob.name } - return catalog.i18nc("@label", "Waiting") + return catalog.i18nc("@label", "Available") } anchors.top: machineNameLabel.bottom width: parent.width From 534e60d8e124fdd5ebe58e9f32985806705f229b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 14:22:41 +0200 Subject: [PATCH 158/364] Added pausing text for pausing state CL-896 --- plugins/UM3NetworkPrinting/ClusterControlItem.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 689922de8a..2b2c683bee 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -654,6 +654,7 @@ Component case "wait_user_action": return catalog.i18nc("@label:status", "Aborted") case "pausing": + return catalog.i18nc("@label:status", "Pausing") case "paused": return catalog.i18nc("@label:status", "Paused") case "resuming": From 57a7c3bcd289856297c964bad8175214f89429eb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 Sep 2018 14:26:11 +0200 Subject: [PATCH 159/364] Decrease margin for "manage queue" label CL-896 --- plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 73ddbaf61a..82b1f554b7 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -26,7 +26,7 @@ Component Label { id: manageQueueLabel - anchors.rightMargin: 5 * UM.Theme.getSize("default_margin").width + anchors.rightMargin: 4 * UM.Theme.getSize("default_margin").width anchors.right: queuedPrintJobs.right anchors.bottom: queuedLabel.bottom text: catalog.i18nc("@label link to connect manager", "Manage queue") From f4fe5784a7121abca24d798bb867344b2d792c17 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 30 Aug 2018 10:43:27 +0200 Subject: [PATCH 160/364] Add script to analyze gcode --- 50_inst_per_sec.py | 399 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 399 insertions(+) create mode 100644 50_inst_per_sec.py diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py new file mode 100644 index 0000000000..58d446fdb4 --- /dev/null +++ b/50_inst_per_sec.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python +import copy +import math +import os +import sys +import random +from typing import Dict, List, Optional, Tuple + + +# ==================================== +# Constants and Default Values +# ==================================== +DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms +DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands + + +def get_code_and_num(gcode_line: str) -> Tuple[str, str]: + """ + Gets the code and number from the given GCode line. + """ + gcode_line = gcode_line.strip() + cmd_code = gcode_line[0].upper() + cmd_num = str(gcode_line[1:]) + return cmd_code, cmd_num + + +def get_value_dict(parts: List[str]) -> Dict[str, str]: + """ + Fetches arguments such as X1 Y2 Z3 from the given part list and returns a dict. + """ + value_dict = {} + for p in parts: + p = p.strip() + if not p: + continue + code, num = get_code_and_num(p) + value_dict[code] = num + return value_dict + + +# ============================ +# Math Functions - Begin +# ============================ + +def calc_distance(pos1, pos2): + delta = {k: pos1[k] - pos2[k] for k in pos1} + distance = 0 + for value in delta.values(): + distance += value**2 + distance = math.sqrt(distance) + return distance + + +def calc_acceleration_distance(init_speed: float, target_speed: float, acceleration: float) -> float: + """ + Given the initial speed, the target speed, and the acceleration, calculate the distance that's needed for the + acceleration to finish. + """ + if acceleration == 0: + return 0.0 + return (target_speed**2 - init_speed**2) / (2 * acceleration) + + +def calc_travel_time(p0, p1, init_speed: float, target_speed: float, acceleration: float) -> float: + pass + + +class State: + + def __init__(self, previous_state: Optional["State"]) -> None: + self.X = 0.0 + self.Y = 0.0 + self.Z = 0.0 + self.E = 0.0 + self.F = 0.0 + self.speed = {"X": 0.0, + "Y": 0.0, + "Z": 0.0, + } + self.accelerations = {"XY": 0.0, + "Z": 0.0, + "S": 0.0, # printing + "T": 0.0, # travel + } + self.jerks = {"X": 0.0, + "Y": 0.0, + "Z": 0.0, + } + self.in_relative_positioning_mode = False # type: bool + self.in_relative_extrusion_mode = False # type: bool + + if previous_state is not None: + self.X = previous_state.X + self.Y = previous_state.Y + self.Z = previous_state.Z + self.E = previous_state.E + self.F = previous_state.F + self.speed = copy.deepcopy(previous_state.speed) + self.accelerations = copy.deepcopy(previous_state.accelerations) + self.jerks = copy.deepcopy(previous_state.jerks) + self.in_relative_positioning_mode = previous_state.in_relative_positioning_mode + self.in_relative_extrusion_mode = previous_state.in_relative_extrusion_mode + + +class Command: + + def __init__(self, cmd_str: str, previous_state: "State") -> None: + self._cmd_str = cmd_str # type: str + self._previous_state = previous_state # type: State + self._after_state = State(previous_state) # type: State + + self._distance_in_mm = 0.0 # type float + self._estimated_exec_time_in_ms = 0.0 # type: float + + self._cmd_process_function_map = { + "G": self._handle_g, + "M": self._handle_m, + "T": self._handle_t, + } + + self._is_comment = False # type: bool + self._is_empty = False # type: bool + + def get_after_state(self) -> State: + return self._after_state + + @property + def is_command(self) -> bool: + return not self._is_comment and not self._is_empty + + @property + def estimated_exec_time_in_ms(self) -> float: + return self._estimated_exec_time_in_ms + + def __str__(self) -> str: + if self._is_comment or self._is_empty: + return self._cmd_str + + distance_in_mm = round(self._distance_in_mm, 5) + + info = "d=%s f=%s t=%s" % (distance_in_mm, self._after_state.F, self._estimated_exec_time_in_ms) + + return self._cmd_str.strip() + " ; --- " + info + os.linesep + + def process(self) -> None: + """ + Estimates the execution time of this command and calculates the state after this command is executed. + """ + line = self._cmd_str.strip() + if not line: + self._is_empty = True + return + if line.startswith(";"): + self._is_comment = True + return + + # Remove comment + line = line.split(";", 1)[0].strip() + + parts = line.split(" ") + cmd_code, cmd_num = get_code_and_num(parts[0]) + cmd_num = int(cmd_num) + + func = self._cmd_process_function_map.get(cmd_code) + if func is None: + print("!!! no handle function for command type [%s]" % cmd_code) + return + func(cmd_num, parts) + + def _handle_g(self, cmd_num: int, parts: List[str]) -> None: + estimated_exec_time_in_ms = 0.0 + + # G0 and G1: Move + if cmd_num in (0, 1): + # Move + distance = 0.0 + if len(parts) > 0: + value_dict = get_value_dict(parts[1:]) + for key, value in value_dict.items(): + setattr(self._after_state, key, float(value)) + + current_position = {"X": self._previous_state.X, + "Y": self._previous_state.Y, + "Z": self._previous_state.Z, + } + new_position = copy.deepcopy(current_position) + for key in new_position: + new_value = float(value_dict.get(key, new_position[key])) + new_position[key] = new_value + + distance = calc_distance(current_position, new_position) + self._distance_in_mm = distance + travel_time_in_ms = distance / (self._after_state.F / 60.0) * 1000.0 + + estimated_exec_time_in_ms = travel_time_in_ms + + # TODO: take acceleration into account + + # G4: Dwell, pause the machine for a period of time. TODO + if cmd_num == 4: + # Pnnn is time to wait in milliseconds (P0 wait until all previous moves are finished) + cmd, num = get_code_and_num(parts[1]) + num = float(num) + if cmd == "P": + if num > 0: + estimated_exec_time_in_ms = num + + # G10: Retract. Assume 0.3 seconds for short retractions and 0.5 seconds for long retractions. + if cmd_num == 10: + # S0 is short retract (default), S1 is long retract + is_short_retract = True + if len(parts) > 1: + cmd, num = get_code_and_num(parts[1]) + if cmd == "S" and num == 1: + is_short_retract = False + estimated_exec_time_in_ms = (0.3 if is_short_retract else 0.5) * 1000 + + # G11: Unretract. Assume 0.5 seconds. + if cmd_num == 11: + estimated_exec_time_in_ms = 0.5 * 1000 + + # G90: Set to absolute positioning. Assume 0 seconds. + if cmd_num == 90: + self._after_state.in_relative_positioning_mode = False + estimated_exec_time_in_ms = 0.0 + + # G91: Set to relative positioning. Assume 0 seconds. + if cmd_num == 91: + self._after_state.in_relative_positioning_mode = True + estimated_exec_time_in_ms = 0.0 + + # G92: Set position. Assume 0 seconds. + if cmd_num == 92: + # TODO: check + value_dict = get_value_dict(parts[1:]) + for key, value in value_dict.items(): + setattr(self._previous_state, key, value) + + # G280: Prime. Assume 10 seconds for using blob and 5 seconds for no blob. + if cmd_num == 280: + use_blob = True + if len(parts) > 1: + cmd, num = get_code_and_num(parts[1]) + if cmd == "S" and num == 1: + use_blob = False + estimated_exec_time_in_ms = (10.0 if use_blob else 5.0) * 1000 + + # Update estimated execution time + self._estimated_exec_time_in_ms = round(estimated_exec_time_in_ms, 5) + + def _handle_m(self, cmd_num: int, parts: List[str]) -> None: + estimated_exec_time_in_ms = 0.0 + + # M82: Set extruder to absolute mode. Assume 0 execution time. + if cmd_num == 82: + self._after_state.in_relative_extrusion_mode = False + estimated_exec_time_in_ms = 0.0 + + # M83: Set extruder to relative mode. Assume 0 execution time. + if cmd_num == 83: + self._after_state.in_relative_extrusion_mode = True + estimated_exec_time_in_ms = 0.0 + + # M104: Set extruder temperature (no wait). Assume 0 execution time. + if cmd_num == 104: + estimated_exec_time_in_ms = 0.0 + + # M106: Set fan speed. Assume 0 execution time. + if cmd_num == 106: + estimated_exec_time_in_ms = 0.0 + + # M107: Turn fan off. Assume 0 execution time. + if cmd_num == 107: + estimated_exec_time_in_ms = 0.0 + + # M109: Set extruder temperature (wait). Uniformly random time between 30 - 90 seconds. + if cmd_num == 109: + estimated_exec_time_in_ms = random.uniform(30, 90) * 1000 # TODO: Check + + # M140: Set bed temperature (no wait). Assume 0 execution time. + if cmd_num == 140: + estimated_exec_time_in_ms = 0.0 + + # M204: Set default acceleration. Assume 0 execution time. + if cmd_num == 204: + value_dict = get_value_dict(parts[1:]) + for key, value in value_dict.items(): + self._after_state.accelerations[key] = float(value) + estimated_exec_time_in_ms = 0.0 + + # M205: Advanced settings, we only set jerks for Griffin. Assume 0 execution time. + if cmd_num == 205: + value_dict = get_value_dict(parts[1:]) + for key, value in value_dict.items(): + self._after_state.jerks[key] = float(value) + estimated_exec_time_in_ms = 0.0 + + self._estimated_exec_time_in_ms = estimated_exec_time_in_ms + + def _handle_t(self, cmd_num: int, parts: List[str]) -> None: + # Tn: Switching extruder. Assume 2 seconds. + estimated_exec_time_in_ms = 2.0 + + self._estimated_exec_time_in_ms = estimated_exec_time_in_ms + + +class CommandBuffer: + def __init__(self, all_lines: List[str], + buffer_filling_rate: float = DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS, + buffer_size: int = DEFAULT_BUFFER_SIZE + ) -> None: + self._all_lines = all_lines + self._all_commands = list() + + self._buffer_filling_rate = buffer_filling_rate # type: float + self._buffer_size = buffer_size # type: int + + # If the buffer can depletes less than this amount time, it can be filled up in time. + lower_bound_buffer_depletion_time = self._buffer_size / self._buffer_filling_rate # type: float + + self._detection_time_frame = lower_bound_buffer_depletion_time + self._code_count_limit = self._buffer_size + print("Time Frame: %s" % self._detection_time_frame) + print("Code Limit: %s" % self._code_count_limit) + + self._bad_frame_ranges = [] + + def process(self) -> None: + previous_state = None + cmd0_idx = 0 + total_frame_time_in_ms = 0.0 + cmd_count = 0 + for idx, line in enumerate(self._all_lines): + cmd = Command(line, previous_state) + cmd.process() + self._all_commands.append(cmd) + previous_state = cmd.get_after_state() + + if not cmd.is_command: + continue + + cmd_count += 1 + if idx > cmd0_idx or idx == 0: + total_frame_time_in_ms += cmd.estimated_exec_time_in_ms + + if total_frame_time_in_ms > 1000.0: + # Find the next starting command which makes the total execution time of the frame to be less than + # 1 second. + cmd0_idx += 1 + total_frame_time_in_ms -= self._all_commands[cmd0_idx].estimated_exec_time_in_ms + cmd_count -= 1 + while total_frame_time_in_ms > 1000.0: + cmd0_idx += 1 + total_frame_time_in_ms -= self._all_commands[cmd0_idx].estimated_exec_time_in_ms + cmd_count -= 1 + + # If within the current time frame the code count exceeds the limit, record that. + if total_frame_time_in_ms <= self._detection_time_frame and cmd_count > self._code_count_limit: + need_to_append = True + if self._bad_frame_ranges: + last_item = self._bad_frame_ranges[-1] + if last_item["start_line"] == cmd0_idx: + last_item["end_line"] = idx + last_item["cmd_count"] = cmd_count + last_item["time_in_ms"] = total_frame_time_in_ms + need_to_append = False + if need_to_append: + self._bad_frame_ranges.append({"start_line": cmd0_idx, + "end_line": idx, + "cmd_count": cmd_count, + "time_in_ms": total_frame_time_in_ms}) + + def to_file(self, file_name: str) -> None: + all_lines = [str(c) for c in self._all_commands] + with open(file_name, "w", encoding = "utf-8") as f: + f.writelines(all_lines) + + def report(self) -> None: + for item in self._bad_frame_ranges: + print("!!!!! potential bad frame from line %s to %s, code count = %s, in %s ms" % ( + item["start_line"], item["end_line"], item["cmd_count"], round(item["time_in_ms"], 4))) + + +if __name__ == "__main__": + #if len(sys.argv) != 3: + # print("Usage: ") + # sys.exit(1) + #in_filename = sys.argv[1] + #out_filename = sys.argv[2] + + in_filename = "/home/lfei/UM3_elephant_pendant_2.gcode" + out_filename = "/home/lfei/UM3_elephant_pendant_2-annotated.gcode" + with open(in_filename, "r", encoding = "utf-8") as f: + all_lines = f.readlines() + + buf = CommandBuffer(all_lines) + buf.process() + buf.to_file(out_filename) + buf.report() From 43a8894c64c6a49acf0c2107b8bfd86ded1498f0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 31 Aug 2018 16:12:53 +0200 Subject: [PATCH 161/364] Convert to Doxygen style comments As per our code style. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 58d446fdb4..5c8a23d7fd 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -1,8 +1,9 @@ -#!/usr/bin/env python +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + import copy import math import os -import sys import random from typing import Dict, List, Optional, Tuple @@ -13,21 +14,16 @@ from typing import Dict, List, Optional, Tuple DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands - +## Gets the code and number from the given g-code line. def get_code_and_num(gcode_line: str) -> Tuple[str, str]: - """ - Gets the code and number from the given GCode line. - """ gcode_line = gcode_line.strip() cmd_code = gcode_line[0].upper() cmd_num = str(gcode_line[1:]) return cmd_code, cmd_num - +## Fetches arguments such as X1 Y2 Z3 from the given part list and returns a +# dict. def get_value_dict(parts: List[str]) -> Dict[str, str]: - """ - Fetches arguments such as X1 Y2 Z3 from the given part list and returns a dict. - """ value_dict = {} for p in parts: p = p.strip() @@ -50,12 +46,9 @@ def calc_distance(pos1, pos2): distance = math.sqrt(distance) return distance - +## Given the initial speed, the target speed, and the acceleration, calculate +# the distance that's neede for the acceleration to finish. def calc_acceleration_distance(init_speed: float, target_speed: float, acceleration: float) -> float: - """ - Given the initial speed, the target speed, and the acceleration, calculate the distance that's needed for the - acceleration to finish. - """ if acceleration == 0: return 0.0 return (target_speed**2 - init_speed**2) / (2 * acceleration) From 842ee7c00e8af1174a5f0973fd6181754c21dea1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 31 Aug 2018 16:29:50 +0200 Subject: [PATCH 162/364] Reinstate the argument input Otherwise I can't use it without creating a user 'lfei' or something. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 5c8a23d7fd..b9be532595 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -4,6 +4,7 @@ import copy import math import os +import sys import random from typing import Dict, List, Optional, Tuple @@ -375,14 +376,12 @@ class CommandBuffer: if __name__ == "__main__": - #if len(sys.argv) != 3: - # print("Usage: ") - # sys.exit(1) - #in_filename = sys.argv[1] - #out_filename = sys.argv[2] + if len(sys.argv) != 3: + print("Usage: ") + sys.exit(1) + in_filename = sys.argv[1] + out_filename = sys.argv[2] - in_filename = "/home/lfei/UM3_elephant_pendant_2.gcode" - out_filename = "/home/lfei/UM3_elephant_pendant_2-annotated.gcode" with open(in_filename, "r", encoding = "utf-8") as f: all_lines = f.readlines() From 582f06dfffe4f3a9b44dcc498451e1e9ef995e47 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 3 Sep 2018 14:11:47 +0200 Subject: [PATCH 163/364] Add fields from CuraEngine The idea of this issue is to mimic the implementation of CuraEngine. So let's transform its entire algorithm into Python. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index b9be532595..46e191ff98 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -115,6 +115,22 @@ class Command: self._is_comment = False # type: bool self._is_empty = False # type: bool + #Fields taken from CuraEngine's implementation. + self._recalculate = False + self._accelerate_until = 0 + self._decelerate_after = 0 + self._initial_feedrate = 0 + self._final_feedrate = 0 + self._entry_speed = 0 + self._max_entry_speed =0 + self._nominal_length = False + self._nominal_feedrate = 0 + self._max_travel = 0 + self._distance = 0 + self._acceleration = 0 + self._delta = [0, 0, 0] + self._abs_delta = [0, 0, 0] + def get_after_state(self) -> State: return self._after_state @@ -136,10 +152,9 @@ class Command: return self._cmd_str.strip() + " ; --- " + info + os.linesep + ## Estimates the execution time of this command and calculates the state + # after this command is executed. def process(self) -> None: - """ - Estimates the execution time of this command and calculates the state after this command is executed. - """ line = self._cmd_str.strip() if not line: self._is_empty = True From 594e3c986dc5e488df92ae496d28549b2c2caeff Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 3 Sep 2018 14:33:03 +0200 Subject: [PATCH 164/364] Add function to calculate trapezoid for block Also copied from CuraEngine's implementation. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 46e191ff98..ae51af7454 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -43,7 +43,7 @@ def calc_distance(pos1, pos2): delta = {k: pos1[k] - pos2[k] for k in pos1} distance = 0 for value in delta.values(): - distance += value**2 + distance += value ** 2 distance = math.sqrt(distance) return distance @@ -52,12 +52,25 @@ def calc_distance(pos1, pos2): def calc_acceleration_distance(init_speed: float, target_speed: float, acceleration: float) -> float: if acceleration == 0: return 0.0 - return (target_speed**2 - init_speed**2) / (2 * acceleration) + return (target_speed ** 2 - init_speed ** 2) / (2 * acceleration) def calc_travel_time(p0, p1, init_speed: float, target_speed: float, acceleration: float) -> float: pass +## Calculates the point at which you must start braking. +# +# This gives the distance from the start of a line at which you must start +# decelerating (at a rate of `-acceleration`) if you started at speed +# `initial_feedrate` and accelerated until this point and want to end at the +# `final_feedrate` after a total travel of `distance`. This can be used to +# compute the intersection point between acceleration and deceleration in the +# cases where the trapezoid has no plateau (i.e. never reaches maximum speed). +def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, acceleration: float, distance: float) -> float: + if acceleration == 0: + return 0 + return (2 * acceleration * distance - initial_feedrate * initial_feedrate + final_feedrate * final_feedrate) / (4 * acceleration) + class State: @@ -131,6 +144,33 @@ class Command: self._delta = [0, 0, 0] self._abs_delta = [0, 0, 0] + ## Calculate the velocity-time trapezoid function for this move. + # + # Each move has a three-part function mapping time to velocity. + def calculate_trapezoid(self, entry_factor, exit_factor): + initial_feedrate = self._nominal_feedrate * entry_factor + final_feedrate = self._nominal_feedrate * exit_factor + + #How far are we accelerating and how far are we decelerating? + accelerate_distance = calc_acceleration_distance(initial_feedrate, self._nominal_feedrate, self._acceleration) + decelerate_distance = calc_acceleration_distance(self._nominal_feedrate, final_feedrate, -self._acceleration) + plateau_distance = self._distance - accelerate_distance - decelerate_distance #And how far in between at max speed? + + #Is the plateau negative size? That means no cruising, and we'll have to + #use intersection_distance to calculate when to abort acceleration and + #start braking in order to reach the final_rate exactly at the end of + #this command. + if plateau_distance < 0: + accelerate_distance = calc_intersection_distance(initial_feedrate, final_feedrate, self._acceleration, self._distance) + accelerate_distance = max(accelerate_distance, 0) #Due to rounding errors. + accelerate_distance = min(accelerate_distance, self._distance) + plateau_distance = 0 + + self._accelerate_until = accelerate_distance + self._decelerate_after = accelerate_distance + plateau_distance + self._initial_feedrate = initial_feedrate + self._final_feedrate = final_feedrate + def get_after_state(self) -> State: return self._after_state From 5bf90df6beb411790c3faaedbc842d59f1aa3064 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 3 Sep 2018 16:08:12 +0200 Subject: [PATCH 165/364] Rename process() to parse() Because we need to execute several other processing steps as well. This parse function for G0 and G1 now needs to initialise the state in the same way as how Block is initialised in CuraEngine. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index ae51af7454..36aa2c09d7 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -194,7 +194,7 @@ class Command: ## Estimates the execution time of this command and calculates the state # after this command is executed. - def process(self) -> None: + def parse(self) -> None: line = self._cmd_str.strip() if not line: self._is_empty = True @@ -381,7 +381,7 @@ class CommandBuffer: cmd_count = 0 for idx, line in enumerate(self._all_lines): cmd = Command(line, previous_state) - cmd.process() + cmd.parse() self._all_commands.append(cmd) previous_state = cmd.get_after_state() From c559763c885eabbffcd74656c210787c286b0096 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 4 Sep 2018 13:11:35 +0200 Subject: [PATCH 166/364] Partially implement acceleration and jerk estimation algorithm This stuff is complex and I hardly understand it. It's basically just a translation of the C++ code in the engine. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 72 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 36aa2c09d7..c0a306f5ce 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -15,6 +15,21 @@ from typing import Dict, List, Optional, Tuple DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands +#Values for Ultimaker S5. +MACHINE_MAX_FEEDRATE_X = 300 +MACHINE_MAX_FEEDRATE_Y = 300 +MACHINE_MAX_FEEDRATE_Z = 40 +MACHINE_MAX_FEEDRATE_E = 45 +MACHINE_MAX_ACCELERATION_X = 9000 +MACHINE_MAX_ACCELERATION_Y = 9000 +MACHINE_MAX_ACCELERATION_Z = 100 +MACHINE_MAX_ACCELERATION_E = 10000 +MACHINE_MAX_JERK_XY = 20 +MACHINE_MAX_JERK_Z = 0.4 +MACHINE_MAX_JERK_E = 5 +MACHINE_MINIMUM_FEEDRATE = 0 +MACHINE_ACCELERATION = 3000 + ## Gets the code and number from the given g-code line. def get_code_and_num(gcode_line: str) -> Tuple[str, str]: gcode_line = gcode_line.strip() @@ -73,7 +88,6 @@ def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, a class State: - def __init__(self, previous_state: Optional["State"]) -> None: self.X = 0.0 self.Y = 0.0 @@ -83,15 +97,19 @@ class State: self.speed = {"X": 0.0, "Y": 0.0, "Z": 0.0, + "E": 0.0, } - self.accelerations = {"XY": 0.0, + self.accelerations = {"X": 0.0, + "Y": 0.0, "Z": 0.0, + "E": 0.0, "S": 0.0, # printing "T": 0.0, # travel } self.jerks = {"X": 0.0, "Y": 0.0, "Z": 0.0, + "E": 0.0, } self.in_relative_positioning_mode = False # type: bool self.in_relative_extrusion_mode = False # type: bool @@ -110,7 +128,6 @@ class State: class Command: - def __init__(self, cmd_str: str, previous_state: "State") -> None: self._cmd_str = cmd_str # type: str self._previous_state = previous_state # type: State @@ -231,6 +248,7 @@ class Command: current_position = {"X": self._previous_state.X, "Y": self._previous_state.Y, "Z": self._previous_state.Z, + "E": self._previous_state.E, } new_position = copy.deepcopy(current_position) for key in new_position: @@ -239,6 +257,54 @@ class Command: distance = calc_distance(current_position, new_position) self._distance_in_mm = distance + self._delta = [ + new_position["X"] - current_position["X"], + new_position["Y"] - current_position["Y"], + new_position["Z"] - current_position["Z"], + new_position["E"] - current_position["E"] + ] + self._abs_delta = [abs(x) for x in self._delta] + self._max_travel = max(self._abs_delta) + if self._max_travel > 0: + feedrate = self._previous_state.F + if "F" in value_dict: + feedrate = value_dict["F"] + if feedrate < MACHINE_MINIMUM_FEEDRATE: + feedrate = MACHINE_MINIMUM_FEEDRATE + self._nominal_feedrate = feedrate + self._distance = math.sqrt(self._abs_delta[0] ** 2 + self._abs_delta[1] ** 2 + self._abs_delta[2] ** 2) + if self._distance == 0: + self._distance = self._abs_delta[3] + + current_feedrate = [d * feedrate / self._distance for d in self._delta] + current_abs_feedrate = [abs(f) for f in current_feedrate] + feedrate_factor = min(1.0, MACHINE_MAX_FEEDRATE_X) + feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Y) + feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Z) + feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_E) + #TODO: XY_FREQUENCY_LIMIT + + current_feedrate = [f * feedrate_factor for f in current_feedrate] + current_abs_feedrate = [f * feedrate_factor for f in current_abs_feedrate] + self._nominal_feedrate *= feedrate_factor + + self._acceleration = MACHINE_ACCELERATION + max_accelerations = [MACHINE_MAX_ACCELERATION_X, MACHINE_MAX_ACCELERATION_Y, MACHINE_MAX_ACCELERATION_Z, MACHINE_MAX_ACCELERATION_E] + for n in range(len(max_accelerations)): + if self._acceleration * self._abs_delta[n] / self._distance > max_accelerations[n]: + self._acceleration = max_accelerations[n] + + vmax_junction = MACHINE_MAX_JERK_XY / 2 + vmax_junction_factor = 1.0 + if current_abs_feedrate[2] > MACHINE_MAX_JERK_Z / 2: + vmax_junction = min(vmax_junction, MACHINE_MAX_JERK_Z) + if current_abs_feedrate[3] > MACHINE_MAX_JERK_E / 2: + vmax_junction = min(vmax_junction, MACHINE_MAX_JERK_E) + vmax_junction = min(vmax_junction, self._nominal_feedrate) + safe_speed = vmax_junction + + #TODO: Compute junction maximum speed factor and apply this to entry speed, set flags and calculate trapezoid. + travel_time_in_ms = distance / (self._after_state.F / 60.0) * 1000.0 estimated_exec_time_in_ms = travel_time_in_ms From 5d292e1a79b82503bfc476971dac1817f6db79f3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 4 Sep 2018 16:19:01 +0200 Subject: [PATCH 167/364] Remove state class usage This is an effort to synchronize the working of this script with how CuraEngine's time estimation works. This includes tracking only one value for acceleration and multiple Jerk stuff, that sort of thing. We need to ensure it's exactly the same. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 118 ++++++++++++--------------------------------- 1 file changed, 32 insertions(+), 86 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index c0a306f5ce..75b7ecb88a 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -15,7 +15,7 @@ from typing import Dict, List, Optional, Tuple DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands -#Values for Ultimaker S5. +#Setting values for Ultimaker S5. MACHINE_MAX_FEEDRATE_X = 300 MACHINE_MAX_FEEDRATE_Y = 300 MACHINE_MAX_FEEDRATE_Z = 40 @@ -86,52 +86,9 @@ def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, a return 0 return (2 * acceleration * distance - initial_feedrate * initial_feedrate + final_feedrate * final_feedrate) / (4 * acceleration) - -class State: - def __init__(self, previous_state: Optional["State"]) -> None: - self.X = 0.0 - self.Y = 0.0 - self.Z = 0.0 - self.E = 0.0 - self.F = 0.0 - self.speed = {"X": 0.0, - "Y": 0.0, - "Z": 0.0, - "E": 0.0, - } - self.accelerations = {"X": 0.0, - "Y": 0.0, - "Z": 0.0, - "E": 0.0, - "S": 0.0, # printing - "T": 0.0, # travel - } - self.jerks = {"X": 0.0, - "Y": 0.0, - "Z": 0.0, - "E": 0.0, - } - self.in_relative_positioning_mode = False # type: bool - self.in_relative_extrusion_mode = False # type: bool - - if previous_state is not None: - self.X = previous_state.X - self.Y = previous_state.Y - self.Z = previous_state.Z - self.E = previous_state.E - self.F = previous_state.F - self.speed = copy.deepcopy(previous_state.speed) - self.accelerations = copy.deepcopy(previous_state.accelerations) - self.jerks = copy.deepcopy(previous_state.jerks) - self.in_relative_positioning_mode = previous_state.in_relative_positioning_mode - self.in_relative_extrusion_mode = previous_state.in_relative_extrusion_mode - - class Command: - def __init__(self, cmd_str: str, previous_state: "State") -> None: + def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str - self._previous_state = previous_state # type: State - self._after_state = State(previous_state) # type: State self._distance_in_mm = 0.0 # type float self._estimated_exec_time_in_ms = 0.0 # type: float @@ -188,9 +145,6 @@ class Command: self._initial_feedrate = initial_feedrate self._final_feedrate = final_feedrate - def get_after_state(self) -> State: - return self._after_state - @property def is_command(self) -> bool: return not self._is_comment and not self._is_empty @@ -205,7 +159,7 @@ class Command: distance_in_mm = round(self._distance_in_mm, 5) - info = "d=%s f=%s t=%s" % (distance_in_mm, self._after_state.F, self._estimated_exec_time_in_ms) + info = "d=%s t=%s" % (distance_in_mm, self._estimated_exec_time_in_ms) return self._cmd_str.strip() + " ; --- " + info + os.linesep @@ -242,31 +196,25 @@ class Command: distance = 0.0 if len(parts) > 0: value_dict = get_value_dict(parts[1:]) - for key, value in value_dict.items(): - setattr(self._after_state, key, float(value)) - current_position = {"X": self._previous_state.X, - "Y": self._previous_state.Y, - "Z": self._previous_state.Z, - "E": self._previous_state.E, - } - new_position = copy.deepcopy(current_position) - for key in new_position: - new_value = float(value_dict.get(key, new_position[key])) - new_position[key] = new_value + new_position = copy.deepcopy(buf.current_position) + new_position[0] = value_dict.get("X", new_position[0]) + new_position[1] = value_dict.get("Y", new_position[1]) + new_position[2] = value_dict.get("Z", new_position[2]) + new_position[3] = value_dict.get("E", new_position[3]) - distance = calc_distance(current_position, new_position) + distance = calc_distance(buf.current_position, new_position) self._distance_in_mm = distance self._delta = [ - new_position["X"] - current_position["X"], - new_position["Y"] - current_position["Y"], - new_position["Z"] - current_position["Z"], - new_position["E"] - current_position["E"] + new_position[0] - buf.current_position[0], + new_position[1] - buf.current_position[1], + new_position[2] - buf.current_position[2], + new_position[3] - buf.current_position[3] ] self._abs_delta = [abs(x) for x in self._delta] self._max_travel = max(self._abs_delta) if self._max_travel > 0: - feedrate = self._previous_state.F + feedrate = buf.current_feedrate if "F" in value_dict: feedrate = value_dict["F"] if feedrate < MACHINE_MINIMUM_FEEDRATE: @@ -296,16 +244,16 @@ class Command: vmax_junction = MACHINE_MAX_JERK_XY / 2 vmax_junction_factor = 1.0 - if current_abs_feedrate[2] > MACHINE_MAX_JERK_Z / 2: - vmax_junction = min(vmax_junction, MACHINE_MAX_JERK_Z) - if current_abs_feedrate[3] > MACHINE_MAX_JERK_E / 2: - vmax_junction = min(vmax_junction, MACHINE_MAX_JERK_E) + if current_abs_feedrate[2] > buf.max_z_jerk / 2: + vmax_junction = min(vmax_junction, buf.max_z_jerk) + if current_abs_feedrate[3] > buf.max_e_jerk / 2: + vmax_junction = min(vmax_junction, buf.max_e_jerk) vmax_junction = min(vmax_junction, self._nominal_feedrate) safe_speed = vmax_junction #TODO: Compute junction maximum speed factor and apply this to entry speed, set flags and calculate trapezoid. - travel_time_in_ms = distance / (self._after_state.F / 60.0) * 1000.0 + travel_time_in_ms = distance / (self._nominal_feedrate / 60.0) * 1000.0 estimated_exec_time_in_ms = travel_time_in_ms @@ -336,20 +284,15 @@ class Command: # G90: Set to absolute positioning. Assume 0 seconds. if cmd_num == 90: - self._after_state.in_relative_positioning_mode = False estimated_exec_time_in_ms = 0.0 # G91: Set to relative positioning. Assume 0 seconds. if cmd_num == 91: - self._after_state.in_relative_positioning_mode = True estimated_exec_time_in_ms = 0.0 # G92: Set position. Assume 0 seconds. if cmd_num == 92: - # TODO: check - value_dict = get_value_dict(parts[1:]) - for key, value in value_dict.items(): - setattr(self._previous_state, key, value) + estimated_exec_time_in_ms = 0.0 # G280: Prime. Assume 10 seconds for using blob and 5 seconds for no blob. if cmd_num == 280: @@ -368,12 +311,10 @@ class Command: # M82: Set extruder to absolute mode. Assume 0 execution time. if cmd_num == 82: - self._after_state.in_relative_extrusion_mode = False estimated_exec_time_in_ms = 0.0 # M83: Set extruder to relative mode. Assume 0 execution time. if cmd_num == 83: - self._after_state.in_relative_extrusion_mode = True estimated_exec_time_in_ms = 0.0 # M104: Set extruder temperature (no wait). Assume 0 execution time. @@ -399,15 +340,15 @@ class Command: # M204: Set default acceleration. Assume 0 execution time. if cmd_num == 204: value_dict = get_value_dict(parts[1:]) - for key, value in value_dict.items(): - self._after_state.accelerations[key] = float(value) + buf.acceleration = value_dict.get("S", buf.acceleration) estimated_exec_time_in_ms = 0.0 # M205: Advanced settings, we only set jerks for Griffin. Assume 0 execution time. if cmd_num == 205: value_dict = get_value_dict(parts[1:]) - for key, value in value_dict.items(): - self._after_state.jerks[key] = float(value) + buf.max_xy_jerk = value_dict.get("XY", buf.max_xy_jerk) + buf.max_z_jerk = value_dict.get("Z", buf.max_z_jerk) + buf.max_e_jerk = value_dict.get("E", buf.max_e_jerk) estimated_exec_time_in_ms = 0.0 self._estimated_exec_time_in_ms = estimated_exec_time_in_ms @@ -430,6 +371,13 @@ class CommandBuffer: self._buffer_filling_rate = buffer_filling_rate # type: float self._buffer_size = buffer_size # type: int + self.acceleration = 3000 + self.current_position = [0, 0, 0, 0] + self.current_feedrate = 0 + self.max_xy_jerk = MACHINE_MAX_JERK_XY + self.max_z_jerk = MACHINE_MAX_JERK_Z + self.max_e_jerk = MACHINE_MAX_JERK_E + # If the buffer can depletes less than this amount time, it can be filled up in time. lower_bound_buffer_depletion_time = self._buffer_size / self._buffer_filling_rate # type: float @@ -441,15 +389,13 @@ class CommandBuffer: self._bad_frame_ranges = [] def process(self) -> None: - previous_state = None cmd0_idx = 0 total_frame_time_in_ms = 0.0 cmd_count = 0 for idx, line in enumerate(self._all_lines): - cmd = Command(line, previous_state) + cmd = Command(line) cmd.parse() self._all_commands.append(cmd) - previous_state = cmd.get_after_state() if not cmd.is_command: continue From 1037b091881aaa1e09a455bdf0a1994fa9b81b77 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 4 Sep 2018 16:36:35 +0200 Subject: [PATCH 168/364] Implement M203, setting maximum Z feedrate It's important. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 75b7ecb88a..cd298899d7 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -228,7 +228,7 @@ class Command: current_abs_feedrate = [abs(f) for f in current_feedrate] feedrate_factor = min(1.0, MACHINE_MAX_FEEDRATE_X) feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Y) - feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Z) + feedrate_factor = min(feedrate_factor, buf.max_z_feedrate) feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_E) #TODO: XY_FREQUENCY_LIMIT @@ -337,6 +337,11 @@ class Command: if cmd_num == 140: estimated_exec_time_in_ms = 0.0 + # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. + if cmd_num == 203: + value_dict = get_value_dict(parts[1:]) + buf.max_z_feedrate = value_dict.get("Z", buf.max_z_feedrate) + # M204: Set default acceleration. Assume 0 execution time. if cmd_num == 204: value_dict = get_value_dict(parts[1:]) @@ -377,6 +382,7 @@ class CommandBuffer: self.max_xy_jerk = MACHINE_MAX_JERK_XY self.max_z_jerk = MACHINE_MAX_JERK_Z self.max_e_jerk = MACHINE_MAX_JERK_E + self.max_z_feedrate = MACHINE_MAX_FEEDRATE_Z # If the buffer can depletes less than this amount time, it can be filled up in time. lower_bound_buffer_depletion_time = self._buffer_size / self._buffer_filling_rate # type: float From dcbe832d9f57563c34b5ebb8c9c256b2d497e4ab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 4 Sep 2018 16:38:50 +0200 Subject: [PATCH 169/364] Implement the rest of the initial time estimation This doesn't complete this task yet because we are still not outputting a correct time estimation for these commands. We're not outputting anything at all actually. We now need to implement the second pass (but only for G1 and G0). Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index cd298899d7..802cb0edd6 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -14,6 +14,7 @@ from typing import Dict, List, Optional, Tuple # ==================================== DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands +MINIMUM_PLANNER_SPEED = 0.05 #Setting values for Ultimaker S5. MACHINE_MAX_FEEDRATE_X = 300 @@ -86,6 +87,12 @@ def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, a return 0 return (2 * acceleration * distance - initial_feedrate * initial_feedrate + final_feedrate * final_feedrate) / (4 * acceleration) +## Calculates the maximum speed that is allowed at this point when you must be +# able to reach target_velocity using the acceleration within the allotted +# distance. +def calc_max_allowable_speed(acceleration: float, target_velocity: float, distance: float) -> float: + return math.sqrt(target_velocity * target_velocity - 2 * acceleration * distance) + class Command: def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str @@ -251,7 +258,28 @@ class Command: vmax_junction = min(vmax_junction, self._nominal_feedrate) safe_speed = vmax_junction - #TODO: Compute junction maximum speed factor and apply this to entry speed, set flags and calculate trapezoid. + if buf.previous_nominal_feedrate > 0.0001: + xy_jerk = math.sqrt((current_feedrate[0] - buf.previous_feedrate[0]) ** 2 + (current_feedrate[1] - buf.previous_feedrate[1]) ** 2) + vmax_junction = self._nominal_feedrate + if xy_jerk > MACHINE_MAX_JERK_XY: + vmax_junction_factor = MACHINE_MAX_JERK_XY / xy_jerk + if abs(current_feedrate[2] - buf.previous_feedrate[2]) > MACHINE_MAX_JERK_Z: + vmax_junction_factor = min(vmax_junction_factor, (MACHINE_MAX_JERK_Z / abs(current_feedrate[2] - buf.previous_feedrate[2]))) + if abs(current_feedrate[3] - buf.previous_feedrate[3]) > MACHINE_MAX_JERK_E: + vmax_junction_factor = min(vmax_junction_factor, (MACHINE_MAX_JERK_E / abs(current_feedrate[3] - buf.previous_feedrate[3]))) + vmax_junction = min(buf.previous_nominal_feedrate, vmax_junction * vmax_junction_factor) #Limit speed to max previous speed. + + self._max_entry_speed = vmax_junction + v_allowable = calc_max_allowable_speed(-self._acceleration, MINIMUM_PLANNER_SPEED, self._distance) + self._entry_speed = min(vmax_junction, v_allowable) + self._nominal_length = self._nominal_feedrate <= v_allowable + self._recalculate = True + + buf.previous_feedrate = current_feedrate + buf.previous_nominal_feedrate = self._nominal_feedrate + buf.current_position = new_position + + self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) travel_time_in_ms = distance / (self._nominal_feedrate / 60.0) * 1000.0 @@ -389,6 +417,10 @@ class CommandBuffer: self._detection_time_frame = lower_bound_buffer_depletion_time self._code_count_limit = self._buffer_size + + self.previous_feedrate = [0, 0, 0, 0] + self.previous_nominal_feedrate = 0 + print("Time Frame: %s" % self._detection_time_frame) print("Code Limit: %s" % self._code_count_limit) From 5e85af30de5545cd8892325e3bca71d0d3638033 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 4 Sep 2018 16:58:57 +0200 Subject: [PATCH 170/364] Implement reverse kernel Taken from CuraEngine's implementation. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 802cb0edd6..3639aaec35 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -281,11 +281,7 @@ class Command: self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) - travel_time_in_ms = distance / (self._nominal_feedrate / 60.0) * 1000.0 - - estimated_exec_time_in_ms = travel_time_in_ms - - # TODO: take acceleration into account + travel_time_in_ms = -1 #Signal that we need to include this in our second pass. # G4: Dwell, pause the machine for a period of time. TODO if cmd_num == 4: @@ -433,11 +429,21 @@ class CommandBuffer: for idx, line in enumerate(self._all_lines): cmd = Command(line) cmd.parse() - self._all_commands.append(cmd) - if not cmd.is_command: continue + self._all_commands.append(cmd) + #Second pass: Reverse kernel. + kernel_commands = [None, None, None] + for cmd in self._all_commands: + if cmd.estimated_exec_time_in_ms >= 0: + continue #Not a movement command. + kernel_commands[2] = kernel_commands[1] + kernel_commands[1] = kernel_commands[0] + kernel_commands[0] = cmd + self.reverse_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) + + for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: total_frame_time_in_ms += cmd.estimated_exec_time_in_ms @@ -469,6 +475,25 @@ class CommandBuffer: "cmd_count": cmd_count, "time_in_ms": total_frame_time_in_ms}) + def reverse_pass_kernel(self, previous: Command, current: Command, next: Command): + if not previous: + return + + #If entry speed is already at the maximum entry speed, no need to + #recheck. The command is cruising. If not, the command is in state of + #acceleration or deceleration. Reset entry speed to maximum and check + #for maximum allowable speed reductions to ensure maximum possible + #planned speed. + if current._entry_speed != current._max_entry_speed: + #If nominal length is true, max junction speed is guaranteed to be + #reached. Only compute for max allowable speed if block is + #decelerating and nominal length is false. + if not current._nominal_length and current._max_entry_speed > next._max_entry_speed: + current._entry_speed = min(current._max_entry_speed, calc_max_allowable_speed(-current._acceleration, next._entry_speed, current._distance)) + else: + current._entry_speed = current._max_entry_speed + current._recalculate = True + def to_file(self, file_name: str) -> None: all_lines = [str(c) for c in self._all_commands] with open(file_name, "w", encoding = "utf-8") as f: From 0ad644386e437f56257da64dcf7f1adeae8d5b29 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 09:46:07 +0200 Subject: [PATCH 171/364] Actually execute the reverse pass in reverse As it should. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 3639aaec35..eec404a75f 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -435,7 +435,7 @@ class CommandBuffer: #Second pass: Reverse kernel. kernel_commands = [None, None, None] - for cmd in self._all_commands: + for cmd in reversed(self._all_commands): if cmd.estimated_exec_time_in_ms >= 0: continue #Not a movement command. kernel_commands[2] = kernel_commands[1] From 944bf70eb5b675b72d671fe9ed586eac5fb73809 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 09:54:14 +0200 Subject: [PATCH 172/364] Implement forward kernel pass Copied from CuraEngine's C++ implementation. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index eec404a75f..29ad49786e 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -443,6 +443,17 @@ class CommandBuffer: kernel_commands[0] = cmd self.reverse_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) + #Third pass: Forward kernel. + kernel_commands = [None, None, None] + for cmd in self._all_commands: + if cmd.estimated_exec_time_in_ms >= 0: + continue #Not a movement command. + kernel_commands[2] = kernel_commands[1] + kernel_commands[1] = kernel_commands[0] + kernel_commands[0] = cmd + self.forward_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) + self.forward_pass_kernel(kernel_commands[1], kernel_commands[2], None) + for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: @@ -475,7 +486,7 @@ class CommandBuffer: "cmd_count": cmd_count, "time_in_ms": total_frame_time_in_ms}) - def reverse_pass_kernel(self, previous: Command, current: Command, next: Command): + def reverse_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: if not previous: return @@ -494,6 +505,24 @@ class CommandBuffer: current._entry_speed = current._max_entry_speed current._recalculate = True + def forward_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: + if not previous: + return + + #If the previous command is an acceleration command, but it is not long + #enough to complete the full speed change within the command, we need to + #adjust the entry speed accordingly. Entry speeds have already been + #reset, maximised and reverse planned by the reverse planner. If nominal + #length is set, max junction speed is guaranteed to be reached. No need + #to recheck. + if not previous._nominal_length: + if previous._entry_speed < current._entry_speed: + entry_speed = min(current._entry_speed, calc_max_allowable_speed(-previous._acceleration, previous._entry_speed, previous._distance)) + + if current._entry_speed != entry_speed: + current._entry_speed = entry_speed + current._recalculate = True + def to_file(self, file_name: str) -> None: all_lines = [str(c) for c in self._all_commands] with open(file_name, "w", encoding = "utf-8") as f: From 515b2862306364ffd24ef308cd28f9b6ba67a306 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 10:57:35 +0200 Subject: [PATCH 173/364] Implement recalculation of trapezoid if entry speed had changed The fourth pass. It's a lot of work. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 29ad49786e..5796bc3d4d 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -454,6 +454,25 @@ class CommandBuffer: self.forward_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) self.forward_pass_kernel(kernel_commands[1], kernel_commands[2], None) + #Fourth pass: Recalculate the commands that have _recalculate set. + previous = None + current = None + for current in self._all_commands: + if current.estimated_exec_time_in_ms >= 0: + continue #Not a movement command. + + if previous: + #Recalculate if current command entry or exit junction speed has changed. + if previous._recalculate or current._recalculate: + #Note: Entry and exit factors always >0 by all previous logic operators. + previous.calculate_trapezoid(previous._entry_speed / previous._nominal_feedrate, current._entry_speed / previous._nominal_feedrate) + previous._recalculate = False + + previous = current + if current is not None: + current.calculate_trapezoid(current._entry_speed / current._nominal_feedrate, MINIMUM_PLANNER_SPEED / current._nominal_feedrate) + current._recalculate = False + for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: From 4e7f8a268f95f2fd78382488d9cdcf85c60ffeb0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 11:04:43 +0200 Subject: [PATCH 174/364] Implement calculating final time of movement commands This includes accelerations, jerks, proper joints, all that sort of thing. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 5796bc3d4d..7d86c8dfc0 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -70,6 +70,15 @@ def calc_acceleration_distance(init_speed: float, target_speed: float, accelerat return 0.0 return (target_speed ** 2 - init_speed ** 2) / (2 * acceleration) +## Gives the time it needs to accelerate from an initial speed to reach a final +# distance. +def calc_acceleration_time_from_distance(initial_feedrate: float, distance: float, acceleration: float) -> float: + discriminant = initial_feedrate ** 2 - 2 * acceleration * -distance + #If the discriminant is negative, we're moving in the wrong direction. + #Making the discriminant 0 then gives the extremum of the parabola instead of the intersection. + discriminant = max(0, discriminant) + return (-initial_feedrate + math.sqrt(discriminant)) / acceleration + def calc_travel_time(p0, p1, init_speed: float, target_speed: float, acceleration: float) -> float: pass @@ -473,6 +482,15 @@ class CommandBuffer: current.calculate_trapezoid(current._entry_speed / current._nominal_feedrate, MINIMUM_PLANNER_SPEED / current._nominal_feedrate) current._recalculate = False + #Fifth pass: Compute time for movement commands. + for cmd in self._all_commands: + if cmd.estimated_exec_time_in_ms >= 0: + continue #Not a movement command. + plateau_distance = cmd._decelerate_after - cmd._accelerate_until + cmd.estimated_exec_time_in_ms = calc_acceleration_time_from_distance(cmd._initial_feedrate, cmd._accelerate_until, cmd._acceleration) + cmd.estimated_exec_time_in_ms += plateau_distance / cmd._nominal_feedrate + cmd.estimated_exec_time_in_ms += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distancd - cmd._decelerate_after), cmd._acceleration) + for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: From bddfe44f2c7fcc56086db7dc9ee40c5e64bfd53a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 11:15:25 +0200 Subject: [PATCH 175/364] Make G10 and G11 behave just like actual retractions That's what CuraEngine does anyway. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 7d86c8dfc0..a9704b4f42 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -206,6 +206,17 @@ class Command: def _handle_g(self, cmd_num: int, parts: List[str]) -> None: estimated_exec_time_in_ms = 0.0 + # G10: Retract. Make this behave as if it's a retraction of 25mm. + if cmd_num == 10: + #TODO: If already retracted, this shouldn't add anything to the time. + cmd_num = 1 + parts = ["G1", "E" + str(buf.current_position[3] - 25)] + # G11: Unretract. Make this behave as if it's an unretraction of 25mm. + elif cmd_num == 11: + #TODO: If already unretracted + cmd_num = 1 + parts = ["G1", "E" + str(buf.current_position[3] + 25)] + # G0 and G1: Move if cmd_num in (0, 1): # Move @@ -301,20 +312,6 @@ class Command: if num > 0: estimated_exec_time_in_ms = num - # G10: Retract. Assume 0.3 seconds for short retractions and 0.5 seconds for long retractions. - if cmd_num == 10: - # S0 is short retract (default), S1 is long retract - is_short_retract = True - if len(parts) > 1: - cmd, num = get_code_and_num(parts[1]) - if cmd == "S" and num == 1: - is_short_retract = False - estimated_exec_time_in_ms = (0.3 if is_short_retract else 0.5) * 1000 - - # G11: Unretract. Assume 0.5 seconds. - if cmd_num == 11: - estimated_exec_time_in_ms = 0.5 * 1000 - # G90: Set to absolute positioning. Assume 0 seconds. if cmd_num == 90: estimated_exec_time_in_ms = 0.0 From cf5f66db9fd5fbf28679d21b49180a93b9195f39 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 11:18:40 +0200 Subject: [PATCH 176/364] Align expected time of auxillary commands to what CuraEngine estimates CuraEngine doesn't take most of these into its time estimate at all so they can just be 0. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index a9704b4f42..f28dc1326b 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -303,8 +303,8 @@ class Command: travel_time_in_ms = -1 #Signal that we need to include this in our second pass. - # G4: Dwell, pause the machine for a period of time. TODO - if cmd_num == 4: + # G4: Dwell, pause the machine for a period of time. + elif cmd_num == 4: # Pnnn is time to wait in milliseconds (P0 wait until all previous moves are finished) cmd, num = get_code_and_num(parts[1]) num = float(num) @@ -313,25 +313,20 @@ class Command: estimated_exec_time_in_ms = num # G90: Set to absolute positioning. Assume 0 seconds. - if cmd_num == 90: + elif cmd_num == 90: estimated_exec_time_in_ms = 0.0 # G91: Set to relative positioning. Assume 0 seconds. - if cmd_num == 91: + elif cmd_num == 91: estimated_exec_time_in_ms = 0.0 # G92: Set position. Assume 0 seconds. - if cmd_num == 92: + elif cmd_num == 92: estimated_exec_time_in_ms = 0.0 - # G280: Prime. Assume 10 seconds for using blob and 5 seconds for no blob. - if cmd_num == 280: - use_blob = True - if len(parts) > 1: - cmd, num = get_code_and_num(parts[1]) - if cmd == "S" and num == 1: - use_blob = False - estimated_exec_time_in_ms = (10.0 if use_blob else 5.0) * 1000 + # G280: Prime. Assume 0 seconds. Actually more like 10 if using blob and 5 if not. + elif cmd_num == 280: + estimated_exec_time_in_ms = 0.0 # Update estimated execution time self._estimated_exec_time_in_ms = round(estimated_exec_time_in_ms, 5) @@ -344,33 +339,34 @@ class Command: estimated_exec_time_in_ms = 0.0 # M83: Set extruder to relative mode. Assume 0 execution time. - if cmd_num == 83: + elif cmd_num == 83: estimated_exec_time_in_ms = 0.0 # M104: Set extruder temperature (no wait). Assume 0 execution time. - if cmd_num == 104: + elif cmd_num == 104: estimated_exec_time_in_ms = 0.0 # M106: Set fan speed. Assume 0 execution time. - if cmd_num == 106: + elif cmd_num == 106: estimated_exec_time_in_ms = 0.0 # M107: Turn fan off. Assume 0 execution time. - if cmd_num == 107: + elif cmd_num == 107: estimated_exec_time_in_ms = 0.0 - # M109: Set extruder temperature (wait). Uniformly random time between 30 - 90 seconds. - if cmd_num == 109: - estimated_exec_time_in_ms = random.uniform(30, 90) * 1000 # TODO: Check + # M109: Set extruder temperature (wait). Assume 0 execution time. Actually more like a minute. + elif cmd_num == 109: + estimated_exec_time_in_ms = 0.0 # M140: Set bed temperature (no wait). Assume 0 execution time. - if cmd_num == 140: + elif cmd_num == 140: estimated_exec_time_in_ms = 0.0 # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. - if cmd_num == 203: + elif cmd_num == 203: value_dict = get_value_dict(parts[1:]) buf.max_z_feedrate = value_dict.get("Z", buf.max_z_feedrate) + estimated_exec_time_in_ms = 0.0 # M204: Set default acceleration. Assume 0 execution time. if cmd_num == 204: @@ -389,8 +385,8 @@ class Command: self._estimated_exec_time_in_ms = estimated_exec_time_in_ms def _handle_t(self, cmd_num: int, parts: List[str]) -> None: - # Tn: Switching extruder. Assume 2 seconds. - estimated_exec_time_in_ms = 2.0 + # Tn: Switching extruder. Assume 0 seconds. Actually more like 2. + estimated_exec_time_in_ms = 0.0 self._estimated_exec_time_in_ms = estimated_exec_time_in_ms From 9d6b184cffc76cded0ed755483249040487b2b2d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 12:23:49 +0200 Subject: [PATCH 177/364] Leave out all commands which do nothing to time estimates Just skip over them. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 69 +++++----------------------------------------- 1 file changed, 7 insertions(+), 62 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index f28dc1326b..2c570f07ba 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -204,7 +204,7 @@ class Command: func(cmd_num, parts) def _handle_g(self, cmd_num: int, parts: List[str]) -> None: - estimated_exec_time_in_ms = 0.0 + self._estimated_exec_time_in_ms = 0.0 # G10: Retract. Make this behave as if it's a retraction of 25mm. if cmd_num == 10: @@ -213,14 +213,13 @@ class Command: parts = ["G1", "E" + str(buf.current_position[3] - 25)] # G11: Unretract. Make this behave as if it's an unretraction of 25mm. elif cmd_num == 11: - #TODO: If already unretracted + #TODO: If already unretracted, this shouldn't add anything to the time. cmd_num = 1 parts = ["G1", "E" + str(buf.current_position[3] + 25)] # G0 and G1: Move if cmd_num in (0, 1): # Move - distance = 0.0 if len(parts) > 0: value_dict = get_value_dict(parts[1:]) @@ -301,7 +300,7 @@ class Command: self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) - travel_time_in_ms = -1 #Signal that we need to include this in our second pass. + self._estimated_exec_time_in_ms = -1 #Signal that we need to include this in our second pass. # G4: Dwell, pause the machine for a period of time. elif cmd_num == 4: @@ -310,69 +309,20 @@ class Command: num = float(num) if cmd == "P": if num > 0: - estimated_exec_time_in_ms = num - - # G90: Set to absolute positioning. Assume 0 seconds. - elif cmd_num == 90: - estimated_exec_time_in_ms = 0.0 - - # G91: Set to relative positioning. Assume 0 seconds. - elif cmd_num == 91: - estimated_exec_time_in_ms = 0.0 - - # G92: Set position. Assume 0 seconds. - elif cmd_num == 92: - estimated_exec_time_in_ms = 0.0 - - # G280: Prime. Assume 0 seconds. Actually more like 10 if using blob and 5 if not. - elif cmd_num == 280: - estimated_exec_time_in_ms = 0.0 - - # Update estimated execution time - self._estimated_exec_time_in_ms = round(estimated_exec_time_in_ms, 5) + self._estimated_exec_time_in_ms = num def _handle_m(self, cmd_num: int, parts: List[str]) -> None: - estimated_exec_time_in_ms = 0.0 - - # M82: Set extruder to absolute mode. Assume 0 execution time. - if cmd_num == 82: - estimated_exec_time_in_ms = 0.0 - - # M83: Set extruder to relative mode. Assume 0 execution time. - elif cmd_num == 83: - estimated_exec_time_in_ms = 0.0 - - # M104: Set extruder temperature (no wait). Assume 0 execution time. - elif cmd_num == 104: - estimated_exec_time_in_ms = 0.0 - - # M106: Set fan speed. Assume 0 execution time. - elif cmd_num == 106: - estimated_exec_time_in_ms = 0.0 - - # M107: Turn fan off. Assume 0 execution time. - elif cmd_num == 107: - estimated_exec_time_in_ms = 0.0 - - # M109: Set extruder temperature (wait). Assume 0 execution time. Actually more like a minute. - elif cmd_num == 109: - estimated_exec_time_in_ms = 0.0 - - # M140: Set bed temperature (no wait). Assume 0 execution time. - elif cmd_num == 140: - estimated_exec_time_in_ms = 0.0 + self._estimated_exec_time_in_ms = 0.0 # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. - elif cmd_num == 203: + if cmd_num == 203: value_dict = get_value_dict(parts[1:]) buf.max_z_feedrate = value_dict.get("Z", buf.max_z_feedrate) - estimated_exec_time_in_ms = 0.0 # M204: Set default acceleration. Assume 0 execution time. if cmd_num == 204: value_dict = get_value_dict(parts[1:]) buf.acceleration = value_dict.get("S", buf.acceleration) - estimated_exec_time_in_ms = 0.0 # M205: Advanced settings, we only set jerks for Griffin. Assume 0 execution time. if cmd_num == 205: @@ -380,15 +330,10 @@ class Command: buf.max_xy_jerk = value_dict.get("XY", buf.max_xy_jerk) buf.max_z_jerk = value_dict.get("Z", buf.max_z_jerk) buf.max_e_jerk = value_dict.get("E", buf.max_e_jerk) - estimated_exec_time_in_ms = 0.0 - - self._estimated_exec_time_in_ms = estimated_exec_time_in_ms def _handle_t(self, cmd_num: int, parts: List[str]) -> None: # Tn: Switching extruder. Assume 0 seconds. Actually more like 2. - estimated_exec_time_in_ms = 0.0 - - self._estimated_exec_time_in_ms = estimated_exec_time_in_ms + self._estimated_exec_time_in_ms = 0.0 class CommandBuffer: From b95ad2f9261e7e8ee27f7f8954fccecbffec08ac Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 13:09:43 +0200 Subject: [PATCH 178/364] Remove unused function It was empty and unused. I don't know what or why. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 2c570f07ba..087eb0c5d6 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -79,10 +79,6 @@ def calc_acceleration_time_from_distance(initial_feedrate: float, distance: floa discriminant = max(0, discriminant) return (-initial_feedrate + math.sqrt(discriminant)) / acceleration - -def calc_travel_time(p0, p1, init_speed: float, target_speed: float, acceleration: float) -> float: - pass - ## Calculates the point at which you must start braking. # # This gives the distance from the start of a line at which you must start From 169b59a6b4a6d11d153a94893255575cec9d58ca Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 13:39:02 +0200 Subject: [PATCH 179/364] Remove superfluous _distance_in_mm property It was only used for printing and not set correctly any more. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 087eb0c5d6..41f8fb8f6b 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -102,7 +102,6 @@ class Command: def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str - self._distance_in_mm = 0.0 # type float self._estimated_exec_time_in_ms = 0.0 # type: float self._cmd_process_function_map = { @@ -169,9 +168,7 @@ class Command: if self._is_comment or self._is_empty: return self._cmd_str - distance_in_mm = round(self._distance_in_mm, 5) - - info = "d=%s t=%s" % (distance_in_mm, self._estimated_exec_time_in_ms) + info = "t=%s" % (self._estimated_exec_time_in_ms) return self._cmd_str.strip() + " ; --- " + info + os.linesep @@ -225,8 +222,6 @@ class Command: new_position[2] = value_dict.get("Z", new_position[2]) new_position[3] = value_dict.get("E", new_position[3]) - distance = calc_distance(buf.current_position, new_position) - self._distance_in_mm = distance self._delta = [ new_position[0] - buf.current_position[0], new_position[1] - buf.current_position[1], From df8ee1928d4eb7dc7c644de37eedf0de76f89fd1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 13:39:31 +0200 Subject: [PATCH 180/364] Fix parsing from value_dict These are strings, not float. We must convert them. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 41f8fb8f6b..5f11c96c18 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -217,10 +217,10 @@ class Command: value_dict = get_value_dict(parts[1:]) new_position = copy.deepcopy(buf.current_position) - new_position[0] = value_dict.get("X", new_position[0]) - new_position[1] = value_dict.get("Y", new_position[1]) - new_position[2] = value_dict.get("Z", new_position[2]) - new_position[3] = value_dict.get("E", new_position[3]) + new_position[0] = float(value_dict.get("X", new_position[0])) + new_position[1] = float(value_dict.get("Y", new_position[1])) + new_position[2] = float(value_dict.get("Z", new_position[2])) + new_position[3] = float(value_dict.get("E", new_position[3])) self._delta = [ new_position[0] - buf.current_position[0], @@ -231,9 +231,7 @@ class Command: self._abs_delta = [abs(x) for x in self._delta] self._max_travel = max(self._abs_delta) if self._max_travel > 0: - feedrate = buf.current_feedrate - if "F" in value_dict: - feedrate = value_dict["F"] + feedrate = float(value_dict.get("F", buf.current_feedrate)) if feedrate < MACHINE_MINIMUM_FEEDRATE: feedrate = MACHINE_MINIMUM_FEEDRATE self._nominal_feedrate = feedrate From 2cc3a593ef3407432a18891c430bff5bb278f6b1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 13:47:12 +0200 Subject: [PATCH 181/364] Store current feedrate when encountering it Otherwise the feedrate is zero and we get divisions by zero. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 1 + 1 file changed, 1 insertion(+) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 5f11c96c18..a6979755f5 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -221,6 +221,7 @@ class Command: new_position[1] = float(value_dict.get("Y", new_position[1])) new_position[2] = float(value_dict.get("Z", new_position[2])) new_position[3] = float(value_dict.get("E", new_position[3])) + buf.current_feedrate = value_dict.get("F", buf.current_feedrate) self._delta = [ new_position[0] - buf.current_position[0], From 9a43ee4629eff0af900a117cf7f28e6dfd2fa254 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 14:05:47 +0200 Subject: [PATCH 182/364] Fix kernel parameters We did one the wrong way around and weren't safe enough with the other. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index a6979755f5..600bdccfd2 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -385,9 +385,9 @@ class CommandBuffer: for cmd in self._all_commands: if cmd.estimated_exec_time_in_ms >= 0: continue #Not a movement command. - kernel_commands[2] = kernel_commands[1] - kernel_commands[1] = kernel_commands[0] - kernel_commands[0] = cmd + kernel_commands[0] = kernel_commands[1] + kernel_commands[1] = kernel_commands[2] + kernel_commands[2] = cmd self.forward_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) self.forward_pass_kernel(kernel_commands[1], kernel_commands[2], None) @@ -452,7 +452,7 @@ class CommandBuffer: "time_in_ms": total_frame_time_in_ms}) def reverse_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: - if not previous: + if not current or not next: return #If entry speed is already at the maximum entry speed, no need to From 88a84f60e0678957029160d3033ff7dd79215ffe Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 14:22:48 +0200 Subject: [PATCH 183/364] Make estimated_exec_time_in_ms just public We're all adults here. We need to modify this property in the fifth pass of move commands. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 600bdccfd2..67f1b6b8ac 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -102,7 +102,7 @@ class Command: def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str - self._estimated_exec_time_in_ms = 0.0 # type: float + self.estimated_exec_time_in_ms = 0.0 # type: float self._cmd_process_function_map = { "G": self._handle_g, @@ -160,15 +160,11 @@ class Command: def is_command(self) -> bool: return not self._is_comment and not self._is_empty - @property - def estimated_exec_time_in_ms(self) -> float: - return self._estimated_exec_time_in_ms - def __str__(self) -> str: if self._is_comment or self._is_empty: return self._cmd_str - info = "t=%s" % (self._estimated_exec_time_in_ms) + info = "t=%s" % (self.estimated_exec_time_in_ms) return self._cmd_str.strip() + " ; --- " + info + os.linesep @@ -197,7 +193,7 @@ class Command: func(cmd_num, parts) def _handle_g(self, cmd_num: int, parts: List[str]) -> None: - self._estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time_in_ms = 0.0 # G10: Retract. Make this behave as if it's a retraction of 25mm. if cmd_num == 10: @@ -290,7 +286,7 @@ class Command: self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) - self._estimated_exec_time_in_ms = -1 #Signal that we need to include this in our second pass. + self.estimated_exec_time_in_ms = -1 #Signal that we need to include this in our second pass. # G4: Dwell, pause the machine for a period of time. elif cmd_num == 4: @@ -299,10 +295,10 @@ class Command: num = float(num) if cmd == "P": if num > 0: - self._estimated_exec_time_in_ms = num + self.estimated_exec_time_in_ms = num def _handle_m(self, cmd_num: int, parts: List[str]) -> None: - self._estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time_in_ms = 0.0 # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. if cmd_num == 203: @@ -323,7 +319,7 @@ class Command: def _handle_t(self, cmd_num: int, parts: List[str]) -> None: # Tn: Switching extruder. Assume 0 seconds. Actually more like 2. - self._estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time_in_ms = 0.0 class CommandBuffer: From df435a4cf9e7dead0cb2a57600e3d4eac5a18ab4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 14:24:05 +0200 Subject: [PATCH 184/364] Don't recalculate last trapezoid if last command is not a move I think we're just missing the last trapezoid then sometimes. Let's see what the effect of that is. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 67f1b6b8ac..22e8a3896a 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -392,6 +392,7 @@ class CommandBuffer: current = None for current in self._all_commands: if current.estimated_exec_time_in_ms >= 0: + current = None continue #Not a movement command. if previous: @@ -402,7 +403,7 @@ class CommandBuffer: previous._recalculate = False previous = current - if current is not None: + if current is not None and current.estimated_exec_time_in_ms >= 0: current.calculate_trapezoid(current._entry_speed / current._nominal_feedrate, MINIMUM_PLANNER_SPEED / current._nominal_feedrate) current._recalculate = False From f93a82041d29921056d113a19f1fea360f83f2f1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 14:24:52 +0200 Subject: [PATCH 185/364] Fix typo Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 22e8a3896a..6fd68b446b 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -414,7 +414,7 @@ class CommandBuffer: plateau_distance = cmd._decelerate_after - cmd._accelerate_until cmd.estimated_exec_time_in_ms = calc_acceleration_time_from_distance(cmd._initial_feedrate, cmd._accelerate_until, cmd._acceleration) cmd.estimated_exec_time_in_ms += plateau_distance / cmd._nominal_feedrate - cmd.estimated_exec_time_in_ms += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distancd - cmd._decelerate_after), cmd._acceleration) + cmd.estimated_exec_time_in_ms += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distance - cmd._decelerate_after), cmd._acceleration) for idx, cmd in enumerate(self._all_commands): cmd_count += 1 From de437112266b41731b10768824ea83df6b92b66d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 14:28:46 +0200 Subject: [PATCH 186/364] All times in seconds instead of milliseconds Everything in our tool chain works in seconds. Let's do that here too. Also, the algorithm from CuraEngine works in seconds as well. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 56 +++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 6fd68b446b..7ab864a36e 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -12,7 +12,7 @@ from typing import Dict, List, Optional, Tuple # ==================================== # Constants and Default Values # ==================================== -DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS = 50.0 / 1000.0 # The buffer filling rate in #commands/ms +DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S = 50.0 # The buffer filling rate in #commands/ms DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands MINIMUM_PLANNER_SPEED = 0.05 @@ -102,7 +102,7 @@ class Command: def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str - self.estimated_exec_time_in_ms = 0.0 # type: float + self.estimated_exec_time = 0.0 # type: float self._cmd_process_function_map = { "G": self._handle_g, @@ -164,7 +164,7 @@ class Command: if self._is_comment or self._is_empty: return self._cmd_str - info = "t=%s" % (self.estimated_exec_time_in_ms) + info = "t=%s" % (self.estimated_exec_time) return self._cmd_str.strip() + " ; --- " + info + os.linesep @@ -193,7 +193,7 @@ class Command: func(cmd_num, parts) def _handle_g(self, cmd_num: int, parts: List[str]) -> None: - self.estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time = 0.0 # G10: Retract. Make this behave as if it's a retraction of 25mm. if cmd_num == 10: @@ -286,7 +286,7 @@ class Command: self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) - self.estimated_exec_time_in_ms = -1 #Signal that we need to include this in our second pass. + self.estimated_exec_time = -1 #Signal that we need to include this in our second pass. # G4: Dwell, pause the machine for a period of time. elif cmd_num == 4: @@ -295,10 +295,10 @@ class Command: num = float(num) if cmd == "P": if num > 0: - self.estimated_exec_time_in_ms = num + self.estimated_exec_time = num def _handle_m(self, cmd_num: int, parts: List[str]) -> None: - self.estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time = 0.0 # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. if cmd_num == 203: @@ -319,12 +319,12 @@ class Command: def _handle_t(self, cmd_num: int, parts: List[str]) -> None: # Tn: Switching extruder. Assume 0 seconds. Actually more like 2. - self.estimated_exec_time_in_ms = 0.0 + self.estimated_exec_time = 0.0 class CommandBuffer: def __init__(self, all_lines: List[str], - buffer_filling_rate: float = DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_MS, + buffer_filling_rate: float = DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S, buffer_size: int = DEFAULT_BUFFER_SIZE ) -> None: self._all_lines = all_lines @@ -357,7 +357,7 @@ class CommandBuffer: def process(self) -> None: cmd0_idx = 0 - total_frame_time_in_ms = 0.0 + total_frame_time = 0.0 cmd_count = 0 for idx, line in enumerate(self._all_lines): cmd = Command(line) @@ -369,7 +369,7 @@ class CommandBuffer: #Second pass: Reverse kernel. kernel_commands = [None, None, None] for cmd in reversed(self._all_commands): - if cmd.estimated_exec_time_in_ms >= 0: + if cmd.estimated_exec_time >= 0: continue #Not a movement command. kernel_commands[2] = kernel_commands[1] kernel_commands[1] = kernel_commands[0] @@ -379,7 +379,7 @@ class CommandBuffer: #Third pass: Forward kernel. kernel_commands = [None, None, None] for cmd in self._all_commands: - if cmd.estimated_exec_time_in_ms >= 0: + if cmd.estimated_exec_time >= 0: continue #Not a movement command. kernel_commands[0] = kernel_commands[1] kernel_commands[1] = kernel_commands[2] @@ -391,7 +391,7 @@ class CommandBuffer: previous = None current = None for current in self._all_commands: - if current.estimated_exec_time_in_ms >= 0: + if current.estimated_exec_time >= 0: current = None continue #Not a movement command. @@ -403,50 +403,50 @@ class CommandBuffer: previous._recalculate = False previous = current - if current is not None and current.estimated_exec_time_in_ms >= 0: + if current is not None and current.estimated_exec_time >= 0: current.calculate_trapezoid(current._entry_speed / current._nominal_feedrate, MINIMUM_PLANNER_SPEED / current._nominal_feedrate) current._recalculate = False #Fifth pass: Compute time for movement commands. for cmd in self._all_commands: - if cmd.estimated_exec_time_in_ms >= 0: + if cmd.estimated_exec_time >= 0: continue #Not a movement command. plateau_distance = cmd._decelerate_after - cmd._accelerate_until - cmd.estimated_exec_time_in_ms = calc_acceleration_time_from_distance(cmd._initial_feedrate, cmd._accelerate_until, cmd._acceleration) - cmd.estimated_exec_time_in_ms += plateau_distance / cmd._nominal_feedrate - cmd.estimated_exec_time_in_ms += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distance - cmd._decelerate_after), cmd._acceleration) + cmd.estimated_exec_time = calc_acceleration_time_from_distance(cmd._initial_feedrate, cmd._accelerate_until, cmd._acceleration) + cmd.estimated_exec_time += plateau_distance / cmd._nominal_feedrate + cmd.estimated_exec_time += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distance - cmd._decelerate_after), cmd._acceleration) for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: - total_frame_time_in_ms += cmd.estimated_exec_time_in_ms + total_frame_time += cmd.estimated_exec_time - if total_frame_time_in_ms > 1000.0: + if total_frame_time > 1: # Find the next starting command which makes the total execution time of the frame to be less than # 1 second. cmd0_idx += 1 - total_frame_time_in_ms -= self._all_commands[cmd0_idx].estimated_exec_time_in_ms + total_frame_time -= self._all_commands[cmd0_idx].estimated_exec_time cmd_count -= 1 - while total_frame_time_in_ms > 1000.0: + while total_frame_time > 1: cmd0_idx += 1 - total_frame_time_in_ms -= self._all_commands[cmd0_idx].estimated_exec_time_in_ms + total_frame_time -= self._all_commands[cmd0_idx].estimated_exec_time cmd_count -= 1 # If within the current time frame the code count exceeds the limit, record that. - if total_frame_time_in_ms <= self._detection_time_frame and cmd_count > self._code_count_limit: + if total_frame_time <= self._detection_time_frame and cmd_count > self._code_count_limit: need_to_append = True if self._bad_frame_ranges: last_item = self._bad_frame_ranges[-1] if last_item["start_line"] == cmd0_idx: last_item["end_line"] = idx last_item["cmd_count"] = cmd_count - last_item["time_in_ms"] = total_frame_time_in_ms + last_item["time"] = total_frame_time need_to_append = False if need_to_append: self._bad_frame_ranges.append({"start_line": cmd0_idx, "end_line": idx, "cmd_count": cmd_count, - "time_in_ms": total_frame_time_in_ms}) + "time": total_frame_time}) def reverse_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: if not current or not next: @@ -492,8 +492,8 @@ class CommandBuffer: def report(self) -> None: for item in self._bad_frame_ranges: - print("!!!!! potential bad frame from line %s to %s, code count = %s, in %s ms" % ( - item["start_line"], item["end_line"], item["cmd_count"], round(item["time_in_ms"], 4))) + print("!!!!! potential bad frame from line %s to %s, code count = %s, in %s s" % ( + item["start_line"], item["end_line"], item["cmd_count"], round(item["time"], 4))) if __name__ == "__main__": From 23e42164cb16cdbc0bc7f4a5496d349886bcafd2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 16:05:36 +0200 Subject: [PATCH 187/364] Add total estimated time to output So that we can verify whether our re-estimation is the same as CuraEngine's original estimation. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 7ab864a36e..4d781f4965 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -346,6 +346,7 @@ class CommandBuffer: self._detection_time_frame = lower_bound_buffer_depletion_time self._code_count_limit = self._buffer_size + self.total_time = 0.0 self.previous_feedrate = [0, 0, 0, 0] self.previous_nominal_feedrate = 0 @@ -356,6 +357,7 @@ class CommandBuffer: self._bad_frame_ranges = [] def process(self) -> None: + buf.total_time = 0.0 cmd0_idx = 0 total_frame_time = 0.0 cmd_count = 0 @@ -419,6 +421,7 @@ class CommandBuffer: for idx, cmd in enumerate(self._all_commands): cmd_count += 1 if idx > cmd0_idx or idx == 0: + buf.total_time += cmd.estimated_exec_time total_frame_time += cmd.estimated_exec_time if total_frame_time > 1: @@ -489,6 +492,7 @@ class CommandBuffer: all_lines = [str(c) for c in self._all_commands] with open(file_name, "w", encoding = "utf-8") as f: f.writelines(all_lines) + f.write(";---TOTAL ESTIMATED TIME:" + str(self.total_time)) def report(self) -> None: for item in self._bad_frame_ranges: From bec643cd793e540223c71259748eece15bda20f2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 17:09:00 +0200 Subject: [PATCH 188/364] Fix reading F parameter from g-code We need to divide that by 60 to get into somewhat more sane units than the stupid mm/min that g-code uses. Also simplifies a few other things there. Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 4d781f4965..895ea6d35f 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -28,7 +28,7 @@ MACHINE_MAX_ACCELERATION_E = 10000 MACHINE_MAX_JERK_XY = 20 MACHINE_MAX_JERK_Z = 0.4 MACHINE_MAX_JERK_E = 5 -MACHINE_MINIMUM_FEEDRATE = 0 +MACHINE_MINIMUM_FEEDRATE = 0.001 MACHINE_ACCELERATION = 3000 ## Gets the code and number from the given g-code line. @@ -217,7 +217,9 @@ class Command: new_position[1] = float(value_dict.get("Y", new_position[1])) new_position[2] = float(value_dict.get("Z", new_position[2])) new_position[3] = float(value_dict.get("E", new_position[3])) - buf.current_feedrate = value_dict.get("F", buf.current_feedrate) + buf.current_feedrate = float(value_dict.get("F", buf.current_feedrate * 60.0)) / 60.0 + if buf.current_feedrate < MACHINE_MINIMUM_FEEDRATE: + buf.current_feedrate = MACHINE_MINIMUM_FEEDRATE self._delta = [ new_position[0] - buf.current_position[0], @@ -228,15 +230,12 @@ class Command: self._abs_delta = [abs(x) for x in self._delta] self._max_travel = max(self._abs_delta) if self._max_travel > 0: - feedrate = float(value_dict.get("F", buf.current_feedrate)) - if feedrate < MACHINE_MINIMUM_FEEDRATE: - feedrate = MACHINE_MINIMUM_FEEDRATE - self._nominal_feedrate = feedrate + self._nominal_feedrate = buf.current_feedrate self._distance = math.sqrt(self._abs_delta[0] ** 2 + self._abs_delta[1] ** 2 + self._abs_delta[2] ** 2) if self._distance == 0: self._distance = self._abs_delta[3] - current_feedrate = [d * feedrate / self._distance for d in self._delta] + current_feedrate = [d * self._nominal_feedrate / self._distance for d in self._delta] current_abs_feedrate = [abs(f) for f in current_feedrate] feedrate_factor = min(1.0, MACHINE_MAX_FEEDRATE_X) feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Y) From f5157aeeaf7e41a6ce11701293b00377e173c9a5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 17:15:46 +0200 Subject: [PATCH 189/364] Add commands per second to output Contributes to issue CURA-5561. --- 50_inst_per_sec.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/50_inst_per_sec.py b/50_inst_per_sec.py index 895ea6d35f..a877430114 100644 --- a/50_inst_per_sec.py +++ b/50_inst_per_sec.py @@ -495,8 +495,12 @@ class CommandBuffer: def report(self) -> None: for item in self._bad_frame_ranges: - print("!!!!! potential bad frame from line %s to %s, code count = %s, in %s s" % ( - item["start_line"], item["end_line"], item["cmd_count"], round(item["time"], 4))) + print("Potential buffer underrun from line {start_line} to {end_line}, code count = {code_count}, in {time}s ({speed} cmd/s)".format( + start_line = item["start_line"], + end_line = item["end_line"], + code_count = item["cmd_count"], + time = round(item["time"], 4), + speed = round(item["cmd_count"] / item["time"], 2))) if __name__ == "__main__": From 9e56d6d29f62995243988a0b2c96e86d46596094 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Wed, 5 Sep 2018 17:16:06 +0200 Subject: [PATCH 190/364] Improved expansion behavior Contributes to CURA-5682 - Active material is now expanded by default when opening the manager - Expanded and collapsed sections are saved to preferences - Sections are now highlighted when collapsed and having a selected material inside - Bug with losing focus between fields is not yet fixed --- cura/CuraApplication.py | 4 +- cura/Machines/Models/MaterialBrandsModel.py | 4 +- .../Materials/MaterialsBrandSection.qml | 29 ++++++-- .../Preferences/Materials/MaterialsList.qml | 2 +- .../Preferences/Materials/MaterialsPage.qml | 66 +++++++++++++------ .../Preferences/Materials/MaterialsSlot.qml | 12 +++- .../Materials/MaterialsTypeSection.qml | 36 ++++++++-- 7 files changed, 119 insertions(+), 34 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 833f43e29c..e8b0930264 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -480,7 +480,9 @@ class CuraApplication(QtApplication): preferences.addPreference("view/filter_current_build_plate", False) preferences.addPreference("cura/sidebar_collapsed", False) - preferences.addPreference("cura/favorite_materials", ";".join([])) + preferences.addPreference("cura/favorite_materials", "") + preferences.addPreference("cura/expanded_brands", "") + preferences.addPreference("cura/expanded_types", "") self._need_to_show_user_agreement = not preferences.getValue("general/accepted_user_agreement") diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 3f917abb16..2e2232c2dc 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -12,7 +12,8 @@ class MaterialTypesModel(ListModel): super().__init__(parent) self.addRoleName(Qt.UserRole + 1, "name") - self.addRoleName(Qt.UserRole + 2, "colors") + self.addRoleName(Qt.UserRole + 2, "brand") + self.addRoleName(Qt.UserRole + 3, "colors") class MaterialBrandsModel(BaseMaterialsModel): @@ -86,6 +87,7 @@ class MaterialBrandsModel(BaseMaterialsModel): for material_type, material_list in material_dict.items(): material_type_item = { "name": material_type, + "brand": brand, "colors": BaseMaterialsModel(self) } material_type_item["colors"].clear() diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 1077cbff6f..5afe61abf1 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -13,14 +13,24 @@ import Cura 1.0 as Cura Rectangle { id: brand_section - property var expanded: base.collapsed_brands.indexOf(model.name) > -1 + property var expanded: base.expanded_brands.indexOf(model.name) > -1 property var types_model: model.material_types height: childrenRect.height width: parent.width Rectangle { id: brand_header_background - color: UM.Theme.getColor("favorites_header_bar") + color: + { + if(!expanded && model.name == base.current_brand) + { + return UM.Theme.getColor("favorites_row_selected") + } + else + { + return UM.Theme.getColor("favorites_header_bar") + } + } anchors.fill: brand_header } Row @@ -69,19 +79,20 @@ Rectangle anchors.fill: brand_header onPressed: { - const i = base.collapsed_brands.indexOf(model.name) + const i = base.expanded_brands.indexOf(model.name) if (i > -1) { // Remove it - base.collapsed_brands.splice(i, 1) + base.expanded_brands.splice(i, 1) brand_section.expanded = false } else { // Add it - base.collapsed_brands.push(model.name) + base.expanded_brands.push(model.name) brand_section.expanded = true } + UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";")); } } Column @@ -97,4 +108,12 @@ Rectangle delegate: MaterialsTypeSection {} } } + + Connections { + target: UM.Preferences + onPreferenceChanged: + { + expanded = base.expanded_brands.indexOf(model.name) > -1 + } + } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 4a1a330ed6..be077c6329 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -102,7 +102,7 @@ Item } Rectangle { - property var expanded: base.collapsed_brands.indexOf("Generic") > -1 + property var expanded: base.expanded_brands.indexOf("Generic") > -1 id: generic_section height: childrenRect.height diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 0b81df5fa1..0b35440552 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -17,6 +17,8 @@ Item // Keep PreferencesDialog happy property var resetEnabled: false property var currentItem: null + property var current_type: null + property var current_brand: null property var isCurrentItemActivated: { const extruder_position = Cura.ExtruderManager.activeExtruderIndex; @@ -26,49 +28,71 @@ Item property string newRootMaterialIdToSwitchTo: "" property bool toActivateNewMaterial: false - // TODO: Save these to preferences - property var collapsed_brands: [] - property var collapsed_types: [] + property var expanded_brands: UM.Preferences.getValue("cura/expanded_brands").split(";") + property var expanded_types: UM.Preferences.getValue("cura/expanded_types").split(";") + property var extruder_position: Cura.ExtruderManager.activeExtruderIndex + property var active_root_material_id: Cura.MachineManager.currentRootMaterialId[extruder_position] UM.I18nCatalog { id: catalog name: "cura" } - Cura.MaterialBrandsModel { id: materialsModel } - function findModelByRootId( search_root_id ) + Cura.MaterialBrandsModel { id: materials_model } + Cura.GenericMaterialsModel { id: generic_materials_model } + + function expandActiveMaterial( search_root_id ) { - for (var i = 0; i < materialsModel.rowCount(); i++) + for (var n = 0; n < generic_materials_model.rowCount(); n++) { - var types_model = materialsModel.getItem(i).material_types; + var material = generic_materials_model.getItem(n); + if (material.root_material_id == search_root_id) + { + if (base.expanded_brands.indexOf("Generic") == -1) + { + base.expanded_brands.push("Generic"); + base.current_brand = "Generic" + } + } + } + for (var i = 0; i < materials_model.rowCount(); i++) + { + var brand = materials_model.getItem(i); + var types_model = brand.material_types; + for (var j = 0; j < types_model.rowCount(); j++) { - var colors_model = types_model.getItem(j).colors; + var type = types_model.getItem(j); + var colors_model = type.colors; for (var k = 0; k < colors_model.rowCount(); k++) { var material = colors_model.getItem(k); if (material.root_material_id == search_root_id) { - return material + if (base.expanded_brands.indexOf(brand.name) == -1) + { + base.expanded_brands.push(brand.name); + base.current_brand = brand.name + } + if (base.expanded_types.indexOf(brand.name+"_"+type.name) == -1) + { + base.expanded_types.push(brand.name+"_"+type.name) + base.current_type = brand.name+"_"+type.name + } } } } } + UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";")); + UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";")); } - Component.onCompleted: - { - // Select the activated material when this page shows up - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - console.log("goign to search for", active_root_material_id) - base.currentItem = findModelByRootId(active_root_material_id) - } + Component.onCompleted: { expandActiveMaterial(active_root_material_id) } onCurrentItemChanged: { MaterialsDetailsPanel.currentItem = currentItem } Connections { - target: materialsModel + target: materials_model onItemsChanged: { var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id; @@ -80,9 +104,9 @@ Item base.newRootMaterialIdToSwitchTo = currentItemId; } - for (var idx = 0; idx < materialsModel.rowCount(); ++idx) + for (var idx = 0; idx < materials_model.rowCount(); ++idx) { - var item = materialsModel.getItem(idx); + var item = materials_model.getItem(idx); if (item.root_material_id == base.newRootMaterialIdToSwitchTo) { // Switch to the newly created profile if needed @@ -102,7 +126,7 @@ Item materialListView.activateDetailsWithIndex(materialListView.currentIndex); if (base.toActivateNewMaterial) { - Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node); + Cura.MachineManager.setMaterial(position, materials_model.getItem(0).container_node); } base.newRootMaterialIdToSwitchTo = ""; base.toActivateNewMaterial = false; diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index ab0dd23750..65c32c59e3 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -20,6 +20,12 @@ Rectangle height: UM.Theme.getSize("favorites_row").height width: parent.width color: base.currentItem == model ? UM.Theme.getColor("favorites_row_selected") : "transparent" + + Component.onCompleted: { + if (material.root_material_id == base.active_root_material_id) { + base.currentItem = material + } + } Item { @@ -49,7 +55,11 @@ Rectangle MouseArea { anchors.fill: parent - onClicked: { base.currentItem = material } + onClicked: { + base.currentItem = material + base.current_brand = material.brand + base.current_type = material.brand+"_"+material.material + } hoverEnabled: true onEntered: { material_slot.hovered = true } onExited: { material_slot.hovered = false } diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 11bf2385e1..c915390c5a 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -13,13 +13,30 @@ import Cura 1.0 as Cura Rectangle { id: material_type_section - property var expanded: base.collapsed_types.indexOf(model.brand + "_" + model.name) > -1 + property var expanded: base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 property var colors_model: model.colors height: childrenRect.height width: parent.width Rectangle { id: material_type_header_background + color: + { + if(!expanded && model.brand+"_"+model.name == base.current_type) + { + return UM.Theme.getColor("favorites_row_selected") + } + else + { + return "transparent" + } + } + width: parent.width + height: material_type_header.height + } + Rectangle + { + id: material_type_header_border color: UM.Theme.getColor("lining") anchors.bottom: material_type_header.bottom anchors.left: material_type_header.left @@ -42,6 +59,7 @@ Rectangle width: parent.width - UM.Theme.getSize("favorites_button").width id: material_type_name verticalAlignment: Text.AlignVCenter + } Button { @@ -76,19 +94,21 @@ Rectangle anchors.fill: material_type_header onPressed: { - const i = base.collapsed_types.indexOf(model.brand + "_" + model.name) + const identifier = model.brand + "_" + model.name; + const i = base.expanded_types.indexOf(identifier) if (i > -1) { // Remove it - base.collapsed_types.splice(i, 1) + base.expanded_types.splice(i, 1) material_type_section.expanded = false } else { // Add it - base.collapsed_types.push(model.brand + "_" + model.name) + base.expanded_types.push(identifier) material_type_section.expanded = true } + UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";")); } } Column @@ -106,4 +126,12 @@ Rectangle } } } + + Connections { + target: UM.Preferences + onPreferenceChanged: + { + expanded = base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 + } + } } \ No newline at end of file From 3e30e26ac05833821ff2068a3ebc670568497aec Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 5 Sep 2018 17:16:55 +0200 Subject: [PATCH 191/364] Move into tests folder There it can stay and be used on modern code. Contributes to issue CURA-5561. --- 50_inst_per_sec.py => tests/50_inst_per_sec.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename 50_inst_per_sec.py => tests/50_inst_per_sec.py (99%) diff --git a/50_inst_per_sec.py b/tests/50_inst_per_sec.py similarity index 99% rename from 50_inst_per_sec.py rename to tests/50_inst_per_sec.py index a877430114..58787a4849 100644 --- a/50_inst_per_sec.py +++ b/tests/50_inst_per_sec.py @@ -12,7 +12,7 @@ from typing import Dict, List, Optional, Tuple # ==================================== # Constants and Default Values # ==================================== -DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S = 50.0 # The buffer filling rate in #commands/ms +DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S = 50.0 # The buffer filling rate in #commands/s DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands MINIMUM_PLANNER_SPEED = 0.05 From b21200c6a814c6e9303fe416bed60f06d04c3a7a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 17:16:56 +0200 Subject: [PATCH 192/364] Check for None before updating model CURA-5670 --- plugins/Toolbox/src/AuthorsModel.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/Toolbox/src/AuthorsModel.py b/plugins/Toolbox/src/AuthorsModel.py index 45424d7e42..bea3893504 100644 --- a/plugins/Toolbox/src/AuthorsModel.py +++ b/plugins/Toolbox/src/AuthorsModel.py @@ -33,6 +33,9 @@ class AuthorsModel(ListModel): def _update(self): items = [] + if not self._metadata: + self.setItems([]) + return for author in self._metadata: items.append({ From cfcf52d7c3a53f92daa4b39501ba9badafbaec6e Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 5 Sep 2018 22:05:08 +0200 Subject: [PATCH 193/364] Center in parent and increase width. Fits good on Mac --- plugins/SimulationView/SimulationSliderLabel.qml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/SimulationView/SimulationSliderLabel.qml b/plugins/SimulationView/SimulationSliderLabel.qml index 559bffadc4..b69fede243 100644 --- a/plugins/SimulationView/SimulationSliderLabel.qml +++ b/plugins/SimulationView/SimulationSliderLabel.qml @@ -44,12 +44,11 @@ UM.PointingRectangle { id: valueLabel anchors { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter } - width: (maximumValue.toString().length + 1) * 8 * screenScaleFactor + width: (maximumValue.toString().length + 1) * 10 * screenScaleFactor text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array horizontalAlignment: TextInput.AlignRight From 9aea0e5109fa004402683001721233cb1325d0b7 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Sep 2018 08:10:53 +0200 Subject: [PATCH 194/364] Fix quality lookup logic for extruders CURA-5694 - Add convenience functions into GlobalStack - Use "has_variants" and "has_materials" instead of "has_variant_materials" - Remove "has_variant_materials" - For extruder qualities, skip global qualities if the machine has variants or materials --- cura/Machines/QualityManager.py | 8 +++++--- cura/Settings/GlobalStack.py | 8 ++++++++ resources/definitions/cartesio.def.json | 1 - resources/definitions/ultimaker3.def.json | 1 - resources/definitions/ultimaker3_extended.def.json | 1 - resources/definitions/ultimaker_s5.def.json | 1 - 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index 6869d99bc7..580d52b089 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -200,7 +200,9 @@ class QualityManager(QObject): 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_variant_materials = parseBool(machine.getMetaDataEntry("has_variant_materials", False)) + has_variants = machine.getHasVariants() + has_materials = machine.getHasMaterials() + has_variants_or_materials = has_variants or has_materials # To find the quality container for the GlobalStack, check in the following fall-back manner: # (1) the machine-specific node @@ -214,7 +216,7 @@ class QualityManager(QObject): for node in nodes_to_check: if node and node.quality_type_map: # Only include global qualities - if has_variant_materials: + if has_variants_or_materials: quality_node = list(node.quality_type_map.values())[0] is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) if not is_global_quality: @@ -302,7 +304,7 @@ class QualityManager(QObject): for node in nodes_to_check: if node and node.quality_type_map: - if has_variant_materials: + if has_variants_or_materials: # Only include variant qualities; skip non global qualities quality_node = list(node.quality_type_map.values())[0] is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 36084b7d4d..d7ebe804f4 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -13,6 +13,8 @@ from UM.Settings.SettingInstance import InstanceState from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import PropertyEvaluationContext from UM.Logger import Logger +from UM.Util import parseBool + import cura.CuraApplication from . import Exceptions @@ -188,6 +190,12 @@ class GlobalStack(CuraContainerStack): def getHeadAndFansCoordinates(self): return self.getProperty("machine_head_with_fans_polygon", "value") + def getHasMaterials(self) -> bool: + return parseBool(self.getMetaDataEntry("has_materials", False)) + + def getHasVariants(self) -> bool: + return parseBool(self.getMetaDataEntry("has_variants", False)) + ## private: global_stack_mime = MimeType( diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 57c16241a0..9c7a95cceb 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -11,7 +11,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variants": true, "variants_name": "Tool", diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index b75d12ce44..b1daa6b780 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -13,7 +13,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variants": true, "preferred_variant_name": "AA 0.4", "preferred_quality_type": "normal", diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index 1e6c322c73..eb3cda9320 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -13,7 +13,6 @@ "platform_offset": [0, 0, 0], "has_machine_quality": true, "has_machine_materials": true, - "has_variant_materials": true, "has_materials": true, "has_variants": true, "preferred_variant_name": "AA 0.4", diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index f6971d0da3..115c84c0db 100644 --- a/resources/definitions/ultimaker_s5.def.json +++ b/resources/definitions/ultimaker_s5.def.json @@ -15,7 +15,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variant_buildplates": true, "has_variants": true, "preferred_variant_name": "AA 0.4", From 2819b6cbc6052dce34e26c5ba83a4a677d9e9d2e Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Sep 2018 08:57:00 +0200 Subject: [PATCH 195/364] Fix code style --- plugins/SliceInfoPlugin/SliceInfo.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index d92a4f3376..fd58e68938 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -5,6 +5,7 @@ import json import os import platform import time +from typing import cast, Optional, Set from PyQt5.QtCore import pyqtSlot, QObject @@ -16,7 +17,7 @@ from UM.i18n import i18nCatalog from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry from UM.Qt.Duration import DurationFormat -from typing import cast, Optional + from .SliceInfoJob import SliceInfoJob @@ -96,11 +97,12 @@ class SliceInfo(QObject, Extension): Application.getInstance().getPreferences().setValue("info/send_slice_info", enabled) def _getUserModifiedSettingKeys(self) -> list: - application = Application.getInstance() + from cura.CuraApplication import CuraApplication + application = cast(CuraApplication, Application.getInstance()) machine_manager = application.getMachineManager() global_stack = machine_manager.activeMachine - user_modified_setting_keys = set() + user_modified_setting_keys = set() # type: Set[str] for stack in [global_stack] + list(global_stack.extruders.values()): # Get all settings in user_changes and quality_changes @@ -115,7 +117,8 @@ class SliceInfo(QObject, Extension): Logger.log("d", "'info/send_slice_info' is turned off.") return # Do nothing, user does not want to send data - application = Application.getInstance() + from cura.CuraApplication import CuraApplication + application = cast(CuraApplication, Application.getInstance()) machine_manager = application.getMachineManager() print_information = application.getPrintInformation() From ea2b0d04800291845af0ffbfa75500ec3b2c4413 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 6 Sep 2018 09:58:25 +0200 Subject: [PATCH 196/364] Print total predicted number of buffer underruns I think this is the final metric that we'll want to track. Contributes to issue CURA-5561. --- tests/50_inst_per_sec.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/50_inst_per_sec.py b/tests/50_inst_per_sec.py index 58787a4849..91992c813a 100644 --- a/tests/50_inst_per_sec.py +++ b/tests/50_inst_per_sec.py @@ -501,6 +501,7 @@ class CommandBuffer: code_count = item["cmd_count"], time = round(item["time"], 4), speed = round(item["cmd_count"] / item["time"], 2))) + print("Total predicted number of buffer underruns:", len(self._bad_frame_ranges)) if __name__ == "__main__": From bb578be0669504cb34cb8b67e346e1da64b47b25 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Sep 2018 14:22:36 +0200 Subject: [PATCH 197/364] Move the script to scripts dir --- {tests => scripts}/50_inst_per_sec.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename {tests => scripts}/50_inst_per_sec.py (99%) diff --git a/tests/50_inst_per_sec.py b/scripts/50_inst_per_sec.py similarity index 99% rename from tests/50_inst_per_sec.py rename to scripts/50_inst_per_sec.py index 91992c813a..e61228f935 100644 --- a/tests/50_inst_per_sec.py +++ b/scripts/50_inst_per_sec.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. @@ -5,7 +6,6 @@ import copy import math import os import sys -import random from typing import Dict, List, Optional, Tuple @@ -98,6 +98,7 @@ def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, a def calc_max_allowable_speed(acceleration: float, target_velocity: float, distance: float) -> float: return math.sqrt(target_velocity * target_velocity - 2 * acceleration * distance) + class Command: def __init__(self, cmd_str: str) -> None: self._cmd_str = cmd_str # type: str From 32a49bf8fa01221a909df2fa1121eab3bd2130dc Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Sep 2018 14:39:52 +0200 Subject: [PATCH 198/364] Make annotated output gcode optional --- scripts/50_inst_per_sec.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/50_inst_per_sec.py b/scripts/50_inst_per_sec.py index e61228f935..d3410096c5 100644 --- a/scripts/50_inst_per_sec.py +++ b/scripts/50_inst_per_sec.py @@ -506,16 +506,22 @@ class CommandBuffer: if __name__ == "__main__": - if len(sys.argv) != 3: - print("Usage: ") + if len(sys.argv) < 2 or 3 < len(sys.argv): + print("Usage: [output gcode]") sys.exit(1) in_filename = sys.argv[1] - out_filename = sys.argv[2] + out_filename = None + if len(sys.argv) == 3: + out_filename = sys.argv[2] with open(in_filename, "r", encoding = "utf-8") as f: all_lines = f.readlines() buf = CommandBuffer(all_lines) buf.process() - buf.to_file(out_filename) + + # Output annotated gcode is optional + if out_filename is not None: + buf.to_file(out_filename) + buf.report() From 0b6574e71549a66c8f2be823ca827cafaffb4bd7 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Sep 2018 15:36:11 +0200 Subject: [PATCH 199/364] Rename script to check_gcode_buffer.py CURA-5561 --- scripts/{50_inst_per_sec.py => check_gcode_buffer.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{50_inst_per_sec.py => check_gcode_buffer.py} (100%) mode change 100644 => 100755 diff --git a/scripts/50_inst_per_sec.py b/scripts/check_gcode_buffer.py old mode 100644 new mode 100755 similarity index 100% rename from scripts/50_inst_per_sec.py rename to scripts/check_gcode_buffer.py From 3a8d0233717c3b7c6b63160129d8d887c8381a3f Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 3 Sep 2018 17:09:19 +0200 Subject: [PATCH 200/364] Addded test for checking shortcut keys CURA-5642 --- resources/i18n/de_DE/cura.po | 40 ++++++------ resources/i18n/es_ES/cura.po | 40 ++++++------ resources/i18n/fi_FI/cura.po | 30 ++++----- resources/i18n/fr_FR/cura.po | 40 ++++++------ resources/i18n/it_IT/cura.po | 40 ++++++------ resources/i18n/ja_JP/cura.po | 34 +++++----- resources/i18n/ko_KR/cura.po | 30 ++++----- resources/i18n/nl_NL/cura.po | 40 ++++++------ resources/i18n/pl_PL/cura.po | 38 +++++------ resources/i18n/pt_BR/cura.po | 38 +++++------ resources/i18n/pt_PT/cura.po | 40 ++++++------ resources/i18n/ru_RU/cura.po | 20 +++--- resources/i18n/tr_TR/cura.po | 38 +++++------ resources/i18n/zh_CN/cura.po | 38 +++++------ resources/i18n/zh_TW/cura.po | 38 +++++------ resources/qml/Actions.qml | 2 +- tests/TestShortcutKeys.py | 119 +++++++++++++++++++++++++++++++++++ 17 files changed, 392 insertions(+), 273 deletions(-) create mode 100644 tests/TestShortcutKeys.py diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 31ce980615..9b12574005 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -3727,28 +3727,28 @@ msgstr "&Beenden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3D-Ansicht" +msgid "3D View" +msgstr "3D-Ansicht" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Vorderansicht" +msgid "Front View" +msgstr "Vorderansicht" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Draufsicht" +msgid "Top View" +msgstr "Draufsicht" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Ansicht von links" +msgid "Left Side View" +msgstr "Ansicht von links" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Ansicht von rechts" +msgid "Right Side View" +msgstr "Ansicht von rechts" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3808,10 +3808,10 @@ msgstr "&Über..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3859,18 +3859,18 @@ msgstr "Modell &multiplizieren" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Alle Modelle &wählen" +msgid "Select All Models" +msgstr "Alle Modelle wählen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "Druckplatte &reinigen" +msgid "Clear Build Plate" +msgstr "Druckplatte reinigen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Alle Modelle neu &laden" +msgid "Reload All Models" +msgstr "Alle Modelle neu laden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 66add367c5..12fc6b86ae 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -3739,28 +3739,28 @@ msgstr "&Salir" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Vista en 3D" +msgid "3D View" +msgstr "Vista en 3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Vista frontal" +msgid "Front View" +msgstr "Vista frontal" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Vista superior" +msgid "Top View" +msgstr "Vista superior" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Vista del lado izquierdo" +msgid "Left Side View" +msgstr "Vista del lado izquierdo" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Vista del lado derecho" +msgid "Right Side View" +msgstr "Vista del lado derecho" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3820,10 +3820,10 @@ msgstr "&Acerca de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Eliminar modelo &seleccionado" -msgstr[1] "Eliminar modelos &seleccionados" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3871,18 +3871,18 @@ msgstr "&Multiplicar modelo..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Seleccionar todos los modelos" +msgid "Select All Models" +msgstr "Seleccionar todos los modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Borrar placa de impresión" +msgid "Clear Build Plate" +msgstr "Borrar placa de impresión" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "&Recargar todos los modelos" +msgid "Reload All Models" +msgstr "Recargar todos los modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index a4b5719da7..b19479da89 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -3746,27 +3746,27 @@ msgstr "&Lopeta" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 @@ -3827,10 +3827,10 @@ msgstr "Ti&etoja..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Poista &valittu malli" -msgstr[1] "Poista &valitut mallit" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3878,18 +3878,18 @@ msgstr "&Kerro malli..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Valitse kaikki mallit" +msgid "Select All Models" +msgstr "Valitse kaikki mallit" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Tyhjennä tulostusalusta" +msgid "Clear Build Plate" +msgstr "Tyhjennä tulostusalusta" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "&Lataa kaikki mallit uudelleen" +msgid "Reload All Models" +msgstr "Lataa kaikki mallit uudelleen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 8921c2c6c7..39662ae57c 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -3727,28 +3727,28 @@ msgstr "&Quitter" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "Vue &3D" +msgid "3D View" +msgstr "Vue 3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Vue de &face" +msgid "Front View" +msgstr "Vue de face" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Vue du dess&us" +msgid "Top View" +msgstr "Vue du dessus" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Vue latérale &gauche" +msgid "Left Side View" +msgstr "Vue latérale gauche" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Vue latérale &droite" +msgid "Right Side View" +msgstr "Vue latérale droite" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3808,10 +3808,10 @@ msgstr "&À propos de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3859,18 +3859,18 @@ msgstr "&Multiplier le modèle..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Sélectionner tous les modèles" +msgid "Select All Models" +msgstr "Sélectionner tous les modèles" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Supprimer les objets du plateau" +msgid "Clear Build Plate" +msgstr "Supprimer les objets du plateau" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Rechar&ger tous les modèles" +msgid "Reload All Models" +msgstr "Recharger tous les modèles" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 2565825b95..227470708d 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -3725,28 +3725,28 @@ msgstr "E&sci" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Visualizzazione 3D" +msgid "3D View" +msgstr "Visualizzazione 3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Visualizzazione frontale" +msgid "Front View" +msgstr "Visualizzazione frontale" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Visualizzazione superiore" +msgid "Top View" +msgstr "Visualizzazione superiore" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Visualizzazione lato sinistro" +msgid "Left Side View" +msgstr "Visualizzazione lato sinistro" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Visualizzazione lato destro" +msgid "Right Side View" +msgstr "Visualizzazione lato destro" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3806,10 +3806,10 @@ msgstr "I&nformazioni..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Cancella &modello selezionato" -msgstr[1] "Cancella modelli &selezionati" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3857,18 +3857,18 @@ msgstr "Mo<iplica modello" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Sel&eziona tutti i modelli" +msgid "Select All Models" +msgstr "Seleziona tutti i modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Cancellare piano di stampa" +msgid "Clear Build Plate" +msgstr "Cancellare piano di stampa" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "R&icarica tutti i modelli" +msgid "Reload All Models" +msgstr "Ricarica tutti i modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 6995099db1..5955ea7284 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -3731,28 +3731,28 @@ msgstr "&やめる" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3Dビュー (&3)" +msgid "3D View" +msgstr "3Dビュー " #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "フロントビュー (&F)" +msgid "Front View" +msgstr "フロントビュー" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "トップビュー (&T)" +msgid "Top View" +msgstr "トップビュー" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左サイドビュー (&L)" +msgid "Left Side View" +msgstr "左サイドビュー" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右サイドビュー (&R)" +msgid "Right Side View" +msgstr "右サイドビュー" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3813,8 +3813,8 @@ msgstr "アバウト..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "&選択したモデルを削除" # can’t enter japanese text @@ -3863,17 +3863,17 @@ msgstr "&モデルを増倍する…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&すべてのモデル選択" +msgid "Select All Models" +msgstr "すべてのモデル選択" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&ビルドプレート上のクリア" +msgid "Clear Build Plate" +msgstr "ビルドプレート上のクリア" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "すべてのモデルを読み込む" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 2b5dec7c0f..45c57d3bb5 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -3723,28 +3723,28 @@ msgstr "종료(&Q)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3D 보기(&3)" +msgid "3D View" +msgstr "3D 보기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "앞에서 보기(&F)" +msgid "Front View" +msgstr "앞에서 보기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "위에서 보기(&T)" +msgid "Top View" +msgstr "위에서 보기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "왼쪽에서 보기(&L)" +msgid "Left Side View" +msgstr "왼쪽에서 보기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "오른쪽에서 보기(&R)" +msgid "Right Side View" +msgstr "오른쪽에서 보기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3804,8 +3804,8 @@ msgstr "소개..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "선택한 모델 삭제" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 @@ -3852,17 +3852,17 @@ msgstr "모델 복제..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "모든 모델 선택" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" msgstr "빌드 플레이트 지우기" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "모든 모델 다시 로드" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 20b285168b..81f1e1ddb7 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -3725,28 +3725,28 @@ msgstr "&Afsluiten" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3D-weergave" +msgid "3D View" +msgstr "3D-weergave" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Weergave &voorzijde" +msgid "Front View" +msgstr "Weergave voorzijde" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Weergave &bovenzijde" +msgid "Top View" +msgstr "Weergave bovenzijde" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Weergave &linkerzijde" +msgid "Left Side View" +msgstr "Weergave linkerzijde" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Weergave &rechterzijde" +msgid "Right Side View" +msgstr "Weergave rechterzijde" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3806,10 +3806,10 @@ msgstr "&Over..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Ge&selecteerd model verwijderen" -msgstr[1] "Ge&selecteerde modellen verwijderen" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3857,18 +3857,18 @@ msgstr "&Model verveelvoudigen..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Alle Modellen &Selecteren" +msgid "Select All Models" +msgstr "Alle Modellen Selecteren" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Platform Leegmaken" +msgid "Clear Build Plate" +msgstr "Platform Leegmaken" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Alle Modellen Opnieuw &Laden" +msgid "Reload All Models" +msgstr "Alle Modellen Opnieuw Laden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 3c9db61d59..cd5f016cb5 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -3761,28 +3761,28 @@ msgstr "&Zamknij" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Widok 3D" +msgid "3D View" +msgstr "Widok 3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Widok z przodu" +msgid "Front View" +msgstr "Widok z przodu" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Widok z góry" +msgid "Top View" +msgstr "Widok z góry" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Widok z lewej strony" +msgid "Left Side View" +msgstr "Widok z lewej strony" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Widok z prawej strony" +msgid "Right Side View" +msgstr "Widok z prawej strony" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3842,10 +3842,10 @@ msgstr "&O..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Usuń &wybrany model" -msgstr[1] "Usuń &wybrane modele" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3893,17 +3893,17 @@ msgstr "&Powiel model..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Wybierz wszystkie modele" +msgid "Select All Models" +msgstr "Wybierz wszystkie modele" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Wyczyść stół" +msgid "Clear Build Plate" +msgstr "Wyczyść stół" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Przeładuj wszystkie modele" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 741ec379c1..fca696da74 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -3764,28 +3764,28 @@ msgstr "Sair (&Q)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "Visão &3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Visão &Frontal" +msgid "Front View" +msgstr "Visão Frontal" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Visão Superior (&T)" +msgid "Top View" +msgstr "Visão Superior" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Visão do Lado Esquerdo (&L)" +msgid "Left Side View" +msgstr "Visão do Lado Esquerdo" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Visão do Lado Direito (&R)" +msgid "Right Side View" +msgstr "Visão do Lado Direito" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3845,10 +3845,10 @@ msgstr "Sobre (&A)..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Remover Modelo &Selecionado" -msgstr[1] "Remover Modelos &Selecionados" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3896,18 +3896,18 @@ msgstr "&Multiplicar Modelo..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Selecionar Todos Os Modelos" +msgid "Select All Models" +msgstr "Selecionar Todos Os Modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "Esvaziar a Mesa de Impressão (&C)" +msgid "Clear Build Plate" +msgstr "Esvaziar a Mesa de Impressão" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Recarregar Todos Os Mode&los" +msgid "Reload All Models" +msgstr "Recarregar Todos Os Modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index cb52613320..ef69f0f534 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -3843,28 +3843,28 @@ msgstr "&Sair" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "Vista &3D" +msgid "3D View" +msgstr "Vista 3D" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Vista &Frente" +msgid "Front View" +msgstr "Vista Frente" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Vista &Cima" +msgid "Top View" +msgstr "Vista Cima" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Vista Lado &Esquerdo" +msgid "Left Side View" +msgstr "Vista Lado Esquerdo" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Vista Lado &Direito" +msgid "Right Side View" +msgstr "Vista Lado Direito" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3924,10 +3924,10 @@ msgstr "&Sobre..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Apagar Modelo &Selecionado" -msgstr[1] "Apagar Modelos &Selecionados" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3975,18 +3975,18 @@ msgstr "&Multiplicar Modelo..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Selecionar todos os modelos" +msgid "Select All Models" +msgstr "Selecionar todos os modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Limpar base de construção" +msgid "Clear Build Plate" +msgstr "Limpar base de construção" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Re&carregar todos os modelos" +msgid "Reload All Models" +msgstr "Recarregar todos os modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index b1e85bec74..d928a8a33d 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -3731,27 +3731,27 @@ msgstr "Выход" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "Трехмерный вид" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "Вид спереди" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "Вид сверху" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "Вид слева" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "Вид справа" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 @@ -3812,8 +3812,8 @@ msgstr "О Cura..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "Удалить выбранную модель" msgstr[1] "Удалить выбранные модели" msgstr[2] "Удалить выбранные модели" @@ -3866,17 +3866,17 @@ msgstr "Дублировать модель..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "Выбрать все модели" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" msgstr "Очистить стол" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Перезагрузить все модели" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index bea45270fa..3b39dc583a 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -3725,28 +3725,28 @@ msgstr "&Çıkış" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3 Boyutlu Görünüm" +msgid "3D View" +msgstr "3 Boyutlu Görünüm" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Önden Görünüm" +msgid "Front View" +msgstr "Önden Görünüm" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Yukarıdan Görünüm" +msgid "Top View" +msgstr "Yukarıdan Görünüm" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Sol Taraftan Görünüm" +msgid "Left Side View" +msgstr "Sol Taraftan Görünüm" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Sağ Taraftan Görünüm" +msgid "Right Side View" +msgstr "Sağ Taraftan Görünüm" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3806,10 +3806,10 @@ msgstr "&Hakkında..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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" +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:252 msgctxt "@action:inmenu menubar:edit" @@ -3857,17 +3857,17 @@ msgstr "&Modeli Çoğalt..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Tüm modelleri Seç" +msgid "Select All Models" +msgstr "Tüm modelleri Seç" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Yapı Levhasını Temizle" +msgid "Clear Build Plate" +msgstr "Yapı Levhasını Temizle" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Tüm Modelleri Yeniden Yükle" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 3cc29bd7b7..8b065216d4 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -3761,28 +3761,28 @@ msgstr "退出(&Q)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3D 视图(&3)" +msgid "3D View" +msgstr "3D 视图" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "正视图(&F)" +msgid "Front View" +msgstr "正视图" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "顶视图(&T)" +msgid "Top View" +msgstr "顶视图" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左视图(&L)" +msgid "Left Side View" +msgstr "左视图" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右视图(&R)" +msgid "Right Side View" +msgstr "右视图" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3842,9 +3842,9 @@ msgstr "关于(&A)…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "删除所选模型(&S)" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "删除所选模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" @@ -3890,18 +3890,18 @@ msgstr "复制模型…(&M)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "选择所有模型(&S)" +msgid "Select All Models" +msgstr "选择所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "清空打印平台(&C)" +msgid "Clear Build Plate" +msgstr "清空打印平台" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "重新载入所有模型(&L)" +msgid "Reload All Models" +msgstr "重新载入所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index b44f6c3551..a1a4e3f4e4 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -3762,28 +3762,28 @@ msgstr "退出(&Q)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "立體圖(&3)" +msgid "3D View" +msgstr "立體圖" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "前視圖(&F)" +msgid "Front View" +msgstr "前視圖" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "上視圖(&T)" +msgid "Top View" +msgstr "上視圖" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左視圖(&L)" +msgid "Left Side View" +msgstr "左視圖" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右視圖(&R)" +msgid "Right Side View" +msgstr "右視圖" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 msgctxt "@action:inmenu" @@ -3843,9 +3843,9 @@ msgstr "關於(&A)…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "刪除所選模型(&S)" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "刪除所選模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" @@ -3891,18 +3891,18 @@ msgstr "複製模型…(&M)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "選擇所有模型(&S)" +msgid "Select All Models" +msgstr "選擇所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "清空列印平台(&C)" +msgid "Clear Build Plate" +msgstr "清空列印平台" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "重新載入所有模型(&L)" +msgid "Reload All Models" +msgstr "重新載入所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index db230ebca7..06ac78221b 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -138,7 +138,7 @@ Item Action { id: viewRightSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Right Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Right Side View"); onTriggered: UM.Controller.rotateView("x", -90); } diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py new file mode 100644 index 0000000000..3ceeba2654 --- /dev/null +++ b/tests/TestShortcutKeys.py @@ -0,0 +1,119 @@ + +import os +import re +import unittest +import pytest + +MSGCTXT = "msgctxt" # Scope of the text +MSGID = "msgid" # The id of the text, also English version +MSGTR = "msgstr" # The translation + +regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it, the '+' returns one char after '&' + + +# class TestShortcutKeys(unittest.TestCase): +# +# language_folder = [ +# "en_7S", +# "de_DE", +# "en_US", +# "es_ES", +# "fi_FI", +# "fr_FR", +# "hu_HU", +# "it_IT", +# "ja_JP", +# "ko_KR", +# "nl_NL", +# "pl_PL", +# "pt_BR", +# "ru_RU", +# "tr_TR" +# ] + +@pytest.mark.parametrize("language_type", [("en_7S"),("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("hu_HU")]) +def test_shortcut_keys(language_type): + + language_folder = language_type + + translation_file_name = "cura.po" + + plugin_file_path = os.path.dirname(os.path.abspath(__file__)) + path_records = os.path.split(plugin_file_path) + global_path = path_records[:-1] + cura_path = os.path.join(*global_path) + language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) + + + last_translation_scope = "" + last_translation_id = "" + last_translation_text = "" + + #{shortcut_key, {scope, [translation_text]}} + shortcut_keys = dict() + with open(language_file_path,'r') as f: + for text in f: + + if text.startswith(MSGCTXT): + last_translation_scope = text + elif text.startswith(MSGID): + last_translation_id = text + elif text.startswith(MSGTR): + last_translation_text = text + + #if text has '&'symbol and at least one character (char or digit) should be after it + # ex '&acr mytest' -> this should return '&a' + the_shortcut_key_word = re.search(regex_patter, text) + + if the_shortcut_key_word is not None: + # take only char after '&' symbol + the_shortcut_key = the_shortcut_key_word.group(0)[1] + + the_shortcut_key = the_shortcut_key.upper() #make all shortcut keys capital + + #The shortcut key is not yet added + if the_shortcut_key not in shortcut_keys: + scope_translation = dict() + scope_translation[last_translation_scope] = [] + scope_translation[last_translation_scope].append(text) + + shortcut_keys[the_shortcut_key] = scope_translation + else: + #check if the shortcut key scope is already added + if last_translation_scope not in shortcut_keys[the_shortcut_key]: + scope_translation = dict() + scope_translation[last_translation_scope] = [] + scope_translation[last_translation_scope].append(text) + shortcut_keys[the_shortcut_key].update(scope_translation) + + # if the scope already exist then add the key + elif last_translation_scope in shortcut_keys[the_shortcut_key]: + shortcut_keys[the_shortcut_key][last_translation_scope].append(text) + + + last_translation_scope = "" + last_translation_id = "" + + not_valid_shortcut_keys = [] + #Validate all shortcut keys + for shortcut_key, scopes in shortcut_keys.items(): + + #check, whether the exist in one scope multiple times or not + for key, items in scopes.items(): + + if len (items) > 1: + not_valid_shortcut_keys.append(items) + + if len(not_valid_shortcut_keys) != 0: + temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) + print("NOT VALID KEYS: " + temp) + + + assert len(not_valid_shortcut_keys) == 0 + + +if __name__ == "__main__": + suite = unittest.TestSuite() + + + unittest.main(suite) \ No newline at end of file From 17d2316da3815a5b1a90dec2776952c2c870366f Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 3 Sep 2018 17:54:03 +0200 Subject: [PATCH 201/364] Validate shortcut keys in all languages(except default) CURA-5642 --- tests/TestShortcutKeys.py | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py index 3ceeba2654..afed45bb44 100644 --- a/tests/TestShortcutKeys.py +++ b/tests/TestShortcutKeys.py @@ -8,30 +8,12 @@ MSGCTXT = "msgctxt" # Scope of the text MSGID = "msgid" # The id of the text, also English version MSGTR = "msgstr" # The translation +COLOR_WARNING = '\033[93m' +COLOR_ENDC = '\033[0m' + regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it, the '+' returns one char after '&' - -# class TestShortcutKeys(unittest.TestCase): -# -# language_folder = [ -# "en_7S", -# "de_DE", -# "en_US", -# "es_ES", -# "fi_FI", -# "fr_FR", -# "hu_HU", -# "it_IT", -# "ja_JP", -# "ko_KR", -# "nl_NL", -# "pl_PL", -# "pt_BR", -# "ru_RU", -# "tr_TR" -# ] - -@pytest.mark.parametrize("language_type", [("en_7S"),("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("hu_HU")]) +@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("hu_HU"),("it_IT"),("ja_JP"),("ko_KR"),("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) def test_shortcut_keys(language_type): language_folder = language_type @@ -95,6 +77,7 @@ def test_shortcut_keys(language_type): last_translation_id = "" not_valid_shortcut_keys = [] + #Validate all shortcut keys for shortcut_key, scopes in shortcut_keys.items(): @@ -102,18 +85,15 @@ def test_shortcut_keys(language_type): for key, items in scopes.items(): if len (items) > 1: - not_valid_shortcut_keys.append(items) + not_valid_shortcut_keys += items if len(not_valid_shortcut_keys) != 0: temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) - print("NOT VALID KEYS: " + temp) + print(COLOR_WARNING + "NOT VALID KEYS: " + temp + COLOR_ENDC) assert len(not_valid_shortcut_keys) == 0 if __name__ == "__main__": - suite = unittest.TestSuite() - - - unittest.main(suite) \ No newline at end of file + unittest.main() \ No newline at end of file From 944b937036ba2d0ea98c7c3fc8f1116b22054366 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 4 Sep 2018 10:50:57 +0200 Subject: [PATCH 202/364] Simplified unit test, make code clear CURA-5642 --- tests/TestShortcutKeys.py | 149 ++++++++++++++++++++++---------------- 1 file changed, 88 insertions(+), 61 deletions(-) diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py index afed45bb44..88b905320e 100644 --- a/tests/TestShortcutKeys.py +++ b/tests/TestShortcutKeys.py @@ -11,7 +11,93 @@ MSGTR = "msgstr" # The translation COLOR_WARNING = '\033[93m' COLOR_ENDC = '\033[0m' -regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it, the '+' returns one char after '&' +regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it + +# Check default language shortcut keys, by default it is English +def test_default_shortcut_keys(): + + language_folder = "de_DE" # choose German language folder, because we only need to test English shortcut keys, the message id is English translation + + translation_file_name = "cura.po" + + plugin_file_path = os.path.dirname(os.path.abspath(__file__)) + path_records = os.path.split(plugin_file_path) + global_path = path_records[:-1] + cura_path = os.path.join(*global_path) + language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) + + + not_valid_shortcut_keys = getDublicatedShortcutKeys(language_file_path, False) + + if len(not_valid_shortcut_keys) != 0: + temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) + print(COLOR_WARNING + "NOT VALID KEYS: " + temp + COLOR_ENDC) + + + assert len(not_valid_shortcut_keys) == 0 + + + +# If the 'findShortcutKeysInTranslation' is False the function will search shortcut keys in message id +def getDublicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation): + last_translation_scope = "" + + + # {shortcut_key, {scope, [translation_text]}} + shortcut_keys = dict() + with open(language_file_path, 'r') as f: + for text in f: + + if text.startswith(MSGCTXT): + last_translation_scope = text + + + elif text.startswith(MSGID) and findShortcutKeysInTranslation or text.startswith(MSGTR) and not findShortcutKeysInTranslation: + + # if text has '&'symbol and at least one character (char or digit) after it + # ex '&acr mytest' -> this should return '&a' + the_shortcut_key_word = re.search(regex_patter, text) + + if the_shortcut_key_word is not None: + # take only char after '&' symbol + the_shortcut_key = the_shortcut_key_word.group(0)[1] + + the_shortcut_key = the_shortcut_key.upper() # make all shortcut keys capital + + # The shortcut key is not yet added + if the_shortcut_key not in shortcut_keys: + scope_translation = dict() + scope_translation[last_translation_scope] = [] + scope_translation[last_translation_scope].append(text) + + shortcut_keys[the_shortcut_key] = scope_translation + else: + # check if the shortcut key scope is already added + if last_translation_scope not in shortcut_keys[the_shortcut_key]: + scope_translation = dict() + scope_translation[last_translation_scope] = [] + scope_translation[last_translation_scope].append(text) + shortcut_keys[the_shortcut_key].update(scope_translation) + + # if the scope already exist then add the key + elif last_translation_scope in shortcut_keys[the_shortcut_key]: + shortcut_keys[the_shortcut_key][last_translation_scope].append(text) + + last_translation_scope = "" + + not_valid_shortcut_keys = [] + + # Validate all shortcut keys + for shortcut_key, scopes in shortcut_keys.items(): + + # check, whether the key exist in the same scope multiple times or not + for key, items in scopes.items(): + + if len(items) > 1: + not_valid_shortcut_keys += items + + return not_valid_shortcut_keys + @pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("hu_HU"),("it_IT"),("ja_JP"),("ko_KR"),("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) def test_shortcut_keys(language_type): @@ -26,66 +112,7 @@ def test_shortcut_keys(language_type): cura_path = os.path.join(*global_path) language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) - - last_translation_scope = "" - last_translation_id = "" - last_translation_text = "" - - #{shortcut_key, {scope, [translation_text]}} - shortcut_keys = dict() - with open(language_file_path,'r') as f: - for text in f: - - if text.startswith(MSGCTXT): - last_translation_scope = text - elif text.startswith(MSGID): - last_translation_id = text - elif text.startswith(MSGTR): - last_translation_text = text - - #if text has '&'symbol and at least one character (char or digit) should be after it - # ex '&acr mytest' -> this should return '&a' - the_shortcut_key_word = re.search(regex_patter, text) - - if the_shortcut_key_word is not None: - # take only char after '&' symbol - the_shortcut_key = the_shortcut_key_word.group(0)[1] - - the_shortcut_key = the_shortcut_key.upper() #make all shortcut keys capital - - #The shortcut key is not yet added - if the_shortcut_key not in shortcut_keys: - scope_translation = dict() - scope_translation[last_translation_scope] = [] - scope_translation[last_translation_scope].append(text) - - shortcut_keys[the_shortcut_key] = scope_translation - else: - #check if the shortcut key scope is already added - if last_translation_scope not in shortcut_keys[the_shortcut_key]: - scope_translation = dict() - scope_translation[last_translation_scope] = [] - scope_translation[last_translation_scope].append(text) - shortcut_keys[the_shortcut_key].update(scope_translation) - - # if the scope already exist then add the key - elif last_translation_scope in shortcut_keys[the_shortcut_key]: - shortcut_keys[the_shortcut_key][last_translation_scope].append(text) - - - last_translation_scope = "" - last_translation_id = "" - - not_valid_shortcut_keys = [] - - #Validate all shortcut keys - for shortcut_key, scopes in shortcut_keys.items(): - - #check, whether the exist in one scope multiple times or not - for key, items in scopes.items(): - - if len (items) > 1: - not_valid_shortcut_keys += items + not_valid_shortcut_keys = getDublicatedShortcutKeys(language_file_path, False) if len(not_valid_shortcut_keys) != 0: temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) From e853cdc04d2bb0369448f21b157d9c78e21d5020 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 4 Sep 2018 11:29:33 +0200 Subject: [PATCH 203/364] Removed shortcut from Reset All Model &Transformations CURA-5642 --- resources/i18n/cura.pot | 2 +- resources/i18n/de_DE/cura.po | 2 +- resources/i18n/es_ES/cura.po | 4 ++-- resources/i18n/fi_FI/cura.po | 4 ++-- resources/i18n/fr_FR/cura.po | 2 +- resources/i18n/it_IT/cura.po | 4 ++-- resources/i18n/ja_JP/cura.po | 2 +- resources/i18n/ko_KR/cura.po | 2 +- resources/i18n/nl_NL/cura.po | 4 ++-- resources/i18n/pl_PL/cura.po | 2 +- resources/i18n/pt_BR/cura.po | 4 ++-- resources/i18n/pt_PT/cura.po | 4 ++-- resources/i18n/ru_RU/cura.po | 2 +- resources/i18n/tr_TR/cura.po | 2 +- resources/i18n/zh_CN/cura.po | 4 ++-- resources/i18n/zh_TW/cura.po | 4 ++-- resources/qml/Actions.qml | 2 +- 17 files changed, 25 insertions(+), 25 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 45a85a5849..095de34320 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -4047,7 +4047,7 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 9b12574005..c027b60497 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -3894,7 +3894,7 @@ msgstr "Alle Modellpositionen zurücksetzen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Alle Modell&transformationen zurücksetzen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 12fc6b86ae..ff53dcb2de 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -3906,8 +3906,8 @@ msgstr "Restablecer las posiciones de todos los modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Restablecer las &transformaciones de todos los modelos" +msgid "Reset All Model Transformations" +msgstr "Restablecer las transformaciones de todos los modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index b19479da89..457900043a 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -3913,8 +3913,8 @@ msgstr "Määritä kaikkien mallien positiot uudelleen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Määritä kaikkien mallien &muutokset uudelleen" +msgid "Reset All Model Transformations" +msgstr "Määritä kaikkien mallien muutokset uudelleen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 39662ae57c..d1b9525390 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -3894,7 +3894,7 @@ msgstr "Réinitialiser toutes les positions des modèles" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Réinitialiser tous les modèles et transformations" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 227470708d..53dfee02a7 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -3892,8 +3892,8 @@ msgstr "Reimposta tutte le posizioni dei modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Reimposta tutte le &trasformazioni dei modelli" +msgid "Reset All Model Transformations" +msgstr "Reimposta tutte le trasformazioni dei modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 5955ea7284..7a78b890f3 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -3898,7 +3898,7 @@ msgstr "すべてのモデルのポジションをリセットする" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "すべてのモデル&変更点をリセットする" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 45c57d3bb5..5dc5e51fc1 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -3887,7 +3887,7 @@ msgstr "모든 모델의 위치 재설정" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "모든 모델의 변환 재설정" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 81f1e1ddb7..f69c4f7eab 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -3892,8 +3892,8 @@ msgstr "Alle Modelposities Herstellen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Alle Model&transformaties Herstellen" +msgid "Reset All Model Transformations" +msgstr "Alle Modeltransformaties Herstellen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index cd5f016cb5..04a4af2b80 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -3928,7 +3928,7 @@ msgstr "Zresetuj wszystkie pozycje modelu" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Zresetuj wszystkie przekształcenia modelu" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index fca696da74..1706f902ae 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -3931,8 +3931,8 @@ msgstr "Reestabelecer as Posições de Todos Os Modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Remover as &Transformações de Todos Os Modelos" +msgid "Reset All Model Transformations" +msgstr "Remover as Transformações de Todos Os Modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index ef69f0f534..7377a2d3b0 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -4012,8 +4012,8 @@ msgstr "Repor todas as posições de modelos" # Cancelar todas? #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Repor Todas as &Transformações do Modelo" +msgid "Reset All Model Transformations" +msgstr "Repor Todas as Transformações do Modelo" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index d928a8a33d..777e352e58 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -3901,7 +3901,7 @@ msgstr "Сбросить позиции всех моделей" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Сбросить преобразования всех моделей" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 3b39dc583a..2cc0e2e57b 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -3892,7 +3892,7 @@ msgstr "Tüm Model Konumlarını Sıfırla" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Tüm Model ve Dönüşümleri Sıfırla" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 8b065216d4..8cc1324a93 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -3925,8 +3925,8 @@ msgstr "复位所有模型的位置" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "复位所有模型的变动(&T)" +msgid "Reset All Model Transformations" +msgstr "复位所有模型的变动" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index a1a4e3f4e4..70aaa5d37d 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -3926,8 +3926,8 @@ msgstr "重置所有模型位置" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "重置所有模型旋轉(&T)" +msgid "Reset All Model Transformations" +msgstr "重置所有模型旋轉" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 06ac78221b..baad57e190 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -376,7 +376,7 @@ Item Action { id: resetAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model &Transformations"); + text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations"); onTriggered: CuraApplication.resetAll(); } From 0f655553bb024d3eea12c6273602e784cd6224d5 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 4 Sep 2018 11:35:33 +0200 Subject: [PATCH 204/364] Removed shortcut keys from general cura.pot CURA-5642 --- resources/i18n/cura.pot | 20 ++++++++++---------- resources/i18n/de_DE/cura.po | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 095de34320..3a69ea8f9d 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -3880,27 +3880,27 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 @@ -3961,8 +3961,8 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "" msgstr[1] "" @@ -4012,17 +4012,17 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index c027b60497..70a099e89b 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -3895,7 +3895,7 @@ msgstr "Alle Modellpositionen zurücksetzen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" -msgstr "Alle Modell&transformationen zurücksetzen" +msgstr "Alle Modelltransformationen zurücksetzen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 msgctxt "@action:inmenu menubar:file" From 27c112d4db8e00fa4efc1607d764679cf08fee6f Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 4 Sep 2018 15:19:04 +0200 Subject: [PATCH 205/364] Fix duplicated shortcut keys in all languages CURA-5642 --- resources/i18n/cura.pot | 6 +++--- resources/i18n/de_DE/cura.po | 10 +++++----- resources/i18n/es_ES/cura.po | 12 ++++++------ resources/i18n/fi_FI/cura.po | 8 ++++---- resources/i18n/fr_FR/cura.po | 8 ++++---- resources/i18n/it_IT/cura.po | 18 +++++++++--------- resources/i18n/ja_JP/cura.po | 10 +++++----- resources/i18n/ko_KR/cura.po | 6 +++--- resources/i18n/nl_NL/cura.po | 8 ++++---- resources/i18n/pl_PL/cura.po | 14 +++++++------- resources/i18n/pt_BR/cura.po | 8 ++++---- resources/i18n/pt_PT/cura.po | 8 ++++---- resources/i18n/ru_RU/cura.po | 6 +++--- resources/i18n/tr_TR/cura.po | 10 +++++----- resources/i18n/zh_CN/cura.po | 8 ++++---- resources/i18n/zh_TW/cura.po | 8 ++++---- resources/qml/Actions.qml | 2 +- resources/qml/Cura.qml | 4 ++-- tests/TestShortcutKeys.py | 22 ++++++++++++---------- 19 files changed, 89 insertions(+), 87 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 3a69ea8f9d..71c55ffc21 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -3860,7 +3860,7 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -4195,7 +4195,7 @@ msgid "&Settings" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "" @@ -4222,7 +4222,7 @@ msgid "Disable Extruder" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "" diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 70a099e89b..645082a2bb 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -3707,8 +3707,8 @@ msgstr "Geschätzte verbleibende Zeit" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Umschalten auf Vo&llbild-Modus" +msgid "Toggle Full Screen" +msgstr "Umschalten auf Vollbild-Modus" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -3783,7 +3783,7 @@ msgstr "&Aktuelle Änderungen verwerfen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." -msgstr "&Profil von aktuellen Einstellungen/Überschreibungen erstellen..." +msgstr "P&rofil von aktuellen Einstellungen/Überschreibungen erstellen..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 msgctxt "@action:inmenu menubar:profile" @@ -4039,7 +4039,7 @@ msgid "&Settings" msgstr "&Konfiguration" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Dr&ucker" @@ -4066,7 +4066,7 @@ msgid "Disable Extruder" msgstr "Extruder deaktivieren" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index ff53dcb2de..88b8e779ff 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -3582,7 +3582,7 @@ msgstr "&Posición de la cámara" #: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Placa de impresión" +msgstr "P&laca de impresión" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" @@ -3719,8 +3719,8 @@ msgstr "Tiempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "A<ernar pantalla completa" +msgid "Toggle Full Screen" +msgstr "Alternar pantalla completa" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4023,7 +4023,7 @@ msgstr "&Archivo" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 msgctxt "@action:inmenu menubar:file" msgid "&Save Selection to File" -msgstr "Guardar &selección en archivo" +msgstr "&Guardar selección en archivo" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 msgctxt "@title:menu menubar:file" @@ -4051,7 +4051,7 @@ msgid "&Settings" msgstr "A&justes" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impresora" @@ -4078,7 +4078,7 @@ msgid "Disable Extruder" msgstr "Deshabilitar extrusor" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index 457900043a..dc491e7cff 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -3726,8 +3726,8 @@ msgstr "Aikaa jäljellä arviolta" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Vaihda &koko näyttöön" +msgid "Toggle Full Screen" +msgstr "Vaihda koko näyttöön" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4058,7 +4058,7 @@ msgid "&Settings" msgstr "&Asetukset" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Tulostin" @@ -4085,7 +4085,7 @@ msgid "Disable Extruder" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiili" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index d1b9525390..6591073c98 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -3707,8 +3707,8 @@ msgstr "Durée restante estimée" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Passer en P&lein écran" +msgid "Toggle Full Screen" +msgstr "Passer en Plein écran" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4039,7 +4039,7 @@ msgid "&Settings" msgstr "&Paramètres" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&primante" @@ -4066,7 +4066,7 @@ msgid "Disable Extruder" msgstr "Désactiver l'extrudeuse" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 53dfee02a7..361a65c542 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -3568,7 +3568,7 @@ msgstr "&Posizione fotocamera" #: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Piano di stampa" +msgstr "P&iano di stampa" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" @@ -3705,8 +3705,8 @@ msgstr "Tempo residuo stimato" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Att&iva/disattiva schermo intero" +msgid "Toggle Full Screen" +msgstr "Attiva/disattiva schermo intero" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -3721,7 +3721,7 @@ msgstr "Ri&peti" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 msgctxt "@action:inmenu menubar:file" msgid "&Quit" -msgstr "E&sci" +msgstr "&Esci" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:view" @@ -3756,12 +3756,12 @@ msgstr "Configura Cura..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." -msgstr "A&ggiungi stampante..." +msgstr "&Aggiungi stampante..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." -msgstr "&Gestione stampanti..." +msgstr "Gestione stampanti..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 msgctxt "@action:inmenu" @@ -3908,7 +3908,7 @@ msgstr "&Nuovo Progetto..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." -msgstr "M&ostra log motore..." +msgstr "Mostra &log motore..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 msgctxt "@action:inmenu menubar:help" @@ -4037,7 +4037,7 @@ msgid "&Settings" msgstr "&Impostazioni" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "S&tampante" @@ -4064,7 +4064,7 @@ msgid "Disable Extruder" msgstr "Disabilita estrusore" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profilo" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 7a78b890f3..5bfcf0af02 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -3711,7 +3711,7 @@ msgstr "残り時間" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "留め金 フルスクリーン" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -3854,7 +3854,7 @@ msgstr "モデルを非グループ化" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" -msgstr "&モデルの合体" +msgstr "モ&デルの合体" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 msgctxt "@action:inmenu" @@ -4015,7 +4015,7 @@ msgstr "&ファイル" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 msgctxt "@action:inmenu menubar:file" msgid "&Save Selection to File" -msgstr "&ファイルに選択したものを保存" +msgstr "フ&ァイルに選択したものを保存" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 msgctxt "@title:menu menubar:file" @@ -4043,7 +4043,7 @@ msgid "&Settings" msgstr "&設定" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&プリンター" @@ -4070,7 +4070,7 @@ msgid "Disable Extruder" msgstr "エクストルーダーを無効にする" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&プロファイル" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 5dc5e51fc1..a3bd842bd3 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -3703,7 +3703,7 @@ msgstr "예상 남은 시간" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "전채 화면 전환" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -4032,7 +4032,7 @@ msgid "&Settings" msgstr "설정" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "프린터" @@ -4059,7 +4059,7 @@ msgid "Disable Extruder" msgstr "익스트루더 사용하지 않음" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "프로파일" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index f69c4f7eab..24e27c09b5 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -3705,8 +3705,8 @@ msgstr "Geschatte resterende tijd" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Vo&lledig Scherm In-/Uitschakelen" +msgid "Toggle Full Screen" +msgstr "Volledig Scherm In-/Uitschakelen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4037,7 +4037,7 @@ msgid "&Settings" msgstr "In&stellingen" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Printer" @@ -4064,7 +4064,7 @@ msgid "Disable Extruder" msgstr "Extruder uitschakelen" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiel" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 04a4af2b80..acfcc54f76 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -3602,7 +3602,7 @@ msgstr "&Pozycja kamery" #: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Pole robocze" +msgstr "P&ole robocze" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" @@ -3741,7 +3741,7 @@ msgstr "Szacowany czas pozostały" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Przełącz tryb pełnoekranowy" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -3884,7 +3884,7 @@ msgstr "Rozgrupuj modele " #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" -msgstr "&Połącz modele" +msgstr "Połącz modele" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 msgctxt "@action:inmenu" @@ -4045,7 +4045,7 @@ msgstr "&Plik" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 msgctxt "@action:inmenu menubar:file" msgid "&Save Selection to File" -msgstr "&Zapisz wybór w pliku" +msgstr "Z&apisz wybór w pliku" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 msgctxt "@title:menu menubar:file" @@ -4073,7 +4073,7 @@ msgid "&Settings" msgstr "&Ustawienia" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Drukarka" @@ -4100,7 +4100,7 @@ msgid "Disable Extruder" msgstr "Wyłącz Ekstruder" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" @@ -4122,7 +4122,7 @@ msgstr "Preferencje" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 msgctxt "@title:menu menubar:toplevel" msgid "&Help" -msgstr "&Pomoc" +msgstr "P&omoc" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 msgctxt "@label" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 1706f902ae..a6a93bb2a3 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -3744,8 +3744,8 @@ msgstr "Tempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "A<ernar Tela Cheia" +msgid "Toggle Full Screen" +msgstr "Alternar Tela Cheia" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4076,7 +4076,7 @@ msgid "&Settings" msgstr "Aju&stes" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&pressora" @@ -4103,7 +4103,7 @@ msgid "Disable Extruder" msgstr "Desabilitar Extrusor" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index 7377a2d3b0..fe8d44d361 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -3823,8 +3823,8 @@ msgstr "Tempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Alternar para e&crã inteiro" +msgid "Toggle Full Screen" +msgstr "Alternar para ecrã inteiro" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4164,7 +4164,7 @@ msgid "&Settings" msgstr "&Definições" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impressora" @@ -4191,7 +4191,7 @@ msgid "Disable Extruder" msgstr "Desativar Extrusor" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index 777e352e58..7622349423 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -3711,7 +3711,7 @@ msgstr "Осталось примерно" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Полный экран" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -4046,7 +4046,7 @@ msgid "&Settings" msgstr "Параметры" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Принтер" @@ -4073,7 +4073,7 @@ msgid "Disable Extruder" msgstr "Отключить экструдер" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "Профиль" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 2cc0e2e57b..6c216b7d1c 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -3705,7 +3705,7 @@ msgstr "Kalan tahmini süre" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Tam Ekrana Geç" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 @@ -3781,7 +3781,7 @@ msgstr "&Geçerli değişiklikleri iptal et" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." -msgstr "&Geçerli ayarlardan/geçersiz kılmalardan profil oluştur..." +msgstr "G&eçerli ayarlardan/geçersiz kılmalardan profil oluştur..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 msgctxt "@action:inmenu menubar:profile" @@ -4024,7 +4024,7 @@ msgstr "Kaydet&Projelendir..." #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" -msgstr "&Düzenle" +msgstr "Düz&enle" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 msgctxt "@title:menu" @@ -4037,7 +4037,7 @@ msgid "&Settings" msgstr "&Ayarlar" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Yazıcı" @@ -4064,7 +4064,7 @@ msgid "Disable Extruder" msgstr "Ekstruderi Devre Dışı Bırak" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 8cc1324a93..aab579ac0b 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -3741,8 +3741,8 @@ msgstr "预计剩余时间" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "切换完整界面(&F)" +msgid "Toggle Full Screen" +msgstr "切换完整界面" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4070,7 +4070,7 @@ msgid "&Settings" msgstr "设置(&S)" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "打印机(&P)" @@ -4097,7 +4097,7 @@ msgid "Disable Extruder" msgstr "禁用挤出机" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "配置文件(&P)" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index 70aaa5d37d..8d8b7c97d6 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -3742,8 +3742,8 @@ msgstr "預計剩餘時間" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "切換全螢幕(&F)" +msgid "Toggle Full Screen" +msgstr "切換全螢幕" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 msgctxt "@action:inmenu menubar:edit" @@ -4071,7 +4071,7 @@ msgid "&Settings" msgstr "設定(&S)" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "印表機(&P)" @@ -4098,7 +4098,7 @@ msgid "Disable Extruder" msgstr "關閉擠出機" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 -msgctxt "@title:menu" +msgctxt "@title:settings" msgid "&Profile" msgstr "列印參數(&P)" diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index baad57e190..1b2f636f3e 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -75,7 +75,7 @@ Item Action { id:toggleFullScreenAction - text: catalog.i18nc("@action:inmenu","Toggle Fu&ll Screen"); + text: catalog.i18nc("@action:inmenu","Toggle Full Screen"); iconName: "view-fullscreen"; } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 97742de57a..c22fea38b4 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -189,7 +189,7 @@ UM.MainWindow id: settingsMenu title: catalog.i18nc("@title:menu", "&Settings") - PrinterMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&Printer") } + PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") } Instantiator { @@ -233,7 +233,7 @@ UM.MainWindow // 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 : false } - ProfileMenu { title: catalog.i18nc("@title:menu", "&Profile"); } + ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile"); } MenuSeparator { } diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py index 88b905320e..3f6f51446b 100644 --- a/tests/TestShortcutKeys.py +++ b/tests/TestShortcutKeys.py @@ -4,9 +4,9 @@ import re import unittest import pytest -MSGCTXT = "msgctxt" # Scope of the text -MSGID = "msgid" # The id of the text, also English version -MSGTR = "msgstr" # The translation +MSGCTXT = "msgctxt" # Scope of the text . Like : msgctxt "@action:inmenu menubar:help" +MSGID = "msgid" # The id tag, also English text version +MSGTR = "msgstr" # The translation tag COLOR_WARNING = '\033[93m' COLOR_ENDC = '\033[0m' @@ -27,11 +27,11 @@ def test_default_shortcut_keys(): language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) - not_valid_shortcut_keys = getDublicatedShortcutKeys(language_file_path, False) + not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) if len(not_valid_shortcut_keys) != 0: temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) - print(COLOR_WARNING + "NOT VALID KEYS: " + temp + COLOR_ENDC) + print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) assert len(not_valid_shortcut_keys) == 0 @@ -39,7 +39,7 @@ def test_default_shortcut_keys(): # If the 'findShortcutKeysInTranslation' is False the function will search shortcut keys in message id -def getDublicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation): +def getDuplicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation): last_translation_scope = "" @@ -56,6 +56,7 @@ def getDublicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation) # if text has '&'symbol and at least one character (char or digit) after it # ex '&acr mytest' -> this should return '&a' + # ex '& acr mytest' -> returns None the_shortcut_key_word = re.search(regex_patter, text) if the_shortcut_key_word is not None: @@ -72,7 +73,7 @@ def getDublicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation) shortcut_keys[the_shortcut_key] = scope_translation else: - # check if the shortcut key scope is already added + # check if the shortcut key scope is already added or not if last_translation_scope not in shortcut_keys[the_shortcut_key]: scope_translation = dict() scope_translation[last_translation_scope] = [] @@ -93,13 +94,14 @@ def getDublicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation) # check, whether the key exist in the same scope multiple times or not for key, items in scopes.items(): + #The shortcut keys should not be more than one time in the same scope if len(items) > 1: not_valid_shortcut_keys += items return not_valid_shortcut_keys -@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("hu_HU"),("it_IT"),("ja_JP"),("ko_KR"),("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) +@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("it_IT"),("ja_JP"),("ko_KR"),("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) def test_shortcut_keys(language_type): language_folder = language_type @@ -112,11 +114,11 @@ def test_shortcut_keys(language_type): cura_path = os.path.join(*global_path) language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) - not_valid_shortcut_keys = getDublicatedShortcutKeys(language_file_path, False) + not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) if len(not_valid_shortcut_keys) != 0: temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) - print(COLOR_WARNING + "NOT VALID KEYS: " + temp + COLOR_ENDC) + print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) assert len(not_valid_shortcut_keys) == 0 From c36434ebdd7ca70cd0b8bf5d3998a2a8314cedb6 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 09:14:45 +0200 Subject: [PATCH 206/364] Fix TestShortcutKeys --- .../CuraEngineBackend/CuraEngineBackend.py | 2 +- tests/TestShortcutKeys.py | 47 +++++++------------ 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 9a5c95b04d..caa2deaa87 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -180,7 +180,7 @@ class CuraEngineBackend(QObject, Backend): # \return list of commands and args / parameters. def getEngineCommand(self) -> List[str]: json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json") - command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] + command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, "-m1"] parser = argparse.ArgumentParser(prog = "cura", add_help = False) parser.add_argument("--debug", action = "store_true", default = False, help = "Turn on the debug mode by setting this option.") diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py index 3f6f51446b..e1dae6727e 100644 --- a/tests/TestShortcutKeys.py +++ b/tests/TestShortcutKeys.py @@ -1,11 +1,9 @@ - import os import re -import unittest import pytest MSGCTXT = "msgctxt" # Scope of the text . Like : msgctxt "@action:inmenu menubar:help" -MSGID = "msgid" # The id tag, also English text version +MSGID = "msgid" # The id tag, also English text version MSGTR = "msgstr" # The translation tag COLOR_WARNING = '\033[93m' @@ -13,47 +11,41 @@ COLOR_ENDC = '\033[0m' regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it + +# Directory where this python file resides +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) + + # Check default language shortcut keys, by default it is English def test_default_shortcut_keys(): - language_folder = "de_DE" # choose German language folder, because we only need to test English shortcut keys, the message id is English translation translation_file_name = "cura.po" - plugin_file_path = os.path.dirname(os.path.abspath(__file__)) - path_records = os.path.split(plugin_file_path) - global_path = path_records[:-1] - cura_path = os.path.join(*global_path) - language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) - + cura_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) + language_file_path = os.path.join(cura_path, "resources", "i18n", language_folder, translation_file_name) not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) if len(not_valid_shortcut_keys) != 0: - temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) + temp = '%s' % ', '.join(map(str, not_valid_shortcut_keys)) print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) - assert len(not_valid_shortcut_keys) == 0 - # If the 'findShortcutKeysInTranslation' is False the function will search shortcut keys in message id -def getDuplicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation): +def getDuplicatedShortcutKeys(language_file_path: str, find_shortcut_keys_in_translation: bool): last_translation_scope = "" - # {shortcut_key, {scope, [translation_text]}} shortcut_keys = dict() with open(language_file_path, 'r') as f: for text in f: - if text.startswith(MSGCTXT): last_translation_scope = text - - elif text.startswith(MSGID) and findShortcutKeysInTranslation or text.startswith(MSGTR) and not findShortcutKeysInTranslation: - + elif text.startswith(MSGID) and find_shortcut_keys_in_translation or text.startswith(MSGTR) and not find_shortcut_keys_in_translation: # if text has '&'symbol and at least one character (char or digit) after it # ex '&acr mytest' -> this should return '&a' # ex '& acr mytest' -> returns None @@ -90,20 +82,18 @@ def getDuplicatedShortcutKeys(language_file_path, findShortcutKeysInTranslation) # Validate all shortcut keys for shortcut_key, scopes in shortcut_keys.items(): - # check, whether the key exist in the same scope multiple times or not for key, items in scopes.items(): - - #The shortcut keys should not be more than one time in the same scope + # The shortcut keys should not be more than one time in the same scope if len(items) > 1: not_valid_shortcut_keys += items return not_valid_shortcut_keys -@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("it_IT"),("ja_JP"),("ko_KR"),("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) +@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("it_IT"),("ja_JP"),("ko_KR"), + ("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) def test_shortcut_keys(language_type): - language_folder = language_type translation_file_name = "cura.po" @@ -112,17 +102,12 @@ def test_shortcut_keys(language_type): path_records = os.path.split(plugin_file_path) global_path = path_records[:-1] cura_path = os.path.join(*global_path) - language_file_path = os.path.join(cura_path,"resources","i18n",language_folder, translation_file_name) + language_file_path = os.path.join(cura_path, "resources", "i18n", language_folder, translation_file_name) not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) if len(not_valid_shortcut_keys) != 0: - temp='%s' % ', '.join(map(str, not_valid_shortcut_keys)) + temp = "%s" % ", ".join(map(str, not_valid_shortcut_keys)) print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) - assert len(not_valid_shortcut_keys) == 0 - - -if __name__ == "__main__": - unittest.main() \ No newline at end of file From a8a88e5ccb36071259e33006fa8bfb8528a1cd8b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 09:15:46 +0200 Subject: [PATCH 207/364] Remove mistake changes in CuraEngineBackend --- plugins/CuraEngineBackend/CuraEngineBackend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index caa2deaa87..9a5c95b04d 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -180,7 +180,7 @@ class CuraEngineBackend(QObject, Backend): # \return list of commands and args / parameters. def getEngineCommand(self) -> List[str]: json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json") - command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, "-m1"] + command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] parser = argparse.ArgumentParser(prog = "cura", add_help = False) parser.add_argument("--debug", action = "store_true", default = False, help = "Turn on the debug mode by setting this option.") From 784f7cca7601e5e52c9e8e0046a1fe4370e5436b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 16:17:02 +0200 Subject: [PATCH 208/364] Move shortcut key check into a separate script --- scripts/check_shortcut_keys.py | 135 +++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 scripts/check_shortcut_keys.py diff --git a/scripts/check_shortcut_keys.py b/scripts/check_shortcut_keys.py new file mode 100644 index 0000000000..2796002c3f --- /dev/null +++ b/scripts/check_shortcut_keys.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +# +# This script checks for duplicate shortcut keys in all translation files. +# +import collections +import os +import sys +from typing import Optional + +COLOR_WARNING = '\033[93m' +COLOR_ENDC = '\033[0m' + +regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it + +# Directory where this python file resides +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) + + +class ShortcutKeysChecker: + + MSGCTXT = "msgctxt" # Scope of the text . Like : msgctxt "@action:inmenu menubar:help" + MSGID = "msgid" # The id tag, also English text version + MSGSTR = "msgstr" # The translation tag + + def has_duplicates(self, filename: str) -> bool: + """ + Checks if the given file has duplicate shortcut keys. + """ + with open(filename, "r", encoding = "utf-8") as f: + all_lines = f.readlines() + + all_lines = [l.strip() for l in all_lines] + shortcut_dict = collections.defaultdict(dict) + found_ctxt = False + current_data = dict() + current_field = None + start_line = None + + for idx, line in enumerate(all_lines): + if line.startswith(self.MSGCTXT): + found_ctxt = True + current_data.clear() + current_field = self.MSGCTXT + current_data[current_field] = self._fetch_data(line) + start_line = idx + continue + + elif found_ctxt and line.startswith(self.MSGID): + current_field = self.MSGID + current_data[current_field] = self._fetch_data(line) + continue + + elif found_ctxt and line.startswith(self.MSGSTR): + current_field = self.MSGSTR + current_data[current_field] = self._fetch_data(line) + continue + + elif found_ctxt and line.startswith('"'): + data = line[1:-1] # strip the beginning and ending double-quotes + current_data[current_field] += data + continue + + if current_data: + self._process_translation(shortcut_dict, current_data, start_line) + + current_data.clear() + current_field = None + found_ctxt = False + start_line = None + + return self._show_all_duplicates(shortcut_dict, filename) + + def _fetch_data(self, line: str) -> str: + return (line.split(" ", 1)[-1])[1:-1] + + def _process_translation(self, shortcut_dict: dict, data_dict: dict, start_line: int) -> None: + # Only check the ones with shortcuts + msg = data_dict[self.MSGID] + if data_dict[self.MSGSTR]: + msg = data_dict[self.MSGSTR] + shortcut_key = self._get_shortcut_key(msg) + if shortcut_key is None: + return + + msg_section = data_dict[self.MSGCTXT] + keys_dict = shortcut_dict[msg_section] + if shortcut_key not in keys_dict: + keys_dict[shortcut_key] = dict() + existing_data_dict = keys_dict[shortcut_key] + existing_data_dict[start_line] = {"message": msg, + "shortcut_key": shortcut_key, + } + + def _get_shortcut_key(self, text: str) -> Optional[str]: + key = None + if text.count("&") == 1: + idx = text.find("&") + 1 + if idx < len(text): + character = text[idx] + if not character.isspace(): + key = character.lower() + return key + + def _show_all_duplicates(self, shortcut_dict: dict, filename: str) -> bool: + has_duplicates = False + for keys_dict in shortcut_dict.values(): + for shortcut_key, data_dict in keys_dict.items(): + if len(data_dict) == 1: + continue + + has_duplicates = True + + print("") + print("The following messages have the same shortcut key '%s':" % shortcut_key) + for line, msg in data_dict.items(): + relative_filename = (filename.rsplit("..", 1)[-1])[1:] + print(" - [%s] L%7d : [%s]" % (relative_filename, line, msg)) + + return has_duplicates + + +if __name__ == "__main__": + checker = ShortcutKeysChecker() + all_dirnames = [""] + for _, dirnames, _ in os.walk(os.path.join(SCRIPT_DIR, "..", "resources", "i18n")): + all_dirnames += [dn for dn in dirnames] + break + + found_duplicates = False + for dirname in all_dirnames: + file_name = "cura.pot" if not dirname else "cura.po" + file_path = os.path.join(SCRIPT_DIR, "..", "resources", "i18n", dirname, file_name) + found_duplicates = found_duplicates or checker.has_duplicates(file_path) + + sys.exit(0 if not found_duplicates else 1) From 15f5e9ff017b98d44986d5cefc1cebe04e840a3b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 16:30:37 +0200 Subject: [PATCH 209/364] Remove TestShortcutKeys --- tests/TestShortcutKeys.py | 113 -------------------------------------- 1 file changed, 113 deletions(-) delete mode 100644 tests/TestShortcutKeys.py diff --git a/tests/TestShortcutKeys.py b/tests/TestShortcutKeys.py deleted file mode 100644 index e1dae6727e..0000000000 --- a/tests/TestShortcutKeys.py +++ /dev/null @@ -1,113 +0,0 @@ -import os -import re -import pytest - -MSGCTXT = "msgctxt" # Scope of the text . Like : msgctxt "@action:inmenu menubar:help" -MSGID = "msgid" # The id tag, also English text version -MSGTR = "msgstr" # The translation tag - -COLOR_WARNING = '\033[93m' -COLOR_ENDC = '\033[0m' - -regex_patter = '(&[\w])' #"&[a-zA-Z0-9]" - Search char '&' and at least one character after it - - -# Directory where this python file resides -SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) - - -# Check default language shortcut keys, by default it is English -def test_default_shortcut_keys(): - language_folder = "de_DE" # choose German language folder, because we only need to test English shortcut keys, the message id is English translation - - translation_file_name = "cura.po" - - cura_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) - language_file_path = os.path.join(cura_path, "resources", "i18n", language_folder, translation_file_name) - - not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) - - if len(not_valid_shortcut_keys) != 0: - temp = '%s' % ', '.join(map(str, not_valid_shortcut_keys)) - print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) - - assert len(not_valid_shortcut_keys) == 0 - - -# If the 'findShortcutKeysInTranslation' is False the function will search shortcut keys in message id -def getDuplicatedShortcutKeys(language_file_path: str, find_shortcut_keys_in_translation: bool): - last_translation_scope = "" - - # {shortcut_key, {scope, [translation_text]}} - shortcut_keys = dict() - with open(language_file_path, 'r') as f: - for text in f: - if text.startswith(MSGCTXT): - last_translation_scope = text - - elif text.startswith(MSGID) and find_shortcut_keys_in_translation or text.startswith(MSGTR) and not find_shortcut_keys_in_translation: - # if text has '&'symbol and at least one character (char or digit) after it - # ex '&acr mytest' -> this should return '&a' - # ex '& acr mytest' -> returns None - the_shortcut_key_word = re.search(regex_patter, text) - - if the_shortcut_key_word is not None: - # take only char after '&' symbol - the_shortcut_key = the_shortcut_key_word.group(0)[1] - - the_shortcut_key = the_shortcut_key.upper() # make all shortcut keys capital - - # The shortcut key is not yet added - if the_shortcut_key not in shortcut_keys: - scope_translation = dict() - scope_translation[last_translation_scope] = [] - scope_translation[last_translation_scope].append(text) - - shortcut_keys[the_shortcut_key] = scope_translation - else: - # check if the shortcut key scope is already added or not - if last_translation_scope not in shortcut_keys[the_shortcut_key]: - scope_translation = dict() - scope_translation[last_translation_scope] = [] - scope_translation[last_translation_scope].append(text) - shortcut_keys[the_shortcut_key].update(scope_translation) - - # if the scope already exist then add the key - elif last_translation_scope in shortcut_keys[the_shortcut_key]: - shortcut_keys[the_shortcut_key][last_translation_scope].append(text) - - last_translation_scope = "" - - not_valid_shortcut_keys = [] - - # Validate all shortcut keys - for shortcut_key, scopes in shortcut_keys.items(): - # check, whether the key exist in the same scope multiple times or not - for key, items in scopes.items(): - # The shortcut keys should not be more than one time in the same scope - if len(items) > 1: - not_valid_shortcut_keys += items - - return not_valid_shortcut_keys - - -@pytest.mark.parametrize("language_type", [("de_DE"),("es_ES"),("fi_FI"),("fr_FR"),("it_IT"),("ja_JP"),("ko_KR"), - ("nl_NL"),("pl_PL"),("pt_BR"),("ru_RU"),("tr_TR")]) -def test_shortcut_keys(language_type): - language_folder = language_type - - translation_file_name = "cura.po" - - plugin_file_path = os.path.dirname(os.path.abspath(__file__)) - path_records = os.path.split(plugin_file_path) - global_path = path_records[:-1] - cura_path = os.path.join(*global_path) - language_file_path = os.path.join(cura_path, "resources", "i18n", language_folder, translation_file_name) - - not_valid_shortcut_keys = getDuplicatedShortcutKeys(language_file_path, False) - - if len(not_valid_shortcut_keys) != 0: - temp = "%s" % ", ".join(map(str, not_valid_shortcut_keys)) - print(COLOR_WARNING + "NOT VALID SHORTCUT KEYS: " + temp + COLOR_ENDC) - - assert len(not_valid_shortcut_keys) == 0 From 29ef964ba7ec4f0aeb7869ec59ec94c1ed26bd83 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 16:31:08 +0200 Subject: [PATCH 210/364] Add shortcut key check script into Jenkinsfile --- Jenkinsfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index de62b7ed5a..8837fdf487 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,6 +12,19 @@ parallel_nodes(['linux && cura', 'windows && cura']) { // If any error occurs during building, we want to catch it and continue with the "finale" stage. catchError { + stage('Pre Checks') { + if (isUnix()) { + try { + sh """ + echo 'Check for duplicate shortcut keys in all translation files.' + ${env.CURA_ENVIRONMENT_PATH}/master/bin/python3 scripts/check_shortcut_keys.py + """ + } catch(e) { + currentBuild.result = "UNSTABLE" + } + } + } + // Building and testing should happen in a subdirectory. dir('build') { // Perform the "build". Since Uranium is Python code, this basically only ensures CMake is setup. From 5a36bc963c315fa0caa709456e7f0cdd88a77ac8 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 5 Sep 2018 16:44:58 +0200 Subject: [PATCH 211/364] Fix shortcut conflict in French --- resources/i18n/fi_FI/cura.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index dc491e7cff..4684ff69d8 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -4025,7 +4025,7 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 msgctxt "@title:menu menubar:toplevel" msgid "&File" -msgstr "&Tiedosto" +msgstr "Tie&dosto" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 msgctxt "@action:inmenu menubar:file" From 4cc1b6ce02a5aa629d3083f97b6a2cc61a14f971 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 6 Sep 2018 16:57:45 +0200 Subject: [PATCH 212/364] Add typings and fix code style --- cura/PrintJobPreviewImageProvider.py | 2 +- .../ExtruderConfigurationModel.py | 8 ++-- cura/PrinterOutput/ExtruderOutputModel.py | 6 +-- .../NetworkedPrinterOutputDevice.py | 47 ++++++++++++------- cura/PrinterOutput/PrintJobOutputModel.py | 6 +-- .../UM3NetworkPrinting/ClusterControlItem.qml | 9 +++- .../UM3NetworkPrinting/ClusterMonitorItem.qml | 2 - .../ClusterUM3OutputDevice.py | 18 +++---- .../PrintCoreConfiguration.qml | 2 +- 9 files changed, 61 insertions(+), 39 deletions(-) diff --git a/cura/PrintJobPreviewImageProvider.py b/cura/PrintJobPreviewImageProvider.py index d3521bf0af..a8df5aa273 100644 --- a/cura/PrintJobPreviewImageProvider.py +++ b/cura/PrintJobPreviewImageProvider.py @@ -10,7 +10,7 @@ class PrintJobPreviewImageProvider(QQuickImageProvider): super().__init__(QQuickImageProvider.Image) ## Request a new image. - def requestImage(self, id, size): + def requestImage(self, id: str, size: QSize) -> QImage: # The id will have an uuid and an increment separated by a slash. As we don't care about the value of the # increment, we need to strip that first. uuid = id[id.find("/") + 1:] diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index 75ee4b6ab3..da0ad6b0b2 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -11,7 +11,7 @@ class ExtruderConfigurationModel(QObject): extruderConfigurationChanged = pyqtSignal() - def __init__(self, position: int = -1): + def __init__(self, position: int = -1) -> None: super().__init__() self._position = position # type: int self._material = None # type: Optional[MaterialOutputModel] @@ -24,17 +24,17 @@ class ExtruderConfigurationModel(QObject): def position(self) -> int: return self._position - def setMaterial(self, material: Optional[MaterialOutputModel]): + def setMaterial(self, material: Optional[MaterialOutputModel]) -> None: if self._hotend_id != material: self._material = material self.extruderConfigurationChanged.emit() @pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged) - def activeMaterial(self) -> MaterialOutputModel: + def activeMaterial(self) -> Optional[MaterialOutputModel]: return self._material @pyqtProperty(QObject, fset=setMaterial, notify=extruderConfigurationChanged) - def material(self) -> MaterialOutputModel: + def material(self) -> Optional[MaterialOutputModel]: return self._material def setHotendID(self, hotend_id: Optional[str]) -> None: diff --git a/cura/PrinterOutput/ExtruderOutputModel.py b/cura/PrinterOutput/ExtruderOutputModel.py index c7fd58c098..30d53bbd85 100644 --- a/cura/PrinterOutput/ExtruderOutputModel.py +++ b/cura/PrinterOutput/ExtruderOutputModel.py @@ -22,8 +22,8 @@ class ExtruderOutputModel(QObject): super().__init__(parent) self._printer = printer # type: PrinterOutputModel self._position = position - self._target_hotend_temperature = 0 # type: float - self._hotend_temperature = 0 # type: float + self._target_hotend_temperature = 0.0 # type: float + self._hotend_temperature = 0.0 # type: float self._is_preheating = False @@ -50,7 +50,7 @@ class ExtruderOutputModel(QObject): def activeMaterial(self) -> Optional["MaterialOutputModel"]: return self._extruder_configuration.activeMaterial - def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]): + def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]) -> None: self._extruder_configuration.setMaterial(material) ## Update the hotend temperature. This only changes it locally. diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 36369feabb..94f86f19a3 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -197,31 +197,43 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() - reply = self._manager.put(request, data.encode()) - self._registerOnFinishedCallback(reply, on_finished) + if self._manager is not None: + reply = self._manager.put(request, data.encode()) + self._registerOnFinishedCallback(reply, on_finished) + else: + Logger.log("e", "Could not find manager.") def delete(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() - reply = self._manager.deleteResource(request) - self._registerOnFinishedCallback(reply, on_finished) + if self._manager is not None: + reply = self._manager.deleteResource(request) + self._registerOnFinishedCallback(reply, on_finished) + else: + Logger.log("e", "Could not find manager.") def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() - reply = self._manager.get(request) - self._registerOnFinishedCallback(reply, on_finished) + if self._manager is not None: + reply = self._manager.get(request) + self._registerOnFinishedCallback(reply, on_finished) + else: + Logger.log("e", "Could not find manager.") def post(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: self._validateManager() request = self._createEmptyRequest(target) self._last_request_time = time() - reply = self._manager.post(request, data) - if on_progress is not None: - reply.uploadProgress.connect(on_progress) - self._registerOnFinishedCallback(reply, on_finished) + if self._manager is not None: + reply = self._manager.post(request, data) + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + self._registerOnFinishedCallback(reply, on_finished) + else: + Logger.log("e", "Could not find manager.") def postFormWithParts(self, target: str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> QNetworkReply: self._validateManager() @@ -232,15 +244,18 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._last_request_time = time() - reply = self._manager.post(request, multi_post_part) + if self._manager is not None: + reply = self._manager.post(request, multi_post_part) - self._kept_alive_multiparts[reply] = multi_post_part + self._kept_alive_multiparts[reply] = multi_post_part - if on_progress is not None: - reply.uploadProgress.connect(on_progress) - self._registerOnFinishedCallback(reply, on_finished) + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + self._registerOnFinishedCallback(reply, on_finished) - return reply + return reply + else: + Logger.log("e", "Could not find manager.") def postForm(self, target: str, header_data: str, body_data: bytes, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: post_part = QHttpPart() diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index c8d813f17c..7366b95f86 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -40,7 +40,7 @@ class PrintJobOutputModel(QObject): self._compatible_machine_families = [] # type: List[str] self._preview_image_id = 0 - self._preview_image = None + self._preview_image = None # type: Optional[QImage] @pyqtProperty("QStringList", notify=compatibleMachineFamiliesChanged) def compatibleMachineFamilies(self): @@ -61,10 +61,10 @@ class PrintJobOutputModel(QObject): temp = "image://print_job_preview/" + str(self._preview_image_id) + "/" + self._key return QUrl(temp, QUrl.TolerantMode) - def getPreviewImage(self): + def getPreviewImage(self) -> Optional[QImage]: return self._preview_image - def updatePreviewImage(self, preview_image: Optional[QImage]): + def updatePreviewImage(self, preview_image: Optional[QImage]) -> None: if self._preview_image != preview_image: self._preview_image = preview_image self.previewImageChanged.emit() diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml index 2b2c683bee..be72d3c07a 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -357,7 +357,14 @@ Component function switchPopupState() { - popup.visible ? popup.close() : popup.open() + if (popup.visible) + { + popup.close() + } + else + { + popup.open() + } } Controls2.Button diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index 82b1f554b7..71b598d05c 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -101,8 +101,6 @@ Component { if (monitorFrame != null && !monitorFrame.visible) { - // After switching the Tab ensure that active printer is Null, the video stream image - // might be active OutputDevice.setActiveCamera(null) } } diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 353a67ccd0..8345de049c 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -146,14 +146,15 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): Logger.log("e", "Missing file or mesh writer!") return self._sending_job = self._sendPrintJob(writer, preferred_format, nodes) - self._sending_job.send(None) # Start the generator. + 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) + 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: @@ -171,7 +172,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # \param target_printer The name of the printer to target. @pyqtSlot(str) def selectPrinter(self, target_printer: str = "") -> None: - self._sending_job.send(target_printer) + if self._sending_job is not None: + self._sending_job.send(target_printer) @pyqtSlot() def cancelPrintSelection(self) -> None: diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml index 539d8385c9..0ae1fec920 100644 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -22,7 +22,7 @@ Item anchors.verticalCenter: printAndMaterialLabel.verticalCenter opacity: { - if(printCoreConfiguration == undefined || printCoreConfiguration.activeMaterial == undefined || printCoreConfiguration.hotendID == undefined) + if(printCoreConfiguration == null || printCoreConfiguration.activeMaterial == null || printCoreConfiguration.hotendID == null) { return 0.5 } From c1ef9abf1d68193f919d71dd550d60037c07cec8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 6 Sep 2018 17:23:16 +0200 Subject: [PATCH 213/364] Fix code style These changed in the same pull request so I'll remove them here. Contributes to issue CURA-5682. --- .../qml/Preferences/Materials/MaterialsBrandSection.qml | 3 ++- resources/qml/Preferences/Materials/MaterialsPage.qml | 2 +- resources/qml/Preferences/Materials/MaterialsSlot.qml | 6 ++++-- .../qml/Preferences/Materials/MaterialsTypeSection.qml | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 5afe61abf1..e3a3f7a7b8 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -109,7 +109,8 @@ Rectangle } } - Connections { + Connections + { target: UM.Preferences onPreferenceChanged: { diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 0b35440552..96fea6a951 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -42,7 +42,7 @@ Item Cura.MaterialBrandsModel { id: materials_model } Cura.GenericMaterialsModel { id: generic_materials_model } - function expandActiveMaterial( search_root_id ) + function expandActiveMaterial(search_root_id) { for (var n = 0; n < generic_materials_model.rowCount(); n++) { diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index 65c32c59e3..88d613c718 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -21,7 +21,8 @@ Rectangle width: parent.width color: base.currentItem == model ? UM.Theme.getColor("favorites_row_selected") : "transparent" - Component.onCompleted: { + Component.onCompleted: + { if (material.root_material_id == base.active_root_material_id) { base.currentItem = material } @@ -55,7 +56,8 @@ Rectangle MouseArea { anchors.fill: parent - onClicked: { + onClicked: + { base.currentItem = material base.current_brand = material.brand base.current_type = material.brand+"_"+material.material diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index c915390c5a..728748b300 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -59,7 +59,6 @@ Rectangle width: parent.width - UM.Theme.getSize("favorites_button").width id: material_type_name verticalAlignment: Text.AlignVCenter - } Button { @@ -127,7 +126,8 @@ Rectangle } } - Connections { + Connections + { target: UM.Preferences onPreferenceChanged: { From d6046c725a6aa301d39d094f41c8721a5c527b82 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 7 Sep 2018 09:29:29 +0200 Subject: [PATCH 214/364] Fix Toolbox QML null object warnings CURA-5670 --- .../resources/qml/ToolboxCompatibilityChart.qml | 2 +- .../Toolbox/resources/qml/ToolboxDetailList.qml | 2 +- .../Toolbox/resources/qml/ToolboxDetailPage.qml | 16 ++++++++++++---- .../Toolbox/resources/qml/ToolboxDetailTile.qml | 2 +- .../resources/qml/ToolboxDownloadsPage.qml | 2 ++ .../resources/qml/ToolboxInstalledPage.qml | 2 ++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index 4a008f2a83..58fea079e9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml index 2b4cd838bf..2e5eae098c 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml index cf4bfcd545..270e8fc1fc 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml @@ -32,7 +32,7 @@ Item width: UM.Theme.getSize("toolbox_thumbnail_medium").width height: UM.Theme.getSize("toolbox_thumbnail_medium").height fillMode: Image.PreserveAspectFit - source: details.icon_url || "../images/logobot.svg" + source: details === null ? "" : (details.icon_url || "../images/logobot.svg") mipmap: true anchors { @@ -55,7 +55,7 @@ Item rightMargin: UM.Theme.getSize("wide_margin").width bottomMargin: UM.Theme.getSize("default_margin").height } - text: details.name || "" + text: details === null ? "" : (details.name || "") font: UM.Theme.getFont("large") color: UM.Theme.getColor("text") wrapMode: Text.WordWrap @@ -114,7 +114,7 @@ Item height: childrenRect.height Label { - text: details.version || catalog.i18nc("@label", "Unknown") + text: details === null ? "" : (details.version || catalog.i18nc("@label", "Unknown")) font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text") } @@ -122,6 +122,10 @@ Item { text: { + if (details === null) + { + return "" + } var date = new Date(details.last_updated) return date.toLocaleString(UM.Preferences.getValue("general/language")) } @@ -132,6 +136,10 @@ Item { text: { + if (details === null) + { + return "" + } if (details.author_email) { return "" + details.author_name + "" @@ -148,7 +156,7 @@ Item } Label { - text: details.download_count || catalog.i18nc("@label", "Unknown") + text: details === null ? "" : (details.download_count || catalog.i18nc("@label", "Unknown")) font: UM.Theme.getFont("very_small") color: UM.Theme.getColor("text") } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml index 355fa5dece..d544757d58 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml index bcca02583d..3e0dda4f4a 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml @@ -12,7 +12,9 @@ ScrollView width: parent.width height: parent.height style: UM.Theme.styles.scrollview + flickableItem.flickableDirection: Flickable.VerticalFlick + Column { width: base.width diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml index 939cf0b505..e683f89823 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml @@ -6,6 +6,7 @@ import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 + import UM 1.1 as UM ScrollView @@ -16,6 +17,7 @@ ScrollView height: parent.height style: UM.Theme.styles.scrollview flickableItem.flickableDirection: Flickable.VerticalFlick + Column { spacing: UM.Theme.getSize("default_margin").height From b0e7562579ad00d5215dfa0a9d9421c9a3cdf2a8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Sep 2018 10:59:45 +0200 Subject: [PATCH 215/364] Rename VersionUpgrade plug-in from 40 to 35 Because the next version is going to be called 3.5, not 4.0. --- .../VersionUpgrade34to35.py} | 4 ++-- .../__init__.py | 4 ++-- .../plugin.json | 4 ++-- .../tests/TestVersionUpgrade34to35.py} | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename plugins/VersionUpgrade/{VersionUpgrade34to40/VersionUpgrade34to40.py => VersionUpgrade34to35/VersionUpgrade34to35.py} (99%) rename plugins/VersionUpgrade/{VersionUpgrade34to40 => VersionUpgrade34to35}/__init__.py (95%) rename plugins/VersionUpgrade/{VersionUpgrade34to40 => VersionUpgrade34to35}/plugin.json (76%) rename plugins/VersionUpgrade/{VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py => VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py} (85%) diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py similarity index 99% rename from plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py index a61aae06bb..9e3ea03c55 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py @@ -60,8 +60,8 @@ _RENAMED_MATERIAL_PROFILES = { } ## Upgrades configurations from the state they were in at version 3.4 to the -# state they should be in at version 4.0. -class VersionUpgrade34to40(VersionUpgrade): +# state they should be in at version 3.5. +class VersionUpgrade34to35(VersionUpgrade): ## Gets the version number from a CFG file in Uranium's 3.3 format. # diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py similarity index 95% rename from plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py index ad7a33b61a..9d3410e40d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py @@ -1,9 +1,9 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from . import VersionUpgrade34to40 +from . import VersionUpgrade34to35 -upgrade = VersionUpgrade34to40.VersionUpgrade34to40() +upgrade = VersionUpgrade34to35.VersionUpgrade34to35() def getMetaData(): diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json similarity index 76% rename from plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json rename to plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json index c07ae31c0a..b73001b683 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json @@ -1,8 +1,8 @@ { - "name": "Version Upgrade 3.4 to 4.0", + "name": "Version Upgrade 3.4 to 3.5", "author": "Ultimaker B.V.", "version": "1.0.0", - "description": "Upgrades configurations from Cura 3.4 to Cura 4.0.", + "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", "api": 5, "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py similarity index 85% rename from plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py index 22df0d6487..90b2cb5dea 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py @@ -4,12 +4,12 @@ import configparser #To parse the resulting config files. import pytest #To register tests with. -import VersionUpgrade34to40 #The module we're testing. +import VersionUpgrade34to35 #The module we're testing. ## Creates an instance of the upgrader to test with. @pytest.fixture def upgrader(): - return VersionUpgrade34to40.VersionUpgrade34to40() + return VersionUpgrade34to35.VersionUpgrade34to35() test_upgrade_version_nr_data = [ ("Empty config file", From 18e0dacda490622631f70ad65841f37f8ef8b4e4 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Fri, 7 Sep 2018 14:11:37 +0200 Subject: [PATCH 216/364] Organize files better First things first... organize! --- plugins/UM3NetworkPrinting/__init__.py | 4 ++-- .../{ => resources/qml}/ClusterControlItem.qml | 17 ++++++++--------- .../{ => resources/qml}/ClusterMonitorItem.qml | 0 .../{ => resources/qml}/DiscoverUM3Action.qml | 0 .../{ => resources/qml}/MonitorItem.qml | 0 .../{ => resources/qml}/OpenPanelButton.qml | 0 .../qml}/PrintCoreConfiguration.qml | 0 .../{ => resources/qml}/PrintJobInfoBlock.qml | 2 +- .../{ => resources/qml}/PrintWindow.qml | 0 .../{ => resources/qml}/PrinterFamilyPill.qml | 0 .../{ => resources/qml}/PrinterInfoBlock.qml | 8 ++++---- .../{ => resources/qml}/PrinterTile.qml | 0 .../{ => resources/qml}/PrinterVideoStream.qml | 0 .../{ => resources/qml}/UM3InfoComponents.qml | 0 .../{ => resources/svg}/UM3-icon.svg | 0 .../{ => resources/svg}/UM3x-icon.svg | 0 .../{ => resources/svg}/UMs5-icon.svg | 0 .../{ => resources/svg}/aborted-icon.svg | 0 .../svg}/action-required-icon.svg | 0 .../{ => resources/svg}/approved-icon.svg | 0 .../{ => resources/svg}/blocked-icon.svg | 0 .../{ => resources/svg}/camera-icon.svg | 0 .../{ => resources/svg}/checkmark-icon.svg | 0 .../{ => resources/svg}/paused-icon.svg | 0 .../{ => resources/svg}/warning-icon.svg | 0 .../{ => src}/ClusterUM3OutputDevice.py | 6 +++--- .../ClusterUM3PrinterOutputController.py | 0 .../{ => src}/DiscoverUM3Action.py | 4 ++-- .../{ => src}/LegacyUM3OutputDevice.py | 2 +- .../LegacyUM3PrinterOutputController.py | 0 .../{ => src}/SendMaterialJob.py | 0 .../{ => src}/UM3OutputDevicePlugin.py | 0 32 files changed, 21 insertions(+), 22 deletions(-) rename plugins/UM3NetworkPrinting/{ => resources/qml}/ClusterControlItem.qml (98%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/ClusterMonitorItem.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/DiscoverUM3Action.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/MonitorItem.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/OpenPanelButton.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrintCoreConfiguration.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrintJobInfoBlock.qml (99%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrintWindow.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrinterFamilyPill.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrinterInfoBlock.qml (98%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrinterTile.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/PrinterVideoStream.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/qml}/UM3InfoComponents.qml (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/UM3-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/UM3x-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/UMs5-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/aborted-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/action-required-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/approved-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/blocked-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/camera-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/checkmark-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/paused-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => resources/svg}/warning-icon.svg (100%) rename plugins/UM3NetworkPrinting/{ => src}/ClusterUM3OutputDevice.py (99%) rename plugins/UM3NetworkPrinting/{ => src}/ClusterUM3PrinterOutputController.py (100%) rename plugins/UM3NetworkPrinting/{ => src}/DiscoverUM3Action.py (98%) rename plugins/UM3NetworkPrinting/{ => src}/LegacyUM3OutputDevice.py (99%) rename plugins/UM3NetworkPrinting/{ => src}/LegacyUM3PrinterOutputController.py (100%) rename plugins/UM3NetworkPrinting/{ => src}/SendMaterialJob.py (100%) rename plugins/UM3NetworkPrinting/{ => src}/UM3OutputDevicePlugin.py (100%) diff --git a/plugins/UM3NetworkPrinting/__init__.py b/plugins/UM3NetworkPrinting/__init__.py index b68086cb75..7f2b34223c 100644 --- a/plugins/UM3NetworkPrinting/__init__.py +++ b/plugins/UM3NetworkPrinting/__init__.py @@ -1,11 +1,11 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from . import DiscoverUM3Action +from .src import DiscoverUM3Action from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") -from . import UM3OutputDevicePlugin +from .src import UM3OutputDevicePlugin def getMetaData(): return {} diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml similarity index 98% rename from plugins/UM3NetworkPrinting/ClusterControlItem.qml rename to plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml index be72d3c07a..1164e383db 100644 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml @@ -16,7 +16,6 @@ Component id: base property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. - property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. visible: OutputDevice != null anchors.fill: parent @@ -154,11 +153,11 @@ Component switch(modelData.type) { case "Ultimaker 3": - return "UM3-icon.svg" + return "../svg/UM3-icon.svg" case "Ultimaker 3 Extended": - return "UM3x-icon.svg" + return "../svg/UM3x-icon.svg" case "Ultimaker S5": - return "UMs5-icon.svg" + return "../svg/UMs5-icon.svg" } } width: sourceSize.width @@ -563,15 +562,15 @@ Component switch(modelData.activePrintJob.state) { case "paused": - return "paused-icon.svg" + return "../svg/paused-icon.svg" case "wait_cleanup": if(modelData.activePrintJob.timeElapsed < modelData.activePrintJob.timeTotal) { - return "aborted-icon.svg" + return "../svg/aborted-icon.svg" } - return "approved-icon.svg" + return "../svg/approved-icon.svg" case "wait_user_action": - return "aborted-icon.svg" + return "../svg/aborted-icon.svg" default: return "" } @@ -599,7 +598,7 @@ Component height: width anchors.right: parent.right anchors.rightMargin: parent.rightMargin - source: "camera-icon.svg" + source: "../svg/camera-icon.svg" } MouseArea { diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml similarity index 100% rename from plugins/UM3NetworkPrinting/ClusterMonitorItem.qml rename to plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml similarity index 100% rename from plugins/UM3NetworkPrinting/DiscoverUM3Action.qml rename to plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml diff --git a/plugins/UM3NetworkPrinting/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml similarity index 100% rename from plugins/UM3NetworkPrinting/MonitorItem.qml rename to plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml diff --git a/plugins/UM3NetworkPrinting/OpenPanelButton.qml b/plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml similarity index 100% rename from plugins/UM3NetworkPrinting/OpenPanelButton.qml rename to plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml similarity index 100% rename from plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml diff --git a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml similarity index 99% rename from plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml index d50ee769d3..f39b430e19 100644 --- a/plugins/UM3NetworkPrinting/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml @@ -93,7 +93,7 @@ Item { id: statusImage anchors.centerIn: printJobPreview - source: printJob.state == "error" ? "aborted-icon.svg" : "" + source: printJob.state == "error" ? "../svg/aborted-icon.svg" : "" visible: source != "" width: 0.5 * printJobPreview.width height: 0.5 * printJobPreview.height diff --git a/plugins/UM3NetworkPrinting/PrintWindow.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml similarity index 100% rename from plugins/UM3NetworkPrinting/PrintWindow.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml diff --git a/plugins/UM3NetworkPrinting/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml similarity index 100% rename from plugins/UM3NetworkPrinting/PrinterFamilyPill.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml similarity index 98% rename from plugins/UM3NetworkPrinting/PrinterInfoBlock.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml index 0217767a40..832e65f18c 100644 --- a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml @@ -166,7 +166,7 @@ Rectangle height: width anchors.right: parent.right anchors.rightMargin: parent.rightMargin - source: "camera-icon.svg" + source: "../svg/camera-icon.svg" } } @@ -317,7 +317,7 @@ Rectangle source: { if (printer.state == "disabled") { - return "blocked-icon.svg"; + return "../svg/blocked-icon.svg"; } if (printer.state === "unreachable") @@ -329,11 +329,11 @@ Rectangle { if(printJob.state === "queued") { - return "action-required-icon.svg"; + return "../svg/action-required-icon.svg"; } else if (printJob.state === "wait_cleanup") { - return "checkmark-icon.svg"; + return "../svg/checkmark-icon.svg"; } } return ""; // We're not going to show it, so it will not be resolved as a url. diff --git a/plugins/UM3NetworkPrinting/PrinterTile.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml similarity index 100% rename from plugins/UM3NetworkPrinting/PrinterTile.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml diff --git a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml similarity index 100% rename from plugins/UM3NetworkPrinting/PrinterVideoStream.qml rename to plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml diff --git a/plugins/UM3NetworkPrinting/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml similarity index 100% rename from plugins/UM3NetworkPrinting/UM3InfoComponents.qml rename to plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml diff --git a/plugins/UM3NetworkPrinting/UM3-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UM3-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/UM3-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/UM3-icon.svg diff --git a/plugins/UM3NetworkPrinting/UM3x-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UM3x-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/UM3x-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/UM3x-icon.svg diff --git a/plugins/UM3NetworkPrinting/UMs5-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UMs5-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/UMs5-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/UMs5-icon.svg diff --git a/plugins/UM3NetworkPrinting/aborted-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/aborted-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/aborted-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/aborted-icon.svg diff --git a/plugins/UM3NetworkPrinting/action-required-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/action-required-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/action-required-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/action-required-icon.svg diff --git a/plugins/UM3NetworkPrinting/approved-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/approved-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/approved-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/approved-icon.svg diff --git a/plugins/UM3NetworkPrinting/blocked-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/blocked-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/blocked-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/blocked-icon.svg diff --git a/plugins/UM3NetworkPrinting/camera-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/camera-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/camera-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/camera-icon.svg diff --git a/plugins/UM3NetworkPrinting/checkmark-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/checkmark-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/checkmark-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/checkmark-icon.svg diff --git a/plugins/UM3NetworkPrinting/paused-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/paused-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/paused-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/paused-icon.svg diff --git a/plugins/UM3NetworkPrinting/warning-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/warning-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py similarity index 99% rename from plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py rename to plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py index 8345de049c..409ca7a84a 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py @@ -62,8 +62,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._print_jobs = [] # type: List[PrintJobOutputModel] - self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterMonitorItem.qml") - self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterControlItem.qml") + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterMonitorItem.qml") + self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterControlItem.qml") # See comments about this hack with the clusterPrintersChanged signal self.printersChanged.connect(self.clusterPrintersChanged) @@ -158,7 +158,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _spawnPrinterSelectionDialog(self): if self._printer_selection_dialog is None: - path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "PrintWindow.qml") + path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/PrintWindow.qml") self._printer_selection_dialog = CuraApplication.getInstance().createQmlComponent(path, {"OutputDevice": self}) if self._printer_selection_dialog is not None: self._printer_selection_dialog.show() diff --git a/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py similarity index 100% rename from plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py rename to plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py similarity index 98% rename from plugins/UM3NetworkPrinting/DiscoverUM3Action.py rename to plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index c0a828ece9..ece23507e5 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -24,7 +24,7 @@ class DiscoverUM3Action(MachineAction): def __init__(self) -> None: super().__init__("DiscoverUM3Action", catalog.i18nc("@action","Connect via Network")) - self._qml_url = "DiscoverUM3Action.qml" + self._qml_url = "../resources/qml/DiscoverUM3Action.qml" self._network_plugin = None #type: Optional[UM3OutputDevicePlugin] @@ -174,7 +174,7 @@ class DiscoverUM3Action(MachineAction): plugin_path = PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting") if not plugin_path: return - path = os.path.join(plugin_path, "UM3InfoComponents.qml") + path = os.path.join(plugin_path, "resources/qml/UM3InfoComponents.qml") self.__additional_components_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) if not self.__additional_components_view: Logger.log("w", "Could not create ui components for UM3.") diff --git a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py similarity index 99% rename from plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py rename to plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py index 8617b5b2ff..fe94500aa1 100644 --- a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py @@ -76,7 +76,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): self.setIconName("print") - self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml") + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/MonitorItem.qml") self._output_controller = LegacyUM3PrinterOutputController(self) diff --git a/plugins/UM3NetworkPrinting/LegacyUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py similarity index 100% rename from plugins/UM3NetworkPrinting/LegacyUM3PrinterOutputController.py rename to plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py diff --git a/plugins/UM3NetworkPrinting/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/SendMaterialJob.py similarity index 100% rename from plugins/UM3NetworkPrinting/SendMaterialJob.py rename to plugins/UM3NetworkPrinting/src/SendMaterialJob.py diff --git a/plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py similarity index 100% rename from plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py rename to plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py From d53e9f92632954354f8cfa550eb8a102c072bac7 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Fri, 7 Sep 2018 14:12:19 +0200 Subject: [PATCH 217/364] Remove not used files. After the refactor, these files are no longer used. --- plugins/UM3NetworkPrinting/MonitorItem.qml | 54 --- .../UM3NetworkPrinting/OpenPanelButton.qml | 71 --- .../UM3NetworkPrinting/PrinterInfoBlock.qml | 431 ------------------ plugins/UM3NetworkPrinting/PrinterTile.qml | 54 --- 4 files changed, 610 deletions(-) delete mode 100644 plugins/UM3NetworkPrinting/MonitorItem.qml delete mode 100644 plugins/UM3NetworkPrinting/OpenPanelButton.qml delete mode 100644 plugins/UM3NetworkPrinting/PrinterInfoBlock.qml delete mode 100644 plugins/UM3NetworkPrinting/PrinterTile.qml diff --git a/plugins/UM3NetworkPrinting/MonitorItem.qml b/plugins/UM3NetworkPrinting/MonitorItem.qml deleted file mode 100644 index bbbc3feee6..0000000000 --- a/plugins/UM3NetworkPrinting/MonitorItem.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.2 - - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component -{ - Item - { - width: maximumWidth - height: maximumHeight - Image - { - id: cameraImage - width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth) - height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width) - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - z: 1 - Component.onCompleted: - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.start() - } - } - onVisibleChanged: - { - if(visible) - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.start() - } - } else - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.stop() - } - } - } - source: - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) - { - return OutputDevice.activePrinter.camera.latestImage; - } - return ""; - } - } - } -} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/OpenPanelButton.qml b/plugins/UM3NetworkPrinting/OpenPanelButton.qml deleted file mode 100644 index 4bc1728f76..0000000000 --- a/plugins/UM3NetworkPrinting/OpenPanelButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.1 as UM - -Button { - objectName: "openPanelSaveAreaButton" - id: openPanelSaveAreaButton - - UM.I18nCatalog { id: catalog; name: "cura"; } - - height: UM.Theme.getSize("save_button_save_to_button").height - tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.") - text: catalog.i18nc("@action:button", "View print jobs") - - // FIXME: This button style is copied and duplicated from SaveButton.qml - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - - -} diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml deleted file mode 100644 index 0217767a40..0000000000 --- a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +++ /dev/null @@ -1,431 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM - -Rectangle -{ - function strPadLeft(string, pad, length) - { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - return OutputDevice.formatDuration(time) - } - - function formatPrintJobPercent(printJob) - { - if (printJob == null) - { - return ""; - } - if (printJob.timeTotal === 0) - { - return ""; - } - return Math.min(100, Math.round(printJob.timeElapsed / printJob.timeTotal * 100)) + "%"; - } - - function printerStatusText(printer) - { - switch (printer.state) - { - case "pre_print": - return catalog.i18nc("@label:status", "Preparing to print") - case "printing": - return catalog.i18nc("@label:status", "Printing"); - case "idle": - return catalog.i18nc("@label:status", "Available"); - case "unreachable": - return catalog.i18nc("@label:status", "Lost connection with the printer"); - case "maintenance": - return catalog.i18nc("@label:status", "Unavailable"); - default: - return catalog.i18nc("@label:status", "Unknown"); - } - } - - id: printerDelegate - - property var printer: null - property var printJob: printer != null ? printer.activePrintJob: null - - border.width: UM.Theme.getSize("default_lining").width - border.color: mouse.containsMouse ? emphasisColor : lineColor - z: mouse.containsMouse ? 1 : 0 // Push this item up a bit on mouse over to ensure that the highlighted bottom border is visible. - - MouseArea - { - id: mouse - anchors.fill:parent - onClicked: OutputDevice.setActivePrinter(printer) - hoverEnabled: true; - - // Only clickable if no printer is selected - enabled: OutputDevice.activePrinter == null && printer.state !== "unreachable" - } - - Row - { - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: UM.Theme.getSize("default_margin").width - - Rectangle - { - width: Math.round(parent.width / 3) - height: parent.height - - Label // Print job name - { - id: jobNameLabel - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - text: printJob != null ? printJob.name : "" - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - - } - - Label - { - id: jobOwnerLabel - anchors.top: jobNameLabel.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? printJob.owner : "" - opacity: 0.50 - elide: Text.ElideRight - } - - Label - { - id: totalTimeLabel - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? getPrettyTime(printJob.timeTotal) : "" - opacity: 0.65 - font: UM.Theme.getFont("default") - elide: Text.ElideRight - } - } - - Rectangle - { - width: Math.round(parent.width / 3 * 2) - height: parent.height - - Label // Friendly machine name - { - id: printerNameLabel - anchors.top: parent.top - anchors.left: parent.left - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width) - text: printer.name - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - } - - Label // Machine variant - { - id: printerTypeLabel - anchors.top: printerNameLabel.bottom - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - text: printer.type - anchors.left: parent.left - elide: Text.ElideRight - font: UM.Theme.getFont("very_small") - opacity: 0.50 - } - - Rectangle // Camera icon - { - id: showCameraIcon - width: 40 * screenScaleFactor - height: width - radius: width - anchors.right: printProgressArea.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - color: emphasisColor - opacity: printer != null && printer.state === "unreachable" ? 0.3 : 1 - - Image - { - width: parent.width - height: width - anchors.right: parent.right - anchors.rightMargin: parent.rightMargin - source: "camera-icon.svg" - } - } - - Row // PrintCore config - { - id: extruderInfo - anchors.bottom: parent.bottom - - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - height: childrenRect.height - - spacing: UM.Theme.getSize("default_margin").width - - PrintCoreConfiguration - { - id: leftExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[0] - } - - Rectangle - { - id: extruderSeperator - width: UM.Theme.getSize("default_lining").width - height: parent.height - color: lineColor - } - - PrintCoreConfiguration - { - id: rightExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[1] - } - } - - Rectangle // Print progress - { - id: printProgressArea - anchors.right: parent.right - anchors.top: parent.top - height: showExtended ? parent.height: printProgressTitleBar.height - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - radius: cornerRadius - property var showExtended: { - if(printJob != null) - { - var extendStates = ["sent_to_printer", "wait_for_configuration", "printing", "pre_print", "post_print", "wait_cleanup", "queued"]; - return extendStates.indexOf(printJob.state) !== -1; - } - return printer.state == "disabled" - } - - Item // Status and Percent - { - id: printProgressTitleBar - - property var showPercent: { - return printJob != null && (["printing", "post_print", "pre_print", "sent_to_printer"].indexOf(printJob.state) !== -1); - } - - width: parent.width - //TODO: hardcoded value - height: 40 * screenScaleFactor - anchors.left: parent.left - - Label - { - id: statusText - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: progressText.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - text: { - if (printer.state == "disabled") - { - return catalog.i18nc("@label:status", "Disabled"); - } - - if (printer.state === "unreachable") - { - return printerStatusText(printer); - } - - if (printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label:status", "Printing") - case "wait_for_configuration": - return catalog.i18nc("@label:status", "Reserved") - case "wait_cleanup": - case "wait_user_action": - return catalog.i18nc("@label:status", "Finished") - case "pre_print": - case "sent_to_printer": - return catalog.i18nc("@label", "Preparing to print") - case "queued": - return catalog.i18nc("@label:status", "Action required"); - case "pausing": - case "paused": - return catalog.i18nc("@label:status", "Paused"); - case "resuming": - return catalog.i18nc("@label:status", "Resuming"); - case "aborted": - return catalog.i18nc("@label:status", "Print aborted"); - default: - // If print job has unknown status show printer.status - return printerStatusText(printer); - } - } - return printerStatusText(printer); - } - - elide: Text.ElideRight - font: UM.Theme.getFont("small") - } - - Label - { - id: progressText - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - text: formatPrintJobPercent(printJob) - visible: printProgressTitleBar.showPercent - //TODO: Hardcoded value - opacity: 0.65 - font: UM.Theme.getFont("very_small") - } - - Image - { - width: statusText.height - height: width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - visible: !printProgressTitleBar.showPercent - - source: { - if (printer.state == "disabled") - { - return "blocked-icon.svg"; - } - - if (printer.state === "unreachable") - { - return ""; - } - - if (printJob != null) - { - if(printJob.state === "queued") - { - return "action-required-icon.svg"; - } - else if (printJob.state === "wait_cleanup") - { - return "checkmark-icon.svg"; - } - } - return ""; // We're not going to show it, so it will not be resolved as a url. - } - } - - Rectangle - { - //TODO: This will become a progress bar in the future - width: parent.width - height: UM.Theme.getSize("default_lining").height - anchors.bottom: parent.bottom - anchors.left: parent.left - visible: printProgressArea.showExtended - color: lineColor - } - } - - Column - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - - anchors.top: printProgressTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - width: parent.width - 2 * UM.Theme.getSize("default_margin").width - - visible: printProgressArea.showExtended - - Label // Status detail - { - text: - { - if (printer.state == "disabled") - { - return catalog.i18nc("@label", "Not accepting print jobs"); - } - - if (printer.state === "unreachable") - { - return ""; - } - - if(printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label", "Finishes at: ") + OutputDevice.getTimeCompleted(printJob.timeTotal - printJob.timeElapsed) - case "wait_cleanup": - return catalog.i18nc("@label", "Clear build plate") - case "sent_to_printer": - case "pre_print": - return catalog.i18nc("@label", "Preparing to print") - case "wait_for_configuration": - return catalog.i18nc("@label", "Not accepting print jobs") - case "queued": - return catalog.i18nc("@label", "Waiting for configuration change"); - default: - return ""; - } - } - return ""; - } - anchors.left: parent.left - anchors.right: parent.right - elide: Text.ElideRight - wrapMode: Text.Wrap - - font: UM.Theme.getFont("default") - } - - Label // Status 2nd row - { - text: { - if(printJob != null) - { - if(printJob.state == "printing" || printJob.state == "post_print") - { - return OutputDevice.getDateCompleted(printJob.timeTotal - printJob.timeElapsed) - } - } - return ""; - } - - elide: Text.ElideRight - font: UM.Theme.getFont("default") - } - } - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/PrinterTile.qml b/plugins/UM3NetworkPrinting/PrinterTile.qml deleted file mode 100644 index 3d03e93688..0000000000 --- a/plugins/UM3NetworkPrinting/PrinterTile.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Rectangle -{ - id: base - width: 250 * screenScaleFactor - height: 250 * screenScaleFactor - signal clicked() - MouseArea - { - anchors.fill:parent - onClicked: base.clicked() - } - Rectangle - { - // TODO: Actually add UM icon / picture - width: 100 * screenScaleFactor - height: 100 * screenScaleFactor - border.width: UM.Theme.getSize("default_lining").width - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - Label - { - id: nameLabel - anchors.bottom: ipLabel.top - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: modelData.friendly_name.toString() - font: UM.Theme.getFont("large") - elide: Text.ElideMiddle; - height: UM.Theme.getSize("section").height; - } - Label - { - id: ipLabel - text: modelData.ip_address.toString() - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - font: UM.Theme.getFont("default") - height:10 * screenScaleFactor - anchors.horizontalCenter: parent.horizontalCenter - } -} - From a9f151670e57328cf0f2045ff377269998b41a34 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Fri, 7 Sep 2018 14:31:53 +0200 Subject: [PATCH 218/364] Remove unused components. They are no longer used. --- .../resources/qml/OpenPanelButton.qml | 71 --- .../resources/qml/PrinterInfoBlock.qml | 431 ------------------ .../resources/qml/PrinterTile.qml | 54 --- 3 files changed, 556 deletions(-) delete mode 100644 plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml delete mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml delete mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml diff --git a/plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml b/plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml deleted file mode 100644 index 4bc1728f76..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/OpenPanelButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.1 as UM - -Button { - objectName: "openPanelSaveAreaButton" - id: openPanelSaveAreaButton - - UM.I18nCatalog { id: catalog; name: "cura"; } - - height: UM.Theme.getSize("save_button_save_to_button").height - tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.") - text: catalog.i18nc("@action:button", "View print jobs") - - // FIXME: This button style is copied and duplicated from SaveButton.qml - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - - -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml deleted file mode 100644 index 832e65f18c..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml +++ /dev/null @@ -1,431 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM - -Rectangle -{ - function strPadLeft(string, pad, length) - { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - return OutputDevice.formatDuration(time) - } - - function formatPrintJobPercent(printJob) - { - if (printJob == null) - { - return ""; - } - if (printJob.timeTotal === 0) - { - return ""; - } - return Math.min(100, Math.round(printJob.timeElapsed / printJob.timeTotal * 100)) + "%"; - } - - function printerStatusText(printer) - { - switch (printer.state) - { - case "pre_print": - return catalog.i18nc("@label:status", "Preparing to print") - case "printing": - return catalog.i18nc("@label:status", "Printing"); - case "idle": - return catalog.i18nc("@label:status", "Available"); - case "unreachable": - return catalog.i18nc("@label:status", "Lost connection with the printer"); - case "maintenance": - return catalog.i18nc("@label:status", "Unavailable"); - default: - return catalog.i18nc("@label:status", "Unknown"); - } - } - - id: printerDelegate - - property var printer: null - property var printJob: printer != null ? printer.activePrintJob: null - - border.width: UM.Theme.getSize("default_lining").width - border.color: mouse.containsMouse ? emphasisColor : lineColor - z: mouse.containsMouse ? 1 : 0 // Push this item up a bit on mouse over to ensure that the highlighted bottom border is visible. - - MouseArea - { - id: mouse - anchors.fill:parent - onClicked: OutputDevice.setActivePrinter(printer) - hoverEnabled: true; - - // Only clickable if no printer is selected - enabled: OutputDevice.activePrinter == null && printer.state !== "unreachable" - } - - Row - { - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: UM.Theme.getSize("default_margin").width - - Rectangle - { - width: Math.round(parent.width / 3) - height: parent.height - - Label // Print job name - { - id: jobNameLabel - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - text: printJob != null ? printJob.name : "" - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - - } - - Label - { - id: jobOwnerLabel - anchors.top: jobNameLabel.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? printJob.owner : "" - opacity: 0.50 - elide: Text.ElideRight - } - - Label - { - id: totalTimeLabel - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? getPrettyTime(printJob.timeTotal) : "" - opacity: 0.65 - font: UM.Theme.getFont("default") - elide: Text.ElideRight - } - } - - Rectangle - { - width: Math.round(parent.width / 3 * 2) - height: parent.height - - Label // Friendly machine name - { - id: printerNameLabel - anchors.top: parent.top - anchors.left: parent.left - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width) - text: printer.name - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - } - - Label // Machine variant - { - id: printerTypeLabel - anchors.top: printerNameLabel.bottom - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - text: printer.type - anchors.left: parent.left - elide: Text.ElideRight - font: UM.Theme.getFont("very_small") - opacity: 0.50 - } - - Rectangle // Camera icon - { - id: showCameraIcon - width: 40 * screenScaleFactor - height: width - radius: width - anchors.right: printProgressArea.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - color: emphasisColor - opacity: printer != null && printer.state === "unreachable" ? 0.3 : 1 - - Image - { - width: parent.width - height: width - anchors.right: parent.right - anchors.rightMargin: parent.rightMargin - source: "../svg/camera-icon.svg" - } - } - - Row // PrintCore config - { - id: extruderInfo - anchors.bottom: parent.bottom - - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - height: childrenRect.height - - spacing: UM.Theme.getSize("default_margin").width - - PrintCoreConfiguration - { - id: leftExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[0] - } - - Rectangle - { - id: extruderSeperator - width: UM.Theme.getSize("default_lining").width - height: parent.height - color: lineColor - } - - PrintCoreConfiguration - { - id: rightExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[1] - } - } - - Rectangle // Print progress - { - id: printProgressArea - anchors.right: parent.right - anchors.top: parent.top - height: showExtended ? parent.height: printProgressTitleBar.height - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - radius: cornerRadius - property var showExtended: { - if(printJob != null) - { - var extendStates = ["sent_to_printer", "wait_for_configuration", "printing", "pre_print", "post_print", "wait_cleanup", "queued"]; - return extendStates.indexOf(printJob.state) !== -1; - } - return printer.state == "disabled" - } - - Item // Status and Percent - { - id: printProgressTitleBar - - property var showPercent: { - return printJob != null && (["printing", "post_print", "pre_print", "sent_to_printer"].indexOf(printJob.state) !== -1); - } - - width: parent.width - //TODO: hardcoded value - height: 40 * screenScaleFactor - anchors.left: parent.left - - Label - { - id: statusText - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: progressText.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - text: { - if (printer.state == "disabled") - { - return catalog.i18nc("@label:status", "Disabled"); - } - - if (printer.state === "unreachable") - { - return printerStatusText(printer); - } - - if (printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label:status", "Printing") - case "wait_for_configuration": - return catalog.i18nc("@label:status", "Reserved") - case "wait_cleanup": - case "wait_user_action": - return catalog.i18nc("@label:status", "Finished") - case "pre_print": - case "sent_to_printer": - return catalog.i18nc("@label", "Preparing to print") - case "queued": - return catalog.i18nc("@label:status", "Action required"); - case "pausing": - case "paused": - return catalog.i18nc("@label:status", "Paused"); - case "resuming": - return catalog.i18nc("@label:status", "Resuming"); - case "aborted": - return catalog.i18nc("@label:status", "Print aborted"); - default: - // If print job has unknown status show printer.status - return printerStatusText(printer); - } - } - return printerStatusText(printer); - } - - elide: Text.ElideRight - font: UM.Theme.getFont("small") - } - - Label - { - id: progressText - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - text: formatPrintJobPercent(printJob) - visible: printProgressTitleBar.showPercent - //TODO: Hardcoded value - opacity: 0.65 - font: UM.Theme.getFont("very_small") - } - - Image - { - width: statusText.height - height: width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - visible: !printProgressTitleBar.showPercent - - source: { - if (printer.state == "disabled") - { - return "../svg/blocked-icon.svg"; - } - - if (printer.state === "unreachable") - { - return ""; - } - - if (printJob != null) - { - if(printJob.state === "queued") - { - return "../svg/action-required-icon.svg"; - } - else if (printJob.state === "wait_cleanup") - { - return "../svg/checkmark-icon.svg"; - } - } - return ""; // We're not going to show it, so it will not be resolved as a url. - } - } - - Rectangle - { - //TODO: This will become a progress bar in the future - width: parent.width - height: UM.Theme.getSize("default_lining").height - anchors.bottom: parent.bottom - anchors.left: parent.left - visible: printProgressArea.showExtended - color: lineColor - } - } - - Column - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - - anchors.top: printProgressTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - width: parent.width - 2 * UM.Theme.getSize("default_margin").width - - visible: printProgressArea.showExtended - - Label // Status detail - { - text: - { - if (printer.state == "disabled") - { - return catalog.i18nc("@label", "Not accepting print jobs"); - } - - if (printer.state === "unreachable") - { - return ""; - } - - if(printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label", "Finishes at: ") + OutputDevice.getTimeCompleted(printJob.timeTotal - printJob.timeElapsed) - case "wait_cleanup": - return catalog.i18nc("@label", "Clear build plate") - case "sent_to_printer": - case "pre_print": - return catalog.i18nc("@label", "Preparing to print") - case "wait_for_configuration": - return catalog.i18nc("@label", "Not accepting print jobs") - case "queued": - return catalog.i18nc("@label", "Waiting for configuration change"); - default: - return ""; - } - } - return ""; - } - anchors.left: parent.left - anchors.right: parent.right - elide: Text.ElideRight - wrapMode: Text.Wrap - - font: UM.Theme.getFont("default") - } - - Label // Status 2nd row - { - text: { - if(printJob != null) - { - if(printJob.state == "printing" || printJob.state == "post_print") - { - return OutputDevice.getDateCompleted(printJob.timeTotal - printJob.timeElapsed) - } - } - return ""; - } - - elide: Text.ElideRight - font: UM.Theme.getFont("default") - } - } - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml deleted file mode 100644 index 3d03e93688..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterTile.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Rectangle -{ - id: base - width: 250 * screenScaleFactor - height: 250 * screenScaleFactor - signal clicked() - MouseArea - { - anchors.fill:parent - onClicked: base.clicked() - } - Rectangle - { - // TODO: Actually add UM icon / picture - width: 100 * screenScaleFactor - height: 100 * screenScaleFactor - border.width: UM.Theme.getSize("default_lining").width - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - Label - { - id: nameLabel - anchors.bottom: ipLabel.top - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: modelData.friendly_name.toString() - font: UM.Theme.getFont("large") - elide: Text.ElideMiddle; - height: UM.Theme.getSize("section").height; - } - Label - { - id: ipLabel - text: modelData.ip_address.toString() - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - font: UM.Theme.getFont("default") - height:10 * screenScaleFactor - anchors.horizontalCenter: parent.horizontalCenter - } -} - From 4cde6c05ae1f5e948075956f224c902b0fa409fb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 15:23:09 +0200 Subject: [PATCH 219/364] Switch most usages of containerStackId to containerStack for settingPropertyProvider This mostly makes the code a bit more logic and also decreases the number of searches in the registry --- .../MachineSettingsAction.qml | 14 ++++++++------ .../PerObjectSettingsPanel.qml | 7 +++---- .../PostProcessingPlugin/PostProcessingPlugin.qml | 2 +- resources/qml/Cura.qml | 4 ++-- resources/qml/Menus/ContextMenu.qml | 2 +- resources/qml/MonitorSidebar.qml | 4 ++-- resources/qml/PrepareSidebar.qml | 4 ++-- resources/qml/PrintMonitor.qml | 6 +++--- resources/qml/PrinterOutput/ExtruderBox.qml | 2 +- resources/qml/Settings/SettingItem.qml | 2 +- resources/qml/SidebarHeader.qml | 2 +- resources/qml/SidebarSimple.qml | 9 ++++----- 12 files changed, 29 insertions(+), 29 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index b12f8f8696..8c2262b5b7 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -16,6 +16,8 @@ Cura.MachineAction property var extrudersModel: Cura.ExtrudersModel{} property int extruderTabsCount: 0 + property var activeMachineId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.id : "" + Connections { target: base.extrudersModel @@ -511,7 +513,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -564,7 +566,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -655,7 +657,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "options", "description" ] @@ -754,7 +756,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -879,7 +881,7 @@ Cura.MachineAction { id: machineExtruderCountProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStackId: base.activeMachineId key: "machine_extruder_count" watchedProperties: [ "value", "description" ] storeIndex: manager.containerIndex @@ -889,7 +891,7 @@ Cura.MachineAction { id: machineHeadPolygonProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStackId: base.acthiveMachineId key: "machine_head_with_fans_polygon" watchedProperties: [ "value" ] storeIndex: manager.containerIndex diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index a2790dcf08..596fbd2e99 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -17,7 +17,6 @@ Item { width: childrenRect.width; height: childrenRect.height; - property var all_categories_except_support: [ "machine_settings", "resolution", "shell", "infill", "material", "speed", "travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"] @@ -45,7 +44,7 @@ Item { UM.SettingPropertyProvider { id: meshTypePropertyProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine watchedProperties: [ "enabled" ] } @@ -518,7 +517,7 @@ Item { { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -528,7 +527,7 @@ Item { { id: printSequencePropertyProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "print_sequence" watchedProperties: [ "value" ] storeIndex: 0 diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml index b8d7258ef2..e91fc73cf4 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml @@ -384,7 +384,7 @@ UM.Dialog UM.SettingPropertyProvider { id: inheritStackProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: model.key ? model.key : "None" watchedProperties: [ "limit_to_extruder" ] } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index c22fea38b4..b9febdeb32 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -306,7 +306,7 @@ UM.MainWindow { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -1054,7 +1054,7 @@ UM.MainWindow { restart(); } - else if(Cura.MachineManager.activeMachineId == null || Cura.MachineManager.activeMachineId == "") + else if(Cura.MachineManager.activeMachine == null) { addMachineDialog.open(); } diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index e35aef5f20..1ea402d815 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -103,7 +103,7 @@ Menu { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] } diff --git a/resources/qml/MonitorSidebar.qml b/resources/qml/MonitorSidebar.qml index b761b05380..80bd5c1a2e 100644 --- a/resources/qml/MonitorSidebar.qml +++ b/resources/qml/MonitorSidebar.qml @@ -181,7 +181,7 @@ Rectangle { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -191,7 +191,7 @@ Rectangle { id: machineHeatedBed - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_heated_bed" watchedProperties: [ "value" ] storeIndex: 0 diff --git a/resources/qml/PrepareSidebar.qml b/resources/qml/PrepareSidebar.qml index 703cbb8844..78b6a22ef9 100644 --- a/resources/qml/PrepareSidebar.qml +++ b/resources/qml/PrepareSidebar.qml @@ -595,7 +595,7 @@ Rectangle { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -605,7 +605,7 @@ Rectangle { id: machineHeatedBed - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_heated_bed" watchedProperties: [ "value" ] storeIndex: 0 diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 7727f9cb52..3bfcea7025 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -78,18 +78,18 @@ Column UM.SettingPropertyProvider { id: bedTemperature - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "material_bed_temperature" watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] storeIndex: 0 - property var resolve: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId ? properties.resolve : "None" + property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" } UM.SettingPropertyProvider { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: ["value"] } diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml index 56c86f1034..f0abd4cd6c 100644 --- a/resources/qml/PrinterOutput/ExtruderBox.qml +++ b/resources/qml/PrinterOutput/ExtruderBox.qml @@ -23,7 +23,7 @@ Item watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] storeIndex: 0 - property var resolve: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId ? properties.resolve : "None" + property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" } Rectangle diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 48b3cd306d..34bf9df921 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -139,7 +139,7 @@ Item { { id: linkedSettingIcon; - visible: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon + visible: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon height: parent.height; width: height; diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 6ee33dd2f2..02bcfde29a 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -607,7 +607,7 @@ Column { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 4b229d9807..e962d7fc8f 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -20,7 +20,6 @@ Item property variant minimumPrintTime: PrintInformation.minimumPrintTime; property variant maximumPrintTime: PrintInformation.maximumPrintTime; property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 - Component.onCompleted: PrintInformation.enabled = true Component.onDestruction: PrintInformation.enabled = false UM.I18nCatalog { id: catalog; name: "cura" } @@ -1116,7 +1115,7 @@ Item UM.SettingPropertyProvider { id: platformAdhesionType - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "adhesion_type" watchedProperties: [ "value", "enabled" ] storeIndex: 0 @@ -1125,7 +1124,7 @@ Item UM.SettingPropertyProvider { id: supportEnabled - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "support_enable" watchedProperties: [ "value", "enabled", "description" ] storeIndex: 0 @@ -1134,7 +1133,7 @@ Item UM.SettingPropertyProvider { id: extrudersEnabledCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "extruders_enabled_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -1143,7 +1142,7 @@ Item UM.SettingPropertyProvider { id: supportExtruderNr - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "support_extruder_nr" watchedProperties: [ "value" ] storeIndex: 0 From 20ec8828ed826b843d18a83f607b14034b1d5635 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 15:32:07 +0200 Subject: [PATCH 220/364] Fix incorrect type hinting The type hinting indicated that the property was a dict, but it could also be None. In cases where it was None, it would cause an exception, which was also fixed (since unpacking None will break) --- cura/Settings/MachineManager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d65bbfddd9..a1d824a5da 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -385,7 +385,9 @@ class MachineManager(QObject): # \param definition_id \type{str} definition id that needs to look for # \param metadata_filter \type{dict} list of metadata keys and values used for filtering @staticmethod - def getMachine(definition_id: str, metadata_filter: Dict[str, str] = None) -> Optional["GlobalStack"]: + def getMachine(definition_id: str, metadata_filter: Optional[Dict[str, str]] = None) -> Optional["GlobalStack"]: + if metadata_filter is None: + metadata_filter = {} machines = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) for machine in machines: if machine.definition.getId() == definition_id: From c8eeb737bb403b463604dbc5b37075848c26ea82 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 7 Sep 2018 15:45:31 +0200 Subject: [PATCH 221/364] Automatically stop simulation when the user manually changes the layer (as opposed to the sim. itself). [CURA-5677] --- plugins/SimulationView/SimulationView.qml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index be767e93ab..6de5134fc7 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -666,9 +666,21 @@ Item Connections { target: UM.SimulationView - onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) - onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - onCurrentLayerChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) + onMaxLayersChanged: + { + playButton.pauseSimulation() + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } + onMinimumLayerChanged: + { + playButton.pauseSimulation() + layerSlider.setLowerValue(UM.SimulationView.minimumLayer) + } + onCurrentLayerChanged: + { + playButton.pauseSimulation() + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } } // make sure the slider handlers show the correct value after switching views @@ -723,6 +735,7 @@ Item UM.SimulationView.setSimulationRunning(true) iconSource = "./resources/simulation_pause.svg" simulationTimer.start() + status = 1 } } @@ -766,6 +779,7 @@ Item { UM.SimulationView.setCurrentLayer(currentLayer+1) UM.SimulationView.setCurrentPath(0) + playButton.resumeSimulation() } } else From 638f9fb94158145c60556e51c35003f253973270 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 16:02:54 +0200 Subject: [PATCH 222/364] Remove unused functions --- cura/Settings/ExtruderManager.py | 27 +-------------------------- cura/Settings/UserChangesModel.py | 4 +++- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index e046082b5f..a7cb15d806 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -91,16 +91,6 @@ class ExtruderManager(QObject): return extruder_stack_ids - @pyqtSlot(str, result = str) - def getQualityChangesIdByExtruderStackId(self, extruder_stack_id: str) -> str: - global_container_stack = self._application.getGlobalContainerStack() - if global_container_stack is not None: - for position in self._extruder_trains[global_container_stack.getId()]: - extruder = self._extruder_trains[global_container_stack.getId()][position] - if extruder.getId() == extruder_stack_id: - return extruder.qualityChanges.getId() - return "" - ## Changes the active extruder by index. # # \param index The index of the new active extruder. @@ -214,9 +204,6 @@ class ExtruderManager(QObject): if changed: self.extrudersChanged.emit(machine_id) - def getAllExtruderValues(self, setting_key): - return self.getAllExtruderSettings(setting_key, "value") - ## Gets a property of a setting for all extruders. # # \param setting_key \type{str} The setting to get the property of. @@ -336,19 +323,6 @@ class ExtruderManager(QObject): return [] return [self._extruder_trains[machine_id][name] for name in self._extruder_trains[machine_id]] - ## Returns a list containing the global stack and active extruder stacks. - # - # The first element is the global container stack, followed by any extruder stacks. - # \return \type{List[ContainerStack]} - def getActiveGlobalAndExtruderStacks(self) -> Optional[List[Union["ExtruderStack", "GlobalStack"]]]: - global_stack = self._application.getGlobalContainerStack() - if not global_stack: - return None - - result = [global_stack] - result.extend(self.getActiveExtruderStacks()) - return result - ## Returns the list of active extruder stacks, taking into account the machine extruder count. # # \return \type{List[ContainerStack]} a list of @@ -358,6 +332,7 @@ class ExtruderManager(QObject): return [] result = [] + if global_stack.getId() in self._extruder_trains: for extruder in sorted(self._extruder_trains[global_stack.getId()]): result.append(self._extruder_trains[global_stack.getId()][extruder]) diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py index 93274d61c9..95674e5ecd 100644 --- a/cura/Settings/UserChangesModel.py +++ b/cura/Settings/UserChangesModel.py @@ -43,7 +43,9 @@ class UserChangesModel(ListModel): global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack: return - stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() + + stacks = [global_stack] + stacks.extend(global_stack.extruders.values()) # Check if the definition container has a translation file and ensure it's loaded. definition = global_stack.getBottom() From a8fc6aabcc6d59712e8c6b1b05ddcef73191ba28 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 16:27:56 +0200 Subject: [PATCH 223/364] Switch incorrect usage of getMachineExtruders to getActiveExtruderStacks --- cura/BuildVolume.py | 4 +-- cura/Scene/ConvexHullDecorator.py | 4 +-- cura/Settings/ExtruderManager.py | 30 +++++++------------ cura/Settings/ExtrudersModel.py | 2 +- cura/Settings/MachineManager.py | 10 +++---- .../CuraEngineBackend/CuraEngineBackend.py | 2 +- .../ProcessSlicedLayersJob.py | 2 +- plugins/CuraEngineBackend/StartSliceJob.py | 2 +- 8 files changed, 24 insertions(+), 32 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index b029665abd..10ae8bb87a 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -528,7 +528,7 @@ class BuildVolume(SceneNode): def _onStackChanged(self): if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.disconnect(self._onSettingPropertyChanged) @@ -536,7 +536,7 @@ class BuildVolume(SceneNode): if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingPropertyChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.connect(self._onSettingPropertyChanged) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 367144abfc..ea54d64642 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -304,7 +304,7 @@ class ConvexHullDecorator(SceneNodeDecorator): if self._global_stack: self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged) self._global_stack.containersChanged.disconnect(self._onChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.disconnect(self._onSettingValueChanged) @@ -314,7 +314,7 @@ class ConvexHullDecorator(SceneNodeDecorator): self._global_stack.propertyChanged.connect(self._onSettingValueChanged) self._global_stack.containersChanged.connect(self._onChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.connect(self._onSettingValueChanged) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index a7cb15d806..65a7764508 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -12,11 +12,10 @@ 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.SettingFunction import SettingFunction -from UM.Settings.SettingInstance import SettingInstance from UM.Settings.ContainerStack import ContainerStack from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, List, TYPE_CHECKING, Union, Dict +from typing import Optional, List, TYPE_CHECKING, Dict, List if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack @@ -38,9 +37,10 @@ class ExtruderManager(QObject): self._application = cura.CuraApplication.CuraApplication.getInstance() - self._extruder_trains = {} # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. + # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. + self._extruder_trains = {} # type: Dict[str, List[ExtruderStack]] self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack - self._selected_object_extruders = [] + self._selected_object_extruders = [] # type: List[ExtruderStack] self._addCurrentMachineExtruders() Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) @@ -68,7 +68,7 @@ class ExtruderManager(QObject): ## Return extruder count according to extruder trains. @pyqtProperty(int, notify = extrudersChanged) - def extruderCount(self): + def extruderCount(self) -> int: if not self._application.getGlobalContainerStack(): return 0 # No active machine, so no extruders. try: @@ -83,11 +83,7 @@ class ExtruderManager(QObject): global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: - global_stack_id = global_container_stack.getId() - - if global_stack_id in self._extruder_trains: - for position in self._extruder_trains[global_stack_id]: - extruder_stack_ids[position] = self._extruder_trains[global_stack_id][position].getId() + extruder_stack_ids = {position: extruder.id for position, extruder in global_container_stack.extruders.items()} return extruder_stack_ids @@ -109,7 +105,7 @@ class ExtruderManager(QObject): @pyqtSlot(int, result = str) def getExtruderName(self, index): try: - return list(self.getActiveExtruderStacks())[index].getName() + return self.getActiveExtruderStacks()[index].getName() except IndexError: return "" @@ -318,7 +314,7 @@ class ExtruderManager(QObject): ## Returns extruders for a specific machine. # # \param machine_id The machine to get the extruders of. - def getMachineExtruders(self, machine_id: str): + def getMachineExtruders(self, machine_id: str) -> List["ExtruderStack"]: if machine_id not in self._extruder_trains: return [] return [self._extruder_trains[machine_id][name] for name in self._extruder_trains[machine_id]] @@ -331,11 +327,7 @@ class ExtruderManager(QObject): if not global_stack: return [] - result = [] - - if global_stack.getId() in self._extruder_trains: - for extruder in sorted(self._extruder_trains[global_stack.getId()]): - result.append(self._extruder_trains[global_stack.getId()][extruder]) + result = list(global_stack.extruders.values()) machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") @@ -404,7 +396,7 @@ class ExtruderManager(QObject): global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() result = [] - for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + for extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): if not extruder.isEnabled: continue # only include values from extruders that are "active" for the current machine instance @@ -446,7 +438,7 @@ class ExtruderManager(QObject): } result = [] - for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + for extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): # only include values from extruders that are "active" for the current machine instance if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context): continue diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index f179dabd5a..37cb68af32 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -171,7 +171,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # get machine extruder count for verification machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") - for extruder in Application.getInstance().getExtruderManager().getMachineExtruders(global_container_stack.getId()): + for extruder in Application.getInstance().getExtruderManager().getActiveExtruderStacks(): position = extruder.getMetaDataEntry("position", default = "0") # Get the position try: position = int(position) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a1d824a5da..ed543fcee1 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -414,7 +414,7 @@ class MachineManager(QObject): # Not a very pretty solution, but the extruder manager doesn't really know how many extruders there are machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") - extruder_stacks = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() count = 1 # we start with the global stack for stack in extruder_stacks: md = stack.getMetaData() @@ -437,7 +437,7 @@ class MachineManager(QObject): if self._global_container_stack.getTop().findInstances(): return True - stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: if stack.getTop().findInstances(): return True @@ -450,7 +450,7 @@ class MachineManager(QObject): return 0 num_user_settings = 0 num_user_settings += len(self._global_container_stack.getTop().findInstances()) - stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: num_user_settings += len(stack.getTop().findInstances()) return num_user_settings @@ -475,7 +475,7 @@ class MachineManager(QObject): stack = ExtruderManager.getInstance().getActiveExtruderStack() stacks = [stack] else: - stacks = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: if stack is not None: @@ -640,7 +640,7 @@ class MachineManager(QObject): if self._active_container_stack is None or self._global_container_stack is None: return new_value = self._active_container_stack.getProperty(key, "value") - extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + extruder_stacks = [stack for stack in ExtruderManager.getInstance().getActiveExtruderStacks()] # check in which stack the value has to be replaced for extruder_stack in extruder_stacks: diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 9a5c95b04d..91a9ee0e7b 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -343,7 +343,7 @@ class CuraEngineBackend(QObject, Backend): if not self._global_container_stack: Logger.log("w", "Global container stack not assigned to CuraEngineBackend!") return - extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() error_keys = [] #type: List[str] for extruder in extruders: error_keys.extend(extruder.getErrorKeys()) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 3bd6d79198..3953625c7e 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -178,7 +178,7 @@ class ProcessSlicedLayersJob(Job): # Find out colors per extruder global_container_stack = Application.getInstance().getGlobalContainerStack() manager = ExtruderManager.getInstance() - extruders = list(manager.getMachineExtruders(global_container_stack.getId())) + extruders = manager.getActiveExtruderStacks() if extruders: material_color_map = numpy.zeros((len(extruders), 4), dtype=numpy.float32) for extruder in extruders: diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 1295390c22..28e442033b 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -333,7 +333,7 @@ class StartSliceJob(Job): "-1": self._buildReplacementTokens(global_stack) } - for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): extruder_nr = extruder_stack.getProperty("extruder_nr", "value") self._all_extruders_settings[str(extruder_nr)] = self._buildReplacementTokens(extruder_stack) From e6d0a9cc6a2ec30c15cb56d2e6890a44f12b051e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 16:33:44 +0200 Subject: [PATCH 224/364] Add missing typing --- cura/Settings/ExtruderManager.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 65a7764508..680461ccac 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -4,7 +4,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt. from UM.FlameProfiler import pyqtSlot -import cura.CuraApplication #To get the global container stack to find the current machine. +import cura.CuraApplication # To get the global container stack to find the current machine. from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode @@ -15,7 +15,7 @@ from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, List, TYPE_CHECKING, Dict, List +from typing import Optional, TYPE_CHECKING, Dict, List, Any if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack @@ -103,7 +103,7 @@ class ExtruderManager(QObject): # # \param index The index of the extruder whose name to get. @pyqtSlot(int, result = str) - def getExtruderName(self, index): + def getExtruderName(self, index: int) -> str: try: return self.getActiveExtruderStacks()[index].getName() except IndexError: @@ -181,7 +181,7 @@ class ExtruderManager(QObject): result.append(stack) return result - def registerExtruder(self, extruder_train, machine_id): + def registerExtruder(self, extruder_train: "ExtruderStack", machine_id: str) -> None: changed = False if machine_id not in self._extruder_trains: @@ -205,7 +205,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): + def getAllExtruderSettings(self, setting_key: str, prop: str) -> List: result = [] for index in self.extruderIds: extruder_stack_id = self.extruderIds[str(index)] @@ -304,7 +304,7 @@ class ExtruderManager(QObject): ## Removes the container stack and user profile for the extruders for a specific machine. # # \param machine_id The machine to remove the extruders for. - def removeMachineExtruders(self, machine_id: str): + def removeMachineExtruders(self, machine_id: str) -> None: for extruder in self.getMachineExtruders(machine_id): ContainerRegistry.getInstance().removeContainer(extruder.userChanges.getId()) ContainerRegistry.getInstance().removeContainer(extruder.getId()) @@ -373,7 +373,7 @@ class ExtruderManager(QObject): # 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): + def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None: expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"] extruder_stack_0 = global_stack.extruders["0"] if extruder_stack_0.definition.getId() != expected_extruder_definition_0_id: @@ -392,7 +392,7 @@ class ExtruderManager(QObject): # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. # If no extruder has the value, the list will contain the global value. @staticmethod - def getExtruderValues(key): + def getExtruderValues(key) -> List: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() result = [] @@ -427,7 +427,7 @@ class ExtruderManager(QObject): # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. # If no extruder has the value, the list will contain the global value. @staticmethod - def getDefaultExtruderValues(key): + def getDefaultExtruderValues(key) -> List: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() context = PropertyEvaluationContext(global_stack) context.context["evaluate_from_container_index"] = 1 # skip the user settings container @@ -471,7 +471,7 @@ class ExtruderManager(QObject): # # \return String representing the extruder values @pyqtSlot(str, result="QVariant") - def getInstanceExtruderValues(self, key): + def getInstanceExtruderValues(self, key) -> List: return ExtruderManager.getExtruderValues(key) ## Get the value for a setting from a specific extruder. @@ -484,7 +484,7 @@ class ExtruderManager(QObject): # \return The value of the setting for the specified extruder or for the # global stack if not found. @staticmethod - def getExtruderValue(extruder_index, key): + def getExtruderValue(extruder_index: int, key: str) -> Any: if extruder_index == -1: extruder_index = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition) extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index) @@ -509,7 +509,7 @@ class ExtruderManager(QObject): # \return The value of the setting for the specified extruder or for the # global stack if not found. @staticmethod - def getDefaultExtruderValue(extruder_index, key): + def getDefaultExtruderValue(extruder_index: int, key: str) -> Any: extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index) context = PropertyEvaluationContext(extruder) context.context["evaluate_from_container_index"] = 1 # skip the user settings container @@ -536,7 +536,7 @@ class ExtruderManager(QObject): # # \return The effective value @staticmethod - def getResolveOrValue(key): + def getResolveOrValue(key: str) -> Any: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() resolved_value = global_stack.getProperty(key, "value") @@ -550,7 +550,7 @@ class ExtruderManager(QObject): # # \return The effective value @staticmethod - def getDefaultResolveOrValue(key): + def getDefaultResolveOrValue(key: str) -> Any: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() context = PropertyEvaluationContext(global_stack) context.context["evaluate_from_container_index"] = 1 # skip the user settings container From 5c6c299b27747e9ff0b17bfed546c210eacf4926 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 7 Sep 2018 17:06:18 +0200 Subject: [PATCH 225/364] Cleanup extruder manager Few more unused functions removed & simplified. It also fixes a few more typing issues that I encountered. --- cura/Settings/ExtruderManager.py | 40 +++++++++-------------------- cura/Settings/ExtrudersModel.py | 2 +- plugins/GCodeReader/FlavorParser.py | 2 +- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 680461ccac..1003ab5c86 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -20,6 +20,7 @@ from typing import Optional, TYPE_CHECKING, Dict, List, Any if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack + from UM.Scene.SceneNode import SceneNode ## Manages all existing extruder stacks. @@ -38,7 +39,7 @@ class ExtruderManager(QObject): self._application = cura.CuraApplication.CuraApplication.getInstance() # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. - self._extruder_trains = {} # type: Dict[str, List[ExtruderStack]] + self._extruder_trains = {} # type: Dict[str, Dict[str, ExtruderStack]] self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack self._selected_object_extruders = [] # type: List[ExtruderStack] self._addCurrentMachineExtruders() @@ -119,7 +120,7 @@ class ExtruderManager(QObject): object_extruders = set() # First, build a list of the actual selected objects (including children of groups, excluding group nodes) - selected_nodes = [] + 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. @@ -131,14 +132,13 @@ class ExtruderManager(QObject): selected_nodes.append(node) # Then, figure out which nodes are used by those selected nodes. - global_stack = self._application.getGlobalContainerStack() - current_extruder_trains = self._extruder_trains.get(global_stack.getId()) + current_extruder_trains = self.getActiveExtruderStacks() for node in selected_nodes: extruder = node.callDecoration("getActiveExtruder") if extruder: object_extruders.add(extruder) elif current_extruder_trains: - object_extruders.add(current_extruder_trains["0"].getId()) + object_extruders.add(current_extruder_trains[0].getId()) self._selected_object_extruders = list(object_extruders) @@ -154,14 +154,7 @@ class ExtruderManager(QObject): @pyqtSlot(result = QObject) def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: - global_container_stack = self._application.getGlobalContainerStack() - - if global_container_stack: - if global_container_stack.getId() in self._extruder_trains: - if str(self._active_extruder_index) in self._extruder_trains[global_container_stack.getId()]: - return self._extruder_trains[global_container_stack.getId()][str(self._active_extruder_index)] - - return None + return self.getExtruderStack(self._active_extruder_index) ## Get an extruder stack by index def getExtruderStack(self, index) -> Optional["ExtruderStack"]: @@ -172,15 +165,6 @@ class ExtruderManager(QObject): return self._extruder_trains[global_container_stack.getId()][str(index)] return None - ## Get all extruder stacks - def getExtruderStacks(self) -> List["ExtruderStack"]: - result = [] - for i in range(self.extruderCount): - stack = self.getExtruderStack(i) - if stack: - result.append(stack) - return result - def registerExtruder(self, extruder_train: "ExtruderStack", machine_id: str) -> None: changed = False @@ -207,13 +191,13 @@ class ExtruderManager(QObject): # \return \type{List} the list of results def getAllExtruderSettings(self, setting_key: str, prop: str) -> List: result = [] - for index in self.extruderIds: - extruder_stack_id = self.extruderIds[str(index)] - extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] + + for extruder_stack in self.getActiveExtruderStacks(): result.append(extruder_stack.getProperty(setting_key, prop)) + return result - def extruderValueWithDefault(self, value): + def extruderValueWithDefault(self, value: str) -> str: machine_manager = self._application.getMachineManager() if value == "-1": return machine_manager.defaultExtruderPosition @@ -392,7 +376,7 @@ class ExtruderManager(QObject): # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. # If no extruder has the value, the list will contain the global value. @staticmethod - def getExtruderValues(key) -> List: + def getExtruderValues(key: str) -> List[Any]: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() result = [] @@ -427,7 +411,7 @@ class ExtruderManager(QObject): # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. # If no extruder has the value, the list will contain the global value. @staticmethod - def getDefaultExtruderValues(key) -> List: + def getDefaultExtruderValues(key: str) -> List[Any]: global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() context = PropertyEvaluationContext(global_stack) context.context["evaluate_from_container_index"] = 1 # skip the user settings container diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 37cb68af32..52fc502bfc 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -134,7 +134,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # Link to new extruders self._active_machine_extruders = [] extruder_manager = Application.getInstance().getExtruderManager() - for extruder in extruder_manager.getExtruderStacks(): + for extruder in extruder_manager.getActiveExtruderStacks(): if extruder is None: #This extruder wasn't loaded yet. This happens asynchronously while this model is constructed from QML. continue extruder.containersChanged.connect(self._onExtruderStackContainersChanged) diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 10f841fc43..eb19853748 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -275,7 +275,7 @@ class FlavorParser: ## For showing correct x, y offsets for each extruder def _extruderOffsets(self) -> Dict[int, List[float]]: result = {} - for extruder in ExtruderManager.getInstance().getExtruderStacks(): + for extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): result[int(extruder.getMetaData().get("position", "0"))] = [ extruder.getProperty("machine_nozzle_offset_x", "value"), extruder.getProperty("machine_nozzle_offset_y", "value")] From 2bc1e4b397aaf688232f0863119a9867b59eec56 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 10 Sep 2018 09:27:59 +0200 Subject: [PATCH 226/364] Fix bug where disovery window does not appear --- plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index ece23507e5..be83e04585 100644 --- a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -24,7 +24,7 @@ class DiscoverUM3Action(MachineAction): def __init__(self) -> None: super().__init__("DiscoverUM3Action", catalog.i18nc("@action","Connect via Network")) - self._qml_url = "../resources/qml/DiscoverUM3Action.qml" + self._qml_url = "resources/qml/DiscoverUM3Action.qml" self._network_plugin = None #type: Optional[UM3OutputDevicePlugin] From 67bc45e37d2119252b7f8be5eaea210df65678db Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Sep 2018 09:40:53 +0200 Subject: [PATCH 227/364] Added 3MF writer as required plugin --- cura/CuraApplication.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index dbc675a279..7e5e98adef 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -429,6 +429,7 @@ class CuraApplication(QtApplication): # Readers & Writers: "GCodeWriter", "STLReader", + "3MFWriter", # Tools: "CameraTool", From 5139e6147533c211d710d86bd98f251bb77420e7 Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Sun, 9 Sep 2018 11:43:47 +0200 Subject: [PATCH 228/364] Found the dead line while reading some code --- plugins/Toolbox/src/PackagesModel.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index 7892044d00..ae4cd7682d 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -76,7 +76,6 @@ class PackagesModel(ListModel): if "author_id" not in package["author"] or "display_name" not in package["author"]: package["author"]["author_id"] = "" package["author"]["display_name"] = "" - # raise Exception("Detected a package with malformed author data.") items.append({ "id": package["package_id"], From d01ec7872d66dc865f5991885131f25659f8ce13 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 10 Sep 2018 12:13:35 +0200 Subject: [PATCH 229/364] Fix quality lookup CURA-5694 For a machine, if it has extruder-specific qualities, when we look up extruder qualities, we should NOT fall back to use the global qualities. --- cura/Machines/QualityManager.py | 31 ++++++++++++++++++++----------- cura/Settings/GlobalStack.py | 3 +++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index 580d52b089..4ae58a71b2 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -200,14 +200,19 @@ class QualityManager(QObject): 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_variants = machine.getHasVariants() - has_materials = machine.getHasMaterials() - has_variants_or_materials = has_variants or has_materials + 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 = [machine_node, default_machine_node] @@ -215,12 +220,10 @@ class QualityManager(QObject): quality_group_dict = {} for node in nodes_to_check: if node and node.quality_type_map: - # Only include global qualities - if has_variants_or_materials: - quality_node = list(node.quality_type_map.values())[0] - is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) - if not is_global_quality: - continue + quality_node = list(node.quality_type_map.values())[0] + is_global_quality = parseBool(quality_node.metadata.get("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.metadata["name"], quality_type) @@ -302,9 +305,9 @@ class QualityManager(QObject): else: nodes_to_check += [default_machine_node] - for node in nodes_to_check: + for node_idx, node in enumerate(nodes_to_check): if node and node.quality_type_map: - if has_variants_or_materials: + 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.metadata.get("global_quality", False)) @@ -320,6 +323,12 @@ class QualityManager(QObject): if position not in quality_group.nodes_for_extruders: quality_group.nodes_for_extruders[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()) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index d7ebe804f4..e2f7df41ea 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -196,6 +196,9 @@ class GlobalStack(CuraContainerStack): def getHasVariants(self) -> bool: return parseBool(self.getMetaDataEntry("has_variants", False)) + def getHasMachineQuality(self) -> bool: + return parseBool(self.getMetaDataEntry("has_machine_quality", False)) + ## private: global_stack_mime = MimeType( From 51b0497f843c243a034e3219ea3f3a424117e02e Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 14:28:41 +0200 Subject: [PATCH 230/364] Fix the collapsable panel of the Generic materials. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsList.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index be077c6329..d5e4443a8c 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -158,17 +158,18 @@ Item anchors.fill: generic_header onPressed: { - const i = base.collapsed_brands.indexOf("Generic") - if (i > -1) + const index = base.expanded_brands.indexOf("Generic") + + if (index > -1) { // Remove it - base.collapsed_brands.splice(i, 1) + base.expanded_brands.splice(index, 1) generic_section.expanded = false } else { // Add it - base.collapsed_brands.push("Generic") + base.expanded_brands.push("Generic") generic_section.expanded = true } } From 42a523cb001729ad657db6279981b5e3eb4f38df Mon Sep 17 00:00:00 2001 From: Sacha Telgenhof Oude Koehorst Date: Sun, 9 Sep 2018 16:16:01 +0900 Subject: [PATCH 231/364] Add single extruder definition for Ender-3. --- .../definitions/creality_ender3.def.json | 8 +++---- .../creality_ender3_extruder_0.def.json | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 resources/extruders/creality_ender3_extruder_0.def.json diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json index 4ae4d4ad93..eac331dc21 100755 --- a/resources/definitions/creality_ender3.def.json +++ b/resources/definitions/creality_ender3.def.json @@ -8,7 +8,10 @@ "manufacturer": "Creality3D", "file_formats": "text/x-gcode", "platform": "creality_ender3_platform.stl", - "preferred_quality_type": "draft" + "preferred_quality_type": "draft", + "machine_extruder_trains": { + "0": "creality_ender3_extruder_0" + } }, "overrides": { "machine_name": { @@ -37,9 +40,6 @@ [30, 34] ] }, - "material_diameter": { - "default_value": 1.75 - }, "acceleration_enabled": { "default_value": true }, diff --git a/resources/extruders/creality_ender3_extruder_0.def.json b/resources/extruders/creality_ender3_extruder_0.def.json new file mode 100644 index 0000000000..d5ec01a713 --- /dev/null +++ b/resources/extruders/creality_ender3_extruder_0.def.json @@ -0,0 +1,22 @@ +{ + "id": "creality_ender3_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "creality_ender3", + "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 From d8421105d4d09bd6e412a892656bb8ef3dd4ce34 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 10 Sep 2018 12:13:35 +0200 Subject: [PATCH 232/364] Fix quality lookup CURA-5694 For a machine, if it has extruder-specific qualities, when we look up extruder qualities, we should NOT fall back to use the global qualities. --- cura/Machines/QualityManager.py | 31 ++++++++++++++++++++----------- cura/Settings/GlobalStack.py | 3 +++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index 580d52b089..4ae58a71b2 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -200,14 +200,19 @@ class QualityManager(QObject): 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_variants = machine.getHasVariants() - has_materials = machine.getHasMaterials() - has_variants_or_materials = has_variants or has_materials + 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 = [machine_node, default_machine_node] @@ -215,12 +220,10 @@ class QualityManager(QObject): quality_group_dict = {} for node in nodes_to_check: if node and node.quality_type_map: - # Only include global qualities - if has_variants_or_materials: - quality_node = list(node.quality_type_map.values())[0] - is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) - if not is_global_quality: - continue + quality_node = list(node.quality_type_map.values())[0] + is_global_quality = parseBool(quality_node.metadata.get("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.metadata["name"], quality_type) @@ -302,9 +305,9 @@ class QualityManager(QObject): else: nodes_to_check += [default_machine_node] - for node in nodes_to_check: + for node_idx, node in enumerate(nodes_to_check): if node and node.quality_type_map: - if has_variants_or_materials: + 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.metadata.get("global_quality", False)) @@ -320,6 +323,12 @@ class QualityManager(QObject): if position not in quality_group.nodes_for_extruders: quality_group.nodes_for_extruders[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()) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index d7ebe804f4..e2f7df41ea 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -196,6 +196,9 @@ class GlobalStack(CuraContainerStack): def getHasVariants(self) -> bool: return parseBool(self.getMetaDataEntry("has_variants", False)) + def getHasMachineQuality(self) -> bool: + return parseBool(self.getMetaDataEntry("has_machine_quality", False)) + ## private: global_stack_mime = MimeType( From 5ca5aacbeee9c3aaa466238179d67d843d83e955 Mon Sep 17 00:00:00 2001 From: Sacha Telgenhof Oude Koehorst Date: Mon, 10 Sep 2018 21:46:26 +0900 Subject: [PATCH 233/364] Removed layer_height override as it isn't needed. Only the initial layer height needs to be overridden. --- resources/definitions/creality_ender3.def.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json index eac331dc21..2c9bfa04d0 100755 --- a/resources/definitions/creality_ender3.def.json +++ b/resources/definitions/creality_ender3.def.json @@ -55,9 +55,6 @@ "jerk_travel": { "default_value": 20 }, - "layer_height": { - "default_value": 0.15 - }, "layer_height_0": { "default_value": 0.2 }, From e7d9f0ce450ee975991f34f946cbc6e7627245ee Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Sep 2018 15:00:33 +0200 Subject: [PATCH 234/364] Added typing for various setting classes --- cura/CuraApplication.py | 18 ++-- cura/Machines/ContainerNode.py | 19 ++-- cura/Machines/MaterialGroup.py | 4 +- cura/Machines/MaterialManager.py | 94 ++++++++++--------- cura/Machines/MaterialNode.py | 12 ++- cura/Machines/Models/BaseMaterialsModel.py | 2 +- .../Machines/Models/FavoriteMaterialsModel.py | 2 +- cura/Machines/Models/GenericMaterialsModel.py | 2 +- cura/Machines/Models/MaterialBrandsModel.py | 8 +- cura/Machines/QualityChangesGroup.py | 2 +- cura/Machines/QualityGroup.py | 3 +- cura/Machines/QualityManager.py | 10 +- cura/Settings/ContainerManager.py | 77 +++++++++------ cura/Settings/ExtruderManager.py | 17 ++-- cura/Settings/MachineManager.py | 6 +- plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +- 16 files changed, 162 insertions(+), 116 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 7e5e98adef..8cab6b9d56 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -114,6 +114,8 @@ from UM.FlameProfiler import pyqtSlot if TYPE_CHECKING: from plugins.SliceInfoPlugin.SliceInfo import SliceInfo + from cura.Machines.MaterialManager import MaterialManager + from cura.Machines.QualityManager import QualityManager numpy.seterr(all = "ignore") @@ -807,20 +809,20 @@ class CuraApplication(QtApplication): self._machine_manager = MachineManager(self) return self._machine_manager - def getExtruderManager(self, *args): + def getExtruderManager(self, *args) -> ExtruderManager: if self._extruder_manager is None: self._extruder_manager = ExtruderManager() return self._extruder_manager - def getVariantManager(self, *args): + def getVariantManager(self, *args) -> VariantManager: return self._variant_manager @pyqtSlot(result = QObject) - def getMaterialManager(self, *args): + def getMaterialManager(self, *args) -> "MaterialManager": return self._material_manager @pyqtSlot(result = QObject) - def getQualityManager(self, *args): + def getQualityManager(self, *args) -> "QualityManager": return self._quality_manager def getObjectsModel(self, *args): @@ -829,23 +831,23 @@ class CuraApplication(QtApplication): return self._object_manager @pyqtSlot(result = QObject) - def getMultiBuildPlateModel(self, *args): + def getMultiBuildPlateModel(self, *args) -> MultiBuildPlateModel: if self._multi_build_plate_model is None: self._multi_build_plate_model = MultiBuildPlateModel(self) return self._multi_build_plate_model @pyqtSlot(result = QObject) - def getBuildPlateModel(self, *args): + def getBuildPlateModel(self, *args) -> BuildPlateModel: if self._build_plate_model is None: self._build_plate_model = BuildPlateModel(self) return self._build_plate_model - def getCuraSceneController(self, *args): + def getCuraSceneController(self, *args) -> CuraSceneController: if self._cura_scene_controller is None: self._cura_scene_controller = CuraSceneController.createCuraSceneController() return self._cura_scene_controller - def getSettingInheritanceManager(self, *args): + def getSettingInheritanceManager(self, *args) -> SettingInheritanceManager: if self._setting_inheritance_manager is None: self._setting_inheritance_manager = SettingInheritanceManager.createSettingInheritanceManager() return self._setting_inheritance_manager diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py index 944579e354..0d44c7c4a3 100644 --- a/cura/Machines/ContainerNode.py +++ b/cura/Machines/ContainerNode.py @@ -24,29 +24,34 @@ if TYPE_CHECKING: # This is used in Variant, Material, and Quality Managers. # class ContainerNode: - __slots__ = ("metadata", "container", "children_map") + __slots__ = ("_metadata", "container", "children_map") def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: - self.metadata = metadata + self._metadata = metadata self.container = None - self.children_map = OrderedDict() #type: OrderedDict[str, Union[QualityGroup, ContainerNode]] + self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it. ## Get an entry value from the metadata def getMetaDataEntry(self, entry: str, default: Any = None) -> Any: - if self.metadata is None: + if self._metadata is None: return default - return self.metadata.get(entry, default) + return self._metadata.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: + 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"] + container_id = self._metadata["id"] from UM.Settings.ContainerRegistry import ContainerRegistry container_list = ContainerRegistry.getInstance().findInstanceContainers(id = container_id) if not container_list: diff --git a/cura/Machines/MaterialGroup.py b/cura/Machines/MaterialGroup.py index 8a73796a7a..e05647e674 100644 --- a/cura/Machines/MaterialGroup.py +++ b/cura/Machines/MaterialGroup.py @@ -24,8 +24,8 @@ class MaterialGroup: def __init__(self, name: str, root_material_node: "MaterialNode") -> None: self.name = name self.is_read_only = False - self.root_material_node = root_material_node # type: MaterialNode - self.derived_material_node_list = [] # type: List[MaterialNode] + self.root_material_node = root_material_node # type: MaterialNode + self.derived_material_node_list = [] # type: List[MaterialNode] def __str__(self) -> str: return "%s[%s]" % (self.__class__.__name__, self.name) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 1463f2e40e..98a4eeb330 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -4,8 +4,7 @@ from collections import defaultdict, OrderedDict import copy import uuid -import json -from typing import Dict, Optional, TYPE_CHECKING +from typing import Dict, Optional, TYPE_CHECKING, Any, Set, List, cast, Tuple from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot @@ -39,26 +38,35 @@ if TYPE_CHECKING: # class MaterialManager(QObject): - materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated. - favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed + 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 - self._fallback_materials_map = dict() # material_type -> generic material metadata - self._material_group_map = dict() # root_material_id -> MaterialGroup - self._diameter_machine_nozzle_buildplate_material_map = dict() # approximate diameter str -> dict(machine_definition_id -> MaterialNode) + # 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 - self._material_diameter_map = defaultdict(dict) # root_material_id -> approximate diameter str -> root_material_id for that diameter - self._diameter_material_map = dict() # material id including diameter (generic_pla_175) -> material root id (generic_pla) + # 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. - self._guid_material_groups_map = defaultdict(list) # GUID -> a list of material_groups + # 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. @@ -77,15 +85,15 @@ class MaterialManager(QObject): self._container_registry.containerAdded.connect(self._onContainerMetadataChanged) self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged) - self._favorites = set() + self._favorites = set() # type: Set[str] - def initialize(self): + 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")} + metadata.get("GUID")} # type: Dict[str, Dict[str, Any]] - self._material_group_map = dict() + self._material_group_map = dict() # type: Dict[str, MaterialGroup] # Map #1 # root_material_id -> MaterialGroup @@ -94,7 +102,7 @@ class MaterialManager(QObject): if material_id == "empty_material": continue - root_material_id = material_metadata.get("base_file") + root_material_id = material_metadata.get("base_file", "") 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) @@ -110,26 +118,26 @@ class MaterialManager(QObject): # Map #1.5 # GUID -> material group list - self._guid_material_groups_map = defaultdict(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.metadata["GUID"] + 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() + 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.metadata["material"] + 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.metadata["brand"] + 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.metadata.get("approximate_diameter") + 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 @@ -138,7 +146,7 @@ class MaterialManager(QObject): # - 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 + 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 @@ -155,15 +163,15 @@ class MaterialManager(QObject): 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() + 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 + root_material_metadata = machine_node.root_material_node._metadata - key_data = [] + key_data_list = [] # type: List[Any] for key in keys_to_fetch: - key_data.append(root_material_metadata.get(key)) - key_data = tuple(key_data) + 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: @@ -172,8 +180,8 @@ class MaterialManager(QObject): # ...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 = root_material_metadata.get("approximate_diameter") - material_group_dict[key_data][approximate_diameter] = root_material_metadata["id"] + 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(): @@ -192,7 +200,7 @@ class MaterialManager(QObject): # Map #4 # "machine" -> "nozzle name" -> "buildplate name" -> "root material ID" -> specific material InstanceContainer - self._diameter_machine_nozzle_buildplate_material_map = dict() + 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) @@ -203,7 +211,7 @@ class MaterialManager(QObject): self._favorites.add(item) self.favoritesUpdated.emit() - def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: + def __addMaterialMetadataIntoLookupTree(self, material_metadata: Dict[str, Any]) -> None: material_id = material_metadata["id"] # We don't store empty material in the lookup tables @@ -290,7 +298,7 @@ class MaterialManager(QObject): 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) + return self._diameter_material_map.get(root_material_id, "") def getMaterialGroupListByGUID(self, guid: str) -> Optional[list]: return self._guid_material_groups_map.get(guid) @@ -351,7 +359,7 @@ class MaterialManager(QObject): # 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]: + extruder_stack: "ExtruderStack") -> Optional[Dict[str, MaterialNode]]: buildplate_name = machine.getBuildplateName() nozzle_name = None if extruder_stack.variant.getId() != "empty_variant": @@ -368,7 +376,7 @@ class MaterialManager(QObject): # 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["InstanceContainer"]: + 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: @@ -377,7 +385,7 @@ class MaterialManager(QObject): 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] + 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 @@ -426,7 +434,7 @@ class MaterialManager(QObject): # 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 = material_group.root_material_node.metadata["id"] + root_material_id = cast(str, material_group.root_material_node.getMetaDataEntry("id", "")) break if not root_material_id: @@ -502,7 +510,7 @@ class MaterialManager(QObject): # Sets the new name for the given material. # @pyqtSlot("QVariant", str) - def setMaterialName(self, material_node: "MaterialNode", name: 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 @@ -520,7 +528,7 @@ class MaterialManager(QObject): # Removes the given material. # @pyqtSlot("QVariant") - def removeMaterial(self, material_node: "MaterialNode"): + 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) @@ -530,8 +538,8 @@ class MaterialManager(QObject): # Returns the root material ID of the duplicated material if successful. # @pyqtSlot("QVariant", result = str) - def duplicateMaterial(self, material_node, new_base_id = None, new_metadata = None) -> Optional[str]: - root_material_id = material_node.metadata["base_file"] + 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: @@ -586,7 +594,7 @@ class MaterialManager(QObject): # # 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 @@ -619,7 +627,7 @@ class MaterialManager(QObject): return new_id @pyqtSlot(str) - def addFavorite(self, root_material_id: str): + def addFavorite(self, root_material_id: str) -> None: self._favorites.add(root_material_id) self.favoritesUpdated.emit() @@ -628,7 +636,7 @@ class MaterialManager(QObject): self._application.saveSettings() @pyqtSlot(str) - def removeFavorite(self, root_material_id: str): + def removeFavorite(self, root_material_id: str) -> None: self._favorites.remove(root_material_id) self.favoritesUpdated.emit() diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 04423d7b2c..a4dcb0564f 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional, Dict - +from typing import Optional, Dict, Any +from collections import OrderedDict from .ContainerNode import ContainerNode @@ -14,6 +14,12 @@ from .ContainerNode import ContainerNode class MaterialNode(ContainerNode): __slots__ = ("material_map", "children_map") - def __init__(self, metadata: Optional[dict] = None) -> None: + 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 + + # We overide this as we want to indicate that MaterialNodes can only contain other material nodes. + self.children_map = OrderedDict() # type: OrderedDict[str, "MaterialNode"] + + def getChildNode(self, child_key: str) -> Optional["MaterialNode"]: + return self.children_map.get(child_key) \ No newline at end of file diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 1b20e1188c..9799a35ed1 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -113,7 +113,7 @@ class BaseMaterialsModel(ListModel): ## This is another convenience function which is shared by all material # models so it's put here to avoid having so much duplicated code. def _createMaterialItem(self, root_material_id, container_node): - metadata = container_node.metadata + metadata = container_node.getMetadata() item = { "root_material_id": root_material_id, "id": metadata["id"], diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index be3f0f605f..18fe310c44 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -23,7 +23,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel): item_list = [] for root_material_id, container_node in self._available_materials.items(): - metadata = container_node.metadata + metadata = container_node.getMetadata() # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 27e6fdfd7c..c276b865bf 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -23,7 +23,7 @@ class GenericMaterialsModel(BaseMaterialsModel): item_list = [] for root_material_id, container_node in self._available_materials.items(): - metadata = container_node.metadata + metadata = container_node.getMetadata() # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 3f917abb16..f8d92dc65f 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -41,21 +41,19 @@ class MaterialBrandsModel(BaseMaterialsModel): # Part 1: Generate the entire tree of brands -> material types -> spcific materials for root_material_id, container_node in self._available_materials.items(): - metadata = container_node.metadata - # 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 # Add brands we haven't seen yet to the dict, skipping generics - brand = metadata["brand"] + brand = container_node.getMetaDataEntry("brand", "") if brand.lower() == "generic": continue if brand not in brand_group_dict: brand_group_dict[brand] = {} # Add material types we haven't seen yet to the dict - material_type = metadata["material"] + material_type = container_node.getMetaDataEntry("material", "") if material_type not in brand_group_dict[brand]: brand_group_dict[brand][material_type] = [] diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py index 2d0e655ed8..3dcf2ab1c8 100644 --- a/cura/Machines/QualityChangesGroup.py +++ b/cura/Machines/QualityChangesGroup.py @@ -17,7 +17,7 @@ class QualityChangesGroup(QualityGroup): super().__init__(name, quality_type, parent) self._container_registry = Application.getInstance().getContainerRegistry() - def addNode(self, node: "QualityNode"): + def addNode(self, node: "QualityNode") -> None: extruder_position = node.getMetaDataEntry("position") 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. diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py index 90ef63af51..535ba453f8 100644 --- a/cura/Machines/QualityGroup.py +++ b/cura/Machines/QualityGroup.py @@ -6,6 +6,7 @@ from typing import Dict, Optional, List, Set from PyQt5.QtCore import QObject, pyqtSlot from cura.Machines.ContainerNode import ContainerNode + # # 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 @@ -34,7 +35,7 @@ class QualityGroup(QObject): return self.name def getAllKeys(self) -> Set[str]: - result = set() #type: Set[str] + result = set() # type: Set[str] for node in [self.node_for_global] + list(self.nodes_for_extruders.values()): if node is None: continue diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index 4ae58a71b2..e081d4db3e 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -221,12 +221,12 @@ class QualityManager(QObject): 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.metadata.get("global_quality", False)) + 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.metadata["name"], quality_type) + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) quality_group.node_for_global = quality_node quality_group_dict[quality_type] = quality_group break @@ -310,13 +310,13 @@ class QualityManager(QObject): 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.metadata.get("global_quality", False)) + 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.metadata["name"], quality_type) + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) quality_group_dict[quality_type] = quality_group quality_group = quality_group_dict[quality_type] @@ -350,7 +350,7 @@ class QualityManager(QObject): 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.metadata["name"], quality_type) + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) quality_group.node_for_global = quality_node quality_group_dict[quality_type] = quality_group break diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 2b8ff4a234..e1a1495dac 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -4,12 +4,12 @@ import os import urllib.parse import uuid -from typing import Any -from typing import Dict, Union, Optional +from typing import Dict, Union, Any, TYPE_CHECKING, List -from PyQt5.QtCore import QObject, QUrl, QVariant +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 @@ -21,6 +21,18 @@ from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer + +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 UM.Settings.ContainerRegistry import ContainerRegistry + from cura.Settings.MachineManager import MachineManager + from cura.Machines.MaterialManager import MaterialManager + from cura.Machines.QualityManager import QualityManager + catalog = i18nCatalog("cura") @@ -31,20 +43,20 @@ catalog = i18nCatalog("cura") # when a certain action happens. This can be done through this class. class ContainerManager(QObject): - def __init__(self, application): + def __init__(self, application: "CuraApplication") -> None: if ContainerManager.__instance is not None: raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__) ContainerManager.__instance = self super().__init__(parent = application) - self._application = application - self._plugin_registry = self._application.getPluginRegistry() - self._container_registry = self._application.getContainerRegistry() - self._machine_manager = self._application.getMachineManager() - self._material_manager = self._application.getMaterialManager() - self._quality_manager = self._application.getQualityManager() - self._container_name_filters = {} # type: Dict[str, Dict[str, Any]] + self._application = application # type: CuraApplication + self._plugin_registry = self._application.getPluginRegistry() # type: PluginRegistry + self._container_registry = self._application.getContainerRegistry() # type: ContainerRegistry + 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: @@ -69,21 +81,23 @@ class ContainerManager(QObject): # by using "/" as a separator. For example, to change an entry "foo" in a # dictionary entry "bar", you can specify "bar/foo" as entry name. # - # \param container_id \type{str} The ID of the container to change. + # \param container_node \type{ContainerNode} # \param entry_name \type{str} The name of the metadata entry to change. # \param entry_value The new value of the entry. # - # \return True if successful, False if not. # TODO: This is ONLY used by MaterialView for material containers. Maybe refactor this. # 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, entry_name, entry_value): - root_material_id = container_node.metadata["base_file"] + def setContainerMetaDataEntry(self, container_node: "ContainerNode", entry_name: str, entry_value: str) -> bool: + root_material_id = container_node.getMetaDataEntry("base_file", "") if self._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) + return False entries = entry_name.split("/") entry_name = entries.pop() @@ -91,11 +105,11 @@ class ContainerManager(QObject): sub_item_changed = False if entries: root_name = entries.pop(0) - root = material_group.root_material_node.metadata.get(root_name) + root = material_group.root_material_node.getMetaDataEntry(root_name) item = root for _ in range(len(entries)): - item = item.get(entries.pop(0), { }) + item = item.get(entries.pop(0), {}) if item[entry_name] != entry_value: sub_item_changed = True @@ -109,9 +123,10 @@ class ContainerManager(QObject): 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) + return True @pyqtSlot(str, result = str) - def makeUniqueName(self, original_name): + def makeUniqueName(self, original_name: str) -> str: return self._container_registry.uniqueName(original_name) ## Get a list of string that can be used as name filters for a Qt File Dialog @@ -125,7 +140,7 @@ class ContainerManager(QObject): # # \return A string list with name filters. @pyqtSlot(str, result = "QStringList") - def getContainerNameFilters(self, type_name): + def getContainerNameFilters(self, type_name: str) -> List[str]: if not self._container_name_filters: self._updateContainerNameFilters() @@ -257,7 +272,7 @@ class ContainerManager(QObject): # # \return \type{bool} True if successful, False if not. @pyqtSlot(result = bool) - def updateQualityChanges(self): + def updateQualityChanges(self) -> bool: global_stack = self._machine_manager.activeMachine if not global_stack: return False @@ -313,10 +328,10 @@ class ContainerManager(QObject): # \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 @pyqtSlot("QVariant", bool, result = "QStringList") - def getLinkedMaterials(self, material_node, exclude_self = False): - guid = material_node.metadata["GUID"] + def getLinkedMaterials(self, material_node: "MaterialNode", exclude_self: bool = False): + guid = material_node.getMetaDataEntry("GUID", "") - self_root_material_id = material_node.metadata["base_file"] + self_root_material_id = material_node.getMetaDataEntry("base_file") material_group_list = self._material_manager.getMaterialGroupListByGUID(guid) linked_material_names = [] @@ -324,15 +339,19 @@ class ContainerManager(QObject): 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.metadata["name"]) + linked_material_names.append(material_group.root_material_node.getMetaDataEntry("name", "")) return linked_material_names ## 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): + def unlinkMaterial(self, material_node: "MaterialNode") -> None: # Get the material group - material_group = self._material_manager.getMaterialGroup(material_node.metadata["base_file"]) + material_group = self._material_manager.getMaterialGroup(material_node.getMetaDataEntry("base_file", "")) + + if material_group is None: + Logger.log("w", "Unable to find material group for %s", material_node) + return # Generate a new GUID new_guid = str(uuid.uuid4()) @@ -344,7 +363,7 @@ class ContainerManager(QObject): if container is not None: container.setMetaDataEntry("GUID", new_guid) - def _performMerge(self, merge_into, merge, clear_settings = True): + def _performMerge(self, merge_into: InstanceContainer, merge: InstanceContainer, clear_settings: bool = True) -> None: if merge == merge_into: return @@ -400,7 +419,7 @@ class ContainerManager(QObject): ## Import single profile, file_url does not have to end with curaprofile @pyqtSlot(QUrl, result="QVariantMap") - def importProfile(self, file_url): + def importProfile(self, file_url: QUrl): if not file_url.isValid(): return path = file_url.toLocalFile() @@ -409,7 +428,7 @@ class ContainerManager(QObject): return self._container_registry.importProfile(path) @pyqtSlot(QObject, QUrl, str) - def exportQualityChangesGroup(self, quality_changes_group, file_url: QUrl, file_type: str): + def exportQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", file_url: QUrl, file_type: str) -> None: if not file_url.isValid(): return path = file_url.toLocalFile() diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 1003ab5c86..5af22583ed 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -15,7 +15,7 @@ from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, TYPE_CHECKING, Dict, List, Any +from typing import Optional, TYPE_CHECKING, Dict, List, Any, Union if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack @@ -39,9 +39,12 @@ class ExtruderManager(QObject): self._application = cura.CuraApplication.CuraApplication.getInstance() # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. - self._extruder_trains = {} # type: Dict[str, Dict[str, ExtruderStack]] + self._extruder_trains = {} # type: Dict[str, Dict[str, "ExtruderStack"]] self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack - self._selected_object_extruders = [] # type: List[ExtruderStack] + + # 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) @@ -80,7 +83,7 @@ class ExtruderManager(QObject): ## Gets a dict with the extruder stack ids with the extruder number as the key. @pyqtProperty("QVariantMap", notify = extrudersChanged) def extruderIds(self) -> Dict[str, str]: - extruder_stack_ids = {} + extruder_stack_ids = {} # type: Dict[str, str] global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: @@ -115,7 +118,7 @@ class ExtruderManager(QObject): ## Provides a list of extruder IDs used by the current selected objects. @pyqtProperty("QVariantList", notify = selectedObjectExtrudersChanged) - def selectedObjectExtruders(self) -> List[str]: + def selectedObjectExtruders(self) -> List[Union[str, "ExtruderStack"]]: if not self._selected_object_extruders: object_extruders = set() @@ -140,7 +143,7 @@ class ExtruderManager(QObject): elif current_extruder_trains: object_extruders.add(current_extruder_trains[0].getId()) - self._selected_object_extruders = list(object_extruders) + self._selected_object_extruders = list(object_extruders) # type: List[Union[str, "ExtruderStack"]] return self._selected_object_extruders @@ -149,7 +152,7 @@ class ExtruderManager(QObject): # This will trigger a recalculation of the extruders used for the # selection. def resetSelectedObjectExtruders(self) -> None: - self._selected_object_extruders = [] + self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]] self.selectedObjectExtrudersChanged.emit() @pyqtSlot(result = QObject) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ed543fcee1..28a3e5cd62 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -892,7 +892,11 @@ class MachineManager(QObject): extruder_nr = node.callDecoration("getActiveExtruderPosition") if extruder_nr is not None and int(extruder_nr) > extruder_count - 1: - node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count - 1).getId()) + extruder = extruder_manager.getExtruderStack(extruder_count - 1) + if extruder is not None: + node.callDecoration("setActiveExtruder", extruder.getId()) + else: + Logger.log("w", "Could not find extruder to set active.") # Make sure one of the extruder stacks is active extruder_manager.setActiveExtruderIndex(0) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 6d55e0643d..36a725d148 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -934,7 +934,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): root_material_id) if material_node is not None and material_node.getContainer() is not None: - extruder_stack.material = material_node.getContainer() + extruder_stack.material = material_node.getContainer() # type: InstanceContainer def _applyChangesToMachine(self, global_stack, extruder_stack_dict): # Clear all first From fe256b35628284427683416c080cb9e4f1b0c6c2 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 15:57:19 +0200 Subject: [PATCH 235/364] Fix some issues in the material preference page. Now the generic section collapses and expands correctly. Some qml error was also fixed. Contributes to CURA-5682. --- .../Materials/MaterialsDetailsPanel.qml | 18 +++++---- .../Preferences/Materials/MaterialsList.qml | 4 +- .../Preferences/Materials/MaterialsPage.qml | 39 +++++++++++-------- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index ad9f0e3766..738a1fa6d2 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -15,19 +15,23 @@ Item property var currentItem: base.currentItem - onCurrentItemChanged: { updateMaterialPropertiesObject(currentItem) } + onCurrentItemChanged: { updateMaterialPropertiesObject() } - function updateMaterialPropertiesObject( currentItem ) + function updateMaterialPropertiesObject() { + if (currentItem === null) + { + return + } materialProperties.name = currentItem.name || "Unknown" - materialProperties.guid = currentItem.GUID; + materialProperties.guid = currentItem.GUID materialProperties.container_id = currentItem.id materialProperties.brand = currentItem.brand || "Unknown" materialProperties.material = currentItem.material || "Unknown" materialProperties.color_name = currentItem.color_name || "Yellow" materialProperties.color_code = currentItem.color_code || "yellow" materialProperties.description = currentItem.description || "" - materialProperties.adhesion_info = currentItem.adhesion_info || ""; + materialProperties.adhesion_info = currentItem.adhesion_info || "" materialProperties.density = currentItem.density || 0.0 materialProperties.diameter = currentItem.diameter || 0.0 materialProperties.approximate_diameter = currentItem.approximate_diameter || "0" @@ -62,11 +66,11 @@ Item bottom: parent.bottom } - editingEnabled: base.currentItem != null && !base.currentItem.is_read_only + editingEnabled: currentItem != null && !currentItem.is_read_only properties: materialProperties - containerId: base.currentItem != null ? base.currentItem.id : "" - currentMaterialNode: base.currentItem.container_node + containerId: currentItem != null ? currentItem.id : "" + currentMaterialNode: currentItem.container_node } diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index d5e4443a8c..8b870e75be 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -181,10 +181,12 @@ Item anchors.left: parent.left height: generic_section.expanded ? childrenRect.height : 0 visible: generic_section.expanded + Repeater { model: genericMaterialsModel - delegate: MaterialsSlot { + delegate: MaterialsSlot + { material: model } } diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 96fea6a951..bcf875be27 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -19,6 +19,8 @@ Item property var currentItem: null property var current_type: null property var current_brand: null + + property var hasCurrentItem: base.currentItem != null property var isCurrentItemActivated: { const extruder_position = Cura.ExtruderManager.activeExtruderIndex; @@ -89,47 +91,48 @@ Item } Component.onCompleted: { expandActiveMaterial(active_root_material_id) } - onCurrentItemChanged: { MaterialsDetailsPanel.currentItem = currentItem } + onCurrentItemChanged: { materialDetailsPanel.currentItem = currentItem } + Connections { target: materials_model onItemsChanged: { - var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id; - var position = Cura.ExtruderManager.activeExtruderIndex; + var currentItemId = hasCurrentItem ? base.currentItem.root_material_id : "" + var position = Cura.ExtruderManager.activeExtruderIndex // try to pick the currently selected item; it may have been moved if (base.newRootMaterialIdToSwitchTo == "") { - base.newRootMaterialIdToSwitchTo = currentItemId; + base.newRootMaterialIdToSwitchTo = currentItemId } for (var idx = 0; idx < materials_model.rowCount(); ++idx) { - var item = materials_model.getItem(idx); + var item = materials_model.getItem(idx) if (item.root_material_id == base.newRootMaterialIdToSwitchTo) { // Switch to the newly created profile if needed - materialListView.currentIndex = idx; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); + materialDetailsPanel.currentIndex = idx + materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex) if (base.toActivateNewMaterial) { - Cura.MachineManager.setMaterial(position, item.container_node); + Cura.MachineManager.setMaterial(position, item.container_node) } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false return } } - materialListView.currentIndex = 0; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); + materialListView.currentIndex = 0 + materialListView.activateDetailsWithIndex(materialListView.currentIndex) if (base.toActivateNewMaterial) { - Cura.MachineManager.setMaterial(position, materials_model.getItem(0).container_node); + Cura.MachineManager.setMaterial(position, materials_model.getItem(0).container_node) } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false } } @@ -313,11 +316,15 @@ Item frameVisible: true verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn - MaterialsList {} + MaterialsList + { + id: materialListView + } } MaterialsDetailsPanel { + id: materialDetailsPanel anchors { left: materialScrollView.right From 729d78e14a9880885988e8ea63f24ad5afbe0793 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Sep 2018 16:08:31 +0200 Subject: [PATCH 236/364] Updated another set of typing --- cura/CuraApplication.py | 15 ++++---- cura/Machines/MachineErrorChecker.py | 12 +++--- cura/Machines/QualityManager.py | 57 +++++++++++++++++----------- cura/Machines/QualityNode.py | 3 ++ cura/Machines/VariantManager.py | 16 ++++---- 5 files changed, 59 insertions(+), 44 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 8cab6b9d56..9e021aaaf1 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -116,6 +116,7 @@ if TYPE_CHECKING: from plugins.SliceInfoPlugin.SliceInfo import SliceInfo from cura.Machines.MaterialManager import MaterialManager from cura.Machines.QualityManager import QualityManager + from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer numpy.seterr(all = "ignore") @@ -177,12 +178,12 @@ class CuraApplication(QtApplication): self._machine_action_manager = None - self.empty_container = None - self.empty_definition_changes_container = None - self.empty_variant_container = None - self.empty_material_container = None - self.empty_quality_container = None - self.empty_quality_changes_container = None + self.empty_container = None # type: EmptyInstanceContainer + self.empty_definition_changes_container = None # type: EmptyInstanceContainer + self.empty_variant_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 @@ -370,7 +371,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 + self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container # type: EmptyInstanceContainer self._container_registry.addContainer( cura.Settings.cura_empty_instance_containers.empty_definition_changes_container) diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py index 37de4f30ce..06f064315b 100644 --- a/cura/Machines/MachineErrorChecker.py +++ b/cura/Machines/MachineErrorChecker.py @@ -50,7 +50,7 @@ class MachineErrorChecker(QObject): self._error_check_timer.setInterval(100) self._error_check_timer.setSingleShot(True) - def initialize(self): + def initialize(self) -> None: self._error_check_timer.timeout.connect(self._rescheduleCheck) # Reconnect all signals when the active machine gets changed. @@ -62,7 +62,7 @@ class MachineErrorChecker(QObject): self._onMachineChanged() - def _onMachineChanged(self): + def _onMachineChanged(self) -> None: if self._global_stack: self._global_stack.propertyChanged.disconnect(self.startErrorCheck) self._global_stack.containersChanged.disconnect(self.startErrorCheck) @@ -94,7 +94,7 @@ class MachineErrorChecker(QObject): return self._need_to_check or self._check_in_progress # Starts the error check timer to schedule a new error check. - def startErrorCheck(self, *args): + def startErrorCheck(self, *args) -> None: if not self._check_in_progress: self._need_to_check = True self.needToWaitForResultChanged.emit() @@ -103,7 +103,7 @@ class MachineErrorChecker(QObject): # This function is called by the timer to reschedule a new error check. # If there is no check in progress, it will start a new one. If there is any, it sets the "_need_to_check" flag # to notify the current check to stop and start a new one. - def _rescheduleCheck(self): + def _rescheduleCheck(self) -> None: if self._check_in_progress and not self._need_to_check: self._need_to_check = True self.needToWaitForResultChanged.emit() @@ -128,7 +128,7 @@ class MachineErrorChecker(QObject): self._start_time = time.time() Logger.log("d", "New error check scheduled.") - def _checkStack(self): + def _checkStack(self) -> None: if self._need_to_check: Logger.log("d", "Need to check for errors again. Discard the current progress and reschedule a check.") self._check_in_progress = False @@ -169,7 +169,7 @@ class MachineErrorChecker(QObject): # Schedule the check for the next key self._application.callLater(self._checkStack) - def _setResult(self, result: bool): + def _setResult(self, result: bool) -> None: if result != self._has_errors: self._has_errors = result self.hasErrorUpdated.emit() diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index e081d4db3e..99fa71abe6 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import TYPE_CHECKING, Optional, cast +from typing import TYPE_CHECKING, Optional, cast, Dict, List from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot @@ -20,6 +20,8 @@ if TYPE_CHECKING: from UM.Settings.DefinitionContainer import DefinitionContainer from cura.Settings.GlobalStack import GlobalStack from .QualityChangesGroup import QualityChangesGroup + from cura.CuraApplication import CuraApplication + from UM.Settings.ContainerRegistry import ContainerRegistry # @@ -36,17 +38,20 @@ class QualityManager(QObject): qualitiesUpdated = pyqtSignal() - def __init__(self, container_registry, parent = None): + def __init__(self, container_registry: "ContainerRegistry", parent = None) -> None: super().__init__(parent) - self._application = Application.getInstance() + self._application = Application.getInstance() # type: CuraApplication self._material_manager = self._application.getMaterialManager() self._container_registry = container_registry self._empty_quality_container = self._application.empty_quality_container self._empty_quality_changes_container = self._application.empty_quality_changes_container - 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 + # 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" @@ -62,7 +67,7 @@ class QualityManager(QObject): self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._updateMaps) - def initialize(self): + def initialize(self) -> None: # Initialize the lookup tree for quality profiles with following structure: # -> -> -> # -> @@ -133,13 +138,13 @@ class QualityManager(QObject): Logger.log("d", "Lookup tables updated.") self.qualitiesUpdated.emit() - def _updateMaps(self): + def _updateMaps(self) -> None: self.initialize() - def _onContainerMetadataChanged(self, container): + def _onContainerMetadataChanged(self, container: InstanceContainer) -> None: self._onContainerChanged(container) - def _onContainerChanged(self, container): + def _onContainerChanged(self, container: InstanceContainer) -> None: container_type = container.getMetaDataEntry("type") if container_type not in ("quality", "quality_changes"): return @@ -148,7 +153,7 @@ class QualityManager(QObject): 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): + 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: @@ -196,12 +201,9 @@ class QualityManager(QObject): # 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: + 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 @@ -214,7 +216,12 @@ class QualityManager(QObject): 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 = [machine_node, default_machine_node] + + 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 = {} @@ -273,13 +280,16 @@ class QualityManager(QObject): # 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] + 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, nodes_to_check_list, node_info_list, node_info_idx): + 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: @@ -300,9 +310,10 @@ class QualityManager(QObject): # 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.quality_type_map: + + if machine_node is not None and machine_node.quality_type_map: nodes_to_check += [machine_node] - else: + elif default_machine_node is not None: nodes_to_check += [default_machine_node] for node_idx, node in enumerate(nodes_to_check): @@ -334,7 +345,7 @@ class QualityManager(QObject): return quality_group_dict - def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> 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: @@ -372,7 +383,7 @@ class QualityManager(QObject): # Remove the given quality changes group. # @pyqtSlot(QObject) - def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup"): + 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(): @@ -415,7 +426,7 @@ class QualityManager(QObject): # Duplicates the given quality. # @pyqtSlot(str, "QVariantMap") - def duplicateQualityChanges(self, quality_changes_name, quality_model_item): + 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.") @@ -443,7 +454,7 @@ class QualityManager(QObject): # 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): + def createQualityChanges(self, base_name: str) -> None: machine_manager = Application.getInstance().getMachineManager() global_stack = machine_manager.activeMachine diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py index f384ee7825..a821a1e15d 100644 --- a/cura/Machines/QualityNode.py +++ b/cura/Machines/QualityNode.py @@ -16,6 +16,9 @@ class QualityNode(ContainerNode): super().__init__(metadata = metadata) self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer + def getChildNode(self, child_key: str) -> Optional["QualityNode"]: + return self.children_map.get(child_key) + def addQualityMetadata(self, quality_type: str, metadata: dict): if quality_type not in self.quality_type_map: self.quality_type_map[quality_type] = QualityNode(metadata) diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py index 969fed670e..9c8cff9efb 100644 --- a/cura/Machines/VariantManager.py +++ b/cura/Machines/VariantManager.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. from collections import OrderedDict -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, Dict from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger @@ -36,11 +36,11 @@ if TYPE_CHECKING: # class VariantManager: - def __init__(self, container_registry): - self._container_registry = container_registry # type: ContainerRegistry + def __init__(self, container_registry: ContainerRegistry) -> None: + self._container_registry = container_registry - self._machine_to_variant_dict_map = dict() # -> - self._machine_to_buildplate_dict_map = dict() + 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"] @@ -48,7 +48,7 @@ class VariantManager: # Initializes the VariantManager including: # - initializing the variant lookup table based on the metadata in ContainerRegistry. # - def initialize(self): + def initialize(self) -> None: self._machine_to_variant_dict_map = OrderedDict() self._machine_to_buildplate_dict_map = OrderedDict() @@ -106,10 +106,10 @@ class VariantManager: variant_node = variant_dict[variant_name] break return variant_node + return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name) - def getVariantNodes(self, machine: "GlobalStack", - variant_type: Optional["VariantType"] = None) -> dict: + 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, {}) From 351fe5c5bc772716a453deaee2156e2407e0340b Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 17:24:00 +0200 Subject: [PATCH 237/364] Fix style. --- cura/Settings/ExtruderManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 1003ab5c86..479e69f558 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -41,7 +41,7 @@ class ExtruderManager(QObject): # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. self._extruder_trains = {} # type: Dict[str, Dict[str, ExtruderStack]] self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack - self._selected_object_extruders = [] # type: List[ExtruderStack] + self._selected_object_extruders = [] # type: List[str] self._addCurrentMachineExtruders() Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) @@ -80,7 +80,7 @@ class ExtruderManager(QObject): ## Gets a dict with the extruder stack ids with the extruder number as the key. @pyqtProperty("QVariantMap", notify = extrudersChanged) def extruderIds(self) -> Dict[str, str]: - extruder_stack_ids = {} + extruder_stack_ids = {} # type: Dict[str, str] global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: From 109b3fc1d23a606ee4226fdab9c6639ea8dd51d1 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 11 Sep 2018 09:08:50 +0200 Subject: [PATCH 238/364] [CURA-5677] Removed some superfluous and/or dead lines. --- plugins/SimulationView/SimulationView.qml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index 6de5134fc7..b4ca9584c7 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -666,16 +666,7 @@ Item Connections { target: UM.SimulationView - onMaxLayersChanged: - { - playButton.pauseSimulation() - layerSlider.setUpperValue(UM.SimulationView.currentLayer) - } - onMinimumLayerChanged: - { - playButton.pauseSimulation() - layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - } + onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) onCurrentLayerChanged: { playButton.pauseSimulation() From bacae6c1364ac33b7751557b7c401cd0d15827e5 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 11:56:49 +0200 Subject: [PATCH 239/364] Update name of the VersionUpgrade for the version 3.5. --- resources/bundled_packages.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/bundled_packages.json b/resources/bundled_packages.json index d216415921..c593f48d2d 100644 --- a/resources/bundled_packages.json +++ b/resources/bundled_packages.json @@ -662,12 +662,12 @@ } } }, - "VersionUpgrade34to40": { + "VersionUpgrade34to35": { "package_info": { - "package_id": "VersionUpgrade34to40", + "package_id": "VersionUpgrade34to35", "package_type": "plugin", - "display_name": "Version Upgrade 3.4 to 4.0", - "description": "Upgrades configurations from Cura 3.4 to Cura 4.0.", + "display_name": "Version Upgrade 3.4 to 3.5", + "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", "package_version": "1.0.0", "sdk_version": 4, "website": "https://ultimaker.com", From 19eefc71da7baaa4dd9c0092672b1d70641f3320 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 13:53:07 +0200 Subject: [PATCH 240/364] Update SDK version for the bundled packages. --- resources/bundled_packages.json | 134 ++++++++++++++++---------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/resources/bundled_packages.json b/resources/bundled_packages.json index c593f48d2d..7107bbe4f0 100644 --- a/resources/bundled_packages.json +++ b/resources/bundled_packages.json @@ -6,7 +6,7 @@ "display_name": "3MF Reader", "description": "Provides support for reading 3MF files.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -23,7 +23,7 @@ "display_name": "3MF Writer", "description": "Provides support for writing 3MF files.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -40,7 +40,7 @@ "display_name": "Change Log", "description": "Shows changes since latest checked version.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -57,7 +57,7 @@ "display_name": "CuraEngine Backend", "description": "Provides the link to the CuraEngine slicing backend.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -74,7 +74,7 @@ "display_name": "Cura Profile Reader", "description": "Provides support for importing Cura profiles.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -91,7 +91,7 @@ "display_name": "Cura Profile Writer", "description": "Provides support for exporting Cura profiles.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -108,7 +108,7 @@ "display_name": "Firmware Update Checker", "description": "Checks for firmware updates.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -125,7 +125,7 @@ "display_name": "Compressed G-code Reader", "description": "Reads g-code from a compressed archive.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -142,7 +142,7 @@ "display_name": "Compressed G-code Writer", "description": "Writes g-code to a compressed archive.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -159,7 +159,7 @@ "display_name": "G-Code Profile Reader", "description": "Provides support for importing profiles from g-code files.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -176,7 +176,7 @@ "display_name": "G-Code Reader", "description": "Allows loading and displaying G-code files.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "VictorLarchenko", @@ -193,7 +193,7 @@ "display_name": "G-Code Writer", "description": "Writes g-code to a file.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -210,7 +210,7 @@ "display_name": "Image Reader", "description": "Enables ability to generate printable geometry from 2D image files.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -227,7 +227,7 @@ "display_name": "Legacy Cura Profile Reader", "description": "Provides support for importing profiles from legacy Cura versions.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -244,7 +244,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "fieldOfView", @@ -261,7 +261,7 @@ "display_name": "Model Checker", "description": "Checks models and print configuration for possible printing issues and give suggestions.", "package_version": "0.1.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -278,7 +278,7 @@ "display_name": "Monitor Stage", "description": "Provides a monitor stage in Cura.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -295,7 +295,7 @@ "display_name": "Per-Object Settings Tool", "description": "Provides the per-model settings.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -312,7 +312,7 @@ "display_name": "Post Processing", "description": "Extension that allows for user created scripts for post processing.", "package_version": "2.2.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -329,7 +329,7 @@ "display_name": "Prepare Stage", "description": "Provides a prepare stage in Cura.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -346,7 +346,7 @@ "display_name": "Removable Drive Output Device", "description": "Provides removable drive hotplugging and writing support.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -363,7 +363,7 @@ "display_name": "Simulation View", "description": "Provides the Simulation view.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -380,7 +380,7 @@ "display_name": "Slice Info", "description": "Submits anonymous slice info. Can be disabled through preferences.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -397,7 +397,7 @@ "display_name": "Solid View", "description": "Provides a normal solid mesh view.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -414,7 +414,7 @@ "display_name": "Support Eraser Tool", "description": "Creates an eraser mesh to block the printing of support in certain places.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -431,7 +431,7 @@ "display_name": "Toolbox", "description": "Find, manage and install new Cura packages.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -448,7 +448,7 @@ "display_name": "UFP Writer", "description": "Provides support for writing Ultimaker Format Packages.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -465,7 +465,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -482,7 +482,7 @@ "display_name": "UM3 Network Printing", "description": "Manages network connections to Ultimaker 3 printers.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -499,7 +499,7 @@ "display_name": "USB Printing", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -516,7 +516,7 @@ "display_name": "User Agreement", "description": "Ask the user once if he/she agrees with our license.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -533,7 +533,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -550,7 +550,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -567,7 +567,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -584,7 +584,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -601,7 +601,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -618,7 +618,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -635,7 +635,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -652,7 +652,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -669,7 +669,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -686,7 +686,7 @@ "display_name": "X3D Reader", "description": "Provides support for reading X3D files.", "package_version": "0.5.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "SevaAlekseyev", @@ -703,7 +703,7 @@ "display_name": "XML Material Profiles", "description": "Provides capabilities to read and write XML-based material profiles.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -720,7 +720,7 @@ "display_name": "X-Ray View", "description": "Provides the X-Ray view.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com", "author": { "author_id": "Ultimaker", @@ -971,7 +971,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://dagoma.fr/boutique/filaments.html", "author": { "author_id": "Dagoma", @@ -988,7 +988,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40", "author": { "author_id": "FABtotum", @@ -1005,7 +1005,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53", "author": { "author_id": "FABtotum", @@ -1022,7 +1022,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39", "author": { "author_id": "FABtotum", @@ -1039,7 +1039,7 @@ "display_name": "FABtotum TPU Shore 98A", "description": "", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66", "author": { "author_id": "FABtotum", @@ -1056,7 +1056,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/", "author": { "author_id": "Fiberlogy", @@ -1073,7 +1073,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://dagoma.fr", "author": { "author_id": "Dagoma", @@ -1090,7 +1090,7 @@ "display_name": "IMADE3D JellyBOX PETG", "description": "", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1107,7 +1107,7 @@ "display_name": "IMADE3D JellyBOX PLA", "description": "", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1124,7 +1124,7 @@ "display_name": "Octofiber PLA", "description": "PLA material from Octofiber.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://nl.octofiber.com/3d-printing-filament/pla.html", "author": { "author_id": "Octofiber", @@ -1141,7 +1141,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://www.polymaker.com/shop/polyflex/", "author": { "author_id": "Polymaker", @@ -1158,7 +1158,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://www.polymaker.com/shop/polymax/", "author": { "author_id": "Polymaker", @@ -1175,7 +1175,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://www.polymaker.com/shop/polyplus-true-colour/", "author": { "author_id": "Polymaker", @@ -1192,7 +1192,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.0", - "sdk_version": 4, + "sdk_version": 5, "website": "http://www.polymaker.com/shop/polywood/", "author": { "author_id": "Polymaker", @@ -1209,7 +1209,7 @@ "display_name": "Ultimaker ABS", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "Ultimaker", @@ -1228,7 +1228,7 @@ "display_name": "Ultimaker CPE", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "Ultimaker", @@ -1247,7 +1247,7 @@ "display_name": "Ultimaker Nylon", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "Ultimaker", @@ -1266,7 +1266,7 @@ "display_name": "Ultimaker PC", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/pc", "author": { "author_id": "Ultimaker", @@ -1285,7 +1285,7 @@ "display_name": "Ultimaker PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "Ultimaker", @@ -1304,7 +1304,7 @@ "display_name": "Ultimaker PVA", "description": "Example package for material and quality profiles for Ultimaker materials.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "Ultimaker", @@ -1323,7 +1323,7 @@ "display_name": "Vertex Delta ABS", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1340,7 +1340,7 @@ "display_name": "Vertex Delta PET", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1357,7 +1357,7 @@ "display_name": "Vertex Delta PLA", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1374,7 +1374,7 @@ "display_name": "Vertex Delta TPU", "description": "ABS material and quality files for the Delta Vertex K8800.", "package_version": "1.0.0", - "sdk_version": 4, + "sdk_version": 5, "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", From e717fa22513b557880d08ca884f56ddf680d5f20 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 10:36:53 +0200 Subject: [PATCH 241/364] Fix issue caused by making metadata of containerNode private --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7d9b2aacc3..e12be94b25 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -269,7 +269,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"].metadata["hardware_type"] + variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", "") variant_type = VariantType(variant_type) if variant_type == VariantType.NOZZLE: # The hotend identifier is not the containers name, but its "name". From d9e23bf02b3ecf19f1c830a0a87739e6fb55bd7d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 10:36:53 +0200 Subject: [PATCH 242/364] Fix issue caused by making metadata of containerNode private --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7d9b2aacc3..e12be94b25 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -269,7 +269,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"].metadata["hardware_type"] + variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", "") variant_type = VariantType(variant_type) if variant_type == VariantType.NOZZLE: # The hotend identifier is not the containers name, but its "name". From 1fb6441327e3697f49a797f48287df9b00b89814 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 11 Sep 2018 11:19:58 +0200 Subject: [PATCH 243/364] Fix default hardware type NOZZLE in XML material CURA-5716 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index e12be94b25..011941eec7 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -269,7 +269,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", "") + variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", str(VariantType.NOZZLE)) variant_type = VariantType(variant_type) if variant_type == VariantType.NOZZLE: # The hotend identifier is not the containers name, but its "name". From 4f30dffaf96c2ad7d4c31085af6c4f1b89c85b32 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 12:58:00 +0200 Subject: [PATCH 244/364] Ensure that when a corrupt 3mf file is loaded, the "failed to load" message will pop up --- plugins/3MFReader/ThreeMFReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 9ba82364e8..49c6995d18 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -225,7 +225,7 @@ class ThreeMFReader(MeshReader): except Exception: Logger.logException("e", "An exception occurred in 3mf reader.") - return [] + return None return result From 301605c30c68c454d3691e5466f92c9e9276938a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 13:20:42 +0200 Subject: [PATCH 245/364] Added missing typing to toolbox --- plugins/Toolbox/src/Toolbox.py | 91 ++++++++++++++++------------------ 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 00864c6b4e..a4dcc47c2b 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -6,7 +6,7 @@ import json import os import tempfile import platform -from typing import cast, List +from typing import cast, List, TYPE_CHECKING, Tuple, Optional from PyQt5.QtCore import QUrl, QObject, pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply @@ -20,9 +20,13 @@ from UM.Version import Version import cura from cura.CuraApplication import CuraApplication + from .AuthorsModel import AuthorsModel from .PackagesModel import PackagesModel +if TYPE_CHECKING: + from cura.Settings.GlobalStack import GlobalStack + i18n_catalog = i18nCatalog("cura") @@ -34,19 +38,19 @@ class Toolbox(QObject, Extension): def __init__(self, application: CuraApplication) -> None: super().__init__() - self._application = application #type: CuraApplication + self._application = application # type: CuraApplication - self._sdk_version = None # type: Optional[int] - self._cloud_api_version = None # type: Optional[int] - self._cloud_api_root = None # type: Optional[str] - self._api_url = None # type: Optional[str] + self._sdk_version = None # type: Optional[int] + self._cloud_api_version = None # type: Optional[int] + self._cloud_api_root = None # type: Optional[str] + self._api_url = None # type: Optional[str] # Network: - self._download_request = None #type: Optional[QNetworkRequest] - self._download_reply = None #type: Optional[QNetworkReply] - self._download_progress = 0 #type: float - self._is_downloading = False #type: bool - self._network_manager = None #type: Optional[QNetworkAccessManager] + self._download_request = None # type: Optional[QNetworkRequest] + self._download_reply = None # type: Optional[QNetworkReply] + self._download_progress = 0 # type: float + self._is_downloading = False # type: bool + self._network_manager = None # type: Optional[QNetworkAccessManager] self._request_header = [ b"User-Agent", str.encode( @@ -58,9 +62,9 @@ class Toolbox(QObject, Extension): ) ) ] - self._request_urls = {} # type: Dict[str, QUrl] + self._request_urls = {} # type: Dict[str, QUrl] self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated - self._old_plugin_ids = [] # type: List[str] + self._old_plugin_ids = [] # type: List[str] # Data: self._metadata = { @@ -73,7 +77,7 @@ class Toolbox(QObject, Extension): "materials_available": [], "materials_installed": [], "materials_generic": [] - } # type: Dict[str, List[Any]] + } # type: Dict[str, List[Any]] # Models: self._models = { @@ -86,39 +90,37 @@ class Toolbox(QObject, Extension): "materials_available": AuthorsModel(self), "materials_installed": PackagesModel(self), "materials_generic": PackagesModel(self) - } # type: Dict[str, ListModel] + } # type: Dict[str, ListModel] # These properties are for keeping track of the UI state: # ---------------------------------------------------------------------- # View category defines which filter to use, and therefore effectively # which category is currently being displayed. For example, possible # values include "plugin" or "material", but also "installed". - self._view_category = "plugin" #type: str + self._view_category = "plugin" # type: str # View page defines which type of page layout to use. For example, # possible values include "overview", "detail" or "author". - self._view_page = "loading" #type: str + self._view_page = "loading" # type: str # Active package refers to which package is currently being downloaded, # installed, or otherwise modified. - self._active_package = None # type: Optional[Dict[str, Any]] + self._active_package = None # type: Optional[Dict[str, Any]] - self._dialog = None #type: Optional[QObject] - self._confirm_reset_dialog = None #type: Optional[QObject] + self._dialog = None # type: Optional[QObject] + self._confirm_reset_dialog = None # type: Optional[QObject] self._resetUninstallVariables() - self._restart_required = False #type: bool + self._restart_required = False # type: bool # variables for the license agreement dialog - self._license_dialog_plugin_name = "" #type: str - self._license_dialog_license_content = "" #type: str - self._license_dialog_plugin_file_location = "" #type: str - self._restart_dialog_message = "" #type: str + self._license_dialog_plugin_name = "" # type: str + self._license_dialog_license_content = "" # type: str + self._license_dialog_plugin_file_location = "" # type: str + self._restart_dialog_message = "" # type: str self._application.initializationFinished.connect(self._onAppInitialized) - - # Signals: # -------------------------------------------------------------------------- # Downloading changes @@ -137,11 +139,11 @@ class Toolbox(QObject, Extension): showLicenseDialog = pyqtSignal() uninstallVariablesChanged = pyqtSignal() - def _resetUninstallVariables(self): - self._package_id_to_uninstall = None + def _resetUninstallVariables(self) -> None: + self._package_id_to_uninstall = None # type: Optional[str] self._package_name_to_uninstall = "" - self._package_used_materials = [] - self._package_used_qualities = [] + self._package_used_materials = [] # type: List[Tuple[GlobalStack, str, str]] + self._package_used_qualities = [] # type: List[Tuple[GlobalStack, str, str]] @pyqtSlot(result = str) def getLicenseDialogPluginName(self) -> str: @@ -344,26 +346,26 @@ class Toolbox(QObject, Extension): self.uninstall(package_id) @pyqtProperty(str, notify = uninstallVariablesChanged) - def pluginToUninstall(self): + def pluginToUninstall(self) -> str: return self._package_name_to_uninstall @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedMaterials(self): + def uninstallUsedMaterials(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), material) for global_stack, extruder_nr, material in self._package_used_materials]) @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedQualities(self): + def uninstallUsedQualities(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), quality) for global_stack, extruder_nr, quality in self._package_used_qualities]) @pyqtSlot() - def closeConfirmResetDialog(self): + def closeConfirmResetDialog(self) -> None: if self._confirm_reset_dialog is not None: self._confirm_reset_dialog.close() ## Uses "uninstall variables" to reset qualities and materials, then uninstall # It's used as an action on Confirm reset on Uninstall @pyqtSlot() - def resetMaterialsQualitiesAndUninstall(self): + def resetMaterialsQualitiesAndUninstall(self) -> None: application = CuraApplication.getInstance() material_manager = application.getMaterialManager() quality_manager = application.getQualityManager() @@ -376,9 +378,9 @@ class Toolbox(QObject, Extension): default_quality_group = quality_manager.getDefaultQualityType(global_stack) machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack) - self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) - - self.uninstall(self._package_id_to_uninstall) + if self._package_id_to_uninstall is not None: + self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) + self.uninstall(self._package_id_to_uninstall) self._resetUninstallVariables() self.closeConfirmResetDialog() @@ -686,7 +688,7 @@ class Toolbox(QObject, Extension): self._temp_plugin_file.close() self._onDownloadComplete(file_path) - def _onDownloadComplete(self, file_path: str): + def _onDownloadComplete(self, file_path: str) -> None: Logger.log("i", "Toolbox: Download complete.") package_info = self._package_manager.getPackageInfo(file_path) if not package_info: @@ -745,9 +747,7 @@ class Toolbox(QObject, Extension): def viewPage(self) -> str: return self._view_page - - - # Expose Models: + # Exposed Models: # -------------------------------------------------------------------------- @pyqtProperty(QObject, notify = metadataChanged) def authorsModel(self) -> AuthorsModel: @@ -785,8 +785,6 @@ class Toolbox(QObject, Extension): def materialsGenericModel(self) -> PackagesModel: return cast(PackagesModel, self._models["materials_generic"]) - - # Filter Models: # -------------------------------------------------------------------------- @pyqtSlot(str, str, str) @@ -813,11 +811,9 @@ class Toolbox(QObject, Extension): self._models[model_type].setFilter({}) self.filterChanged.emit() - # HACK(S): # -------------------------------------------------------------------------- def buildMaterialsModels(self) -> None: - self._metadata["materials_showcase"] = [] self._metadata["materials_available"] = [] @@ -841,7 +837,6 @@ class Toolbox(QObject, Extension): self._models["materials_available"].setMetadata(self._metadata["materials_available"]) def buildPluginsModels(self) -> None: - self._metadata["plugins_showcase"] = [] self._metadata["plugins_available"] = [] From e3681ddd9fdf748f6ba7ff951180542424f72513 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 10 Sep 2018 13:27:13 +0200 Subject: [PATCH 246/364] Also hack the way to get the generic materials, since the tag-filtered calls to the api don't work yet. Contributes to CURA-5670. --- plugins/Toolbox/src/Toolbox.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index a4dcc47c2b..cc9f8ac354 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -231,10 +231,12 @@ class Toolbox(QObject, Extension): # Make remote requests: self._makeRequestByType("packages") self._makeRequestByType("authors") - self._makeRequestByType("plugins_showcase") - self._makeRequestByType("materials_showcase") - self._makeRequestByType("materials_available") - self._makeRequestByType("materials_generic") + # TODO: Uncomment in the future when the tag-filtered api calls work in the cloud server + # self._makeRequestByType("plugins_showcase") + # self._makeRequestByType("plugins_available") + # self._makeRequestByType("materials_showcase") + # self._makeRequestByType("materials_available") + # self._makeRequestByType("materials_generic") # Gather installed packages: self._updateInstalledModels() @@ -614,6 +616,7 @@ class Toolbox(QObject, Extension): do_not_handle = [ "materials_available", "materials_showcase", + "materials_generic", "plugins_available", "plugins_showcase", ] @@ -826,15 +829,20 @@ class Toolbox(QObject, Extension): if author["author_id"] in processed_authors: continue - if "showcase" in item["tags"]: - self._metadata["materials_showcase"].append(author) + # Generic materials to be in the same section + if "generic" in item["tags"]: + self._metadata["materials_generic"].append(item) else: - self._metadata["materials_available"].append(author) + if "showcase" in item["tags"]: + self._metadata["materials_showcase"].append(author) + else: + self._metadata["materials_available"].append(author) - processed_authors.append(author["author_id"]) + processed_authors.append(author["author_id"]) self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) self._models["materials_available"].setMetadata(self._metadata["materials_available"]) + self._models["materials_generic"].setMetadata(self._metadata["materials_generic"]) def buildPluginsModels(self) -> None: self._metadata["plugins_showcase"] = [] From a809575bc85dd808ad20910442192b0059d0f198 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Sep 2018 16:05:53 +0200 Subject: [PATCH 247/364] Add bunch of ID's to qml components so it's easier to test them. CURA-5618 --- plugins/Toolbox/resources/qml/Toolbox.qml | 2 ++ .../qml/ToolboxDownloadsGridTile.qml | 1 + .../Toolbox/resources/qml/ToolboxHeader.qml | 4 ++++ resources/qml/AddMachineDialog.qml | 2 ++ resources/qml/Cura.qml | 12 +++++++++-- resources/qml/Preferences/GeneralPage.qml | 20 +++++++++---------- resources/qml/Settings/SettingCategory.qml | 3 +++ 7 files changed, 31 insertions(+), 13 deletions(-) diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml index 2a56898503..4fb8192d81 100644 --- a/plugins/Toolbox/resources/qml/Toolbox.qml +++ b/plugins/Toolbox/resources/qml/Toolbox.qml @@ -33,6 +33,7 @@ Window { id: header } + Item { id: mainView @@ -75,6 +76,7 @@ Window visible: toolbox.viewCategory == "installed" } } + ToolboxFooter { id: footer diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml index 4366db041c..887140bbfa 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml @@ -9,6 +9,7 @@ import UM 1.1 as UM Item { + id: toolboxDownloadsGridTile property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1 property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) height: childrenRect.height diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml index 9c9f967d54..ca6197d6c3 100644 --- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml +++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml @@ -21,8 +21,10 @@ Item left: parent.left leftMargin: UM.Theme.getSize("default_margin").width } + ToolboxTabButton { + id: pluginsTabButton text: catalog.i18nc("@title:tab", "Plugins") active: toolbox.viewCategory == "plugin" && enabled enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored" @@ -36,6 +38,7 @@ Item ToolboxTabButton { + id: materialsTabButton text: catalog.i18nc("@title:tab", "Materials") active: toolbox.viewCategory == "material" && enabled enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored" @@ -49,6 +52,7 @@ Item } ToolboxTabButton { + id: installedTabButton text: catalog.i18nc("@title:tab", "Installed") active: toolbox.viewCategory == "installed" anchors diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index a635f1f8d1..2b49ce9c31 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -79,6 +79,7 @@ UM.Dialog section.property: "section" section.delegate: Button { + id: machineSectionButton text: section width: machineList.width style: ButtonStyle @@ -214,6 +215,7 @@ UM.Dialog Button { + id: addPrinterButton text: catalog.i18nc("@action:button", "Add Printer") anchors.bottom: parent.bottom anchors.right: parent.right diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index b9febdeb32..07154a0729 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -104,11 +104,13 @@ UM.MainWindow title: catalog.i18nc("@title:menu menubar:toplevel","&File"); MenuItem { + id: newProjectMenu action: Cura.Actions.newProject; } MenuItem { + id: openMenu action: Cura.Actions.open; } @@ -148,6 +150,7 @@ UM.MainWindow MenuItem { + id: exportSelectionMenu text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection..."); enabled: UM.Selection.hasSelection; iconName: "document-save-as"; @@ -156,7 +159,11 @@ UM.MainWindow MenuSeparator { } - MenuItem { action: Cura.Actions.reloadAll; } + MenuItem + { + id: reloadAllMenu + action: Cura.Actions.reloadAll; + } MenuSeparator { } @@ -284,6 +291,7 @@ UM.MainWindow Menu { + id: preferencesMenu title: catalog.i18nc("@title:menu menubar:toplevel","P&references"); MenuItem { action: Cura.Actions.preferences; } @@ -291,7 +299,7 @@ UM.MainWindow Menu { - //: Help menu + id: helpMenu title: catalog.i18nc("@title:menu menubar:toplevel","&Help"); MenuItem { action: Cura.Actions.showProfileFolder; } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 5f60b23477..bba2cf764a 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -13,6 +13,7 @@ UM.PreferencesPage { //: General configuration page title title: catalog.i18nc("@title:tab","General") + id: generalPreferencesPage function setDefaultLanguage(languageCode) { @@ -283,9 +284,6 @@ UM.PreferencesPage } } - - - Label { id: languageCaption @@ -308,7 +306,7 @@ UM.PreferencesPage width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Slice automatically when changing settings.") + text: catalog.i18nc("@info:tooltip", "Slice automatically when changing settings.") CheckBox { @@ -316,7 +314,7 @@ UM.PreferencesPage checked: boolCheck(UM.Preferences.getValue("general/auto_slice")) onClicked: UM.Preferences.setValue("general/auto_slice", checked) - text: catalog.i18nc("@option:check","Slice automatically"); + text: catalog.i18nc("@option:check", "Slice automatically"); } } @@ -330,7 +328,7 @@ UM.PreferencesPage Label { font.bold: true - text: catalog.i18nc("@label","Viewport behavior") + text: catalog.i18nc("@label", "Viewport behavior") } UM.TooltipArea @@ -338,7 +336,7 @@ UM.PreferencesPage width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.") + text: catalog.i18nc("@info:tooltip", "Highlight unsupported areas of the model in red. Without support these areas will not print properly.") CheckBox { @@ -347,14 +345,14 @@ UM.PreferencesPage checked: boolCheck(UM.Preferences.getValue("view/show_overhang")) onClicked: UM.Preferences.setValue("view/show_overhang", checked) - text: catalog.i18nc("@option:check","Display overhang"); + text: catalog.i18nc("@option:check", "Display overhang"); } } 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") + text: catalog.i18nc("@info:tooltip", "Moves the camera so the model is in the center of the view when a model is selected") CheckBox { @@ -368,12 +366,12 @@ UM.PreferencesPage UM.TooltipArea { width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Should the default zoom behavior of cura be inverted?") + text: catalog.i18nc("@info:tooltip", "Should the default zoom behavior of cura be inverted?") CheckBox { id: invertZoomCheckbox - text: catalog.i18nc("@action:button","Invert the direction of camera zoom."); + 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) } diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 419285d893..842b3fd185 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -16,6 +16,7 @@ Button anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width background: Rectangle { + id: backgroundRectangle implicitHeight: UM.Theme.getSize("section").height color: { if (base.color) { @@ -35,6 +36,7 @@ Button Behavior on color { ColorAnimation { duration: 50; } } Rectangle { + id: backgroundLiningRectangle height: UM.Theme.getSize("default_lining").height width: parent.width anchors.bottom: parent.bottom @@ -68,6 +70,7 @@ Button anchors.left: parent.left Label { + id: settingNameLabel anchors { left: parent.left From a909c8f0298c95cf3e63a1e97389a6eef78fb876 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 11 Sep 2018 22:05:39 +0200 Subject: [PATCH 248/364] Don't emit signal if the favorite list didn't change. Contributes to CURA-5682. --- cura/Machines/MaterialManager.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 1463f2e40e..96572354b5 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -199,9 +199,14 @@ class MaterialManager(QObject): self.materialsUpdated.emit() favorites = self._application.getPreferences().getValue("cura/favorite_materials") + favorite_added = False for item in favorites.split(";"): - self._favorites.add(item) - self.favoritesUpdated.emit() + if item not in self._favorites: + self._favorites.add(item) + favorite_added = True + + if favorite_added: + self.favoritesUpdated.emit() def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: material_id = material_metadata["id"] From 9ba4c723f7f5052e4e315fad432c19d657058fd5 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 11 Sep 2018 22:07:14 +0200 Subject: [PATCH 249/364] Fix the linked materials button. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml index a03e5c48d7..3bba9a9791 100644 --- a/resources/qml/Preferences/Materials/MaterialsView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -40,7 +40,7 @@ TabView { return "" } - var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentItem.container_node, true); + var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.currentMaterialNode, true); if (linkedMaterials.length == 0) { return "" From f298d371341c6fb3aa6a57f3c7c18b68888e0d17 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 11 Sep 2018 22:12:54 +0200 Subject: [PATCH 250/364] WIP: Moving current selected material to the material list instead of the page. Change all the previous references to the currentItem in the page. Automatically and correctly select the element that is selected in the extruder. Contributes to CURA-5682. --- .../Materials/MaterialsBrandSection.qml | 14 +-- .../Preferences/Materials/MaterialsList.qml | 113 +++++++++++++++++- .../Preferences/Materials/MaterialsPage.qml | 99 +-------------- .../Preferences/Materials/MaterialsSlot.qml | 4 +- .../Materials/MaterialsTypeSection.qml | 14 +-- 5 files changed, 127 insertions(+), 117 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index e3a3f7a7b8..ef9866632f 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -13,7 +13,7 @@ import Cura 1.0 as Cura Rectangle { id: brand_section - property var expanded: base.expanded_brands.indexOf(model.name) > -1 + property var expanded: materialList.expandedBrands.indexOf(model.name) > -1 property var types_model: model.material_types height: childrenRect.height width: parent.width @@ -22,7 +22,7 @@ Rectangle id: brand_header_background color: { - if(!expanded && model.name == base.current_brand) + if(!expanded && model.name == materialList.currentBrand) { return UM.Theme.getColor("favorites_row_selected") } @@ -79,20 +79,20 @@ Rectangle anchors.fill: brand_header onPressed: { - const i = base.expanded_brands.indexOf(model.name) + const i = materialList.expandedBrands.indexOf(model.name) if (i > -1) { // Remove it - base.expanded_brands.splice(i, 1) + materialList.expandedBrands.splice(i, 1) brand_section.expanded = false } else { // Add it - base.expanded_brands.push(model.name) + materialList.expandedBrands.push(model.name) brand_section.expanded = true } - UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";")); + UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); } } Column @@ -114,7 +114,7 @@ Rectangle target: UM.Preferences onPreferenceChanged: { - expanded = base.expanded_brands.indexOf(model.name) > -1 + expanded = materialList.expandedBrands.indexOf(model.name) > -1 } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 8b870e75be..e763b7f209 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -21,6 +21,111 @@ Item Cura.MaterialBrandsModel { id: materialsModel } Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } Cura.GenericMaterialsModel { id: genericMaterialsModel } + + property var currentType: null + property var currentBrand: null + property var expandedBrands: UM.Preferences.getValue("cura/expanded_brands").split(";") + property var expandedTypes: UM.Preferences.getValue("cura/expanded_types").split(";") + + function expandActiveMaterial(search_root_id) + { + for (var n = 0; n < genericMaterialsModel.rowCount(); n++) + { + var material = genericMaterialsModel.getItem(n); + if (material.root_material_id == search_root_id) + { + if (materialList.expandedBrands.indexOf("Generic") == -1) + { + materialList.expandedBrands.push("Generic"); + materialList.currentBrand = "Generic" + } + } + } + for (var i = 0; i < materialsModel.rowCount(); i++) + { + var brand = materialsModel.getItem(i); + var types_model = brand.material_types; + + for (var j = 0; j < types_model.rowCount(); j++) + { + var type = types_model.getItem(j); + var colors_model = type.colors; + for (var k = 0; k < colors_model.rowCount(); k++) + { + var material = colors_model.getItem(k); + if (material.root_material_id == search_root_id) + { + if (materialList.expandedBrands.indexOf(brand.name) == -1) + { + materialList.expandedBrands.push(brand.name); + materialList.currentBrand = brand.name + } + if (materialList.expandedTypes.indexOf(brand.name + "_" + type.name) == -1) + { + materialList.expandedTypes.push(brand.name + "_" + type.name) + materialList.currentType = brand.name + "_" + type.name + } + } + } + } + } + UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); + UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")); + } + +// Connections +// { +// target: materialsModel +// onItemsChanged: +// { +// var currentItemId = base.hasCurrentItem ? base.currentItem.root_material_id : "" +// var position = Cura.ExtruderManager.activeExtruderIndex +// console.log("!!!!!!!!!!!!!!!!!!! on items changed:", base.newRootMaterialIdToSwitchTo) +// +// // try to pick the currently selected item; it may have been moved +// if (base.newRootMaterialIdToSwitchTo == "") +// { +// console.log("material id is empty, setting to ", currentItemId) +// base.newRootMaterialIdToSwitchTo = currentItemId +// } +// +// console.log("PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", materialsModel.rowCount()) +// for (var brand_idx = 0; brand_idx < materialsModel.rowCount(); ++brand_idx) +// { +// var brand = materialsModel.getItem(brand_idx) +// console.log(item.root_material_id, "=", base.newRootMaterialIdToSwitchTo) +// +// for (var type_idx = 0; type_idx < brand.material_types.rowCount(); ++type_idx) +// { +// var type = brand.material_types.getItem(type_idx) +// if (type.root_material_id == base.newRootMaterialIdToSwitchTo) +// { +// // Switch to the newly created profile if needed +// base.currentItem = item +// // materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex) +// // if (base.toActivateNewMaterial) +// // { +// // Cura.MachineManager.setMaterial(position, item.container_node) +// // } +// base.newRootMaterialIdToSwitchTo = "" +// base.toActivateNewMaterial = false +// return +// } +// } +// } +// +// // If the new id can't be found, then do nothing +//// materialListView.currentIndex = 0 +//// materialListView.activateDetailsWithIndex(materialListView.currentIndex) +//// if (base.toActivateNewMaterial) +//// { +//// Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node) +//// } +// base.newRootMaterialIdToSwitchTo = "" +// base.toActivateNewMaterial = false +// } +// } + Column { Rectangle @@ -102,7 +207,7 @@ Item } Rectangle { - property var expanded: base.expanded_brands.indexOf("Generic") > -1 + property var expanded: materialList.expandedBrands.indexOf("Generic") > -1 id: generic_section height: childrenRect.height @@ -158,18 +263,18 @@ Item anchors.fill: generic_header onPressed: { - const index = base.expanded_brands.indexOf("Generic") + const index = materialList.expandedBrands.indexOf("Generic") if (index > -1) { // Remove it - base.expanded_brands.splice(index, 1) + materialList.expandedBrands.splice(index, 1) generic_section.expanded = false } else { // Add it - base.expanded_brands.push("Generic") + materialList.expandedBrands.push("Generic") generic_section.expanded = true } } diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index bcf875be27..c8ccb51fcc 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -17,8 +17,6 @@ Item // Keep PreferencesDialog happy property var resetEnabled: false property var currentItem: null - property var current_type: null - property var current_brand: null property var hasCurrentItem: base.currentItem != null property var isCurrentItemActivated: @@ -30,8 +28,6 @@ Item property string newRootMaterialIdToSwitchTo: "" property bool toActivateNewMaterial: false - property var expanded_brands: UM.Preferences.getValue("cura/expanded_brands").split(";") - property var expanded_types: UM.Preferences.getValue("cura/expanded_types").split(";") property var extruder_position: Cura.ExtruderManager.activeExtruderIndex property var active_root_material_id: Cura.MachineManager.currentRootMaterialId[extruder_position] @@ -41,101 +37,10 @@ Item name: "cura" } - Cura.MaterialBrandsModel { id: materials_model } - Cura.GenericMaterialsModel { id: generic_materials_model } - - function expandActiveMaterial(search_root_id) - { - for (var n = 0; n < generic_materials_model.rowCount(); n++) - { - var material = generic_materials_model.getItem(n); - if (material.root_material_id == search_root_id) - { - if (base.expanded_brands.indexOf("Generic") == -1) - { - base.expanded_brands.push("Generic"); - base.current_brand = "Generic" - } - } - } - for (var i = 0; i < materials_model.rowCount(); i++) - { - var brand = materials_model.getItem(i); - var types_model = brand.material_types; - - for (var j = 0; j < types_model.rowCount(); j++) - { - var type = types_model.getItem(j); - var colors_model = type.colors; - for (var k = 0; k < colors_model.rowCount(); k++) - { - var material = colors_model.getItem(k); - if (material.root_material_id == search_root_id) - { - if (base.expanded_brands.indexOf(brand.name) == -1) - { - base.expanded_brands.push(brand.name); - base.current_brand = brand.name - } - if (base.expanded_types.indexOf(brand.name+"_"+type.name) == -1) - { - base.expanded_types.push(brand.name+"_"+type.name) - base.current_type = brand.name+"_"+type.name - } - } - } - } - } - UM.Preferences.setValue("cura/expanded_brands", base.expanded_brands.join(";")); - UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";")); - } - Component.onCompleted: { expandActiveMaterial(active_root_material_id) } + Component.onCompleted: { materialListView.expandActiveMaterial(active_root_material_id) } onCurrentItemChanged: { materialDetailsPanel.currentItem = currentItem } - Connections - { - target: materials_model - onItemsChanged: - { - var currentItemId = hasCurrentItem ? base.currentItem.root_material_id : "" - var position = Cura.ExtruderManager.activeExtruderIndex - - // try to pick the currently selected item; it may have been moved - if (base.newRootMaterialIdToSwitchTo == "") - { - base.newRootMaterialIdToSwitchTo = currentItemId - } - - for (var idx = 0; idx < materials_model.rowCount(); ++idx) - { - var item = materials_model.getItem(idx) - if (item.root_material_id == base.newRootMaterialIdToSwitchTo) - { - // Switch to the newly created profile if needed - materialDetailsPanel.currentIndex = idx - materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex) - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, item.container_node) - } - base.newRootMaterialIdToSwitchTo = "" - base.toActivateNewMaterial = false - return - } - } - - materialListView.currentIndex = 0 - materialListView.activateDetailsWithIndex(materialListView.currentIndex) - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, materials_model.getItem(0).container_node) - } - base.newRootMaterialIdToSwitchTo = "" - base.toActivateNewMaterial = false - } - } - // Main layout Label { @@ -241,7 +146,7 @@ Item forceActiveFocus(); exportMaterialDialog.open(); } - enabled: currentItem != null + enabled: base.hasCurrentItem } } diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index 88d613c718..88ff34e4d5 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -59,8 +59,8 @@ Rectangle onClicked: { base.currentItem = material - base.current_brand = material.brand - base.current_type = material.brand+"_"+material.material + materialList.currentBrand = material.brand + materialList.currentType = material.brand + "_" + material.material } hoverEnabled: true onEntered: { material_slot.hovered = true } diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 728748b300..38fc0d6a45 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -13,7 +13,7 @@ import Cura 1.0 as Cura Rectangle { id: material_type_section - property var expanded: base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 + property var expanded: materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1 property var colors_model: model.colors height: childrenRect.height width: parent.width @@ -22,7 +22,7 @@ Rectangle id: material_type_header_background color: { - if(!expanded && model.brand+"_"+model.name == base.current_type) + if(!expanded && model.brand + "_" + model.name == materialList.currentType) { return UM.Theme.getColor("favorites_row_selected") } @@ -94,20 +94,20 @@ Rectangle onPressed: { const identifier = model.brand + "_" + model.name; - const i = base.expanded_types.indexOf(identifier) + const i = materialList.expandedTypes.indexOf(identifier) if (i > -1) { // Remove it - base.expanded_types.splice(i, 1) + materialList.expandedTypes.splice(i, 1) material_type_section.expanded = false } else { // Add it - base.expanded_types.push(identifier) + materialList.expandedTypes.push(identifier) material_type_section.expanded = true } - UM.Preferences.setValue("cura/expanded_types", base.expanded_types.join(";")); + UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")); } } Column @@ -131,7 +131,7 @@ Rectangle target: UM.Preferences onPreferenceChanged: { - expanded = base.expanded_types.indexOf(model.brand + "_" + model.name) > -1 + expanded = materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1 } } } \ No newline at end of file From d7649f9ee4286ca756600326d16e8ba8aa7dc07d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Sep 2018 11:54:35 +0200 Subject: [PATCH 251/364] Print buffer filling rate rather than time frame The filling rate is more interesting. It's our input. --- scripts/check_gcode_buffer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check_gcode_buffer.py b/scripts/check_gcode_buffer.py index d3410096c5..2024ce2214 100755 --- a/scripts/check_gcode_buffer.py +++ b/scripts/check_gcode_buffer.py @@ -351,7 +351,7 @@ class CommandBuffer: self.previous_feedrate = [0, 0, 0, 0] self.previous_nominal_feedrate = 0 - print("Time Frame: %s" % self._detection_time_frame) + print("Command speed: %s" % buffer_filling_rate) print("Code Limit: %s" % self._code_count_limit) self._bad_frame_ranges = [] From 6d2492e5cbe62d593b5a31cf23aea20a59ad926b Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 12:59:13 +0200 Subject: [PATCH 252/364] Remove spurious signal, it does the same as materialsUpdated. Contributes to CURA-5682. --- cura/Machines/MaterialManager.py | 15 ++++----------- cura/Machines/Models/BaseMaterialsModel.py | 3 --- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 96572354b5..7075eaa004 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -40,7 +40,6 @@ if TYPE_CHECKING: 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) @@ -196,17 +195,11 @@ class MaterialManager(QObject): for material_metadata in material_metadatas.values(): self.__addMaterialMetadataIntoLookupTree(material_metadata) - self.materialsUpdated.emit() - favorites = self._application.getPreferences().getValue("cura/favorite_materials") - favorite_added = False for item in favorites.split(";"): - if item not in self._favorites: - self._favorites.add(item) - favorite_added = True + self._favorites.add(item) - if favorite_added: - self.favoritesUpdated.emit() + self.materialsUpdated.emit() def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: material_id = material_metadata["id"] @@ -626,7 +619,7 @@ class MaterialManager(QObject): @pyqtSlot(str) def addFavorite(self, root_material_id: str): self._favorites.add(root_material_id) - self.favoritesUpdated.emit() + self.materialsUpdated.emit() # Ensure all settings are saved. self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) @@ -635,7 +628,7 @@ class MaterialManager(QObject): @pyqtSlot(str) def removeFavorite(self, root_material_id: str): self._favorites.remove(root_material_id) - self.favoritesUpdated.emit() + self.materialsUpdated.emit() # Ensure all settings are saved. self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 1b20e1188c..c08013566b 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -34,9 +34,6 @@ class BaseMaterialsModel(ListModel): # Update this model when list of materials changes self._material_manager.materialsUpdated.connect(self._update) - # Update this model when list of favorites changes - self._material_manager.favoritesUpdated.connect(self._update) - self.addRoleName(Qt.UserRole + 1, "root_material_id") self.addRoleName(Qt.UserRole + 2, "id") self.addRoleName(Qt.UserRole + 3, "GUID") From e069e0db99ac8a0c5ce8060de753d46c299abd02 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Sep 2018 13:18:42 +0200 Subject: [PATCH 253/364] Fix S5 extruder start and end locations CURA-5672 X coordinate 310 is not at the rightmost position, and this causes the prime tower to start printing from somewhere in the middle. --- resources/extruders/ultimaker_s5_extruder_left.def.json | 4 ++-- resources/extruders/ultimaker_s5_extruder_right.def.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/extruders/ultimaker_s5_extruder_left.def.json b/resources/extruders/ultimaker_s5_extruder_left.def.json index c92873b987..275f60bb31 100644 --- a/resources/extruders/ultimaker_s5_extruder_left.def.json +++ b/resources/extruders/ultimaker_s5_extruder_left.def.json @@ -17,10 +17,10 @@ "machine_nozzle_offset_y": { "default_value": 0 }, "machine_extruder_start_pos_abs": { "default_value": true }, - "machine_extruder_start_pos_x": { "default_value": 310 }, + "machine_extruder_start_pos_x": { "default_value": 330 }, "machine_extruder_start_pos_y": { "default_value": 237 }, "machine_extruder_end_pos_abs": { "default_value": true }, - "machine_extruder_end_pos_x": { "default_value": 310 }, + "machine_extruder_end_pos_x": { "default_value": 330 }, "machine_extruder_end_pos_y": { "default_value": 237 }, "machine_nozzle_head_distance": { "default_value": 2.7 }, "extruder_prime_pos_x": { "default_value": -3 }, diff --git a/resources/extruders/ultimaker_s5_extruder_right.def.json b/resources/extruders/ultimaker_s5_extruder_right.def.json index 89d62b89a4..92e08f5cc5 100644 --- a/resources/extruders/ultimaker_s5_extruder_right.def.json +++ b/resources/extruders/ultimaker_s5_extruder_right.def.json @@ -17,10 +17,10 @@ "machine_nozzle_offset_y": { "default_value": 0 }, "machine_extruder_start_pos_abs": { "default_value": true }, - "machine_extruder_start_pos_x": { "default_value": 310 }, + "machine_extruder_start_pos_x": { "default_value": 330 }, "machine_extruder_start_pos_y": { "default_value": 219 }, "machine_extruder_end_pos_abs": { "default_value": true }, - "machine_extruder_end_pos_x": { "default_value": 310 }, + "machine_extruder_end_pos_x": { "default_value": 330 }, "machine_extruder_end_pos_y": { "default_value": 219 }, "machine_nozzle_head_distance": { "default_value": 4.2 }, "extruder_prime_pos_x": { "default_value": 333 }, From f9585b5fae9cdd3f56dc8d8b04f28db5fcf15434 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 11 Sep 2018 17:00:44 +0200 Subject: [PATCH 254/364] [CURA-5708] Hide the Materials-tab in ToolBox (v3.5 only) --- plugins/Toolbox/resources/qml/ToolboxHeader.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml index 9c9f967d54..59c51039d9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml +++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml @@ -34,6 +34,7 @@ Item } } + /* // NOTE: Remember to re-enable for v3.6! ToolboxTabButton { text: catalog.i18nc("@title:tab", "Materials") @@ -46,6 +47,7 @@ Item toolbox.viewPage = "overview" } } + */ } ToolboxTabButton { From c59ff82c6429ffae9fe05772ce68c4af2fbb2c1d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Sep 2018 13:39:10 +0200 Subject: [PATCH 255/364] Revert "[CURA-5708] Hide the Materials-tab in ToolBox (v3.5 only)" This reverts commit f9585b5fae9cdd3f56dc8d8b04f28db5fcf15434. --- plugins/Toolbox/resources/qml/ToolboxHeader.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml index 1e2e95b842..ca6197d6c3 100644 --- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml +++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml @@ -36,7 +36,6 @@ Item } } - /* // NOTE: Remember to re-enable for v3.6! ToolboxTabButton { id: materialsTabButton @@ -50,7 +49,6 @@ Item toolbox.viewPage = "overview" } } - */ } ToolboxTabButton { From b27e5a1f77a32f6b5d30c008cd593b82df2e0f07 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Sep 2018 13:59:09 +0200 Subject: [PATCH 256/364] Fix getActiveExtruderStacks() CURA-5719 The dict values can be a random list. We need to fetch the first N extruders starting from position 0. --- cura/Settings/ExtruderManager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 479e69f558..230759e775 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -311,11 +311,11 @@ class ExtruderManager(QObject): if not global_stack: return [] - result = list(global_stack.extruders.values()) + result_tuple_list = sorted(list(global_stack.extruders.items()), key = lambda x: int(x[0])) + result_list = [item[1] for item in result_tuple_list] machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") - - return result[:machine_extruder_count] + return result_list[:machine_extruder_count] def _globalContainerStackChanged(self) -> None: # If the global container changed, the machine changed and might have extruders that were not registered yet From 56dcc2dded230137fd7ac61e577b81f36b72a6ba Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 14:09:29 +0200 Subject: [PATCH 257/364] Highlight the material that is currently selected. Contributes to CURA-5682. --- .../Preferences/Materials/MaterialsSlot.qml | 158 ++++++++---------- 1 file changed, 73 insertions(+), 85 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index 88ff34e4d5..63d40068ce 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -19,114 +19,102 @@ Rectangle height: UM.Theme.getSize("favorites_row").height width: parent.width - color: base.currentItem == model ? UM.Theme.getColor("favorites_row_selected") : "transparent" + color: base.currentItem.root_material_id == material.root_material_id ? UM.Theme.getColor("favorites_row_selected") : "transparent" - Component.onCompleted: + Rectangle { - if (material.root_material_id == base.active_root_material_id) { + id: swatch + color: material.color_code + border.width: UM.Theme.getSize("default_lining").width + border.color: "black" + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + Label + { + text: material.brand + " " + material.name + verticalAlignment: Text.AlignVCenter + height: parent.height + anchors.left: swatch.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + } + MouseArea + { + anchors.fill: parent + onClicked: + { + materialList.currentBrand = material.brand + materialList.currentType = material.brand + "_" + material.material base.currentItem = material } + hoverEnabled: true + onEntered: { material_slot.hovered = true } + onExited: { material_slot.hovered = false } } - - Item + Button { - height: parent.height - width: parent.width - Rectangle + id: favorite_button + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + visible: material_slot.hovered || material_slot.is_favorite || favorite_button.hovered + anchors { - id: swatch - color: material.color_code - border.width: UM.Theme.getSize("default_lining").width - border.color: "black" - width: UM.Theme.getSize("favorites_button_icon").width - height: UM.Theme.getSize("favorites_button_icon").height - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + verticalCenter: parent.verticalCenter } - Label + onClicked: { - text: material.brand + " " + material.name - verticalAlignment: Text.AlignVCenter - height: parent.height - anchors.left: swatch.right - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: UM.Theme.getSize("narrow_margin").width - } - MouseArea - { - anchors.fill: parent - onClicked: - { - base.currentItem = material - materialList.currentBrand = material.brand - materialList.currentType = material.brand + "_" + material.material - } - hoverEnabled: true - onEntered: { material_slot.hovered = true } - onExited: { material_slot.hovered = false } - } - Button - { - id: favorite_button - text: "" - implicitWidth: UM.Theme.getSize("favorites_button").width - implicitHeight: UM.Theme.getSize("favorites_button").height - visible: material_slot.hovered || material_slot.is_favorite || favorite_button.hovered - anchors - { - right: parent.right - verticalCenter: parent.verticalCenter - } - onClicked: - { - if (material_slot.is_favorite) { - base.materialManager.removeFavorite(material.root_material_id) - material_slot.is_favorite = false - return - } - base.materialManager.addFavorite(material.root_material_id) - material_slot.is_favorite = true + if (material_slot.is_favorite) { + base.materialManager.removeFavorite(material.root_material_id) + material_slot.is_favorite = false return } - style: ButtonStyle + base.materialManager.addFavorite(material.root_material_id) + material_slot.is_favorite = true + return + } + style: ButtonStyle + { + background: Rectangle { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } + anchors.fill: parent + color: "transparent" } - UM.RecolorImage { - anchors + } + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + sourceSize.width: width + sourceSize.height: height + color: + { + if (favorite_button.hovered) { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter + return UM.Theme.getColor("primary_hover") } - width: UM.Theme.getSize("favorites_button_icon").width - height: UM.Theme.getSize("favorites_button_icon").height - sourceSize.width: width - sourceSize.height: height - color: + else { - if (favorite_button.hovered) + if (material_slot.is_favorite) { - return UM.Theme.getColor("primary_hover") + return UM.Theme.getColor("primary") } else { - if (material_slot.is_favorite) - { - return UM.Theme.getColor("primary") - } - else - { - UM.Theme.getColor("text_inactive") - } + UM.Theme.getColor("text_inactive") } } - source: material_slot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") } + source: material_slot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") } } } \ No newline at end of file From 921b11974cbb6dc8f437589b1c5214bfd0cf69d4 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 15:42:02 +0200 Subject: [PATCH 258/364] Improve the way the categories are highlighted. When a material is selected, but the brand or the type is collapsed, those components are also highlighted to indicate the path to the material. Reuse the MaterialBrandSection also for the generic materials, that allow us to only mantain one component. Contributes to CURA-5682. --- .../Materials/MaterialsBrandSection.qml | 37 ++- .../Materials/MaterialsDetailsPanel.qml | 2 +- .../Preferences/Materials/MaterialsList.qml | 213 +++++------------- .../Preferences/Materials/MaterialsPage.qml | 16 +- .../Materials/MaterialsTypeSection.qml | 4 +- 5 files changed, 98 insertions(+), 174 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index ef9866632f..91fecb3e53 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -13,8 +13,12 @@ import Cura 1.0 as Cura Rectangle { id: brand_section - property var expanded: materialList.expandedBrands.indexOf(model.name) > -1 - property var types_model: model.material_types + + property var sectionName: "" + property var elements // This can be a MaterialTypesModel or GenericMaterialsModel + property var hasMaterialTypes: true // It indicates wheather it has material types or not + property var expanded: materialList.expandedBrands.indexOf(sectionName) > -1 + height: childrenRect.height width: parent.width Rectangle @@ -22,7 +26,7 @@ Rectangle id: brand_header_background color: { - if(!expanded && model.name == materialList.currentBrand) + if(!expanded && sectionName == materialList.currentBrand) { return UM.Theme.getColor("favorites_row_selected") } @@ -40,7 +44,7 @@ Rectangle Label { id: brand_name - text: model.name + text: sectionName height: UM.Theme.getSize("favorites_row").height width: parent.width - UM.Theme.getSize("favorites_button").width verticalAlignment: Text.AlignVCenter @@ -79,7 +83,7 @@ Rectangle anchors.fill: brand_header onPressed: { - const i = materialList.expandedBrands.indexOf(model.name) + const i = materialList.expandedBrands.indexOf(sectionName) if (i > -1) { // Remove it @@ -89,7 +93,7 @@ Rectangle else { // Add it - materialList.expandedBrands.push(model.name) + materialList.expandedBrands.push(sectionName) brand_section.expanded = true } UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); @@ -102,10 +106,25 @@ Rectangle anchors.left: parent.left height: brand_section.expanded ? childrenRect.height : 0 visible: brand_section.expanded + Repeater { - model: types_model - delegate: MaterialsTypeSection {} + model: elements + delegate: MaterialsTypeSection + { + visible: hasMaterialTypes + materialType: model + } + } + // In case there are no types, we create a material slot + Repeater + { + model: elements + delegate: MaterialsSlot + { + visible: !hasMaterialTypes + material: model + } } } @@ -114,7 +133,7 @@ Rectangle target: UM.Preferences onPreferenceChanged: { - expanded = materialList.expandedBrands.indexOf(model.name) > -1 + expanded = materialList.expandedBrands.indexOf(sectionName) > -1 } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index 738a1fa6d2..ec5f694c18 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -15,7 +15,7 @@ Item property var currentItem: base.currentItem - onCurrentItemChanged: { updateMaterialPropertiesObject() } + onCurrentItemChanged: updateMaterialPropertiesObject() function updateMaterialPropertiesObject() { diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index e763b7f209..abc07a6455 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -26,12 +26,20 @@ Item property var currentBrand: null property var expandedBrands: UM.Preferences.getValue("cura/expanded_brands").split(";") property var expandedTypes: UM.Preferences.getValue("cura/expanded_types").split(";") - + + // Store information about which parts of the tree are expanded + function persistExpandedCategories() + { + UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")) + UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")) + } + + // Expand the list of materials in order to select the current material function expandActiveMaterial(search_root_id) { - for (var n = 0; n < genericMaterialsModel.rowCount(); n++) + for (var material_idx = 0; material_idx < genericMaterialsModel.rowCount(); material_idx++) { - var material = genericMaterialsModel.getItem(n); + var material = genericMaterialsModel.getItem(material_idx) if (material.root_material_id == search_root_id) { if (materialList.expandedBrands.indexOf("Generic") == -1) @@ -39,20 +47,22 @@ Item materialList.expandedBrands.push("Generic"); materialList.currentBrand = "Generic" } + base.currentItem = material + persistExpandedCategories() + return true } } - for (var i = 0; i < materialsModel.rowCount(); i++) + for (var brand_idx = 0; brand_idx < materialsModel.rowCount(); brand_idx++) { - var brand = materialsModel.getItem(i); - var types_model = brand.material_types; - - for (var j = 0; j < types_model.rowCount(); j++) + var brand = materialsModel.getItem(brand_idx) + var types_model = brand.material_types + for (var type_idx = 0; type_idx < types_model.rowCount(); type_idx++) { - var type = types_model.getItem(j); - var colors_model = type.colors; - for (var k = 0; k < colors_model.rowCount(); k++) + var type = types_model.getItem(type_idx) + var colors_model = type.colors + for (var material_idx = 0; material_idx < colors_model.rowCount(); material_idx++) { - var material = colors_model.getItem(k); + var material = colors_model.getItem(material_idx) if (material.root_material_id == search_root_id) { if (materialList.expandedBrands.indexOf(brand.name) == -1) @@ -65,66 +75,30 @@ Item materialList.expandedTypes.push(brand.name + "_" + type.name) materialList.currentType = brand.name + "_" + type.name } + base.currentItem = material + persistExpandedCategories() + return true } } } + return false } - UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); - UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")); } -// Connections -// { -// target: materialsModel -// onItemsChanged: -// { -// var currentItemId = base.hasCurrentItem ? base.currentItem.root_material_id : "" -// var position = Cura.ExtruderManager.activeExtruderIndex -// console.log("!!!!!!!!!!!!!!!!!!! on items changed:", base.newRootMaterialIdToSwitchTo) -// -// // try to pick the currently selected item; it may have been moved -// if (base.newRootMaterialIdToSwitchTo == "") -// { -// console.log("material id is empty, setting to ", currentItemId) -// base.newRootMaterialIdToSwitchTo = currentItemId -// } -// -// console.log("PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", materialsModel.rowCount()) -// for (var brand_idx = 0; brand_idx < materialsModel.rowCount(); ++brand_idx) -// { -// var brand = materialsModel.getItem(brand_idx) -// console.log(item.root_material_id, "=", base.newRootMaterialIdToSwitchTo) -// -// for (var type_idx = 0; type_idx < brand.material_types.rowCount(); ++type_idx) -// { -// var type = brand.material_types.getItem(type_idx) -// if (type.root_material_id == base.newRootMaterialIdToSwitchTo) -// { -// // Switch to the newly created profile if needed -// base.currentItem = item -// // materialDetailsPanel.activateDetailsWithIndex(materialListView.currentIndex) -// // if (base.toActivateNewMaterial) -// // { -// // Cura.MachineManager.setMaterial(position, item.container_node) -// // } -// base.newRootMaterialIdToSwitchTo = "" -// base.toActivateNewMaterial = false -// return -// } -// } -// } -// -// // If the new id can't be found, then do nothing -//// materialListView.currentIndex = 0 -//// materialListView.activateDetailsWithIndex(materialListView.currentIndex) -//// if (base.toActivateNewMaterial) -//// { -//// Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node) -//// } -// base.newRootMaterialIdToSwitchTo = "" -// base.toActivateNewMaterial = false -// } -// } + Connections + { + target: materialsModel + onItemsChanged: + { + var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) +// if (base.toActivateNewMaterial) +// { +// Cura.MachineManager.setMaterial(position, material.container_node) +// } + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false + } + } Column { @@ -199,97 +173,6 @@ Item Repeater { model: favoriteMaterialsModel - delegate: MaterialsSlot { - material: model - } - } - } - } - Rectangle - { - property var expanded: materialList.expandedBrands.indexOf("Generic") > -1 - - id: generic_section - height: childrenRect.height - width: materialList.width - Rectangle - { - id: generic_header_background - color: UM.Theme.getColor("favorites_header_bar") - anchors.fill: generic_header - } - Row - { - id: generic_header - Label - { - id: generic_name - text: "Generic" - height: UM.Theme.getSize("favorites_row").height - width: materialList.width - UM.Theme.getSize("favorites_button").width - verticalAlignment: Text.AlignVCenter - leftPadding: 4 - } - Button - { - text: "" - implicitWidth: UM.Theme.getSize("favorites_button").width - implicitHeight: UM.Theme.getSize("favorites_button").height - UM.RecolorImage { - anchors - { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: "black" - source: generic_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") - } - style: ButtonStyle - { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } - } - } - } - MouseArea - { - anchors.fill: generic_header - onPressed: - { - const index = materialList.expandedBrands.indexOf("Generic") - - if (index > -1) - { - // Remove it - materialList.expandedBrands.splice(index, 1) - generic_section.expanded = false - } - else - { - // Add it - materialList.expandedBrands.push("Generic") - generic_section.expanded = true - } - } - } - Column - { - anchors.top: generic_header.bottom - width: materialList.width - anchors.left: parent.left - height: generic_section.expanded ? childrenRect.height : 0 - visible: generic_section.expanded - - Repeater - { - model: genericMaterialsModel delegate: MaterialsSlot { material: model @@ -297,11 +180,25 @@ Item } } } + + MaterialsBrandSection + { + id: genericSection + sectionName: "Generic" + elements: genericMaterialsModel + hasMaterialTypes: false + } Repeater { id: brand_list model: materialsModel - delegate: MaterialsBrandSection {} + delegate: MaterialsBrandSection + { + id: brandSection + sectionName: model.name + elements: model.material_types + hasMaterialTypes: true + } } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index c8ccb51fcc..c77d4eb226 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -21,9 +21,13 @@ Item property var hasCurrentItem: base.currentItem != null property var isCurrentItemActivated: { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return base.currentItem.root_material_id == root_material_id; + if (!hasCurrentItem) + { + return false + } + const extruder_position = Cura.ExtruderManager.activeExtruderIndex + const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position] + return base.currentItem.root_material_id == root_material_id } property string newRootMaterialIdToSwitchTo: "" property bool toActivateNewMaterial: false @@ -37,9 +41,11 @@ Item name: "cura" } - Component.onCompleted: { materialListView.expandActiveMaterial(active_root_material_id) } + // When loaded, try to select the active material in the tree + Component.onCompleted: materialListView.expandActiveMaterial(active_root_material_id) - onCurrentItemChanged: { materialDetailsPanel.currentItem = currentItem } + // Every time the selected item has changed, notify to the details panel + onCurrentItemChanged: materialDetailsPanel.currentItem = currentItem // Main layout Label diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 38fc0d6a45..42ca338cf0 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -13,6 +13,7 @@ import Cura 1.0 as Cura Rectangle { id: material_type_section + property var materialType property var expanded: materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1 property var colors_model: model.colors height: childrenRect.height @@ -120,7 +121,8 @@ Rectangle Repeater { model: colors_model - delegate: MaterialsSlot { + delegate: MaterialsSlot + { material: model } } From 6183a07d7603ae5fb5d914c6e35fead79bbe3993 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 16:35:01 +0200 Subject: [PATCH 259/364] Activate the material right after it was created or duplicated. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsList.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index abc07a6455..510d030445 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -91,10 +91,11 @@ Item onItemsChanged: { var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) -// if (base.toActivateNewMaterial) -// { -// Cura.MachineManager.setMaterial(position, material.container_node) -// } + if (base.toActivateNewMaterial) + { + var position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + } base.newRootMaterialIdToSwitchTo = "" base.toActivateNewMaterial = false } From e3f67f1147b05a83ce9490a3d9e93a14317d610b Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 16:37:16 +0200 Subject: [PATCH 260/364] Fix code style. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsView.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml index 3bba9a9791..30a02f2741 100644 --- a/resources/qml/Preferences/Materials/MaterialsView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -567,7 +567,7 @@ TabView // don't change when new name is the same if (old_name == new_name) { - return; + return } // update the values @@ -576,14 +576,14 @@ TabView } // update the type of the material - function updateMaterialType (old_type, new_type) + function updateMaterialType(old_type, new_type) { base.setMetaDataEntry("material", old_type, new_type); - materialProperties.material= new_type; + materialProperties.material = new_type; } // update the brand of the material - function updateMaterialBrand (old_brand, new_brand) + function updateMaterialBrand(old_brand, new_brand) { base.setMetaDataEntry("brand", old_brand, new_brand); materialProperties.brand = new_brand; From 3da6e3c4535db85a921bf5770903bd1a729946e1 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Wed, 12 Sep 2018 16:08:30 +0200 Subject: [PATCH 261/364] Set simulation path to 0 after updating layer CURA-5677 --- plugins/SimulationView/SimulationView.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index b4ca9584c7..8d671dcb56 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -670,6 +670,7 @@ Item onCurrentLayerChanged: { playButton.pauseSimulation() + pathSlider.setHandleValue(0) // After updating the layer set Path slider to 0 layerSlider.setUpperValue(UM.SimulationView.currentLayer) } } From 3368428dbb480f794f199db58ffebbed944bfec4 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 16:57:43 +0200 Subject: [PATCH 262/364] Fix text field alignment. The color text field was too short in many cases, when the color name is long. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsView.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml index 30a02f2741..b1eb787cd2 100644 --- a/resources/qml/Preferences/Materials/MaterialsView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -191,6 +191,7 @@ TabView ReadOnlyTextField { id: colorLabel; + width: parent.width - colorSelector.width - parent.spacing text: properties.color_name; readOnly: !base.editingEnabled onEditingFinished: base.setMetaDataEntry("color_name", properties.color_name, text) From d1301d16a92dcb8e952152ff319acc217b729fb7 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Sep 2018 16:56:04 +0200 Subject: [PATCH 263/364] Skip the do-not-handle URLs instead of returning CURA-5718 The request-url dict is not ordered so you cannot garuantee the ordering when you use .items(). This can cause a problem that if a do-not-handle item occurs first then nothing will be handled at all. --- plugins/Toolbox/src/Toolbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index cc9f8ac354..9488b50e4e 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -626,7 +626,7 @@ class Toolbox(QObject, Extension): # HACK: Do nothing because we'll handle these from the "packages" call if type in do_not_handle: - return + continue if reply.url() == url: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: From efdec50614f447038351ec7ffbabec0babc4a5d5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Sep 2018 17:08:58 +0200 Subject: [PATCH 264/364] Fix typo --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 8c2262b5b7..505c988a13 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -891,7 +891,7 @@ Cura.MachineAction { id: machineHeadPolygonProvider - containerStackId: base.acthiveMachineId + containerStackId: base.activeMachineId key: "machine_head_with_fans_polygon" watchedProperties: [ "value" ] storeIndex: manager.containerIndex From 6dc53cc60a8b53a4303b141c0e305aecdd4654c3 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 12 Sep 2018 18:39:19 +0200 Subject: [PATCH 265/364] Select the next selected material when it is activated or removed. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsPage.qml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index c77d4eb226..7a7a2b885f 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -84,8 +84,10 @@ Item { forceActiveFocus() - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - Cura.MachineManager.setMaterial(extruder_position, base.currentItem.container_node); + // Set the current material as the one to be activated (needed to force the UI update) + base.newRootMaterialIdToSwitchTo = base.currentItem.root_material_id + const extruder_position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(extruder_position, base.currentItem.container_node) } } @@ -258,6 +260,8 @@ Item modality: Qt.ApplicationModal onYes: { + // 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); } } From 7ec62315e0a5ca5e79bcb9219c10951a0a81af08 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 13 Sep 2018 10:54:19 +0200 Subject: [PATCH 266/364] Remove shortcut for About CURA-5642 It has conflict with "&Add Printer". --- resources/i18n/cura.pot | 2 +- resources/i18n/de_DE/cura.po | 4 ++-- resources/i18n/es_ES/cura.po | 4 ++-- resources/i18n/fi_FI/cura.po | 4 ++-- resources/i18n/fr_FR/cura.po | 4 ++-- resources/i18n/it_IT/cura.po | 4 ++-- resources/i18n/ja_JP/cura.po | 2 +- resources/i18n/ko_KR/cura.po | 2 +- resources/i18n/nl_NL/cura.po | 4 ++-- resources/i18n/pl_PL/cura.po | 4 ++-- resources/i18n/pt_BR/cura.po | 4 ++-- resources/i18n/pt_PT/cura.po | 4 ++-- resources/i18n/ru_RU/cura.po | 2 +- resources/i18n/tr_TR/cura.po | 4 ++-- resources/i18n/zh_CN/cura.po | 4 ++-- resources/i18n/zh_TW/cura.po | 4 ++-- resources/qml/Actions.qml | 2 +- 17 files changed, 29 insertions(+), 29 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 71c55ffc21..4235f75461 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -3955,7 +3955,7 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 645082a2bb..9428eef444 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -3802,8 +3802,8 @@ msgstr "&Fehler melden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Über..." +msgid "About..." +msgstr "Über..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 88b8e779ff..66968f77ab 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -3814,8 +3814,8 @@ msgstr "Informar de un &error" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Acerca de..." +msgid "About..." +msgstr "Acerca de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index 4684ff69d8..eb2d6ef7fb 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -3821,8 +3821,8 @@ msgstr "Ilmoita &virheestä" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "Ti&etoja..." +msgid "About..." +msgstr "Tietoja..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 6591073c98..980cb7fa3a 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -3802,8 +3802,8 @@ msgstr "Notifier un &bug" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&À propos de..." +msgid "About..." +msgstr "À propos de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 361a65c542..e8d84822b8 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -3800,8 +3800,8 @@ msgstr "Se&gnala un errore" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "I&nformazioni..." +msgid "About..." +msgstr "Informazioni..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 5bfcf0af02..3f002a6346 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -3806,7 +3806,7 @@ msgstr "報告&バグ" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "アバウト..." # can’t enter japanese text diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index a3bd842bd3..77e12af28e 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -3798,7 +3798,7 @@ msgstr "버그 리포트" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "소개..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 24e27c09b5..8d21c5a805 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -3800,8 +3800,8 @@ msgstr "Een &Bug Rapporteren" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Over..." +msgid "About..." +msgstr "Over..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index acfcc54f76..722826cc8b 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -3836,8 +3836,8 @@ msgstr "Zgłoś błąd" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&O..." +msgid "About..." +msgstr "O..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index a6a93bb2a3..34e842eb55 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -3839,8 +3839,8 @@ msgstr "Relatar um &Bug" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "Sobre (&A)..." +msgid "About..." +msgstr "Sobre..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index fe8d44d361..8a8ff0a769 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -3918,8 +3918,8 @@ msgstr "Reportar um &erro" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Sobre..." +msgid "About..." +msgstr "Sobre..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index 7622349423..acc35df94f 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -3806,7 +3806,7 @@ msgstr "Отправить отчёт об ошибке" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "О Cura..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 6c216b7d1c..b6eb498620 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -3800,8 +3800,8 @@ msgstr "Hata Bildir" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Hakkında..." +msgid "About..." +msgstr "Hakkında..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index aab579ac0b..019f8bc7c3 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -3836,8 +3836,8 @@ msgstr "BUG 反馈(&B)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "关于(&A)…" +msgid "About..." +msgstr "关于…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index 8d8b7c97d6..5667b643a8 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -3837,8 +3837,8 @@ msgstr "BUG 回報(&B)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "關於(&A)…" +msgid "About..." +msgstr "關於…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 1b2f636f3e..82c177951d 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -222,7 +222,7 @@ Item Action { id: aboutAction; - text: catalog.i18nc("@action:inmenu menubar:help","&About..."); + text: catalog.i18nc("@action:inmenu menubar:help","About..."); iconName: "help-about"; } From e629ea89ffe7e30c1f766bcf65492bf3b5be443b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 13 Sep 2018 10:55:33 +0200 Subject: [PATCH 267/364] Improve shortcut check script CURA-5642 More information in the output. --- scripts/check_shortcut_keys.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/check_shortcut_keys.py b/scripts/check_shortcut_keys.py index 2796002c3f..a47a8143f7 100644 --- a/scripts/check_shortcut_keys.py +++ b/scripts/check_shortcut_keys.py @@ -85,10 +85,12 @@ class ShortcutKeysChecker: msg_section = data_dict[self.MSGCTXT] keys_dict = shortcut_dict[msg_section] if shortcut_key not in keys_dict: - keys_dict[shortcut_key] = dict() - existing_data_dict = keys_dict[shortcut_key] + keys_dict[shortcut_key] = {"shortcut_key": shortcut_key, + "section": msg_section, + "existing_lines": dict(), + } + existing_data_dict = keys_dict[shortcut_key]["existing_lines"] existing_data_dict[start_line] = {"message": msg, - "shortcut_key": shortcut_key, } def _get_shortcut_key(self, text: str) -> Optional[str]: @@ -105,16 +107,18 @@ class ShortcutKeysChecker: has_duplicates = False for keys_dict in shortcut_dict.values(): for shortcut_key, data_dict in keys_dict.items(): - if len(data_dict) == 1: + if len(data_dict["existing_lines"]) == 1: continue has_duplicates = True print("") print("The following messages have the same shortcut key '%s':" % shortcut_key) - for line, msg in data_dict.items(): + print(" shortcut: '%s'" % data_dict["shortcut_key"]) + print(" section : '%s'" % data_dict["section"]) + for line, msg in data_dict["existing_lines"].items(): relative_filename = (filename.rsplit("..", 1)[-1])[1:] - print(" - [%s] L%7d : [%s]" % (relative_filename, line, msg)) + print(" - [%s] L%7d : '%s'" % (relative_filename, line, msg["message"])) return has_duplicates From 7a3e61e8f113b4285d04db27d69631aa347596a3 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 13 Sep 2018 10:56:27 +0200 Subject: [PATCH 268/364] chmod a+x check_shortcut_keys.py CURA-5642 --- scripts/check_shortcut_keys.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/check_shortcut_keys.py diff --git a/scripts/check_shortcut_keys.py b/scripts/check_shortcut_keys.py old mode 100644 new mode 100755 From 5db008f763ebe02596a9cdc88fc7c02792a7964c Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Thu, 13 Sep 2018 12:56:51 +0200 Subject: [PATCH 269/364] New duplicated favorite material will be added to favorite category CURA-5673 --- cura/Machines/MaterialManager.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 98a4eeb330..f74da5de85 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -590,6 +590,12 @@ class MaterialManager(QObject): for container_to_add in new_containers: container_to_add.setDirty(True) self._container_registry.addContainer(container_to_add) + + + #if duplicated material was favorite then new material should also be added to favorite. + if root_material_id in self.getFavorites(): + self.addFavorite(new_base_id) + return new_base_id # From f0e8746a22fdfb78d9a38a8aafe3111a1fe8fa2f Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Thu, 13 Sep 2018 13:23:10 +0200 Subject: [PATCH 270/364] Code style, duplicate material CURA-5673 --- cura/Machines/MaterialManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index f74da5de85..0feecce41e 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -592,7 +592,7 @@ class MaterialManager(QObject): self._container_registry.addContainer(container_to_add) - #if duplicated material was favorite then new material should also be added to favorite. + # 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) From b39d6c7d8738d08b13b02b269d7d3ec31b11397f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 13 Sep 2018 13:27:21 +0200 Subject: [PATCH 271/364] Package upgrade should also check SDK version --- plugins/Toolbox/src/Toolbox.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 9488b50e4e..9e9fdd6f29 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -488,7 +488,17 @@ class Toolbox(QObject, Extension): local_version = Version(local_package["package_version"]) remote_version = Version(remote_package["package_version"]) - return remote_version > local_version + + can_upgrade = False + if remote_version > local_version: + can_upgrade = True + # A package with the same version can be built to have different SDK versions. So, for a package with the same + # version, we also need to check if the current one has a lower SDK version. If so, this package should also + # be upgradable. + elif remote_version == local_version and local_package.get("sdk_version", 0) < int(self._getSDKVersion()): + can_upgrade = True + + return can_upgrade @pyqtSlot(str, result = bool) def canDowngrade(self, package_id: str) -> bool: From 9627f216b2d852b585263b544f7e18314c8bc7b8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 13 Sep 2018 16:22:36 +0200 Subject: [PATCH 272/364] Actually ensure that walls don't get slower than 1 mm/s CURA-5724 --- resources/variants/ultimaker2_plus_0.4.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index d9d982ef11..3b54e0cdef 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -12,5 +12,5 @@ hardware_type = nozzle machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.05 speed_wall = =round(speed_print / 1.25, 1) -speed_wall_0 = =min(speed_wall - 10, 1) +speed_wall_0 = =max(speed_wall - 10, 1) speed_topbottom = =round(speed_print / 2.25, 1) From c962b519b192f2a66be79e0ae0cd47c97631a248 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Sep 2018 16:56:14 +0200 Subject: [PATCH 273/364] Clarify PRIME_CLEARANCE global better --- cura/BuildVolume.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 10ae8bb87a..4059283a32 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -28,7 +28,7 @@ import copy from typing import List, Optional -# Setting for clearance around the prime +# Radius of disallowed area in mm around prime. I.e. how much distance to keep from prime position. PRIME_CLEARANCE = 6.5 From 8298f76d91314fe3eda865859341c07000b6fb8d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 14 Sep 2018 09:43:24 +0200 Subject: [PATCH 274/364] Add material_diameter into fdmprinter When saving a material to a file, it will save all the settings in that container, which needs to create SettingInstances for all the cached ones, and for those instances, their definitions will be retrieved from the machine definition. material_diameter is one of the settings, but it only exists in the extruder definitions, so when it tries to save a material profile, a lot of warnings/errors will occur due to the missing "material_diameter" in fdmprinter. Adding it back fixes this problem. --- resources/definitions/fdmprinter.def.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4c87a3bcf0..6833e921da 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -77,6 +77,20 @@ "type": "str", "enabled": false }, + "material_diameter": + { + "label": "Diameter", + "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", + "unit": "mm", + "type": "float", + "default_value": 2.85, + "minimum_value": "0.0001", + "minimum_value_warning": "0.4", + "maximum_value_warning": "3.5", + "enabled": "machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_bed_temp_wait": { "label": "Wait for Build Plate Heatup", From 972f0bef438dec38bede2e9a93cde6eafdce230f Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Fri, 14 Sep 2018 10:51:56 +0200 Subject: [PATCH 275/364] WIP Fix an error in which the current selected material was not correctly selected when there is more than one brand (stupid mistake). Also fix problems when the user changes some material information. Contributes to CURA-5682. --- .../Materials/MaterialsDetailsPanel.qml | 15 +++--- .../Preferences/Materials/MaterialsList.qml | 51 +++++++++++++++---- .../Preferences/Materials/MaterialsView.qml | 12 ++--- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index ec5f694c18..43e98d63a6 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -13,16 +13,17 @@ Item { id: detailsPanel - property var currentItem: base.currentItem + property var currentItem: null - onCurrentItemChanged: updateMaterialPropertiesObject() + onCurrentItemChanged: + { + // When the current item changes, the detail view needs to be updated + updateMaterialPropertiesObject() + materialDetailsView.currentMaterialNode = currentItem.container_node + } function updateMaterialPropertiesObject() { - if (currentItem === null) - { - return - } materialProperties.name = currentItem.name || "Unknown" materialProperties.guid = currentItem.GUID materialProperties.container_id = currentItem.id @@ -71,8 +72,6 @@ Item properties: materialProperties containerId: currentItem != null ? currentItem.id : "" currentMaterialNode: currentItem.container_node - - } QtObject diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 510d030445..0854371655 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -37,6 +37,13 @@ Item // Expand the list of materials in order to select the current material function expandActiveMaterial(search_root_id) { + if (search_root_id == "") + { + // When this happens it means that the information of one of the materials has changed, so the model + // was updated and the list has to highlight the current item. + var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id + search_root_id = currentItemId + } for (var material_idx = 0; material_idx < genericMaterialsModel.rowCount(); material_idx++) { var material = genericMaterialsModel.getItem(material_idx) @@ -44,9 +51,9 @@ Item { if (materialList.expandedBrands.indexOf("Generic") == -1) { - materialList.expandedBrands.push("Generic"); - materialList.currentBrand = "Generic" + materialList.expandedBrands.push("Generic") } + materialList.currentBrand = "Generic" base.currentItem = material persistExpandedCategories() return true @@ -67,22 +74,22 @@ Item { if (materialList.expandedBrands.indexOf(brand.name) == -1) { - materialList.expandedBrands.push(brand.name); - materialList.currentBrand = brand.name + materialList.expandedBrands.push(brand.name) } + materialList.currentBrand = brand.name if (materialList.expandedTypes.indexOf(brand.name + "_" + type.name) == -1) { materialList.expandedTypes.push(brand.name + "_" + type.name) - materialList.currentType = brand.name + "_" + type.name } + materialList.currentType = brand.name + "_" + type.name base.currentItem = material persistExpandedCategories() return true } } } - return false } + return false } Connections @@ -91,13 +98,35 @@ Item onItemsChanged: { var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) - if (base.toActivateNewMaterial) + if (correctlyExpanded) { - var position = Cura.ExtruderManager.activeExtruderIndex - Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + if (base.toActivateNewMaterial) + { + var position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + } + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false + } + } + } + + Connections + { + target: genericMaterialsModel + onItemsChanged: + { + var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) + if (correctlyExpanded) + { + if (base.toActivateNewMaterial) + { + var position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + } + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false } - base.newRootMaterialIdToSwitchTo = "" - base.toActivateNewMaterial = false } } diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml index b1eb787cd2..56fa12877f 100644 --- a/resources/qml/Preferences/Materials/MaterialsView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -572,21 +572,21 @@ TabView } // update the values - base.materialManager.setMaterialName(base.currentMaterialNode, new_name); - materialProperties.name = new_name; + base.materialManager.setMaterialName(base.currentMaterialNode, new_name) + properties.name = new_name } // update the type of the material function updateMaterialType(old_type, new_type) { - base.setMetaDataEntry("material", old_type, new_type); - materialProperties.material = new_type; + base.setMetaDataEntry("material", old_type, new_type) + properties.material = new_type } // update the brand of the material function updateMaterialBrand(old_brand, new_brand) { - base.setMetaDataEntry("brand", old_brand, new_brand); - materialProperties.brand = new_brand; + base.setMetaDataEntry("brand", old_brand, new_brand) + properties.brand = new_brand } } From 572afb052e9a0d38ed874b1282a2f4b14a30bf47 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 11:30:25 +0200 Subject: [PATCH 276/364] Remove unused import This import was actually causing the test to fail on my computer due to a dependency on the order of importing libArcus vs. PyQt. --- .../VersionUpgrade26to27/VersionUpgrade26to27.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py index 2037a0211d..dfa436e5bd 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py @@ -1,11 +1,10 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse the files we need to upgrade and write the new files. import io #To serialise configparser output to a string. from UM.VersionUpgrade import VersionUpgrade -from cura.CuraApplication import CuraApplication # a dict of renamed quality profiles: : _renamed_quality_profiles = { From 2e6401b7dc69436306fc8dc27b1a71d52f6ae81f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 11:36:31 +0200 Subject: [PATCH 277/364] Don't depend on the name of resource folders not changing If we choose to rename the resource folders, then this plug-in should still look in the old resource folders. So hard-code these resource folders in the state that they were in at version 2.5 so that we can freely change them in a modern version. --- .../VersionUpgrade25to26/VersionUpgrade25to26.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 54b561c847..2430b35ea0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse the files we need to upgrade and write the new files. @@ -9,8 +9,6 @@ from urllib.parse import quote_plus from UM.Resources import Resources from UM.VersionUpgrade import VersionUpgrade -from cura.CuraApplication import CuraApplication - _removed_settings = { #Settings that were removed in 2.5. "start_layers_at_same_position", "sub_div_rad_mult" @@ -152,7 +150,7 @@ class VersionUpgrade25to26(VersionUpgrade): ## Acquires the next unique extruder stack index number for the Custom FDM Printer. def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self): - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") file_name_list = os.listdir(extruder_stack_dir) file_name_list = [os.path.basename(file_name) for file_name in file_name_list] while True: @@ -173,7 +171,7 @@ class VersionUpgrade25to26(VersionUpgrade): def _checkCustomFdmPrinterHasExtruderStack(self, machine_id): # go through all extruders and make sure that this custom FDM printer has extruder stacks. - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") has_extruders = False for item in os.listdir(extruder_stack_dir): file_path = os.path.join(extruder_stack_dir, item) @@ -245,9 +243,9 @@ class VersionUpgrade25to26(VersionUpgrade): parser.write(extruder_output) extruder_filename = quote_plus(stack_id) + ".extruder.cfg" - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) - definition_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer) - user_settings_dir = Resources.getPath(CuraApplication.ResourceTypes.UserInstanceContainer) + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") + definition_changes_dir = os.path.join(Resources.getDataStoragePath(), "definition_changes") + user_settings_dir = os.path.join(Resources.getDataStoragePath(), "user") with open(os.path.join(definition_changes_dir, definition_changes_filename), "w", encoding = "utf-8") as f: f.write(definition_changes_output.getvalue()) From f8da8c14e5a1fcdcab0b7d4bf2ea2f083b02e961 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 11:38:14 +0200 Subject: [PATCH 278/364] Fix running tests with PyQt 5.11 This was causing the test runner to crash. --- tests/conftest.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 77d215815a..ad0bc609ee 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,6 +6,8 @@ import unittest.mock import pytest +import Arcus #Prevents error: "PyCapsule_GetPointer called with incorrect name" with conflicting SIP configurations between Arcus and PyQt: Import Arcus and Savitar first! +import Savitar from UM.Qt.QtApplication import QtApplication #QtApplication import is required, even though it isn't used. from cura.CuraApplication import CuraApplication from cura.MachineActionManager import MachineActionManager From e9cdd47a03b1d30524ed46ebf2254935a3c59fa9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 12:38:16 +0200 Subject: [PATCH 279/364] Fix types of getGlobalContainerStack call results We know in these places that there must be a global stack at this point. So to hide the type error we'll cast it here. Of course, the danger in this is that someone might call this function that doesn't know about this requirement and calls it when there is potentially no global stack yet. Hopefully they'll discover this crash when that happens then. --- cura/Settings/ExtruderManager.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 230759e775..26a030ffde 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -15,12 +15,11 @@ from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, TYPE_CHECKING, Dict, List, Any +from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack - from UM.Scene.SceneNode import SceneNode ## Manages all existing extruder stacks. @@ -377,7 +376,7 @@ class ExtruderManager(QObject): # If no extruder has the value, the list will contain the global value. @staticmethod def getExtruderValues(key: str) -> List[Any]: - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) #We know that there must be a global stack by the time you're requesting setting values. result = [] for extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): @@ -412,7 +411,7 @@ class ExtruderManager(QObject): # If no extruder has the value, the list will contain the global value. @staticmethod def getDefaultExtruderValues(key: str) -> List[Any]: - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) #We know that there must be a global stack by the time you're requesting setting values. context = PropertyEvaluationContext(global_stack) context.context["evaluate_from_container_index"] = 1 # skip the user settings container context.context["override_operators"] = { @@ -479,7 +478,7 @@ class ExtruderManager(QObject): value = value(extruder) else: # Just a value from global. - value = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().getProperty(key, "value") + value = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()).getProperty(key, "value") return value @@ -508,7 +507,7 @@ class ExtruderManager(QObject): if isinstance(value, SettingFunction): value = value(extruder, context = context) else: # Just a value from global. - value = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().getProperty(key, "value", context = context) + value = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()).getProperty(key, "value", context = context) return value @@ -521,7 +520,7 @@ class ExtruderManager(QObject): # \return The effective value @staticmethod def getResolveOrValue(key: str) -> Any: - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) resolved_value = global_stack.getProperty(key, "value") return resolved_value @@ -535,7 +534,7 @@ class ExtruderManager(QObject): # \return The effective value @staticmethod def getDefaultResolveOrValue(key: str) -> Any: - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) context = PropertyEvaluationContext(global_stack) context.context["evaluate_from_container_index"] = 1 # skip the user settings container context.context["override_operators"] = { From fb9c21e9149b421440ad8ae77640f68a55b108d7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 12:41:03 +0200 Subject: [PATCH 280/364] Fix imports --- cura/Settings/ExtruderManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 26a030ffde..ed7f6dd4f8 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For comm from UM.FlameProfiler import pyqtSlot import cura.CuraApplication # To get the global container stack to find the current machine. +from cura.Settings.GlobalStack import GlobalStack from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode @@ -19,7 +20,6 @@ from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack - from cura.Settings.GlobalStack import GlobalStack ## Manages all existing extruder stacks. From 0ff893c349fcc8deb6549619b0e7157516f898ad Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 14 Sep 2018 13:49:56 +0200 Subject: [PATCH 281/364] [CURA-5689] Make 'Ignore Small Z Gaps' false by default. WARNING: Increases default slicing time! --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4c87a3bcf0..a3f507fdae 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1438,7 +1438,7 @@ "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.", "type": "bool", - "default_value": true, + "default_value": false, "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, From 66aeb95e2879ec32c46785fbce5b671a95a1496f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 14 Sep 2018 14:06:55 +0200 Subject: [PATCH 282/364] Fix opening port after baudrate detection --- plugins/USBPrinting/AutoDetectBaudJob.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/USBPrinting/AutoDetectBaudJob.py b/plugins/USBPrinting/AutoDetectBaudJob.py index f8af61c567..8b37c4b29d 100644 --- a/plugins/USBPrinting/AutoDetectBaudJob.py +++ b/plugins/USBPrinting/AutoDetectBaudJob.py @@ -77,6 +77,7 @@ class AutoDetectBaudJob(Job): self.setResult(baud_rate) Logger.log("d", "Detected baud rate {baud_rate} on serial {serial} on retry {retry} with after {time_elapsed:0.2f} seconds.".format( serial = self._serial_port, baud_rate = baud_rate, retry = retry, time_elapsed = time() - start_timeout_time)) + serial.close() # close serial port so it can be opened by the USBPrinterOutputDevice return serial.write(b"M105\n") From 5c739219439f8bc8b2865bdfbbbea1df8f56d228 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 14 Sep 2018 14:35:10 +0200 Subject: [PATCH 283/364] [CURA-5725] Revert "Set simulation path to 0 after updating layer" This reverts commit 3da6e3c4535db85a921bf5770903bd1a729946e1. --- plugins/SimulationView/SimulationView.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index 8d671dcb56..b4ca9584c7 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -670,7 +670,6 @@ Item onCurrentLayerChanged: { playButton.pauseSimulation() - pathSlider.setHandleValue(0) // After updating the layer set Path slider to 0 layerSlider.setUpperValue(UM.SimulationView.currentLayer) } } From c9d3847fdb8fa95ce97a0a3a741767b73fa013ab Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Sep 2018 15:41:51 +0200 Subject: [PATCH 284/364] Update description of ignore small_z_gaps --- resources/definitions/fdmprinter.def.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4c87a3bcf0..ec5a2e937b 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1436,8 +1436,7 @@ "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.", - "type": "bool", + "description": "If this setting is enabled, it will skip over small vertical gaps. This will save about 5% computation time when generating top / bottom skin, at the cost of possibly exposing infill to the outside.", "default_value": true, "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true From 4c460b6fa552bf1888bd3e57003d88163ac8dd76 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Sep 2018 16:15:56 +0200 Subject: [PATCH 285/364] Prevent crash if sdk_version is "dev" --- plugins/Toolbox/src/Toolbox.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 9e9fdd6f29..4c1cd94b4f 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -488,14 +488,17 @@ class Toolbox(QObject, Extension): local_version = Version(local_package["package_version"]) remote_version = Version(remote_package["package_version"]) - + if self._getSDKVersion() == "dev": + sdk_version = int(self._plugin_registry.APIVersion) + else: + sdk_version = int(self._getSDKVersion()) can_upgrade = False if remote_version > local_version: can_upgrade = True # A package with the same version can be built to have different SDK versions. So, for a package with the same # version, we also need to check if the current one has a lower SDK version. If so, this package should also # be upgradable. - elif remote_version == local_version and local_package.get("sdk_version", 0) < int(self._getSDKVersion()): + elif remote_version == local_version and local_package.get("sdk_version", 0) < sdk_version: can_upgrade = True return can_upgrade From 2369a10ce129376bb640a09388dc0527a8c17859 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 16:31:40 +0200 Subject: [PATCH 286/364] Disallow setting support wall line count per mesh Because as soon as support is generated it can merge with the polygons of other support areas that are not directly beneath this model. They cannot have a different number of walls any more then because it is the same polygon. Contributes to issue CURA-5603. --- resources/definitions/fdmprinter.def.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 327c3a9892..c756a9cb05 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3816,7 +3816,8 @@ "value": "1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0", "enabled": "support_enable", "limit_to_extruder": "support_infill_extruder_nr", - "settable_per_mesh": true + "settable_per_mesh": false, + "settable_per_extruder": true }, "zig_zaggify_support": { From a870060a34a61367f0ec3438efa3f58cb156e6b6 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Sep 2018 17:00:55 +0200 Subject: [PATCH 287/364] Remove unused parameter --- cura/Settings/MachineNameValidator.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index 19b29feac4..acdda4b0a0 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -35,10 +35,9 @@ class MachineNameValidator(QObject): ## Check if a specified machine name is allowed. # # \param name The machine name to check. - # \param position The current position of the cursor in the text box. # \return ``QValidator.Invalid`` if it's disallowed, or # ``QValidator.Acceptable`` if it's allowed. - def validate(self, name, position): + def validate(self, name): #Check for file name length of the current settings container (which is the longest file we're saving with the name). try: filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax @@ -54,7 +53,7 @@ class MachineNameValidator(QObject): ## Updates the validation state of a machine name text field. @pyqtSlot(str) def updateValidation(self, new_name): - is_valid = self.validate(new_name, 0) + is_valid = self.validate(new_name) if is_valid == QValidator.Acceptable: self.validation_regex = "^.*$" #Matches anything. else: From f871a898255dc6614966096d538220a59fafdff8 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Fri, 14 Sep 2018 14:46:33 +0200 Subject: [PATCH 288/364] Clean up the code by removing duplicate code. Also try to unify the MaterialsBrandSection to use the same component for favorites, generic and branded materials. Contributes to CURA-5682. --- .../Materials/MaterialsBrandSection.qml | 46 +++- .../Preferences/Materials/MaterialsList.qml | 235 +++++++++--------- .../Materials/MaterialsTypeSection.qml | 14 +- 3 files changed, 158 insertions(+), 137 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 91fecb3e53..ef3a773835 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -15,7 +15,7 @@ Rectangle id: brand_section property var sectionName: "" - property var elements // This can be a MaterialTypesModel or GenericMaterialsModel + property var elementsModel // This can be a MaterialTypesModel or GenericMaterialsModel or FavoriteMaterialsModel property var hasMaterialTypes: true // It indicates wheather it has material types or not property var expanded: materialList.expandedBrands.indexOf(sectionName) > -1 @@ -109,22 +109,44 @@ Rectangle Repeater { - model: elements - delegate: MaterialsTypeSection + model: elementsModel + delegate: Item { - visible: hasMaterialTypes - materialType: model + Loader + { + id: loader + property var element: model + sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot + } } } // In case there are no types, we create a material slot - Repeater +// Repeater +// { +// model: elementsModel +// delegate: MaterialsSlot +// { +// visible: !hasMaterialTypes +// material: model +// } +// } + } + + Component + { + id: materialsTypeSection + MaterialsTypeSection { - model: elements - delegate: MaterialsSlot - { - visible: !hasMaterialTypes - material: model - } + materialType: element + } + } + + Component + { + id: materialSlot + MaterialsSlot + { + material: element } } diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 0854371655..9b8903d7da 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -92,143 +92,142 @@ Item return false } + function updateAfterModelChanges() + { + var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) + if (correctlyExpanded) + { + if (base.toActivateNewMaterial) + { + var position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + } + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false + } + } + Connections { target: materialsModel - onItemsChanged: - { - var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) - if (correctlyExpanded) - { - if (base.toActivateNewMaterial) - { - var position = Cura.ExtruderManager.activeExtruderIndex - Cura.MachineManager.setMaterial(position, base.currentItem.container_node) - } - base.newRootMaterialIdToSwitchTo = "" - base.toActivateNewMaterial = false - } - } + onItemsChanged: updateAfterModelChanges() } Connections { target: genericMaterialsModel - onItemsChanged: - { - var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) - if (correctlyExpanded) - { - if (base.toActivateNewMaterial) - { - var position = Cura.ExtruderManager.activeExtruderIndex - Cura.MachineManager.setMaterial(position, base.currentItem.container_node) - } - base.newRootMaterialIdToSwitchTo = "" - base.toActivateNewMaterial = false - } - } + onItemsChanged: updateAfterModelChanges() } Column { - Rectangle - { - property var expanded: true +// Rectangle +// { +// property var expanded: true +// +// id: favorites_section +// height: childrenRect.height +// width: materialList.width +// Rectangle +// { +// id: favorites_header_background +// color: UM.Theme.getColor("favorites_header_bar") +// anchors.fill: favorites_header +// } +// Row +// { +// id: favorites_header +// Label +// { +// id: favorites_name +// text: "Favorites" +// height: UM.Theme.getSize("favorites_row").height +// width: materialList.width - UM.Theme.getSize("favorites_button").width +// verticalAlignment: Text.AlignVCenter +// leftPadding: 4 +// } +// Button +// { +// text: "" +// implicitWidth: UM.Theme.getSize("favorites_button").width +// implicitHeight: UM.Theme.getSize("favorites_button").height +// UM.RecolorImage { +// anchors +// { +// verticalCenter: parent.verticalCenter +// horizontalCenter: parent.horizontalCenter +// } +// width: UM.Theme.getSize("standard_arrow").width +// height: UM.Theme.getSize("standard_arrow").height +// sourceSize.width: width +// sourceSize.height: height +// color: "black" +// source: favorites_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") +// } +// style: ButtonStyle +// { +// background: Rectangle +// { +// anchors.fill: parent +// color: "transparent" +// } +// } +// } +// } +// MouseArea +// { +// anchors.fill: favorites_header +// onPressed: +// { +// favorites_section.expanded = !favorites_section.expanded +// } +// } +// Column +// { +// anchors.top: favorites_header.bottom +// anchors.left: parent.left +// width: materialList.width +// height: favorites_section.expanded ? childrenRect.height : 0 +// visible: favorites_section.expanded +// Repeater +// { +// model: favoriteMaterialsModel +// delegate: MaterialsSlot +// { +// material: model +// } +// } +// } +// } - id: favorites_section - height: childrenRect.height - width: materialList.width - Rectangle - { - id: favorites_header_background - color: UM.Theme.getColor("favorites_header_bar") - anchors.fill: favorites_header - } - Row - { - id: favorites_header - Label - { - id: favorites_name - text: "Favorites" - height: UM.Theme.getSize("favorites_row").height - width: materialList.width - UM.Theme.getSize("favorites_button").width - verticalAlignment: Text.AlignVCenter - leftPadding: 4 - } - Button - { - text: "" - implicitWidth: UM.Theme.getSize("favorites_button").width - implicitHeight: UM.Theme.getSize("favorites_button").height - UM.RecolorImage { - anchors - { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: "black" - source: favorites_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") - } - style: ButtonStyle - { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } - } - } - } - MouseArea - { - anchors.fill: favorites_header - onPressed: - { - favorites_section.expanded = !favorites_section.expanded - } - } - Column - { - anchors.top: favorites_header.bottom - anchors.left: parent.left - width: materialList.width - height: favorites_section.expanded ? childrenRect.height : 0 - visible: favorites_section.expanded - Repeater - { - model: favoriteMaterialsModel - delegate: MaterialsSlot - { - material: model - } - } - } - } +// MaterialsBrandSection +// { +// id: favoriteSection +// sectionName: "Favorites" +// elementsModel: favoriteMaterialsModel +// hasMaterialTypes: false +// expanded: true +// } MaterialsBrandSection { id: genericSection sectionName: "Generic" - elements: genericMaterialsModel + elementsModel: genericMaterialsModel hasMaterialTypes: false } - Repeater - { - id: brand_list - model: materialsModel - delegate: MaterialsBrandSection - { - id: brandSection - sectionName: model.name - elements: model.material_types - hasMaterialTypes: true - } - } +// +// Repeater +// { +// id: brand_list +// model: materialsModel +// delegate: MaterialsBrandSection +// { +// id: brandSection +// sectionName: model.name +// elementsModel: model.material_types +// hasMaterialTypes: true +// } +// } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 42ca338cf0..bbdf2d84da 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -14,8 +14,8 @@ Rectangle { id: material_type_section property var materialType - property var expanded: materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1 - property var colors_model: model.colors + property var expanded: materialList.expandedTypes.indexOf(materialType.brand + "_" + materialType.name) > -1 + property var colorsModel: materialType.colors height: childrenRect.height width: parent.width Rectangle @@ -23,7 +23,7 @@ Rectangle id: material_type_header_background color: { - if(!expanded && model.brand + "_" + model.name == materialList.currentType) + if(!expanded && materialType.brand + "_" + materialType.name == materialList.currentType) { return UM.Theme.getColor("favorites_row_selected") } @@ -55,7 +55,7 @@ Rectangle } Label { - text: model.name + text: materialType.name height: UM.Theme.getSize("favorites_row").height width: parent.width - UM.Theme.getSize("favorites_button").width id: material_type_name @@ -94,7 +94,7 @@ Rectangle anchors.fill: material_type_header onPressed: { - const identifier = model.brand + "_" + model.name; + const identifier = materialType.brand + "_" + materialType.name; const i = materialList.expandedTypes.indexOf(identifier) if (i > -1) { @@ -120,7 +120,7 @@ Rectangle anchors.left: parent.left Repeater { - model: colors_model + model: colorsModel delegate: MaterialsSlot { material: model @@ -133,7 +133,7 @@ Rectangle target: UM.Preferences onPreferenceChanged: { - expanded = materialList.expandedTypes.indexOf(model.brand + "_" + model.name) > -1 + expanded = materialList.expandedTypes.indexOf(materialType.brand + "_" + materialType.name) > -1 } } } \ No newline at end of file From ade2b565bcec08e2b7fce6ce106ff375bfdae513 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 17 Sep 2018 10:30:08 +0200 Subject: [PATCH 289/364] Add 3.5 change log Contributes to issue CURA-5710. --- plugins/ChangeLogPlugin/ChangeLog.txt | 96 +++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index aefeb92ce5..9075d9be7d 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,3 +1,99 @@ +[3.5.0] +*Monitor page +The monitor page of Ultimaker Cura has been remodeled for better consistency with the Cura Connect ‘Print jobs’ interface. This means less switching between interfaces, and more control from within Ultimaker Cura. + +*Open recent projects +Project files can now be found in the ‘Open Recent’ menu. + +*New tool hotkeys +New hotkeys have been assigned for quick toggling between the translate (T), scale (S), rotate (R) and mirror (M) tools. + +*Project files use 3MF only +A 3MF extension is now used for project files. The ‘.curaproject’ extension is no longer used. + +*Camera maximum zoom +The maximum zoom has been adjusted to scale with the size of the selected printer. This fixes third-party printers with huge build volumes to be correctly visible. + +*Corrected width of layer number box +The layer number indicator in the layer view now displays numbers above 999 correctly. + +*Materials preferences +This screen has been redesigned to improve user experience. Materials can now be set as a favorites, so they can be easily accessed in the material selection panel at the top-right of the screen. + +*Installed packages checkmark +Packages that are already installed in the Toolbox are now have a checkmark for easy reference. + +*Mac OSX save dialog +The save dialog has been restored to its native behavior and bugs have been fixed. + +*Removed .gz extension +Saving compressed g-code files from the save dialog has been removed because of incompatibility with MacOS. If sending jobs over Wi-Fi, g-code is still compressed. + +*Updates to Chinese translations +Improved and updated Chinese translations. Contributed by MarmaladeForMeat. + +*Save project +Saving the project no longer triggers the project to reslice. + +*Improved processing of overhang walls +Overhang walls are detected and printed with different speeds. It will not start a perimeter on an overhanging wall. The quality of overhanging walls may be improved by printing those at a different speed. Contributed by smartavionics. + +*Prime tower reliability +The prime tower has been improved for better reliability. This is especially useful when printing with two materials that do not adhere well. + +*Support infill line direction +The support infill lines can now be rotated to increase the supporting capabilities and reduce artifacts on the model. This setting rotates existing patterns, like triangle support infill. Contributed by fieldOfView. + +*Minimum polygon circumference +Polygons in sliced layers that have a circumference smaller than the setting value will be filtered out. Lower values lead to higher resolution meshes at the cost of increased slicing time. This setting is ideal for very tiny prints with a lot of detail, or for SLA printers. Contributed by cubiq. + +*Initial layer support line distance. This setting enables the user to reduce or increase the density of the support initial layer in order to increase or reduce adhesion to the build plate and the overall strength. + +*Extra infill wall line count +Adds extra walls around infill. Contributed by BagelOrb. + +*Multiply infill +Creates multiple infill lines on the same pattern for sturdier infill. Contributed by BagelOrb. + +*Connected infill polygons +Connecting infill lines now also works with concentric and cross infill patterns. The benefit would be stronger infill and more consistent material flow/saving retractions. Contributed by BagelOrb. + +*Fan speed override +New setting to modify the fan speed of bridged areas. This setting can be found in Support settings > Fan Speed Override when support is enabled. Contributed by smartavionics. + +*Minimum wall flow +New setting to define a minimum flow for thin printed walls. Contributed by smartavionics. + +*Custom support +A tool similar to the support blocker that adds cubes of support to the model manually by clicking parts of it. Contributed by Lokster. + +*Quickly toggle autoslicing +Adds a pause/play button to the progress bar to quickly toggle autoslicing. Contributed by fieldOfview. + +*Cura-DuetRRFPlugin +Adds output devices for a Duet RepRapFirmware printer: "Print", "Simulate", and "Upload". Contributed by Kriechi. + +*Dremel 3D20 +This plugin adds the Dremel printer to Ultimaker Cura. Contributed by Kriechi. + +*Bug fixes +- Removed extra M109 commands. Older versions would generate superfluous M109 commands. This has been fixed for better temperature stability when printing. +- Fixed minor mesh handling bugs. A few combinations of modifier meshes now lead to expected behavior. +- Removed unnecessary travels. Connected infill lines are now always printed completely connected, without unnecessary travel moves. +- Removed concentric 3D infill. This infill type has been removed due to lack of reliability. +- Extra skin wall count. Fixed an issue that caused extra print moves with this setting enabled. +- Concentric skin. Small gaps in concentric skin are now filled correctly. +- Order of printed models. The order of a large batch of printed models is now more consistent, instead of random. + +*Third party printers +- TiZYX +- Winbo +- Tevo Tornado +- Creality CR-10S +- Wanhao Duplicator +- Deltacomb (update) +- Dacoma (update) + [3.4.1] *Bug fixes - Fixed an issue that would occasionally cause an unnecessary extra skin wall to be printed, which increased print time. From 8a94042a1f4490c75bf83db5840878866983574b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 17 Sep 2018 10:51:56 +0200 Subject: [PATCH 290/364] Fix icon name role The icons were not displaying in the context menu of the settings. --- cura/Settings/SidebarCustomMenuItemsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/SidebarCustomMenuItemsModel.py b/cura/Settings/SidebarCustomMenuItemsModel.py index ec926363f5..7177d26923 100644 --- a/cura/Settings/SidebarCustomMenuItemsModel.py +++ b/cura/Settings/SidebarCustomMenuItemsModel.py @@ -18,7 +18,7 @@ class SidebarCustomMenuItemsModel(ListModel): self.addRoleName(self.name_role, "name") self.addRoleName(self.actions_role, "actions") self.addRoleName(self.menu_item_role, "menu_item") - self.addRoleName(self.menu_item_icon_name_role, "iconName") + self.addRoleName(self.menu_item_icon_name_role, "icon_name") self._updateExtensionList() def _updateExtensionList(self)-> None: From 093c5487bff2509797d14f5ebba1ffb956ee98cb Mon Sep 17 00:00:00 2001 From: Orel Date: Wed, 12 Sep 2018 11:26:59 +0200 Subject: [PATCH 291/364] - Rename Dagoma Magis profile. - Remove machine_gcode_flavor definition as the default value fits the needs. --- .../{dagoma_neva_magis.def.json => dagoma_magis.def.json} | 7 ++----- resources/definitions/dagoma_neva.def.json | 3 --- ...xtruder_0.def.json => dagoma_magis_extruder_0.def.json} | 2 +- .../quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg | 2 +- .../quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg | 2 +- .../quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg | 2 +- 6 files changed, 6 insertions(+), 12 deletions(-) rename resources/definitions/{dagoma_neva_magis.def.json => dagoma_magis.def.json} (92%) rename resources/extruders/{dagoma_neva_magis_extruder_0.def.json => dagoma_magis_extruder_0.def.json} (90%) diff --git a/resources/definitions/dagoma_neva_magis.def.json b/resources/definitions/dagoma_magis.def.json similarity index 92% rename from resources/definitions/dagoma_neva_magis.def.json rename to resources/definitions/dagoma_magis.def.json index 0b7b50cb5f..75e6e449cd 100644 --- a/resources/definitions/dagoma_neva_magis.def.json +++ b/resources/definitions/dagoma_magis.def.json @@ -1,5 +1,5 @@ { - "name": "Dagoma NEVA Magis", + "name": "Dagoma Magis", "version": 2, "inherits": "fdmprinter", "metadata": { @@ -13,7 +13,7 @@ "has_materials": true, "machine_extruder_trains": { - "0": "dagoma_neva_magis_extruder_0" + "0": "dagoma_magis_extruder_0" } }, "overrides": { @@ -43,9 +43,6 @@ "machine_shape": { "default_value": "elliptic" }, - "machine_gcode_flavor": { - "default_value": "RepRap" - }, "machine_start_gcode": { "default_value": ";Gcode by Cura\nG90\nG28\nM107\nM109 R100\nG29\nM109 S{material_print_temperature_layer_0} U-55 X55 V-85 Y-85 W0.26 Z0.26\nM82\nG92 E0\nG1 F200 E6\nG92 E0\nG1 F200 E-3.5\nG0 Z0.15\nG0 X10\nG0 Z3\nG1 F6000\n" }, diff --git a/resources/definitions/dagoma_neva.def.json b/resources/definitions/dagoma_neva.def.json index cdd5725765..67c8795678 100644 --- a/resources/definitions/dagoma_neva.def.json +++ b/resources/definitions/dagoma_neva.def.json @@ -43,9 +43,6 @@ "machine_shape": { "default_value": "elliptic" }, - "machine_gcode_flavor": { - "default_value": "RepRap" - }, "machine_start_gcode": { "default_value": ";Gcode by Cura\nG90\nG28\nM107\nM109 R100\nG29\nM109 S{material_print_temperature_layer_0} U-55 X55 V-85 Y-85 W0.26 Z0.26\nM82\nG92 E0\nG1 F200 E6\nG92 E0\nG1 F200 E-3.5\nG0 Z0.15\nG0 X10\nG0 Z3\nG1 F6000\n" }, diff --git a/resources/extruders/dagoma_neva_magis_extruder_0.def.json b/resources/extruders/dagoma_magis_extruder_0.def.json similarity index 90% rename from resources/extruders/dagoma_neva_magis_extruder_0.def.json rename to resources/extruders/dagoma_magis_extruder_0.def.json index 0d5fd3c9b4..0a5850f2ed 100644 --- a/resources/extruders/dagoma_neva_magis_extruder_0.def.json +++ b/resources/extruders/dagoma_magis_extruder_0.def.json @@ -3,7 +3,7 @@ "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "dagoma_neva_magis", + "machine": "dagoma_magis", "position": "0" }, diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg index e52cba165c..d87c913eb6 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg @@ -1,7 +1,7 @@ [general] version = 4 name = Fast -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] setting_version = 5 diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg index 033cfbc8fa..d046726e0e 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg @@ -1,7 +1,7 @@ [general] version = 4 name = Fine -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] setting_version = 5 diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg index d07d5b58d5..39961ea93b 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg @@ -1,7 +1,7 @@ [general] version = 4 name = Standard -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] setting_version = 5 From 58c7524164d01df5e31a366429ad275e170f21d8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 17 Sep 2018 11:38:51 +0200 Subject: [PATCH 292/364] Also rename dagoma_neva_magis profiles to dagoma_magis --- ...eva_magis_pla_fast.inst.cfg => dagoma_magis_pla_fast.inst.cfg} | 0 ...eva_magis_pla_fine.inst.cfg => dagoma_magis_pla_fine.inst.cfg} | 0 ...s_pla_standard.inst.cfg => dagoma_magis_pla_standard.inst.cfg} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename resources/quality/dagoma/{dagoma_neva_magis_pla_fast.inst.cfg => dagoma_magis_pla_fast.inst.cfg} (100%) rename resources/quality/dagoma/{dagoma_neva_magis_pla_fine.inst.cfg => dagoma_magis_pla_fine.inst.cfg} (100%) rename resources/quality/dagoma/{dagoma_neva_magis_pla_standard.inst.cfg => dagoma_magis_pla_standard.inst.cfg} (100%) diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg similarity index 100% rename from resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg similarity index 100% rename from resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg similarity index 100% rename from resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg From 1064d837ed4bca4147c89a026acf6131d0962fa6 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 11:46:15 +0200 Subject: [PATCH 293/364] Exclude bundled plugins in the old plugins list --- plugins/Toolbox/src/Toolbox.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 4c1cd94b4f..cf2ac4f5bb 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -1,12 +1,11 @@ # Copyright (c) 2018 Ultimaker B.V. # Toolbox is released under the terms of the LGPLv3 or higher. -from typing import Dict, Optional, Union, Any, cast import json import os import tempfile import platform -from typing import cast, List, TYPE_CHECKING, Tuple, Optional +from typing import cast, Any, Dict, List, Set, TYPE_CHECKING, Tuple, Optional from PyQt5.QtCore import QUrl, QObject, pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply @@ -64,7 +63,8 @@ class Toolbox(QObject, Extension): ] self._request_urls = {} # type: Dict[str, QUrl] self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated - self._old_plugin_ids = [] # type: List[str] + self._old_plugin_ids = set() # type: Set[str] + self._old_plugin_metadata = dict() # type: Dict[str, Dict[str, Any]] # Data: self._metadata = { @@ -289,8 +289,8 @@ class Toolbox(QObject, Extension): installed_package_ids = self._package_manager.getAllInstalledPackageIDs() scheduled_to_remove_package_ids = self._package_manager.getToRemovePackageIDs() - self._old_plugin_ids = [] - self._old_plugin_metadata = [] # type: List[Dict[str, Any]] + self._old_plugin_ids = set() + self._old_plugin_metadata = dict() for plugin_id in old_plugin_ids: # Neither the installed packages nor the packages that are scheduled to remove are old plugins @@ -300,12 +300,20 @@ class Toolbox(QObject, Extension): old_metadata = self._plugin_registry.getMetaData(plugin_id) new_metadata = self._convertPluginMetadata(old_metadata) - self._old_plugin_ids.append(plugin_id) - self._old_plugin_metadata.append(new_metadata) + self._old_plugin_ids.add(plugin_id) + self._old_plugin_metadata[new_metadata["package_id"]] = new_metadata all_packages = self._package_manager.getAllInstalledPackagesInfo() if "plugin" in all_packages: - self._metadata["plugins_installed"] = all_packages["plugin"] + self._old_plugin_metadata + # For old plugins, we only want to include the old custom plugin that were installed via the old toolbox. + # The bundled plugins will be included in the "bundled_packages.json", so the bundled plugins should be + # excluded from the old plugins list/dict. + all_plugin_package_ids = set(package["package_id"] for package in all_packages["plugin"]) + self._old_plugin_ids = set(plugin_id for plugin_id in self._old_plugin_ids + if plugin_id not in all_plugin_package_ids) + self._old_plugin_metadata = {k: v for k, v in self._old_plugin_metadata.items() if k in self._old_plugin_ids} + + self._metadata["plugins_installed"] = all_packages["plugin"] + list(self._old_plugin_metadata.values()) self._models["plugins_installed"].setMetadata(self._metadata["plugins_installed"]) self.metadataChanged.emit() if "material" in all_packages: From 3ac5a316d3f4dd339a29edf4f27321bde4dd6ca7 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 12:03:10 +0200 Subject: [PATCH 294/364] Check package upgradable using PM first, old plugins later CURA-5718 For package upgradable, we need to check if a package is installed local. For that, we first check in the package manager, if nothing, then we fall back to check the old plugins. --- plugins/Toolbox/src/Toolbox.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index cf2ac4f5bb..4a1203c412 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -483,12 +483,14 @@ class Toolbox(QObject, Extension): # -------------------------------------------------------------------------- @pyqtSlot(str, result = bool) def canUpdate(self, package_id: str) -> bool: - if self.isOldPlugin(package_id): - return True - local_package = self._package_manager.getInstalledPackageInfo(package_id) if local_package is None: - return False + Logger.log("i", "Could not find package [%s] as installed in the package manager, fall back to check the old plugins", + package_id) + local_package = self.getOldPluginPackageMetadata(package_id) + if local_package is None: + Logger.log("i", "Could not find package [%s] in the old plugins", package_id) + return False remote_package = self.getRemotePackage(package_id) if remote_package is None: @@ -556,12 +558,14 @@ class Toolbox(QObject, Extension): return False # Check for plugins that were installed with the old plugin browser - @pyqtSlot(str, result = bool) def isOldPlugin(self, plugin_id: str) -> bool: if plugin_id in self._old_plugin_ids: return True return False + def getOldPluginPackageMetadata(self, plugin_id: str) -> Optional[Dict[str, Any]]: + return self._old_plugin_metadata.get(plugin_id) + def loadingComplete(self) -> bool: populated = 0 for list in self._metadata.items(): From bafc2b98c9ed1bb913bc387abe81670f54d15f8b Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 17 Sep 2018 12:08:41 +0200 Subject: [PATCH 295/364] Reuse MaterialBrandSection component for Favorites, Generic and branded materials. This component will show different children depending on the hasMaterialTypes flag. Adjust some small UI issues. Contributes to CURA-5682. --- .../Materials/MaterialsBrandSection.qml | 25 +--- .../Materials/MaterialsDetailsPanel.qml | 7 +- .../Preferences/Materials/MaterialsList.qml | 121 +++--------------- .../Preferences/Materials/MaterialsPage.qml | 5 +- .../Preferences/Materials/MaterialsSlot.qml | 42 +++--- .../Materials/MaterialsTypeSection.qml | 9 +- 6 files changed, 61 insertions(+), 148 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index ef3a773835..c8f391dfb0 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -48,7 +48,7 @@ Rectangle height: UM.Theme.getSize("favorites_row").height width: parent.width - UM.Theme.getSize("favorites_button").width verticalAlignment: Text.AlignVCenter - leftPadding: 4 + leftPadding: (UM.Theme.getSize("default_margin").width / 2) | 0 } Button { @@ -101,6 +101,7 @@ Rectangle } Column { + id: brandMaterialList anchors.top: brand_header.bottom width: parent.width anchors.left: parent.left @@ -110,26 +111,14 @@ Rectangle Repeater { model: elementsModel - delegate: Item + delegate: Loader { - Loader - { - id: loader - property var element: model - sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot - } + id: loader + width: parent.width + property var element: model + sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot } } - // In case there are no types, we create a material slot -// Repeater -// { -// model: elementsModel -// delegate: MaterialsSlot -// { -// visible: !hasMaterialTypes -// material: model -// } -// } } Component diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index 43e98d63a6..f72d93aff3 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -18,8 +18,11 @@ Item onCurrentItemChanged: { // When the current item changes, the detail view needs to be updated - updateMaterialPropertiesObject() - materialDetailsView.currentMaterialNode = currentItem.container_node + if (currentItem != null) + { + updateMaterialPropertiesObject() + materialDetailsView.currentMaterialNode = currentItem.container_node + } } function updateMaterialPropertiesObject() diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 9b8903d7da..cb5de685e2 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -13,7 +13,6 @@ import Cura 1.0 as Cura Item { id: materialList - width: materialScrollView.width - 17 height: childrenRect.height // Children @@ -121,93 +120,16 @@ Item Column { -// Rectangle -// { -// property var expanded: true -// -// id: favorites_section -// height: childrenRect.height -// width: materialList.width -// Rectangle -// { -// id: favorites_header_background -// color: UM.Theme.getColor("favorites_header_bar") -// anchors.fill: favorites_header -// } -// Row -// { -// id: favorites_header -// Label -// { -// id: favorites_name -// text: "Favorites" -// height: UM.Theme.getSize("favorites_row").height -// width: materialList.width - UM.Theme.getSize("favorites_button").width -// verticalAlignment: Text.AlignVCenter -// leftPadding: 4 -// } -// Button -// { -// text: "" -// implicitWidth: UM.Theme.getSize("favorites_button").width -// implicitHeight: UM.Theme.getSize("favorites_button").height -// UM.RecolorImage { -// anchors -// { -// verticalCenter: parent.verticalCenter -// horizontalCenter: parent.horizontalCenter -// } -// width: UM.Theme.getSize("standard_arrow").width -// height: UM.Theme.getSize("standard_arrow").height -// sourceSize.width: width -// sourceSize.height: height -// color: "black" -// source: favorites_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") -// } -// style: ButtonStyle -// { -// background: Rectangle -// { -// anchors.fill: parent -// color: "transparent" -// } -// } -// } -// } -// MouseArea -// { -// anchors.fill: favorites_header -// onPressed: -// { -// favorites_section.expanded = !favorites_section.expanded -// } -// } -// Column -// { -// anchors.top: favorites_header.bottom -// anchors.left: parent.left -// width: materialList.width -// height: favorites_section.expanded ? childrenRect.height : 0 -// visible: favorites_section.expanded -// Repeater -// { -// model: favoriteMaterialsModel -// delegate: MaterialsSlot -// { -// material: model -// } -// } -// } -// } + width: materialList.width + height: childrenRect.height -// MaterialsBrandSection -// { -// id: favoriteSection -// sectionName: "Favorites" -// elementsModel: favoriteMaterialsModel -// hasMaterialTypes: false -// expanded: true -// } + MaterialsBrandSection + { + id: favoriteSection + sectionName: "Favorites" + elementsModel: favoriteMaterialsModel + hasMaterialTypes: false + } MaterialsBrandSection { @@ -216,18 +138,17 @@ Item elementsModel: genericMaterialsModel hasMaterialTypes: false } -// -// Repeater -// { -// id: brand_list -// model: materialsModel -// delegate: MaterialsBrandSection -// { -// id: brandSection -// sectionName: model.name -// elementsModel: model.material_types -// hasMaterialTypes: true -// } -// } + + Repeater + { + model: materialsModel + delegate: MaterialsBrandSection + { + id: brandSection + sectionName: model.name + elementsModel: model.material_types + hasMaterialTypes: true + } + } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 7a7a2b885f..2050f59739 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -225,13 +225,14 @@ Item color: palette.light } - width: true ? (parent.width * 0.4) | 0 : parent.width + width: (parent.width * 0.4) | 0 frameVisible: true - verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn + horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff MaterialsList { id: materialListView + width: materialScrollView.viewport.width } } diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index 63d40068ce..a474b52838 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -12,34 +12,34 @@ import Cura 1.0 as Cura Rectangle { - id: material_slot - property var material + id: materialSlot + property var material: null property var hovered: false - property var is_favorite: material.is_favorite + property var is_favorite: material != null ? material.is_favorite : false height: UM.Theme.getSize("favorites_row").height width: parent.width - color: base.currentItem.root_material_id == material.root_material_id ? UM.Theme.getColor("favorites_row_selected") : "transparent" + color: material != null ? (base.currentItem.root_material_id == material.root_material_id ? UM.Theme.getColor("favorites_row_selected") : "transparent") : "transparent" Rectangle { id: swatch - color: material.color_code + color: material != null ? material.color_code : "transparent" border.width: UM.Theme.getSize("default_lining").width border.color: "black" width: UM.Theme.getSize("favorites_button_icon").width height: UM.Theme.getSize("favorites_button_icon").height - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left + anchors.verticalCenter: materialSlot.verticalCenter + anchors.left: materialSlot.left anchors.leftMargin: UM.Theme.getSize("default_margin").width } Label { - text: material.brand + " " + material.name + text: material != null ? material.brand + " " + material.name : "" verticalAlignment: Text.AlignVCenter height: parent.height anchors.left: swatch.right - anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenter: materialSlot.verticalCenter anchors.leftMargin: UM.Theme.getSize("narrow_margin").width } MouseArea @@ -52,8 +52,8 @@ Rectangle base.currentItem = material } hoverEnabled: true - onEntered: { material_slot.hovered = true } - onExited: { material_slot.hovered = false } + onEntered: { materialSlot.hovered = true } + onExited: { materialSlot.hovered = false } } Button { @@ -61,21 +61,21 @@ Rectangle text: "" implicitWidth: UM.Theme.getSize("favorites_button").width implicitHeight: UM.Theme.getSize("favorites_button").height - visible: material_slot.hovered || material_slot.is_favorite || favorite_button.hovered + visible: materialSlot.hovered || materialSlot.is_favorite || favorite_button.hovered anchors { - right: parent.right - verticalCenter: parent.verticalCenter + right: materialSlot.right + verticalCenter: materialSlot.verticalCenter } onClicked: { - if (material_slot.is_favorite) { + if (materialSlot.is_favorite) { base.materialManager.removeFavorite(material.root_material_id) - material_slot.is_favorite = false + materialSlot.is_favorite = false return } base.materialManager.addFavorite(material.root_material_id) - material_slot.is_favorite = true + materialSlot.is_favorite = true return } style: ButtonStyle @@ -89,8 +89,8 @@ Rectangle UM.RecolorImage { anchors { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter + verticalCenter: favorite_button.verticalCenter + horizontalCenter: favorite_button.horizontalCenter } width: UM.Theme.getSize("favorites_button_icon").width height: UM.Theme.getSize("favorites_button_icon").height @@ -104,7 +104,7 @@ Rectangle } else { - if (material_slot.is_favorite) + if (materialSlot.is_favorite) { return UM.Theme.getColor("primary") } @@ -114,7 +114,7 @@ Rectangle } } } - source: material_slot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") + source: materialSlot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") } } } \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index bbdf2d84da..f62fc4ee16 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -38,7 +38,7 @@ Rectangle Rectangle { id: material_type_header_border - color: UM.Theme.getColor("lining") + color: UM.Theme.getColor("favorites_header_bar") anchors.bottom: material_type_header.bottom anchors.left: material_type_header.left height: UM.Theme.getSize("default_lining").height @@ -47,17 +47,17 @@ Rectangle Row { id: material_type_header - width: parent.width - 8 + width: parent.width + leftPadding: UM.Theme.getSize("default_margin").width anchors { left: parent.left - leftMargin: 8 } Label { text: materialType.name height: UM.Theme.getSize("favorites_row").height - width: parent.width - UM.Theme.getSize("favorites_button").width + width: parent.width - parent.leftPadding - UM.Theme.getSize("favorites_button").width id: material_type_name verticalAlignment: Text.AlignVCenter } @@ -117,7 +117,6 @@ Rectangle visible: material_type_section.expanded width: parent.width anchors.top: material_type_header.bottom - anchors.left: parent.left Repeater { model: colorsModel From dfae4a9a86320d6cd4a1e4fd25b4fa89f10625bf Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 17 Sep 2018 14:02:04 +0200 Subject: [PATCH 296/364] Add a property that indicates when the layer slider or the path slider has changed manually. With this we can differentiate when the layer changed automatically (during simulation) or manually (by user interaction). In case it was changed manually, the simulation will stop. Contributes to CURA-5725. --- plugins/SimulationView/LayerSlider.qml | 32 ++++++++++++++++------- plugins/SimulationView/PathSlider.qml | 14 ++++++++-- plugins/SimulationView/SimulationView.qml | 25 +++++++++++++++--- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 6dcaa3f475..1540f053f5 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -39,6 +39,7 @@ Item { property real lowerValue: minimumValue property bool layersVisible: true + property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation function getUpperValueFromSliderHandle() { return upperHandle.getValue() @@ -96,7 +97,8 @@ Item { visible: sliderRoot.layersVisible // set the new value when dragging - function onHandleDragged () { + function onHandleDragged() { + sliderRoot.manuallyChanged = true upperHandle.y = y - upperHandle.height lowerHandle.y = y + height @@ -109,7 +111,7 @@ Item { UM.SimulationView.setMinimumLayer(lowerValue) } - function setValue (value) { + function setValue(value) { var range = sliderRoot.upperValue - sliderRoot.lowerValue value = Math.min(value, sliderRoot.maximumValue) value = Math.max(value, sliderRoot.minimumValue + range) @@ -168,7 +170,8 @@ Item { color: upperHandleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.upperHandleColor visible: sliderRoot.layersVisible - function onHandleDragged () { + function onHandleDragged() { + sliderRoot.manuallyChanged = true // don't allow the lower handle to be heigher than the upper handle if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) { @@ -183,7 +186,7 @@ Item { } // get the upper value based on the slider position - function getValue () { + function getValue() { var result = y / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) result = sliderRoot.maximumValue + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumValue)) result = sliderRoot.roundValues ? Math.round(result) : result @@ -191,7 +194,7 @@ Item { } // set the slider position based on the upper value - function setValue (value) { + function setValue(value) { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -205,8 +208,16 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onUpPressed: upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onUpPressed: + { + sliderRoot.manuallyChanged = true + upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + } + Keys.onDownPressed: + { + sliderRoot.manuallyChanged = true + upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + } // dragging MouseArea { @@ -256,7 +267,8 @@ Item { visible: sliderRoot.layersVisible - function onHandleDragged () { + function onHandleDragged() { + sliderRoot.manuallyChanged = true // don't allow the upper handle to be lower than the lower handle if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) { @@ -271,7 +283,7 @@ Item { } // get the lower value from the current slider position - function getValue () { + function getValue() { var result = (y - (sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)); result = sliderRoot.maximumValue - sliderRoot.minimumRange + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumRange)) result = sliderRoot.roundValues ? Math.round(result) : result @@ -279,7 +291,7 @@ Item { } // set the slider position based on the lower value - function setValue (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/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index 999912e3ba..7eb56cc0b8 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -34,6 +34,7 @@ Item { property real handleValue: maximumValue property bool pathsVisible: true + property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation function getHandleValueFromSliderHandle () { return handle.getValue() @@ -97,6 +98,7 @@ Item { visible: sliderRoot.pathsVisible function onHandleDragged () { + sliderRoot.manuallyChanged = true // update the range handle sliderRoot.updateRangeHandle() @@ -128,8 +130,16 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onRightPressed: handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onRightPressed: + { + sliderRoot.manuallyChanged = true + handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + } + Keys.onLeftPressed: + { + sliderRoot.manuallyChanged = true + handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + } // dragging MouseArea { diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index b4ca9584c7..be124157fb 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -623,7 +623,15 @@ Item { target: UM.SimulationView onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) - onCurrentPathChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) + onCurrentPathChanged: + { + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (pathSlider.manuallyChanged) + { + playButton.pauseSimulation() + } + pathSlider.setHandleValue(UM.SimulationView.currentPath) + } } // make sure the slider handlers show the correct value after switching views @@ -667,9 +675,14 @@ Item { target: UM.SimulationView onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) + onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) onCurrentLayerChanged: { - playButton.pauseSimulation() + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (layerSlider.manuallyChanged) + { + playButton.pauseSimulation() + } layerSlider.setUpperValue(UM.SimulationView.currentLayer) } } @@ -719,6 +732,8 @@ Item iconSource = "./resources/simulation_resume.svg" simulationTimer.stop() status = 0 + layerSlider.manuallyChanged = true + pathSlider.manuallyChanged = true } function resumeSimulation() @@ -726,7 +741,8 @@ Item UM.SimulationView.setSimulationRunning(true) iconSource = "./resources/simulation_pause.svg" simulationTimer.start() - status = 1 + layerSlider.manuallyChanged = false + pathSlider.manuallyChanged = false } } @@ -770,7 +786,6 @@ Item { UM.SimulationView.setCurrentLayer(currentLayer+1) UM.SimulationView.setCurrentPath(0) - playButton.resumeSimulation() } } else @@ -778,6 +793,8 @@ Item UM.SimulationView.setCurrentPath(currentPath+1) } } + // 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. playButton.status = 1 } } From 6c9c68e0041c65ea3097fb0990ff1a3e298fa0f3 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 17 Sep 2018 14:41:45 +0200 Subject: [PATCH 297/364] Active the focus when the selected item changes. In this case, if the user was updating some information in one material and then select other material, the new data is stored. Contributes to CURA-5682. --- resources/qml/Preferences/Materials/MaterialsPage.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index 2050f59739..a00a2340cd 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -45,7 +45,11 @@ Item Component.onCompleted: materialListView.expandActiveMaterial(active_root_material_id) // Every time the selected item has changed, notify to the details panel - onCurrentItemChanged: materialDetailsPanel.currentItem = currentItem + onCurrentItemChanged: + { + forceActiveFocus() + materialDetailsPanel.currentItem = currentItem + } // Main layout Label From 816c3cbd117541b23b8f3d322a8995d10176434e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 17 Sep 2018 14:43:17 +0200 Subject: [PATCH 298/364] Fix forgotten separation between header and body I copied these over from a piece where they had a different layout. Contributes to issue CURA-5710. --- plugins/ChangeLogPlugin/ChangeLog.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 9075d9be7d..0590dcde62 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -47,7 +47,8 @@ The support infill lines can now be rotated to increase the supporting capabilit *Minimum polygon circumference Polygons in sliced layers that have a circumference smaller than the setting value will be filtered out. Lower values lead to higher resolution meshes at the cost of increased slicing time. This setting is ideal for very tiny prints with a lot of detail, or for SLA printers. Contributed by cubiq. -*Initial layer support line distance. This setting enables the user to reduce or increase the density of the support initial layer in order to increase or reduce adhesion to the build plate and the overall strength. +*Initial layer support line distance +This setting enables the user to reduce or increase the density of the support initial layer in order to increase or reduce adhesion to the build plate and the overall strength. *Extra infill wall line count Adds extra walls around infill. Contributed by BagelOrb. From 261600121a5c0402cd9e90c6593144a77f61122c Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 17 Sep 2018 15:29:02 +0200 Subject: [PATCH 299/364] Created Cura setting visibility test --- scripts/check_setting_visibility.py | 113 ++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 scripts/check_setting_visibility.py diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py new file mode 100644 index 0000000000..489b00747e --- /dev/null +++ b/scripts/check_setting_visibility.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +# +# This script check correctness of settings visibility list +# +from typing import Dict +import os +import sys +import json +import configparser +import glob + +# Directory where this python file resides +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) + + +# The order of settings type. If the setting is in basic list then it also should be in expert +setting_visibility = ["basic", "advanced", "expert"] + + +class SettingVisibilityInspection: + + + def __init__(self) -> None: + self.all_settings_keys = [] + self.all_settings_categories = [] + + + def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None: + + with open(fdmprinter_json_path) as f: + json_data = json.load(f) + self._flattenAllSettings(json_data) + + + def _flattenAllSettings(self, json_file: Dict[str, str]) -> None: + for key, data in json_file["settings"].items(): # top level settings are categories + self._flattenSettings(data["children"]) # actual settings are children of top level category-settings + + def _flattenSettings(self, settings: Dict[str, str]) -> None: + for key, setting in settings.items(): + + if "type" in setting and setting["type"] != "category": + self.all_settings_keys.append(key) + else: + self.all_settings_categories.append(key) + + if "children" in setting: + self._flattenSettings(setting["children"]) + + + def getSettingsFromSettingVisibilityFile(self, file_path: str): + parser = configparser.ConfigParser(allow_no_value = True) + parser.read([file_path]) + + if not parser.has_option("general", "name") or not parser.has_option("general", "weight"): + raise NotImplementedError("Visibility setting file missing general data") + + settings = {} + for section in parser.sections(): + if section == 'general': + continue + + if section not in settings: + settings[section] = [] + + for option in parser[section].keys(): + settings[section].append(option) + + return settings + + def validateSettingsVisibility(self, setting_visibility_items: Dict): + + for visibility_type in setting_visibility: + item = setting_visibility_items[visibility_type] + + for category, settings in item.items(): + ss = 3 + + + + +if __name__ == "__main__": + + all_setting_visibility_files = glob.glob(os.path.join(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"), '*.cfg')) + fdmprinter_def_path = os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json") + + inspector = SettingVisibilityInspection() + inspector.defineAllCuraSettings(fdmprinter_def_path) + + setting_visibility_items = {} + for file_path in all_setting_visibility_files: + temp = inspector.getSettingsFromSettingVisibilityFile(all_setting_visibility_files[0]) + + base_name = os.path.basename(file_path) + visibility_type = base_name.split('.')[0] + + setting_visibility_items[visibility_type] = temp + + + inspector.validateSettingsVisibility(setting_visibility_items) + + found_error = False + # Validate settings + # for item in setting_visibility: + + + + + + + + + sys.exit(0 if not found_error else 1) From 6d1db550729ee3caceb6abababf9515a4b2f900d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 16:14:28 +0200 Subject: [PATCH 300/364] Fix SDK version comparison --- plugins/Toolbox/src/Toolbox.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 4c1cd94b4f..c3484b2170 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -40,7 +40,7 @@ class Toolbox(QObject, Extension): self._application = application # type: CuraApplication - self._sdk_version = None # type: Optional[int] + self._sdk_version = None # type: Optional[Union[str, int]] self._cloud_api_version = None # type: Optional[int] self._cloud_api_root = None # type: Optional[str] self._api_url = None # type: Optional[str] @@ -207,14 +207,14 @@ class Toolbox(QObject, Extension): return cura.CuraVersion.CuraCloudAPIVersion # type: ignore # Get the packages version depending on Cura version settings. - def _getSDKVersion(self) -> int: + def _getSDKVersion(self) -> Union[int, str]: if not hasattr(cura, "CuraVersion"): return self._plugin_registry.APIVersion - if not hasattr(cura.CuraVersion, "CuraSDKVersion"): # type: ignore + if not hasattr(cura.CuraVersion, "CuraSDKVersion"): # type: ignore return self._plugin_registry.APIVersion - if not cura.CuraVersion.CuraSDKVersion: # type: ignore + if not cura.CuraVersion.CuraSDKVersion: # type: ignore return self._plugin_registry.APIVersion - return cura.CuraVersion.CuraSDKVersion # type: ignore + return cura.CuraVersion.CuraSDKVersion # type: ignore @pyqtSlot() def browsePackages(self) -> None: @@ -489,17 +489,17 @@ class Toolbox(QObject, Extension): local_version = Version(local_package["package_version"]) remote_version = Version(remote_package["package_version"]) if self._getSDKVersion() == "dev": - sdk_version = int(self._plugin_registry.APIVersion) + sdk_version = self._plugin_registry.APIVersion else: - sdk_version = int(self._getSDKVersion()) + sdk_version = self._getSDKVersion() can_upgrade = False if remote_version > local_version: can_upgrade = True # A package with the same version can be built to have different SDK versions. So, for a package with the same # version, we also need to check if the current one has a lower SDK version. If so, this package should also # be upgradable. - elif remote_version == local_version and local_package.get("sdk_version", 0) < sdk_version: - can_upgrade = True + elif remote_version == local_version: + can_upgrade = local_package.get("sdk_version", 0) < remote_package.get("sdk_version", 0) return can_upgrade From 4db213c55a6b5bca31412c7cffc488e51231b37b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 16:24:10 +0200 Subject: [PATCH 301/364] Fix missing import --- plugins/Toolbox/src/Toolbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index ceb27542c1..f24184439d 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -5,7 +5,7 @@ import json import os import tempfile import platform -from typing import cast, Any, Dict, List, Set, TYPE_CHECKING, Tuple, Optional +from typing import cast, Any, Dict, List, Set, TYPE_CHECKING, Tuple, Optional, Union from PyQt5.QtCore import QUrl, QObject, pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply From 15657f4cfce62c6c7baf950e62845eca69ceb3e3 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 17:26:19 +0200 Subject: [PATCH 302/364] Remove unneeded code --- plugins/Toolbox/src/Toolbox.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index f24184439d..2c252748fa 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -498,10 +498,6 @@ class Toolbox(QObject, Extension): local_version = Version(local_package["package_version"]) remote_version = Version(remote_package["package_version"]) - if self._getSDKVersion() == "dev": - sdk_version = self._plugin_registry.APIVersion - else: - sdk_version = self._getSDKVersion() can_upgrade = False if remote_version > local_version: can_upgrade = True From da047ea6740ddd0d9eb973984510051391823b84 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Sep 2018 17:26:36 +0200 Subject: [PATCH 303/364] isInstalled() should check old plugins as a fallback --- plugins/Toolbox/src/Toolbox.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 2c252748fa..91984aa148 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -527,7 +527,11 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = bool) def isInstalled(self, package_id: str) -> bool: - return self._package_manager.isPackageInstalled(package_id) + result = self._package_manager.isPackageInstalled(package_id) + # Also check the old plugins list if it's not found in the package manager. + if not result: + result = self.isOldPlugin(package_id) + return result @pyqtSlot(str, result = int) def getNumberOfInstalledPackagesByAuthor(self, author_id: str) -> int: From 725ea847a78415133cb07306a1c59e33606db209 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 14 Sep 2018 09:43:24 +0200 Subject: [PATCH 304/364] Add material_diameter into fdmprinter When saving a material to a file, it will save all the settings in that container, which needs to create SettingInstances for all the cached ones, and for those instances, their definitions will be retrieved from the machine definition. material_diameter is one of the settings, but it only exists in the extruder definitions, so when it tries to save a material profile, a lot of warnings/errors will occur due to the missing "material_diameter" in fdmprinter. Adding it back fixes this problem. --- resources/definitions/fdmprinter.def.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4c87a3bcf0..6833e921da 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -77,6 +77,20 @@ "type": "str", "enabled": false }, + "material_diameter": + { + "label": "Diameter", + "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", + "unit": "mm", + "type": "float", + "default_value": 2.85, + "minimum_value": "0.0001", + "minimum_value_warning": "0.4", + "maximum_value_warning": "3.5", + "enabled": "machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_bed_temp_wait": { "label": "Wait for Build Plate Heatup", From c764b31e06d4899e90758b9042941f5ecfcd2858 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 18 Sep 2018 11:10:24 +0200 Subject: [PATCH 305/364] Update unit test for 'visibilit_settings' and removed unused settings from expert.cfv CURA-5734 --- resources/setting_visibility/expert.cfg | 2 - scripts/check_setting_visibility.py | 119 ++++++++++++++++++------ 2 files changed, 93 insertions(+), 28 deletions(-) diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index 0ca2cbab70..437790ef74 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -110,7 +110,6 @@ material_extrusion_cool_down_speed default_material_bed_temperature material_bed_temperature material_bed_temperature_layer_0 -material_diameter material_adhesion_tendency material_surface_energy material_flow @@ -360,7 +359,6 @@ coasting_min_volume coasting_speed skin_alternate_rotation cross_infill_pocket_size -cross_infill_apply_pockets_alternatingly spaghetti_infill_enabled spaghetti_infill_stepped spaghetti_max_infill_angle diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py index 489b00747e..37e489c072 100644 --- a/scripts/check_setting_visibility.py +++ b/scripts/check_setting_visibility.py @@ -21,9 +21,7 @@ class SettingVisibilityInspection: def __init__(self) -> None: - self.all_settings_keys = [] - self.all_settings_categories = [] - + self.all_settings_keys = {} def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None: @@ -34,18 +32,20 @@ class SettingVisibilityInspection: def _flattenAllSettings(self, json_file: Dict[str, str]) -> None: for key, data in json_file["settings"].items(): # top level settings are categories - self._flattenSettings(data["children"]) # actual settings are children of top level category-settings - def _flattenSettings(self, settings: Dict[str, str]) -> None: + if "type" in data and data["type"] == "category": + + self.all_settings_keys[key] = [] + self._flattenSettings(data["children"], key) # actual settings are children of top level category-settings + + def _flattenSettings(self, settings: Dict[str, str], category) -> None: for key, setting in settings.items(): if "type" in setting and setting["type"] != "category": - self.all_settings_keys.append(key) - else: - self.all_settings_categories.append(key) + self.all_settings_keys[category].append(key) if "children" in setting: - self._flattenSettings(setting["children"]) + self._flattenSettings(setting["children"], category) def getSettingsFromSettingVisibilityFile(self, file_path: str): @@ -70,13 +70,92 @@ class SettingVisibilityInspection: def validateSettingsVisibility(self, setting_visibility_items: Dict): + not_valid_categories = {} + not_valid_setting_by_category = {} + not_valid_setting_by_order = {} + + visible_settings_order = [] # This list is used to make sure that the settings are in the correct order. + # basic.cfg -> advanced.cfg -> expert.cfg. Like: if the setting 'layer_height' in 'basic.cfg' then the same setting + # also should be in 'advanced.cfg' + + all_settings_categories = list(self.all_settings_keys.keys()) + + # visibility_type = basic, advanced, expert for visibility_type in setting_visibility: item = setting_visibility_items[visibility_type] - for category, settings in item.items(): - ss = 3 + not_valid_setting_by_category[visibility_type] = [] # this list is for keeping invalid settings. + not_valid_categories[visibility_type] = [] + + for category, category_settings in item.items(): + + # Validate Category, If category is not defined then the test will fail + if category not in all_settings_categories: + not_valid_categories[visibility_type].append(category) + + for setting in category_settings: + + # Check whether the setting exist in fdmprinter.def.json or not. + # If the setting is defined in the wrong category or does not exist there then the test will fail + if setting not in self.all_settings_keys[category]: + not_valid_setting_by_category[visibility_type].append(setting) + + # Add the 'basic' settings to the list + if visibility_type == "basic": + visible_settings_order.append(setting) + # Check whether the settings are added in right order or not. + # The basic settings should be in advanced, and advanced in expert + for visibility_type in setting_visibility: + + # Skip the basic because it cannot be compared to previous list + if visibility_type == 'basic': + continue + + all_settings_in_this_type = [] + not_valid_setting_by_order[visibility_type] = [] + + item = setting_visibility_items[visibility_type] + for category, category_settings in item.items(): + all_settings_in_this_type.extend(category_settings) + + + for setting in visible_settings_order: + if setting not in all_settings_in_this_type: + not_valid_setting_by_order[visibility_type].append(setting) + + + # If any of the settings is defined not correctly then the test is failed + has_invalid_settings = False + + for type, settings in not_valid_categories.items(): + if len(settings) > 0: + has_invalid_settings = True + print("The following categories are defined incorrectly") + print(" Visibility type : '%s'" % (type)) + print(" Incorrect categories : '%s'" % (settings)) + print() + + + + for type, settings in not_valid_setting_by_category.items(): + if len(settings) > 0: + has_invalid_settings = True + print("The following settings do not exist anymore in fdmprinter definition or in wrong category") + print(" Visibility type : '%s'" % (type)) + print(" Incorrect settings : '%s'" % (settings)) + print() + + + for type, settings in not_valid_setting_by_order.items(): + if len(settings) > 0: + has_invalid_settings = True + print("The following settings are defined in the incorrect order in setting visibility definitions") + print(" Visibility type : '%s'" % (type)) + print(" Incorrect settings : '%s'" % (settings)) + + return has_invalid_settings if __name__ == "__main__": @@ -89,25 +168,13 @@ if __name__ == "__main__": setting_visibility_items = {} for file_path in all_setting_visibility_files: - temp = inspector.getSettingsFromSettingVisibilityFile(all_setting_visibility_files[0]) + temp = inspector.getSettingsFromSettingVisibilityFile(file_path) base_name = os.path.basename(file_path) visibility_type = base_name.split('.')[0] setting_visibility_items[visibility_type] = temp + has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items) - inspector.validateSettingsVisibility(setting_visibility_items) - - found_error = False - # Validate settings - # for item in setting_visibility: - - - - - - - - - sys.exit(0 if not found_error else 1) + sys.exit(0 if not has_invalid_settings else 1) From a7a022eca0a9163d89a332a4211c3b80dd5617b3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 11:24:30 +0200 Subject: [PATCH 306/364] Add confirmation dialogue before aborting a print It's a destructive operation so we should ask first. Contributes to issue CL-1053 and CURA-5729. --- .../resources/qml/ClusterControlItem.qml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml index 1164e383db..a7061b76e5 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml @@ -1,4 +1,5 @@ import QtQuick 2.3 +import QtQuick.Dialogs 1.1 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.3 import QtGraphicalEffects 1.0 @@ -443,8 +444,8 @@ Component text: catalog.i18nc("@label", "Abort") onClicked: { - modelData.activePrintJob.setState("abort") - popup.close() + abortConfirmationDialog.visible = true; + popup.close(); } width: parent.width anchors.top: pauseButton.bottom @@ -456,6 +457,17 @@ Component color: UM.Theme.getColor("viewport_background") } } + + MessageDialog + { + id: abortConfirmationDialog + title: catalog.i18nc("@window:title", "Abort print") + icon: StandardIcon.Warning + text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(modelData.activePrintJob.name) + standardButtons: StandardButton.Yes | StandardButton.No + Component.onCompleted: visible = false + onYes: modelData.activePrintJob.setState("abort") + } } background: Item From ac4ee8c4283335e8c439ef12e7e1416fa7538c7c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 11:25:35 +0200 Subject: [PATCH 307/364] Fix context of pause, resume and abort labels More in line with what we have in the rest of our code base. Discovered during work on CL-1053 and CURA-5729. --- resources/qml/MonitorButton.qml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml index 0bae22e164..aa40de11e4 100644 --- a/resources/qml/MonitorButton.qml +++ b/resources/qml/MonitorButton.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. +//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 @@ -281,16 +281,16 @@ Item text: { if (!printerConnected || activePrintJob == null) { - return catalog.i18nc("@label:", "Pause"); + return catalog.i18nc("@label", "Pause"); } if (activePrintJob.state == "paused") { - return catalog.i18nc("@label:", "Resume"); + return catalog.i18nc("@label", "Resume"); } else { - return catalog.i18nc("@label:", "Pause"); + return catalog.i18nc("@label", "Pause"); } } onClicked: @@ -322,7 +322,7 @@ Item height: UM.Theme.getSize("save_button_save_to_button").height - text: catalog.i18nc("@label:", "Abort Print") + text: catalog.i18nc("@label", "Abort Print") onClicked: confirmationDialog.visible = true style: UM.Theme.styles.sidebar_action_button From 83528ffb488f96bb0be7385f8a55f08fe1f54f2f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 11:41:51 +0200 Subject: [PATCH 308/364] Add confirmation dialogue for sending prints to top of queue Very simple. Just re-use the MessageDialog component. Contributes to issues CL-1053 and CURA-5729. --- .../resources/qml/PrintJobInfoBlock.qml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml index f39b430e19..be1874ff91 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml @@ -1,4 +1,5 @@ import QtQuick 2.2 +import QtQuick.Dialogs 1.1 import QtQuick.Controls 2.0 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.0 @@ -212,8 +213,8 @@ Item text: catalog.i18nc("@label", "Move to top") onClicked: { - OutputDevice.sendJobToTop(printJob.key) - popup.close() + sendToTopConfirmationDialog.visible = true; + popup.close(); } width: parent.width enabled: OutputDevice.queuedPrintJobs[0].key != printJob.key @@ -227,6 +228,17 @@ Item } } + MessageDialog + { + id: sendToTopConfirmationDialog + title: catalog.i18nc("@window:title", "Move print job to top") + icon: StandardIcon.Warning + text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) + standardButtons: StandardButton.Yes | StandardButton.No + Component.onCompleted: visible = false + onYes: OutputDevice.sendJobToTop(printJob.key) + } + Button { id: deleteButton From 3a096cdb23c3d6c5bd65d9f8cedf9338d5318487 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 11:42:34 +0200 Subject: [PATCH 309/364] Add confirmation dialogue for deleting jobs Re-using MessageDialog again. Contributes to issues CL-1053 and CURA-5729. --- .../resources/qml/PrintJobInfoBlock.qml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml index be1874ff91..dd8eb27fca 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml @@ -245,8 +245,8 @@ Item text: catalog.i18nc("@label", "Delete") onClicked: { - OutputDevice.deleteJobFromQueue(printJob.key) - popup.close() + deleteConfirmationDialog.visible = true; + popup.close(); } width: parent.width anchors.top: sendToTopButton.bottom @@ -257,6 +257,17 @@ Item color: UM.Theme.getColor("viewport_background") } } + + MessageDialog + { + id: deleteConfirmationDialog + title: catalog.i18nc("@window:title", "Delete print job") + icon: StandardIcon.Warning + text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) + standardButtons: StandardButton.Yes | StandardButton.No + Component.onCompleted: visible = false + onYes: OutputDevice.deleteJobFromQueue(printJob.key) + } } background: Item From e5778be8873f77da2ec50cf574440372b11d7cfb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 12:41:44 +0200 Subject: [PATCH 310/364] Corrections to change log One was missing. One was confusing. One was incomplete. Contributes to issue CURA-5710. --- plugins/ChangeLogPlugin/ChangeLog.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 0590dcde62..908e8d973c 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -35,6 +35,9 @@ Improved and updated Chinese translations. Contributed by MarmaladeForMeat. *Save project Saving the project no longer triggers the project to reslice. +*File menu +The Save option in the file menu now saves project files. The export option now saves other types of files, such as STL. + *Improved processing of overhang walls Overhang walls are detected and printed with different speeds. It will not start a perimeter on an overhanging wall. The quality of overhanging walls may be improved by printing those at a different speed. Contributed by smartavionics. @@ -65,8 +68,8 @@ New setting to modify the fan speed of bridged areas. This setting can be found *Minimum wall flow New setting to define a minimum flow for thin printed walls. Contributed by smartavionics. -*Custom support -A tool similar to the support blocker that adds cubes of support to the model manually by clicking parts of it. Contributed by Lokster. +*Custom support plugin +A tool downloadable from the toolbox, similar to the support blocker, that adds cubes of support to the model manually by clicking parts of it. Contributed by Lokster. *Quickly toggle autoslicing Adds a pause/play button to the progress bar to quickly toggle autoslicing. Contributed by fieldOfview. From ddc5d983a1625c38950d1732185fdec83bf93bad Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 18 Sep 2018 13:34:54 +0200 Subject: [PATCH 311/364] Fix single extrusion machines without an ExtruderStack CURA-5736 --- cura/Settings/CuraStackBuilder.py | 46 ++++++++++++++++++++++++++++++- cura/Settings/ExtruderManager.py | 11 ++++++-- cura/Settings/MachineManager.py | 3 +- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 12fe732e3e..802f607f20 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -136,6 +136,50 @@ class CuraStackBuilder: return new_global_stack + @classmethod + 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) + 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() + + extruder_definition_dict = global_stack.getMetaDataEntry("machine_extruder_trains") + extruder_definition_id = extruder_definition_dict[str(extruder_position)] + extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0] + + # get material container for extruders + material_container = application.empty_material_container + material_node = material_manager.getDefaultMaterial(global_stack, extruder_position, extruder_variant_name, + extruder_definition = extruder_definition) + if material_node and material_node.getContainer(): + material_container = material_node.getContainer() + + new_extruder_id = registry.uniqueName(extruder_definition_id) + new_extruder = cls.createExtruderStack( + new_extruder_id, + extruder_definition = extruder_definition, + machine_definition_id = global_stack.definition.getId(), + position = extruder_position, + variant_container = extruder_variant_container, + material_container = material_container, + quality_container = application.empty_quality_container + ) + new_extruder.setNextStack(global_stack) + global_stack.addExtruder(new_extruder) + + registry.addContainer(new_extruder) + ## Create a new Extruder stack # # \param new_stack_id The ID of the new stack. @@ -157,7 +201,7 @@ class CuraStackBuilder: stack.setName(extruder_definition.getName()) stack.setDefinition(extruder_definition) - stack.setMetaDataEntry("position", position) + stack.setMetaDataEntry("position", str(position)) user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id, is_global_stack = False) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index ed7f6dd4f8..18744cd13f 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -358,8 +358,15 @@ class ExtruderManager(QObject): # "fdmextruder". We need to check a machine here so its extruder definition is correct according to this. def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None: expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"] - extruder_stack_0 = global_stack.extruders["0"] - if extruder_stack_0.definition.getId() != expected_extruder_definition_0_id: + extruder_stack_0 = global_stack.extruders.get("0") + + if extruder_stack_0 is None: + Logger.log("i", "No extruder stack for global stack [%s], create one", global_stack.getId()) + # Single extrusion machine without an ExtruderStack, create it + from cura.Settings.CuraStackBuilder import CuraStackBuilder + CuraStackBuilder.createExtruderStackWithDefaultSetup(global_stack, 0) + + 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())) container_registry = ContainerRegistry.getInstance() diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ed543fcee1..3f918e21ba 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -367,6 +367,7 @@ class MachineManager(QObject): return global_stack = containers[0] + ExtruderManager.getInstance()._fixSingleExtrusionMachineExtruderDefinition(global_stack) if not global_stack.isValid(): # Mark global stack as invalid ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId()) @@ -375,7 +376,7 @@ class MachineManager(QObject): self._global_container_stack = global_stack self._application.setGlobalContainerStack(global_stack) ExtruderManager.getInstance()._globalContainerStackChanged() - self._initMachineState(containers[0]) + self._initMachineState(global_stack) self._onGlobalContainerChanged() self.__emitChangedSignals() From f33576cc81d16c9f11856cd73aa757ae1f437419 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 18 Sep 2018 13:56:20 +0200 Subject: [PATCH 312/364] Stop simulation after pressing Up or Down in simulation layer textfield CURA-5725 --- plugins/SimulationView/LayerSlider.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 1540f053f5..5bce35c077 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -195,6 +195,8 @@ Item { // set the slider position based on the upper value function setValue(value) { + sliderRoot.manuallyChanged = true + // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -292,6 +294,8 @@ Item { // set the slider position based on the lower value function setValue(value) { + sliderRoot.manuallyChanged = true + // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -342,4 +346,4 @@ Item { setValue: lowerHandle.setValue // connect callback functions } } -} +} \ No newline at end of file From 1b1ca8a53bdacb7db03bcf2d2508de63b2aa6929 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 18 Sep 2018 14:39:43 +0200 Subject: [PATCH 313/364] Fix, simulation did not play after second layer CURA-5725 --- plugins/SimulationView/LayerSlider.qml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 5bce35c077..ce0810b21f 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -193,10 +193,14 @@ Item { return result } + function setValueAndStopSimulation(value) + { + sliderRoot.manuallyChanged = true + upperHandle.setValue(value) + } + // set the slider position based on the upper value function setValue(value) { - sliderRoot.manuallyChanged = true - // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -252,7 +256,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.upperValue busy: UM.SimulationView.busy - setValue: upperHandle.setValue // connect callback functions + setValue: upperHandle.setValueAndStopSimulation // connect callback functions } } @@ -292,9 +296,14 @@ Item { return result } + function setValueAndStopSimulation(value) + { + sliderRoot.manuallyChanged = true + lowerHandle.setValue(value) + } + // set the slider position based on the lower value function setValue(value) { - sliderRoot.manuallyChanged = true // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -343,7 +352,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.lowerValue busy: UM.SimulationView.busy - setValue: lowerHandle.setValue // connect callback functions + setValue: lowerHandle.setValueAndStopSimulation // connect callback functions } } } \ No newline at end of file From 9924e3e26cc4400c9019addedfcaae523cb1e774 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 18 Sep 2018 15:08:52 +0200 Subject: [PATCH 314/364] Remove duplicated code CURA-5735 --- cura/Settings/CuraStackBuilder.py | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 802f607f20..9df95ddcdb 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -74,34 +74,8 @@ class CuraStackBuilder: # Create ExtruderStacks extruder_dict = machine_definition.getMetaDataEntry("machine_extruder_trains") - - for position, extruder_definition_id in extruder_dict.items(): - # Sanity check: make sure that the positions in the extruder definitions are same as in the machine - # definition - extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0] - position_in_extruder_def = extruder_definition.getMetaDataEntry("position") - if position_in_extruder_def != position: - ConfigurationErrorMessage.getInstance().addFaultyContainers(extruder_definition_id) - return None #Don't return any container stack then, not the rest of the extruders either. - - # get material container for extruders - material_container = application.empty_material_container - material_node = material_manager.getDefaultMaterial(new_global_stack, position, extruder_variant_name, extruder_definition = extruder_definition) - if material_node and material_node.getContainer(): - material_container = material_node.getContainer() - - new_extruder_id = registry.uniqueName(extruder_definition_id) - new_extruder = cls.createExtruderStack( - new_extruder_id, - extruder_definition = extruder_definition, - machine_definition_id = definition_id, - position = position, - variant_container = extruder_variant_container, - material_container = material_container, - quality_container = application.empty_quality_container - ) - new_extruder.setNextStack(new_global_stack) - new_global_stack.addExtruder(new_extruder) + 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. registry.addContainer(new_extruder) From a33ce8178a7bb21674c984ef68f2bc9be71f4408 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 18 Sep 2018 15:53:55 +0200 Subject: [PATCH 315/364] Support mulitple bundled_packages JSON files CURA-5718 --- plugins/Toolbox/src/Toolbox.py | 4 ++-- .../{bundled_packages.json => bundled_packages/cura.json} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename resources/{bundled_packages.json => bundled_packages/cura.json} (100%) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 91984aa148..be9fe65004 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -306,8 +306,8 @@ class Toolbox(QObject, Extension): all_packages = self._package_manager.getAllInstalledPackagesInfo() if "plugin" in all_packages: # For old plugins, we only want to include the old custom plugin that were installed via the old toolbox. - # The bundled plugins will be included in the "bundled_packages.json", so the bundled plugins should be - # excluded from the old plugins list/dict. + # The bundled plugins will be included in JSON files in the "bundled_packages" folder, so the bundled + # plugins should be excluded from the old plugins list/dict. all_plugin_package_ids = set(package["package_id"] for package in all_packages["plugin"]) self._old_plugin_ids = set(plugin_id for plugin_id in self._old_plugin_ids if plugin_id not in all_plugin_package_ids) diff --git a/resources/bundled_packages.json b/resources/bundled_packages/cura.json similarity index 100% rename from resources/bundled_packages.json rename to resources/bundled_packages/cura.json From e28b662649d83194c19e32eb1e35237ee1f85d50 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 16:04:31 +0200 Subject: [PATCH 316/364] Clean up the code a bit and update comments. Contributes to CURA-5736. --- cura/Settings/CuraStackBuilder.py | 51 +++++++++++++++++++------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 9df95ddcdb..6374e6056c 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -15,6 +15,7 @@ from .ExtruderStack import ExtruderStack ## Contains helper functions to create new machines. class CuraStackBuilder: + ## Create a new instance of a machine. # # \param name The name of the new machine. @@ -26,7 +27,6 @@ class CuraStackBuilder: from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() variant_manager = application.getVariantManager() - material_manager = application.getMaterialManager() quality_manager = application.getQualityManager() registry = application.getContainerRegistry() @@ -46,16 +46,6 @@ class CuraStackBuilder: if not global_variant_container: global_variant_container = application.empty_variant_container - # get variant container for extruders - extruder_variant_container = application.empty_variant_container - extruder_variant_node = variant_manager.getDefaultVariantNode(machine_definition, VariantType.NOZZLE) - 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() - generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName()) # Make sure the new name does not collide with any definition or (quality) profile # createUniqueName() only looks at other stacks, but not at definitions or quality profiles @@ -110,6 +100,10 @@ class CuraStackBuilder: return new_global_stack + ## Create a default Extruder Stack + # + # \param global_stack The global stack this extruder refers to. + # \param extruder_position The position of the current extruder. @classmethod def createExtruderStackWithDefaultSetup(cls, global_stack: "GlobalStack", extruder_position: int) -> None: from cura.CuraApplication import CuraApplication @@ -157,16 +151,22 @@ class CuraStackBuilder: ## Create a new Extruder stack # # \param new_stack_id The ID of the new stack. - # \param definition The definition to base the new stack on. - # \param machine_definition_id The ID of the machine definition to use for - # the user container. - # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm" + # \param extruder_definition The definition to base the new stack on. + # \param machine_definition_id The ID of the machine definition to use for the user container. + # \param position The position the extruder occupies in the machine. + # \param variant_container The variant selected for the current extruder. + # \param material_container The material selected for the current extruder. + # \param quality_container The quality selected for the current extruder. # - # \return A new Global stack instance with the specified parameters. + # \return A new Extruder stack instance with the specified parameters. @classmethod - def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, machine_definition_id: str, + def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, + machine_definition_id: str, position: int, - variant_container, material_container, quality_container) -> ExtruderStack: + variant_container: "InstanceContainer", + material_container: "InstanceContainer", + quality_container: "InstanceContainer") -> ExtruderStack: + from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() registry = application.getContainerRegistry() @@ -201,9 +201,22 @@ class CuraStackBuilder: # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm" # # \return A new Global stack instance with the specified parameters. + + ## Create a new Global stack + # + # \param new_stack_id The ID of the new stack. + # \param definition The definition to base the new stack on. + # \param variant_container The variant selected for the current stack. + # \param material_container The material selected for the current stack. + # \param quality_container The quality selected for the current stack. + # + # \return A new Global stack instance with the specified parameters. @classmethod def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, - variant_container, material_container, quality_container) -> GlobalStack: + variant_container: "InstanceContainer", + material_container: "InstanceContainer", + quality_container: "InstanceContainer") -> GlobalStack: + from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() registry = application.getContainerRegistry() From f965b66c87efa6e37bacd2e50412a3ae984ded65 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 16:30:15 +0200 Subject: [PATCH 317/364] Stop the simulation also when the range slider is used. Reuse some code. Contributes to CURA-5725. --- plugins/SimulationView/LayerSlider.qml | 28 +++++++++++----------- plugins/SimulationView/PathSlider.qml | 32 ++++++++++++-------------- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index ce0810b21f..121bd0ce7d 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -111,6 +111,12 @@ Item { UM.SimulationView.setMinimumLayer(lowerValue) } + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + upperHandle.setValue(value) + } + function setValue(value) { var range = sliderRoot.upperValue - sliderRoot.lowerValue value = Math.min(value, sliderRoot.maximumValue) @@ -154,7 +160,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.upperValue busy: UM.SimulationView.busy - setValue: rangeHandle.setValue // connect callback functions + setValue: rangeHandle.setValueManually // connect callback functions } } @@ -193,7 +199,7 @@ Item { return result } - function setValueAndStopSimulation(value) + function setValueManually(value) { sliderRoot.manuallyChanged = true upperHandle.setValue(value) @@ -214,16 +220,8 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onUpPressed: - { - sliderRoot.manuallyChanged = true - upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - } - Keys.onDownPressed: - { - sliderRoot.manuallyChanged = true - upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - } + Keys.onUpPressed: upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging MouseArea { @@ -256,7 +254,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.upperValue busy: UM.SimulationView.busy - setValue: upperHandle.setValueAndStopSimulation // connect callback functions + setValue: upperHandle.setValueManually // connect callback functions } } @@ -296,7 +294,7 @@ Item { return result } - function setValueAndStopSimulation(value) + function setValueManually(value) { sliderRoot.manuallyChanged = true lowerHandle.setValue(value) @@ -352,7 +350,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.lowerValue busy: UM.SimulationView.busy - setValue: lowerHandle.setValueAndStopSimulation // connect callback functions + setValue: lowerHandle.setValueManually // connect callback functions } } } \ No newline at end of file diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index 7eb56cc0b8..f89b762a60 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -36,16 +36,16 @@ Item { property bool pathsVisible: true property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation - function getHandleValueFromSliderHandle () { + function getHandleValueFromSliderHandle() { return handle.getValue() } - function setHandleValue (value) { + function setHandleValue(value) { handle.setValue(value) updateRangeHandle() } - function updateRangeHandle () { + function updateRangeHandle() { rangeHandle.width = handle.x - sliderRoot.handleSize } @@ -97,7 +97,7 @@ Item { color: handleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.handleColor visible: sliderRoot.pathsVisible - function onHandleDragged () { + function onHandleDragged() { sliderRoot.manuallyChanged = true // update the range handle @@ -108,15 +108,21 @@ Item { } // get the value based on the slider position - function getValue () { + function getValue() { var result = x / (sliderRoot.width - sliderRoot.handleSize) result = result * sliderRoot.maximumValue result = sliderRoot.roundValues ? Math.round(result) : result return result } + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + handle.setValue(value) + } + // set the slider position based on the value - function setValue (value) { + function setValue(value) { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -130,16 +136,8 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onRightPressed: - { - sliderRoot.manuallyChanged = true - handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - } - Keys.onLeftPressed: - { - sliderRoot.manuallyChanged = true - handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - } + Keys.onRightPressed: handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging MouseArea { @@ -172,7 +170,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.handleValue busy: UM.SimulationView.busy - setValue: handle.setValue // connect callback functions + setValue: handle.setValueManually // connect callback functions } } } From 0ef46feeaeffb38bea03d2c7b26682406f4c5d17 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 16:53:25 +0200 Subject: [PATCH 318/364] Fix code style. Contributes to CURA-5725. --- plugins/SimulationView/LayerSlider.qml | 110 ++++++++++++++++--------- plugins/SimulationView/PathSlider.qml | 54 +++++++----- 2 files changed, 105 insertions(+), 59 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 121bd0ce7d..0a9f533cdd 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -9,7 +9,8 @@ import QtQuick.Controls.Styles 1.1 import UM 1.0 as UM import Cura 1.0 as Cura -Item { +Item +{ id: sliderRoot // handle properties @@ -41,39 +42,47 @@ Item { property bool layersVisible: true property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation - function getUpperValueFromSliderHandle() { + function getUpperValueFromSliderHandle() + { return upperHandle.getValue() } - function setUpperValue(value) { + function setUpperValue(value) + { upperHandle.setValue(value) updateRangeHandle() } - function getLowerValueFromSliderHandle() { + function getLowerValueFromSliderHandle() + { return lowerHandle.getValue() } - function setLowerValue(value) { + function setLowerValue(value) + { lowerHandle.setValue(value) updateRangeHandle() } - function updateRangeHandle() { + function updateRangeHandle() + { rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height) } // set the active handle to show only one label at a time - function setActiveHandle(handle) { + function setActiveHandle(handle) + { activeHandle = handle } - function normalizeValue(value) { + function normalizeValue(value) + { return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } // slider track - Rectangle { + Rectangle + { id: track width: sliderRoot.trackThickness @@ -87,7 +96,8 @@ Item { } // Range handle - Item { + Item + { id: rangeHandle y: upperHandle.y + upperHandle.height @@ -97,7 +107,8 @@ Item { visible: sliderRoot.layersVisible // set the new value when dragging - function onHandleDragged() { + function onHandleDragged() + { sliderRoot.manuallyChanged = true upperHandle.y = y - upperHandle.height @@ -117,7 +128,8 @@ Item { upperHandle.setValue(value) } - function setValue(value) { + function setValue(value) + { var range = sliderRoot.upperValue - sliderRoot.lowerValue value = Math.min(value, sliderRoot.maximumValue) value = Math.max(value, sliderRoot.minimumValue + range) @@ -126,17 +138,20 @@ Item { UM.SimulationView.setMinimumLayer(value - range) } - Rectangle { + Rectangle + { width: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth height: parent.height + sliderRoot.handleSize anchors.centerIn: parent color: sliderRoot.rangeHandleColor } - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: upperHandle.height @@ -147,7 +162,8 @@ Item { onPressed: sliderRoot.setActiveHandle(rangeHandle) } - SimulationSliderLabel { + SimulationSliderLabel + { id: rangleHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height @@ -165,7 +181,8 @@ Item { } // Upper handle - Rectangle { + Rectangle + { id: upperHandle y: sliderRoot.height - (sliderRoot.minimumRangeHandleSize + 2 * sliderRoot.handleSize) @@ -176,11 +193,13 @@ Item { color: upperHandleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.upperHandleColor visible: sliderRoot.layersVisible - function onHandleDragged() { + function onHandleDragged() + { sliderRoot.manuallyChanged = true // don't allow the lower handle to be heigher than the upper handle - if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) { + if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) + { lowerHandle.y = y + height + sliderRoot.minimumRangeHandleSize } @@ -192,7 +211,8 @@ Item { } // get the upper value based on the slider position - function getValue() { + function getValue() + { var result = y / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) result = sliderRoot.maximumValue + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumValue)) result = sliderRoot.roundValues ? Math.round(result) : result @@ -206,7 +226,8 @@ Item { } // set the slider position based on the upper value - function setValue(value) { + function setValue(value) + { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -220,14 +241,16 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onUpPressed: upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onUpPressed: upperHandleLabel.setValueManually(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onDownPressed: upperHandleLabel.setValueManually(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: 0 @@ -235,13 +258,15 @@ Item { } onPositionChanged: parent.onHandleDragged() - onPressed: { + onPressed: + { sliderRoot.setActiveHandle(upperHandle) upperHandleLabel.forceActiveFocus() } } - SimulationSliderLabel { + SimulationSliderLabel + { id: upperHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height @@ -259,7 +284,8 @@ Item { } // Lower handle - Rectangle { + Rectangle + { id: lowerHandle y: sliderRoot.height - sliderRoot.handleSize @@ -271,11 +297,13 @@ Item { visible: sliderRoot.layersVisible - function onHandleDragged() { + function onHandleDragged() + { sliderRoot.manuallyChanged = true // don't allow the upper handle to be lower than the lower handle - if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) { + if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) + { upperHandle.y = y - (upperHandle.heigth + sliderRoot.minimumRangeHandleSize) } @@ -287,21 +315,23 @@ Item { } // get the lower value from the current slider position - function getValue() { + function getValue() + { var result = (y - (sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)); result = sliderRoot.maximumValue - sliderRoot.minimumRange + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumRange)) result = sliderRoot.roundValues ? Math.round(result) : result return result } - function setValueManually(value) + function setValueManually(handle, value) { sliderRoot.manuallyChanged = true - lowerHandle.setValue(value) + handle.setValue(value) } // set the slider position based on the lower value - function setValue(value) { + function setValue(value) + { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -320,10 +350,12 @@ Item { Keys.onDownPressed: lowerHandleLabel.setValue(lowerHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: upperHandle.height + sliderRoot.minimumRangeHandleSize @@ -331,13 +363,15 @@ Item { } onPositionChanged: parent.onHandleDragged() - onPressed: { + onPressed: + { sliderRoot.setActiveHandle(lowerHandle) lowerHandleLabel.forceActiveFocus() } } - SimulationSliderLabel { + SimulationSliderLabel + { id: lowerHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index f89b762a60..516cf988dc 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -9,7 +9,8 @@ import QtQuick.Controls.Styles 1.1 import UM 1.0 as UM import Cura 1.0 as Cura -Item { +Item +{ id: sliderRoot // handle properties @@ -36,25 +37,30 @@ Item { property bool pathsVisible: true property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation - function getHandleValueFromSliderHandle() { + function getHandleValueFromSliderHandle() + { return handle.getValue() } - function setHandleValue(value) { + function setHandleValue(value + { handle.setValue(value) updateRangeHandle() } - function updateRangeHandle() { + function updateRangeHandle() + { rangeHandle.width = handle.x - sliderRoot.handleSize } - function normalizeValue(value) { + function normalizeValue(value) + { return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } // slider track - Rectangle { + Rectangle + { id: track width: sliderRoot.width - sliderRoot.handleSize @@ -68,7 +74,8 @@ Item { } // Progress indicator - Item { + Item + { id: rangeHandle x: handle.width @@ -77,7 +84,8 @@ Item { anchors.verticalCenter: sliderRoot.verticalCenter visible: sliderRoot.pathsVisible - Rectangle { + Rectangle + { height: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth width: parent.width + sliderRoot.handleSize anchors.centerIn: parent @@ -86,7 +94,8 @@ Item { } // Handle - Rectangle { + Rectangle + { id: handle x: sliderRoot.handleSize @@ -97,7 +106,8 @@ Item { color: handleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.handleColor visible: sliderRoot.pathsVisible - function onHandleDragged() { + function onHandleDragged() + { sliderRoot.manuallyChanged = true // update the range handle @@ -108,7 +118,8 @@ Item { } // get the value based on the slider position - function getValue() { + function getValue() + { var result = x / (sliderRoot.width - sliderRoot.handleSize) result = result * sliderRoot.maximumValue result = sliderRoot.roundValues ? Math.round(result) : result @@ -122,7 +133,8 @@ Item { } // set the slider position based on the value - function setValue(value) { + function setValue(value) + { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -136,27 +148,27 @@ Item { sliderRoot.updateRangeHandle() } - Keys.onRightPressed: handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onRightPressed: handleLabel.setValueManually(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onLeftPressed: handleLabel.setValueManually(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.XAxis minimumX: 0 maximumX: sliderRoot.width - sliderRoot.handleSize } - onPressed: { - handleLabel.forceActiveFocus() - } - + onPressed: handleLabel.forceActiveFocus() onPositionChanged: parent.onHandleDragged() } - SimulationSliderLabel { + SimulationSliderLabel + { id: handleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height From c31f584e5b8a871ebe4e650dd356828a3d0bfc50 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 17:04:24 +0200 Subject: [PATCH 319/364] Fix my own mistake. The keys act throught the labels and the function in the labels is called setValue that then points to the setValueManually. Contributes to CURA-5725. --- plugins/SimulationView/LayerSlider.qml | 4 ++-- plugins/SimulationView/PathSlider.qml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 0a9f533cdd..342ec829b9 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -241,8 +241,8 @@ Item sliderRoot.updateRangeHandle() } - Keys.onUpPressed: upperHandleLabel.setValueManually(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onDownPressed: upperHandleLabel.setValueManually(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onUpPressed: upperHandleLabel.setValue(upperHandleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging MouseArea diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index 516cf988dc..f532294682 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -148,8 +148,8 @@ Item sliderRoot.updateRangeHandle() } - Keys.onRightPressed: handleLabel.setValueManually(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) - Keys.onLeftPressed: handleLabel.setValueManually(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onRightPressed: handleLabel.setValue(handleLabel.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) + Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging MouseArea From 13cab3653e499640d371a083856f8d1bfe9e83f0 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 17:09:57 +0200 Subject: [PATCH 320/364] Remove unworking code that I forgot to remove after explaining a possible solution to myself. Contributes to CURA-5725 --- plugins/SimulationView/LayerSlider.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 342ec829b9..841472a836 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -323,10 +323,10 @@ Item return result } - function setValueManually(handle, value) + function setValueManually(value) { sliderRoot.manuallyChanged = true - handle.setValue(value) + lowerHandle.setValue(value) } // set the slider position based on the lower value From e41361a053a35cbab2414aa7411a15154e67eddb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Sep 2018 17:18:37 +0200 Subject: [PATCH 321/364] Fan speed override is about supported areas, not bridged areas This is a correction suggested by Smartavionics (the author of that setting) on the Ultimaker forum thread about the 3.5 beta. --- plugins/ChangeLogPlugin/ChangeLog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 908e8d973c..fec177ca60 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -63,7 +63,7 @@ Creates multiple infill lines on the same pattern for sturdier infill. Contribut Connecting infill lines now also works with concentric and cross infill patterns. The benefit would be stronger infill and more consistent material flow/saving retractions. Contributed by BagelOrb. *Fan speed override -New setting to modify the fan speed of bridged areas. This setting can be found in Support settings > Fan Speed Override when support is enabled. Contributed by smartavionics. +New setting to modify the fan speed of supported areas. This setting can be found in Support settings > Fan Speed Override when support is enabled. Contributed by smartavionics. *Minimum wall flow New setting to define a minimum flow for thin printed walls. Contributed by smartavionics. From ed9b0dd41bace92528cdda26b1c60fc0fc383ad3 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 18 Sep 2018 17:25:35 +0200 Subject: [PATCH 322/364] Add a missing bracket back. Contributes to CURA-5725. --- plugins/SimulationView/PathSlider.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index f532294682..f3c28fb5f7 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -42,8 +42,8 @@ Item return handle.getValue() } - function setHandleValue(value - { + function setHandleValue(value) + { handle.setValue(value) updateRangeHandle() } From cb49ffa2d283038d7e1a83e20426bccbc36e2632 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Tue, 18 Sep 2018 17:42:01 +0200 Subject: [PATCH 323/364] Updated the script according to the requested changes CURA-5734 --- scripts/check_setting_visibility.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py index 37e489c072..974b922fbd 100644 --- a/scripts/check_setting_visibility.py +++ b/scripts/check_setting_visibility.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# This script check correctness of settings visibility list +# This script checks the correctness of the list of visibility settings # from typing import Dict import os @@ -168,12 +168,12 @@ if __name__ == "__main__": setting_visibility_items = {} for file_path in all_setting_visibility_files: - temp = inspector.getSettingsFromSettingVisibilityFile(file_path) + all_settings_from_visibility_type = inspector.getSettingsFromSettingVisibilityFile(file_path) base_name = os.path.basename(file_path) - visibility_type = base_name.split('.')[0] + visibility_type = base_name.split(".")[0] - setting_visibility_items[visibility_type] = temp + setting_visibility_items[visibility_type] = all_settings_from_visibility_type has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items) From 04b74d228510acdad96d30173e6cade67eb1dd0b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 13:52:53 +0200 Subject: [PATCH 324/364] Fix typo in Extra Infill Wall Count description Some very observant user found this small typo. Thanks. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6833e921da..14f948ce5b 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1730,7 +1730,7 @@ "infill_wall_line_count": { "label": "Extra Infill Wall Count", - "description": "Add extra wals around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.", + "description": "Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.", "default_value": 0, "type": "int", "minimum_value": "0", From 10e0175947e0c31b2e49de0a6ba69b396e5d8e2e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 17:10:58 +0200 Subject: [PATCH 325/364] Update translation templates for Cura 3.5 These are the new strings for Cura 3.5. Contributes to issue CURA-5741. --- resources/i18n/cura.pot | 1703 ++++++++++++----------- resources/i18n/fdmextruder.def.json.pot | 15 +- resources/i18n/fdmprinter.def.json.pot | 296 ++-- 3 files changed, 1120 insertions(+), 894 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 4235f75461..35c984b9f2 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -1,20 +1,20 @@ -# Cura -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -58,78 +69,17 @@ msgid "" "guide

" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "" @@ -154,6 +104,12 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -176,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -198,7 +159,7 @@ msgid "Save to Removable Drive {0}" msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -237,7 +198,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "" @@ -266,8 +227,8 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "" @@ -294,115 +255,115 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "" "Connected over the network. Please approve the access request on the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "" "Access to the printer requested. Please approve the request on the printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 msgctxt "@label" msgid "" "There is a mismatch between the configuration or calibration of the printer " @@ -410,40 +371,55 @@ msgid "" "that are inserted in your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "" "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, python-brace-format msgctxt "@label" msgid "" @@ -451,23 +427,23 @@ msgid "" "{remote_printcore_name}) selected for extruder {extruder_id}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 msgctxt "@label" msgid "" "The PrintCores and/or materials on your printer differ from those within " @@ -475,44 +451,44 @@ msgid "" "and materials that are inserted in your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "" @@ -522,7 +498,7 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "" "@info Don't translate {machine_name}, since it gets replaced by a printer " @@ -532,18 +508,18 @@ msgid "" "update the firmware on your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "" @@ -553,17 +529,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "" @@ -577,32 +553,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "" "Allow Cura to send anonymized usage statistics to help prioritize future " @@ -615,18 +591,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -652,23 +616,24 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "" "Unable to slice with the current material as it is incompatible with the " "selected machine or configuration." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "" @@ -676,7 +641,7 @@ msgid "" "errors: {0}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "" @@ -684,26 +649,34 @@ msgid "" "errors on one or more models: {error_labels}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "" "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "" +"Unable to slice because there are objects associated with disabled Extruder " +"%s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "" "Nothing to slice because none of the models fit the build volume. Please " "scale or rotate models to fit." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "" @@ -730,18 +703,32 @@ msgctxt "@title:tab" msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -752,18 +739,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 msgctxt "@info:generic" msgid "" "Make sure the g-code is suitable for your printer and printer configuration " @@ -776,16 +763,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -867,19 +869,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -893,19 +895,19 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "" "The selected material is incompatible with the selected machine or " "configuration." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "" @@ -913,7 +915,7 @@ msgid "" "[%s]" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "" @@ -1005,13 +1007,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1038,44 +1040,44 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "" "Tried to restore a Cura backup that does not match your current version." @@ -1087,32 +1089,32 @@ msgid "Multiplying and placing objects" msgstr "" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "" @@ -1250,22 +1252,22 @@ msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, python-format msgctxt "" "@info 'width', 'depth' and 'height' are variable names that must NOT be " @@ -1273,97 +1275,97 @@ msgctxt "" msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "" "Distance from the left of the printhead to the center of the nozzle. Used to " @@ -1371,12 +1373,12 @@ msgid "" "\"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "" "Distance from the front of the printhead to the center of the nozzle. Used " @@ -1384,12 +1386,12 @@ msgid "" "printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "" "Distance from the right of the printhead to the center of the nozzle. Used " @@ -1397,12 +1399,12 @@ msgid "" "printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "" "Distance from the rear of the printhead to the center of the nozzle. Used to " @@ -1410,12 +1412,12 @@ msgid "" "\"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "" "The height difference between the tip of the nozzle and the gantry system (X " @@ -1423,69 +1425,69 @@ msgid "" "gantry when printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "" "The nominal diameter of filament supported by the printer. The exact " "diameter will be overridden by the material and/or the profile." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "" @@ -1506,29 +1508,42 @@ msgid "" "Could not connect to the Cura Package database. Please check your connection." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "" @@ -1561,16 +1576,58 @@ msgctxt "@action:button" msgid "Back" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "" +"You are uninstalling materials and/or profiles that are still in use. " +"Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1614,12 +1671,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "" @@ -1629,9 +1686,14 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 @@ -1648,9 +1710,9 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1698,24 +1760,24 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@message:text" msgid "" "This printer/group is already added to Cura. Please select another printer/" "group." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your " @@ -1727,335 +1789,341 @@ msgid "" "Select your printer from the list below:" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "" "If your printer is not listed, read the network printing " "troubleshooting guide" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." +msgid "This printer is not set up to host a group of printers." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +msgid "This printer is the host for a group of %1 printers." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" +msgid "Manage queue" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "" @@ -2181,53 +2249,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "" @@ -2249,13 +2317,13 @@ msgid "Create new" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "" @@ -2272,7 +2340,7 @@ msgid "Update" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "" @@ -2283,7 +2351,7 @@ msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "" @@ -2295,19 +2363,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2337,7 +2405,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "" @@ -2348,13 +2416,13 @@ msgid "Mode" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "" @@ -2369,6 +2437,84 @@ msgctxt "@action:button" msgid "Open" msgstr "" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "" +"@label Print estimates: m for meters, g for grams, %4 is currency and %3 is " +"print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2600,27 +2746,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2654,19 +2784,17 @@ msgid "Customized" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "" @@ -2686,103 +2814,177 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2819,7 +3021,7 @@ msgid "Unit" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "" @@ -3021,7 +3223,7 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 @@ -3044,25 +3246,42 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" +msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 msgctxt "@info:tooltip" msgid "" "Should anonymous data about your print be sent to Ultimaker? Note, no " @@ -3070,56 +3289,37 @@ msgid "" "stored." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "" -"Should newly loaded models be arranged on the build plate? Used in " -"conjunction with multi build plate (EXPERIMENTAL)" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3163,7 +3363,7 @@ msgid "Aborting print..." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "" @@ -3178,18 +3378,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3200,18 +3388,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3232,100 +3408,45 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "" @@ -3340,6 +3461,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3491,33 +3617,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "" @@ -3608,7 +3734,7 @@ msgid "" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "" @@ -3666,7 +3792,7 @@ msgid "The nozzle inserted in this extruder." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "" @@ -3696,6 +3822,21 @@ msgid "" "when you're ready to print." msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3792,38 +3933,11 @@ msgid "" "G-code files cannot be modified" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "" @@ -3838,22 +3952,22 @@ msgid "" "last bit of the slicing process." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "" @@ -3959,184 +4073,183 @@ msgid "About..." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "" @@ -4159,131 +4272,147 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" +msgid "Export Selection..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "" "Are you sure you want to start a new project? This will clear the build " "plate and any unsaved settings." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 msgctxt "@text:window" msgid "" "We have found one or more G-Code files within the files you have selected. " @@ -4296,106 +4425,106 @@ msgctxt "@title:window" msgid "Save Project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "" "This quality profile is not available for you current material and nozzle " "configuration. Please change these to enable this quality profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "" "A custom profile is currently active. To enable the quality slider, choose a " "default quality profile in Custom tab" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "" "You have modified some profile settings. If you want to change these go to " "custom mode." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "" "Gradual infill will gradually increase the amount of infill towards the top." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "" "Select which extruder to use for support. This will build up supporting " @@ -4403,19 +4532,19 @@ msgid "" "mid air." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "" "Enable printing a brim or raft. This will add a flat area around or under " "your object which is easy to cut off afterwards." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "" "Need help improving your prints?
Read the Ultimaker " @@ -4466,22 +4595,22 @@ msgctxt "@label" msgid "Printer type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" +msgid "Use glue with this material combination" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "" @@ -4570,16 +4699,6 @@ msgctxt "name" msgid "God Mode" msgstr "" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4620,6 +4739,26 @@ msgctxt "name" msgid "UserAgreement" 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 "" + +#: X3GWriter/build/install/X3GWriter/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/install/X3GWriter/plugin.json +msgctxt "name" +msgid "X3GWriter" +msgstr "" + #: X3GWriter/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)." @@ -4660,16 +4799,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4780,16 +4909,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4840,6 +4959,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4950,6 +5079,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." diff --git a/resources/i18n/fdmextruder.def.json.pot b/resources/i18n/fdmextruder.def.json.pot index db93c13b3c..5a89eaee33 100644 --- a/resources/i18n/fdmextruder.def.json.pot +++ b/resources/i18n/fdmextruder.def.json.pot @@ -1,17 +1,12 @@ -# Cura JSON setting files -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. -# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Project-Id-Version: Uranium json setting files\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/resources/i18n/fdmprinter.def.json.pot b/resources/i18n/fdmprinter.def.json.pot index c505755444..79bcf5c7dc 100644 --- a/resources/i18n/fdmprinter.def.json.pot +++ b/resources/i18n/fdmprinter.def.json.pot @@ -1,17 +1,12 @@ -# Cura JSON setting files -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. -# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Project-Id-Version: Uranium json setting files\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -82,6 +77,18 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "" +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "" +"Adjusts the diameter of the filament used. Match this value with the " +"diameter of the used filament." +msgstr "" + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1154,6 +1161,20 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "" +"Connect top/bottom skin paths where they run next to each other. For the " +"concentric pattern enabling this setting greatly reduces the travel time, " +"but because the connections can happend midway over infill this feature can " +"reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1261,6 +1282,33 @@ msgid "" "already a wall in place." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "" +"Minimum allowed percentage flow for a wall line. The wall overlap " +"compensation reduces a wall's flow when it lies close to an existing wall. " +"Walls whose flow is less than this value will be replaced with a travel " +"move. When using this setting, you must enable the wall overlap compensation " +"and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "" +"If enabled, retraction is used rather than combing for travel moves that " +"replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1677,11 +1725,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1712,6 +1755,19 @@ msgid "" "of material used." msgstr "" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "" +"Connect infill paths where they run next to each other. For infill patterns " +"which consist of several closed polygons, enabling this setting greatly " +"reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1748,6 +1804,35 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "" +"Convert each infill line to this many lines. The extra lines do not cross " +"over each other, but avoid each other. This makes the infill stiffer, but " +"increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin " +"lines sag down less which means you need less top/bottom skin layers for the " +"same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the " +"infill into a single extrusion path without the need for travels or " +"retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -2139,18 +2224,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "" -"Adjusts the diameter of the filament used. Match this value with the " -"diameter of the used filament." -msgstr "" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -3106,7 +3179,9 @@ msgid "" "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 by combing within the infill only." +"combing over top/bottom skin areas and also to only comb within the infill. " +"Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' " +"option in earlier Cura releases." msgstr "" #: fdmprinter.def.json @@ -3124,6 +3199,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3581,11 +3661,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3658,6 +3733,30 @@ msgid "" "calculated by the support density." msgstr "" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "" +"Distance between the printed initial layer support structure lines. This " +"setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -4005,11 +4104,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -4045,11 +4139,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -4086,13 +4175,32 @@ msgid "Concentric" msgstr "" #: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" +msgctxt "support_bottom_pattern option zigzag" +msgid "Zig Zag" msgstr "" #: fdmprinter.def.json -msgctxt "support_bottom_pattern option zigzag" -msgid "Zig Zag" +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "" +"When enabled, the print cooling fan speed is altered for the skin regions " +"immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "" +"Percentage fan speed to use when printing the skin regions immediately above " +"the support. Using a high fan speed can make the support easier to remove." msgstr "" #: fdmprinter.def.json @@ -4487,7 +4595,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" +msgid "Raft Base Line Spacing" msgstr "" #: fdmprinter.def.json @@ -4720,18 +4828,6 @@ msgid "" "enough material." msgstr "" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "" -"The thickness of the hollow prime tower. A thickness larger than half the " -"Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4776,32 +4872,6 @@ msgid "" "the other nozzle off on the prime tower." msgstr "" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "" -"After switching extruder, wipe the oozed material off of the nozzle on the " -"first thing printed. This performs a safe slow wipe move at a place where " -"the oozed material causes least harm to the surface quality of your print." -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "" -"Amount of filament to be purged when wiping on the prime tower. Purging is " -"useful for compensating the filament lost by oozing during inactivity of the " -"nozzle." -msgstr "" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -5402,6 +5472,20 @@ msgid "" "Celsius)." msgstr "" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "" +"Polygons in sliced layers that have a circumference smaller than this amount " +"will be filtered out. Lower values lead to higher resolution mesh at the " +"cost of slicing time. It is meant mostly for high resolution SLA printers " +"and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -6203,6 +6287,30 @@ msgid "" "the tan of the steepest slope in a layer." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "" +"Walls that overhang more than this angle will be printed using overhanging " +"wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "" +"Overhanging walls will be printed at this percentage of their normal print " +"speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -6241,22 +6349,6 @@ msgid "" "skin settings." msgstr "" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "" -"The maximum allowed width of the region of air below a wall line before the " -"wall is printed using bridge settings. Expressed as a percentage of the wall " -"line width. When the air gap is wider than this, the wall line is printed " -"using the bridge settings. Otherwise, the wall line is printed using the " -"normal settings. The lower the value, the more likely it is that overhung " -"wall lines will be printed using bridge settings." -msgstr "" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" From f9923e5fe7219e1aebb27ff8ac7d13485432b40c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 17:13:53 +0200 Subject: [PATCH 326/364] Remove duplicate messages These were duplicate because CMake of this plug-in put a copy of the JSON file in the build directory. Contributes to issue CURA-5741. --- resources/i18n/cura.pot | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 35c984b9f2..2fe966fe99 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -4739,26 +4739,6 @@ msgctxt "name" msgid "UserAgreement" 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 "" - -#: X3GWriter/build/install/X3GWriter/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/install/X3GWriter/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "" - #: X3GWriter/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)." From 91ed1171c246ad1ad8c9de3af4544ee6348926bc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 17:15:09 +0200 Subject: [PATCH 327/364] Update translation sources for Cura 3.5 This is updated from the new cura.pot template. Contributes to issue CURA-5741. --- resources/i18n/de_DE/cura.po | 1979 ++++++++++-------- resources/i18n/de_DE/fdmextruder.def.json.po | 4 +- resources/i18n/de_DE/fdmprinter.def.json.po | 310 ++- resources/i18n/es_ES/cura.po | 1965 +++++++++-------- resources/i18n/es_ES/fdmextruder.def.json.po | 4 +- resources/i18n/es_ES/fdmprinter.def.json.po | 310 ++- resources/i18n/fi_FI/cura.po | 1801 +++++++++------- resources/i18n/fi_FI/fdmextruder.def.json.po | 4 +- resources/i18n/fi_FI/fdmprinter.def.json.po | 286 ++- resources/i18n/fr_FR/cura.po | 1979 ++++++++++-------- resources/i18n/fr_FR/fdmextruder.def.json.po | 4 +- resources/i18n/fr_FR/fdmprinter.def.json.po | 310 ++- resources/i18n/it_IT/cura.po | 1979 ++++++++++-------- resources/i18n/it_IT/fdmextruder.def.json.po | 4 +- resources/i18n/it_IT/fdmprinter.def.json.po | 310 ++- resources/i18n/ja_JP/cura.po | 1960 +++++++++-------- resources/i18n/ja_JP/fdmextruder.def.json.po | 4 +- resources/i18n/ja_JP/fdmprinter.def.json.po | 322 ++- resources/i18n/ko_KR/cura.po | 1977 +++++++++-------- resources/i18n/ko_KR/fdmextruder.def.json.po | 4 +- resources/i18n/ko_KR/fdmprinter.def.json.po | 306 ++- resources/i18n/nl_NL/cura.po | 1979 ++++++++++-------- resources/i18n/nl_NL/fdmextruder.def.json.po | 4 +- resources/i18n/nl_NL/fdmprinter.def.json.po | 310 ++- resources/i18n/pl_PL/cura.po | 1907 ++++++++++------- resources/i18n/pl_PL/fdmextruder.def.json.po | 4 +- resources/i18n/pl_PL/fdmprinter.def.json.po | 294 ++- resources/i18n/pt_BR/cura.po | 1919 +++++++++-------- resources/i18n/pt_BR/fdmextruder.def.json.po | 4 +- resources/i18n/pt_BR/fdmprinter.def.json.po | 294 ++- resources/i18n/pt_PT/cura.po | 1895 ++++++++++------- resources/i18n/pt_PT/fdmextruder.def.json.po | 4 +- resources/i18n/pt_PT/fdmprinter.def.json.po | 312 ++- resources/i18n/ru_RU/cura.po | 1977 +++++++++-------- resources/i18n/ru_RU/fdmextruder.def.json.po | 4 +- resources/i18n/ru_RU/fdmprinter.def.json.po | 310 ++- resources/i18n/tr_TR/cura.po | 1977 +++++++++-------- resources/i18n/tr_TR/fdmextruder.def.json.po | 4 +- resources/i18n/tr_TR/fdmprinter.def.json.po | 310 ++- resources/i18n/zh_CN/cura.po | 1919 +++++++++-------- resources/i18n/zh_CN/fdmextruder.def.json.po | 4 +- resources/i18n/zh_CN/fdmprinter.def.json.po | 294 ++- resources/i18n/zh_TW/cura.po | 1921 +++++++++-------- resources/i18n/zh_TW/fdmextruder.def.json.po | 4 +- resources/i18n/zh_TW/fdmprinter.def.json.po | 294 ++- 45 files changed, 20203 insertions(+), 13563 deletions(-) diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 9428eef444..8e2bc9df68 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-Code-Datei" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,80 +64,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Ein oder mehrere 3D-Modelle können möglicherweise aufgrund der Modellgröße und Materialkonfiguration nicht optimal gedruckt werden:

\n

{model_names}

\n

Erfahren Sie, wie Sie die bestmögliche Druckqualität und Zuverlässigkeit sicherstellen.

\n

Leitfaden zu Druckqualität anzeigen

" +msgstr "" +"

Ein oder mehrere 3D-Modelle können möglicherweise aufgrund der Modellgröße und Materialkonfiguration nicht optimal gedruckt werden:

\n" +"

{model_names}

\n" +"

Erfahren Sie, wie Sie die bestmögliche Druckqualität und Zuverlässigkeit sicherstellen.

\n" +"

Leitfaden zu Druckqualität anzeigen

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Mit Doodle3D WLAN-Box drucken" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Mit Doodle3D WLAN-Box drucken" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Zu Doodle3D Connect verbinden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Abbrechen" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Daten werden zu Doodle3D Connect gesendet" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Daten können nicht zu Doodle3D Connect gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Daten werden auf Doodle3D Connect gespeichert" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Datei wurde zu Doodle3D Connect gesendet" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect wird geöffnet ..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect Web-Schnittstelle öffnen" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Änderungsprotokoll anzeigen" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Einstellungen Glätten aktiv" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Das Profil wurde geglättet und aktiviert." @@ -151,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Über USB verbunden" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -173,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Komprimierte G-Code-Datei" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -195,7 +159,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Es sind keine Dateiformate zum Schreiben vorhanden!" @@ -234,7 +198,7 @@ msgstr "Konnte nicht auf dem Wechseldatenträger gespeichert werden {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Fehler" @@ -263,8 +227,8 @@ msgstr "Wechseldatenträger auswerfen {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Warnhinweis" @@ -291,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Wechseldatenträger" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Drucken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Drücken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Über Netzwerk verbunden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Authentifizierungsstatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Authentifizierungsstatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Erneut versuchen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Zugriffanforderung erneut senden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Zugriff auf den Drucker genehmigt" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Zugriff anfordern" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Zugriffsanforderung für den Drucker senden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Es kann kein neuer Druckauftrag gestartet werden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Konfiguration nicht übereinstimmend" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Daten werden zum Drucker gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Daten werden gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Abbrechen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchronisieren Ihres Druckers" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Über Netzwerk verbunden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Daten gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "In Monitor überwachen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Druck vollendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Anschluss über Netzwerk" @@ -506,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Überwachen" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Für Ihren {machine_name} sind neue Funktionen verfügbar! Es wird empfohlen, ein Firmware-Update für Ihren Drucker auszuführen." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Neue Firmware für %s verfügbar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Anleitung für die Aktualisierung" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Zugriff auf Update-Informationen nicht möglich." @@ -533,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Schichtenansicht" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulationsansicht" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "G-Code ändern" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Erstellt ein Volumen, in dem keine Stützstrukturen gedruckt werden." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura erfasst anonymisierte Nutzungsstatistiken." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Daten werden erfasst" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Mehr Infos" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Siehe mehr Informationen dazu, was Cura sendet." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Zulassen" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Damit lassen Sie zu, dass Cura anonymisierte Nutzungsstatistiken sendet, um zukünftige Verbesserungen für Cura zu definieren. Einige Ihrer Präferenzen und Einstellungen, die Cura-Version und ein Hash der Modelle, die Sie slicen, werden gesendet." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04-Profile" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender-Datei" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Exportieren in \"{}\" Qualität nicht möglich!\nZurückgeschaltet auf \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-Bilddatei" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Slicing mit dem aktuellen Material nicht möglich, da es mit der gewählten Maschine oder Konfiguration nicht kompatibel ist." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Slicing nicht möglich" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Die aktuellen Einstellungen lassen kein Schneiden (Slicing) zu. Die folgenden Einstellungen sind fehlerhaft:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Aufgrund der Pro-Modell-Einstellungen ist kein Schneiden (Slicing) möglich. Die folgenden Einstellungen sind für ein oder mehrere Modelle fehlerhaft: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Schneiden (Slicing) ist nicht möglich, da der Einzugsturm oder die Einzugsposition(en) ungültig ist (sind)." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Es ist kein Objekt zum Schneiden vorhanden, da keines der Modelle der Druckabmessung entspricht. Bitte die Modelle passend skalieren oder drehen." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Schichten werden verarbeitet" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informationen" @@ -698,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Benutzerdefiniert" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-Datei" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Düse" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-Datei" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-Code parsen" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-Code-Details" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -742,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-Profil" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Profilassistent" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Profilassistent" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-Datei" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-Projekt 3MF-Datei" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -833,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Unbekannt" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Vorgeschnittene Datei {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Datei bereits vorhanden" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Nicht überschrieben" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Das gewählte Material ist mit der gewählten Maschine oder Konfiguration nicht kompatibel." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material nicht kompatibel" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Einstellungen aktualisiert" @@ -956,13 +956,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Es konnte keine Qualitätsangabe {0} für die vorliegende Konfiguration gefunden werden." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Dateien (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Benutzerdefiniertes Material" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Benutzerdefiniert" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Produktabmessungen" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Konnte kein Archiv von Benutzer-Datenverzeichnis {} erstellen" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Versucht, ein Cura-Backup-Verzeichnis ohne entsprechende Daten oder Metadaten wiederherzustellen." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Versucht, ein Cura-Backup zu erstellen, das nicht Ihrer aktuellen Version entspricht." @@ -1035,32 +1035,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Objekt-Platzierung" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Neue Position für Objekte finden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Position finden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Kann Position nicht finden" @@ -1078,7 +1078,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Hoppla, bei Ultimaker Cura ist ein Problem aufgetreten.

\n

Beim Start ist ein nicht behebbarer Fehler aufgetreten. Er wurde möglicherweise durch einige falsche Konfigurationsdateien verursacht. Wir empfehlen ein Backup und Reset Ihrer Konfiguration.

\n

Backups sind im Konfigurationsordner abgelegt.

\n

Senden Sie uns diesen Absturzbericht bitte, um das Problem zu beheben.

\n " +msgstr "" +"

Hoppla, bei Ultimaker Cura ist ein Problem aufgetreten.

\n" +"

Beim Start ist ein nicht behebbarer Fehler aufgetreten. Er wurde möglicherweise durch einige falsche Konfigurationsdateien verursacht. Wir empfehlen ein Backup und Reset Ihrer Konfiguration.

\n" +"

Backups sind im Konfigurationsordner abgelegt.

\n" +"

Senden Sie uns diesen Absturzbericht bitte, um das Problem zu beheben.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1116,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

Ein schwerer Fehler ist in Cura aufgetreten. Senden Sie uns diesen Absturzbericht, um das Problem zu beheben

\n

Verwenden Sie bitte die Schaltfläche „Bericht senden“, um den Fehlerbericht automatisch an unsere Server zu senden

\n " +msgstr "" +"

Ein schwerer Fehler ist in Cura aufgetreten. Senden Sie uns diesen Absturzbericht, um das Problem zu beheben

\n" +"

Verwenden Sie bitte die Schaltfläche „Bericht senden“, um den Fehlerbericht automatisch an unsere Server zu senden

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Bericht senden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Geräte werden geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Die Szene wird eingerichtet..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Die Benutzeroberfläche wird geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Das gewählte Modell war zu klein zum Laden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Geräteeinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Drucker" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Druckereinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Breite)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Tiefe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Höhe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Druckbettform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Ausgang in Mitte" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Heizbares Bett" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-Code-Variante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Druckkopfeinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der linken Seite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der Vorderseite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der rechten Seite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der Rückseite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Brückenhöhe" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Der Höhenunterschied zwischen der Düsenspitze und dem Brückensystem (X- und Y-Achsen). Wird verwendet, um Kollisionen zwischen vorherigen Drucken und der Brücke zu verhindern, wenn im Modus „Nacheinander“ gedruckt wird." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Anzahl Extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Start G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-Code-Befehle, die zum Start ausgeführt werden sollen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Ende G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-Code-Befehle, die am Ende ausgeführt werden sollen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Düseneinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Düsengröße" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Kompatibler Materialdurchmesser" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Der Nenndurchmesser des durch den Drucker unterstützten Filaments. Der exakte Durchmesser wird durch das Material und/oder das Profil überschrieben." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "X-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Y-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-Code Extruder-Start" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-Code Extruder-Ende" @@ -1427,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Verbindung zur Cura Paket-Datenbank konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Verbindung." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materialien" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Version" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Zuletzt aktualisiert" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Unbekannt" @@ -1482,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Zurück" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Cura muss neu gestartet werden, um die Änderungen der Pakete zu übernehmen." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Quit Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1523,7 +1584,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Dieses Plugin enthält eine Lizenz.\nSie müssen diese Lizenz akzeptieren, um das Plugin zu installieren.\nStimmen Sie den nachfolgenden Bedingungen zu?" +msgstr "" +"Dieses Plugin enthält eine Lizenz.\n" +"Sie müssen diese Lizenz akzeptieren, um das Plugin zu installieren.\n" +"Stimmen Sie den nachfolgenden Bedingungen zu?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Ablehnen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Unterstützter" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Kompatibilität" @@ -1550,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Pakete werden abgeholt..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Kontakt" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1567,9 +1636,9 @@ msgstr "Änderungsprotokoll" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1617,356 +1686,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Benutzervereinbarung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Vorhandene Verbindung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Anschluss an vernetzten Drucker" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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\nWählen Sie Ihren Drucker aus der folgenden Liste:" +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:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Hinzufügen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Bearbeiten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Entfernen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Aktualisieren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Typ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Firmware-Version" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Adresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Ultimaker 3 Druckern anzusteuern." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Dieser Drucker steuert eine Gruppe von %1 Ultimaker 3 Druckern an." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Druckeradresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Drucken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Druckerauswahl" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Drucken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Drucker hinzufügen/entfernen" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Öffnet die Seite für Druckaufträge mit Ihrem Standard-Webbrowser." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Druckaufträge anzeigen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Vorb. für den Druck" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Drucken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Verfügbar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Verbindung zum Drucker wurde unterbrochen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Nicht verfügbar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Unbekannt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Deaktiviert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reserviert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Beendet" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Vorbereitung für den Druck" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Handlung erforderlich" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Pausiert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Wird fortgesetzt ..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Drucken wurde abgebrochen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Akzeptiert keine Druckaufträge" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Endet um: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Druckplatte räumen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Warten auf eine Konfigurationsänderung" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Druckaufträge" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Drucken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "In Warteschlange" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Drucker" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Drucken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Drucker anzeigen" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Drucken abbrechen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Beendet" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Vorbereitung" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Pausiert" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Wird fortgesetzt ..." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Handlung erforderlich" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Mit einem Drucker verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Die Druckerkonfiguration in Cura laden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Konfiguration aktivieren" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Farbschema" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materialfarbe" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Linientyp" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Vorschub" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Schichtdicke" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Kompatibilitätsmodus" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Bewegungen anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Helfer anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Gehäuse anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Füllung anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Nur obere Schichten anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 detaillierte Schichten oben anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Oben/Unten" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Innenwand" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -2086,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Glättung" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Mesh-Typ" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normales Modell" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Als Stützstruktur drucken" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Keine Überlappung mit anderen Modellen unterstützen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Einstellungen für Überlappung mit anderen Modellen bearbeiten" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Einstellungen für Füllung von anderen Modellen bearbeiten" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Einstellungen wählen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Einstellungen für die benutzerdefinierte Anpassung dieses Modells wählen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtern..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Alle anzeigen" @@ -2154,13 +2232,13 @@ msgid "Create new" msgstr "Neu erstellen" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Zusammenfassung – Cura-Projekt" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Druckereinstellungen" @@ -2177,7 +2255,7 @@ msgid "Update" msgstr "Aktualisierung" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Typ" @@ -2188,7 +2266,7 @@ msgid "Printer Group" msgstr "Druckergruppe" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profileinstellungen" @@ -2200,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Name" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2242,7 +2320,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Wie soll der Konflikt im Material gelöst werden?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Sichtbarkeit einstellen" @@ -2253,13 +2331,13 @@ msgid "Mode" msgstr "Modus" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Sichtbare Einstellungen:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 von %2" @@ -2274,6 +2352,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Öffnen" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Export" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 Stunden 00 Minuten" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Kostenangabe" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Insgesamt:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2492,26 +2646,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Bitte den Ausdruck entfernen" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausieren" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Zurückkehren" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Drucken abbrechen" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Drucken abbrechen" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2528,7 +2666,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Sie haben einige Profileinstellungen angepasst.\nMöchten Sie diese Einstellungen übernehmen oder verwerfen?" +msgstr "" +"Sie haben einige Profileinstellungen angepasst.\n" +"Möchten Sie diese Einstellungen übernehmen oder verwerfen?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2546,19 +2686,17 @@ msgid "Customized" msgstr "Angepasst" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Stets nachfragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Verwerfen und zukünftig nicht mehr nachfragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Übernehmen und zukünftig nicht mehr nachfragen" @@ -2578,101 +2716,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Neues Profil erstellen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Änderung Durchmesser bestätigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Namen anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marke" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Materialtyp" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Farbe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Eigenschaften" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Dichte" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Durchmesser" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Filamentkosten" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Filamentgewicht" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Filamentlänge" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Kosten pro Meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Material trennen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Beschreibung" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Haftungsinformationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktivieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Erstellen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Import" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Material importieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Material exportieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material erfolgreich nach %1 exportiert" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2709,7 +2919,7 @@ msgid "Unit" msgstr "Einheit" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Allgemein" @@ -2901,8 +3111,8 @@ msgstr "Standardverhalten beim Öffnen einer Projektdatei: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Immer nachfragen" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2921,77 +3131,75 @@ msgstr "Wenn Sie Änderungen für ein Profil vorgenommen haben und zu einem ande #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Profil überschreiben" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privatsphäre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bei Start nach Updates suchen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonyme) Druckinformationen senden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Mehr Informationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Experimentell" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Mehrfach-Druckplattenfunktion verwenden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Mehrfach-Druckplattenfunktion verwenden (Neustart erforderlich)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Sollen neu geladene Modelle auf der Druckplatte angeordnet werden? In Verbindung mit Mehrfach-Druckplatte verwenden (EXPERIMENTELL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Keine Objekte beim Laden anordnen" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Drucker" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktivieren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3035,7 +3243,7 @@ msgid "Aborting print..." msgstr "Drucken wird abgebrochen..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profile" @@ -3050,18 +3258,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Import" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Export" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3072,18 +3268,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profil duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Entfernen bestätigen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3104,96 +3288,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drucker: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Geschützte Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Benutzerdefinierte Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Aktuelle Änderungen verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Globale Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materialien" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Erstellen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplizieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Material importieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Material exportieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material erfolgreich nach %1 exportiert" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Drucker" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Drucker hinzufügen" @@ -3208,6 +3339,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Drucker hinzufügen" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3228,7 +3364,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\nCura verwendet mit Stolz die folgenden Open Source-Projekte:" +msgstr "" +"Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\n" +"Cura verwendet mit Stolz die folgenden Open Source-Projekte:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3341,7 +3479,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Einige Einstellungs-/Überschreibungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n\nKlicken Sie, um den Profilmanager zu öffnen." +msgstr "" +"Einige Einstellungs-/Überschreibungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n" +"\n" +"Klicken Sie, um den Profilmanager zu öffnen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3358,33 +3499,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Diese Einstellung ausblenden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Diese Einstellung ausblenden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Diese Einstellung weiterhin anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Sichtbarkeit einstellen wird konfiguriert..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Alle verkleinern" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Alle vergrößern" @@ -3395,7 +3536,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Einige ausgeblendete Einstellungen verwenden Werte, die von ihren normalen, berechneten Werten abweichen.\n\nKlicken Sie, um diese Einstellungen sichtbar zu machen." +msgstr "" +"Einige ausgeblendete Einstellungen verwenden Werte, die von ihren normalen, berechneten Werten abweichen.\n" +"\n" +"Klicken Sie, um diese Einstellungen sichtbar zu machen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3423,7 +3567,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Diese Einstellung hat einen vom Profil abweichenden Wert.\n\nKlicken Sie, um den Wert des Profils wiederherzustellen." +msgstr "" +"Diese Einstellung hat einen vom Profil abweichenden Wert.\n" +"\n" +"Klicken Sie, um den Wert des Profils wiederherzustellen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3431,7 +3578,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Diese Einstellung wird normalerweise berechnet; aktuell ist jedoch ein Absolutwert eingestellt.\n\nKlicken Sie, um den berechneten Wert wiederherzustellen." +msgstr "" +"Diese Einstellung wird normalerweise berechnet; aktuell ist jedoch ein Absolutwert eingestellt.\n" +"\n" +"Klicken Sie, um den berechneten Wert wiederherzustellen." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3469,7 +3619,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extruder" @@ -3522,7 +3672,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Die in diesem Extruder eingesetzte Düse." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Druckbett" @@ -3547,6 +3697,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Heizen Sie das Bett vor Druckbeginn auf. Sie können Ihren Druck während des Aufheizens weiter anpassen und müssen nicht warten, bis das Bett aufgeheizt ist, wenn Sie druckbereit sind." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3641,40 +3806,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Druckeinrichtung deaktiviert\nG-Code-Dateien können nicht geändert werden" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00 Stunden 00 Minuten" +msgstr "" +"Druckeinrichtung deaktiviert\n" +"G-Code-Dateien können nicht geändert werden" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Zeitangabe" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Kostenangabe" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Insgesamt:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3685,22 +3825,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Benutzerdefinierte Druckeinrichtung

Druck mit Feineinstellung über jedem einzelnen Bereich des Schneidvorgangs." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktiver Druck" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Name des Auftrags" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Druckzeit" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Geschätzte verbleibende Zeit" @@ -3806,184 +3946,183 @@ msgid "About..." msgstr "Über..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modell löschen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modell auf Druckplatte ze&ntrieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelle &gruppieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Gruppierung für Modelle aufheben" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modelle &zusammenführen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Modell &multiplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Alle Modelle wählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Druckplatte reinigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Alle Modelle neu laden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle Modelle anordnen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Anordnung auswählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modellpositionen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Alle Modelltransformationen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Datei(en) öffnen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Neues Projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Engine-&Protokoll anzeigen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Konfigurationsordner anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Pakete durchsuchen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Seitenleiste vergrößern/verkleinern" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Bitte laden Sie ein 3D-Modell" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Bereit zum Slicen (Schneiden)" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Das Slicing läuft..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Bereit zum %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Slicing nicht möglich" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Slicing ist nicht verfügbar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Aktuellen Druckauftrag slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Slicing-Vorgang abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Vorbereiten" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Wählen Sie das aktive Ausgabegerät" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Datei(en) öffnen" @@ -4003,129 +4142,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Datei" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Auswahl als Datei &speichern" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Speichern &Als" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "&Projekt speichern..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Bearbeiten" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Ansicht" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Konfiguration" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Dr&ucker" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Als aktiven Extruder festlegen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder deaktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Druckplatte" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Er&weiterungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Toolbox" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "E&instellungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Hilfe" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Datei öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Neues Projekt" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Möchten Sie wirklich ein neues Projekt beginnen? Damit werden das Druckbett und alle nicht gespeicherten Einstellungen gelöscht." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Paket installieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Datei(en) öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4135,112 +4290,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projekt speichern" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Druckplatte" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & Material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Speichern" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Schichtdicke" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Dieses Qualitätsprofil ist für Ihr aktuelles Material und Ihre derzeitige Düsenkonfiguration nicht verfügbar. Bitte ändern Sie diese, um dieses Qualitätsprofil zu aktivieren." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Druckgeschwindigkeit" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Langsamer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Schneller" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Sie haben einige Profileinstellungen geändert. Wenn Sie diese ändern möchten, wechseln Sie in den Modus „Benutzerdefiniert“." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Füllung" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Die graduelle Füllung steigert die Menge der Füllung nach oben hin schrittweise." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Graduell aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Stützstruktur generieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Wählen Sie, welcher Extruder für die Unterstützung verwendet wird. Dient zum Konstruieren von Stützstrukturen unter dem Modell, damit dieses nicht absinkt oder frei schwebend gedruckt wird." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Druckplattenhaftung" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Drucken eines Brim- oder Raft-Elements aktivieren. Es wird ein flacher Bereich rund um oder unter Ihrem Objekt hinzugefügt, das im Anschluss leicht abgeschnitten werden kann. " -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Sie benötigen Hilfe für Ihre Drucke?
Lesen Sie die Ultimaker Anleitungen für Fehlerbehebung>" @@ -4287,23 +4442,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Druckertyp" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Verwenden Sie eiene Klebefolie oder Klebstoff mit dieser Materialcombination" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Kompatibilität prüfen" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Klicken Sie, um die Materialkompatibilität auf Ultimaker.com zu prüfen." @@ -4393,16 +4547,6 @@ msgctxt "name" msgid "God Mode" msgstr "Gott-Modus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Akzeptiert den G-Code und sendet diesen über WLAN an eine Doodle3D WLAN-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WLAN-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4483,16 +4627,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Vorbereitungsstufe" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Bietet ein Bearbeitungsfenster für direkte Skriptbearbeitung." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Live-Scripting-Tool" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4603,16 +4737,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Cura-Vorgängerprofil-Reader" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Unterstützt das Öffnen der Blender-Dateien direkt in Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender-Integration (experimentell)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4663,6 +4787,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Upgrade von Version 2.7 auf 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4773,6 +4907,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura-Profil-Writer" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Druckprofil-Assistent" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4803,6 +4947,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-Profil-Reader" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Mit Doodle3D WLAN-Box drucken" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Mit Doodle3D WLAN-Box drucken" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Zu Doodle3D Connect verbinden" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Daten werden zu Doodle3D Connect gesendet" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Daten können nicht zu Doodle3D Connect gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Daten werden auf Doodle3D Connect gespeichert" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Datei wurde zu Doodle3D Connect gesendet" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect wird geöffnet ..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect Web-Schnittstelle öffnen" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender-Datei" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Exportieren in \"{}\" Qualität nicht möglich!\n" +#~ "Zurückgeschaltet auf \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Kontakt" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Ultimaker 3 Druckern anzusteuern." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Dieser Drucker steuert eine Gruppe von %1 Ultimaker 3 Druckern an." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Drucker hinzufügen/entfernen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Öffnet die Seite für Druckaufträge mit Ihrem Standard-Webbrowser." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Druckaufträge anzeigen" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Vorb. für den Druck" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Drucken" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Verfügbar" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Verbindung zum Drucker wurde unterbrochen" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Nicht verfügbar" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Deaktiviert" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reserviert" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Vorbereitung für den Druck" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Drucken wurde abgebrochen" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Akzeptiert keine Druckaufträge" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Endet um: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Druckplatte räumen" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Warten auf eine Konfigurationsänderung" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Druckaufträge" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Drucker" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Drucker anzeigen" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausieren" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Zurückkehren" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Drucken abbrechen" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Immer nachfragen" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profil überschreiben" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Sollen neu geladene Modelle auf der Druckplatte angeordnet werden? In Verbindung mit Mehrfach-Druckplatte verwenden (EXPERIMENTELL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Keine Objekte beim Laden anordnen" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Auswahl als Datei &speichern" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Speichern &Als" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "&Projekt speichern..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Verwenden Sie eiene Klebefolie oder Klebstoff mit dieser Materialcombination" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Akzeptiert den G-Code und sendet diesen über WLAN an eine Doodle3D WLAN-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WLAN-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Bietet ein Bearbeitungsfenster für direkte Skriptbearbeitung." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Live-Scripting-Tool" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Unterstützt das Öffnen der Blender-Dateien direkt in Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender-Integration (experimentell)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Warnhinweis Modell-Prüfer" @@ -5070,10 +5427,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "Browse plugins..." #~ msgstr "Plugins durchsuchen..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Druckplatte" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugins" @@ -5299,14 +5652,6 @@ msgstr "Cura-Profil-Reader" #~ "\n" #~ "Es tut uns leid!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profilassistent" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profilassistent" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Kein Material geladen" @@ -5437,14 +5782,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "Configure setting visiblity..." #~ msgstr "Sichtbarkeit der Einstellung wird konfiguriert..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatisch: %1" @@ -5481,14 +5818,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "GCode Profile Reader" #~ msgstr "G-Code-Profil-Reader" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Druckprofil-Assistent" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Beim Öffnen Ihrer SolidWorks Datei trat ein Fehler auf! Überprüfen Sie bitte, ob sich Ihre Datei in SolidWorks ohne Probleme öffnen lässt!" @@ -5685,10 +6014,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Dieser Drucker ist der Host für eine Gruppe von %1 verbundenen Ultimaker 3-Druckern" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Vorbereitung" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Fertiggestellt am: " diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po index 697560017c..507e001e63 100644 --- a/resources/i18n/de_DE/fdmextruder.def.json.po +++ b/resources/i18n/de_DE/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 d518735b72..a85dc4ce18 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" @@ -56,7 +56,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "G-Code-Befehle, die zu Beginn ausgeführt werden sollen – getrennt durch \n." +msgstr "" +"G-Code-Befehle, die zu Beginn ausgeführt werden sollen – getrennt durch \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +70,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "G-Code-Befehle, die am Ende ausgeführt werden sollen – getrennt durch \n." +msgstr "" +"G-Code-Befehle, die am Ende ausgeführt werden sollen – getrennt durch \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +84,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID des Materials. Dies wird automatisch eingestellt. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Durchmesser" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Der Durchmesser des verwendeten Filaments wird angepasst. Stellen Sie hier den Durchmesser des verwendeten Filaments ein." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1069,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zickzack" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1159,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Der Fluss für Teile einer Innenwand wird ausgeglichen, die dort gedruckt werden, wo sich bereits eine Wand befindet." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1500,11 +1544,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1530,6 +1569,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Verbindet die Enden, an denen das Füllmuster auf die Innenwand trifft, mithilfe einer Linie, die der Form der Innenwand folgt. Durch Aktivierung dieser Einstellung kann die Füllung besser an den Wänden haften; auch die Auswirkungen der Füllung auf die Qualität der vertikalen Flächen werden reduziert. Die Deaktivierung dieser Einstellung reduziert den Materialverbrauch." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1609,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1941,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Die Temperatur, die für die erhitzte Druckplatte an der ersten Schicht verwendet wird." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Durchmesser" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Der Durchmesser des verwendeten Filaments wird angepasst. Stellen Sie hier den Durchmesser des verwendeten Filaments ein." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2778,8 @@ msgstr "Combing-Modus" #: 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 by combing within the infill only." -msgstr "Durch Combing bleibt die Düse während der Bewegung innerhalb von bereits gedruckten Bereichen. Dies führt zu einer leicht verlängerten Bewegungszeit, reduziert jedoch die Notwendigkeit von Einzügen. Wenn Combing deaktiviert ist, wird das Material eingezogen und die Düse bewegt sich in einer geraden Linie zum nächsten Punkt. Es ist außerdem möglich, das Combing über die oberen/unteren Außenhautbereiche zu vermeiden, indem nur die Füllung berücksichtigt wird." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2796,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Nicht in Außenhaut" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3181,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3241,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Der Abstand zwischen den gedruckten Stützstrukturlinien. Diese Einstellung wird anhand der Dichte der Stützstruktur berechnet." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3551,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3586,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3621,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zickzack" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3796,9 @@ msgctxt "skirt_gap description" 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 "Der horizontale Abstand zwischen dem Skirt und der ersten Schicht des Drucks.\nEs handelt sich dabei um den Mindestabstand. Ab diesem Abstand werden mehrere Skirt-Linien in äußerer Richtung angebracht." +msgstr "" +"Der horizontale Abstand zwischen dem Skirt und der ersten Schicht des Drucks.\n" +"Es handelt sich dabei um den Mindestabstand. Ab diesem Abstand werden mehrere Skirt-Linien in äußerer Richtung angebracht." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3884,8 +3972,8 @@ msgstr "Die Breite der Linien in der Raft-Basisschicht. Dabei sollte es sich um #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Raft-Linienabstand" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4190,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Das Mindestvolumen für jede Schicht des Einzugsturms, um ausreichend Material zu spülen." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Dicke Einzugsturm" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Die Dicke des Hohleinzugsturms. Eine Dicke, die mehr als die Hälfte des Mindestvolumens für den Einzugsturm beträgt, führt zu einem dichten Einzugsturm." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4230,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Nach dem Drucken des Einzugsturms mit einer Düse wird das ausgetretene Material von der anderen Düse am Einzugsturm abgewischt." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Düse nach dem Schalten abwischen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Wischt nach dem Schalten des Extruders ausgetretenes Material am ersten Druckelement an der Düse ab. Hierdurch wird eine sichere, langsame Wischbewegung an einer Position ausgeführt, an der das ausgetretene Material am wenigsten Schaden an der Oberflächenqualität Ihres Drucks verursacht." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Einzugsturm Spülvolumen" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Menge des zu spülenden Filaments beim Wischen des Spülturms. Spülen ist hilfreich, um dem Filament-Verlust durch Aussickern während der Inaktivität der Düse zu kompensieren." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4715,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Der Materialfluss (in mm3 pro Sekunde) in Bezug zur Temperatur (Grad Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5235,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Die Strecke einer Aufwärtsbewegung, die mit halber Geschwindigkeit extrudiert wird.\nDies kann zu einer besseren Haftung an vorhergehenden Schichten führen, während gleichzeitig ein Überhitzen des Materials in diesen Schichten vermieden wird. Dies gilt nur für das Drucken mit Drahtstruktur." +msgstr "" +"Die Strecke einer Aufwärtsbewegung, die mit halber Geschwindigkeit extrudiert wird.\n" +"Dies kann zu einer besseren Haftung an vorhergehenden Schichten führen, während gleichzeitig ein Überhitzen des Materials in diesen Schichten vermieden wird. Dies gilt nur für das Drucken mit Drahtstruktur." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5384,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Das ist der Schwellenwert, der definiert, ob eine kleinere Schicht verwendet wird oder nicht. Dieser Wert wird mit dem der stärksten Neigung in einer Schicht verglichen." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5434,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Wenn ein Außenhautbereich für weniger als diesen Prozentwert seines Bereichs unterstützt wird, drucken Sie ihn mit den Brückeneinstellungen. Ansonsten erfolgt der Druck mit den normalen Außenhauteinstellungen." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Max. Überhang Brückenwand" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Die maximal zulässige Breite des Luftbereichs unter einer Wandlinie vor dem Druck der Wand mithilfe der Brückeneinstellungen, ausgedrückt als Prozentwert der Wandliniendicke. Wenn der Luftspalt breiter als dieser Wert ist, wird die Wandlinie mithilfe der Brückeneinstellungen gedruckt. Ansonsten wird die Wandlinie mit den normalen Einstellungen gedruckt. Je niedriger der Wert, desto wahrscheinlicher ist es, dass Überhang-Wandlinien mithilfe der Brückeneinstellungen gedruckt werden." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5654,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Transformationsmatrix, die beim Laden aus der Datei auf das Modell angewandt wird." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Durch Combing bleibt die Düse während der Bewegung innerhalb von bereits gedruckten Bereichen. Dies führt zu einer leicht verlängerten Bewegungszeit, reduziert jedoch die Notwendigkeit von Einzügen. Wenn Combing deaktiviert ist, wird das Material eingezogen und die Düse bewegt sich in einer geraden Linie zum nächsten Punkt. Es ist außerdem möglich, das Combing über die oberen/unteren Außenhautbereiche zu vermeiden, indem nur die Füllung berücksichtigt wird." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Raft-Linienabstand" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Dicke Einzugsturm" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Die Dicke des Hohleinzugsturms. Eine Dicke, die mehr als die Hälfte des Mindestvolumens für den Einzugsturm beträgt, führt zu einem dichten Einzugsturm." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Düse nach dem Schalten abwischen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Wischt nach dem Schalten des Extruders ausgetretenes Material am ersten Druckelement an der Düse ab. Hierdurch wird eine sichere, langsame Wischbewegung an einer Position ausgeführt, an der das ausgetretene Material am wenigsten Schaden an der Oberflächenqualität Ihres Drucks verursacht." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Einzugsturm Spülvolumen" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Menge des zu spülenden Filaments beim Wischen des Spülturms. Spülen ist hilfreich, um dem Filament-Verlust durch Aussickern während der Inaktivität der Düse zu kompensieren." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Max. Überhang Brückenwand" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Die maximal zulässige Breite des Luftbereichs unter einer Wandlinie vor dem Druck der Wand mithilfe der Brückeneinstellungen, ausgedrückt als Prozentwert der Wandliniendicke. Wenn der Luftspalt breiter als dieser Wert ist, wird die Wandlinie mithilfe der Brückeneinstellungen gedruckt. Ansonsten wird die Wandlinie mit den normalen Einstellungen gedruckt. Je niedriger der Wert, desto wahrscheinlicher ist es, dass Überhang-Wandlinien mithilfe der Brückeneinstellungen gedruckt werden." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimieren Sie die Reihenfolge, in der die Wände gedruckt werden, um die Anzahl der Einzüge und die zurückgelegten Distanzen zu reduzieren. Dieser Schritt bringt für die meisten Teile Vorteile, allerdings werden einige möglicherweise länger benötigen. Vergleichen Sie deshalb bitte die Schätzung der Druckzeiten mit und ohne Optimierung." diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 66968f77ab..751246e54c 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Archivo GCode" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,83 +64,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Es posible que uno o más modelos 3D no se impriman correctamente debido al tamaño del modelo y la configuración del material:

\n" +msgstr "" +"

Es posible que uno o más modelos 3D no se impriman correctamente debido al tamaño del modelo y la configuración del material:

\n" "

{model_names}

\n" "

Obtenga más información sobre cómo garantizar la mejor calidad y fiabilidad de impresión posible.

\n" "

Ver guía de impresión de calidad

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir con un enrutador Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir con un enrutador Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Conectar con Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Enviando datos a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "No se pueden enviar datos a Doodle3D Connect. ¿Hay otro trabajo que todavía esté activo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Guardando datos en Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Archivo enviado a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir la interfaz web de Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Mostrar registro de cambios" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aplanar ajustes activos" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "El perfil se ha aplanado y activado." @@ -154,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado mediante USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -176,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Archivo GCode comprimido" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -198,7 +159,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "No hay formatos de archivo disponibles con los que escribir." @@ -237,7 +198,7 @@ msgstr "No se pudo guardar en unidad extraíble {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Error" @@ -266,8 +227,8 @@ msgstr "Expulsar dispositivo extraíble {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Advertencia" @@ -294,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidad extraíble" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 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/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprime a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Conectado a través de la red." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Estado de la autenticación" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Estado de la autenticación" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Volver a intentar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Reenvía la solicitud de acceso." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acceso a la impresora aceptado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar acceso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 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/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 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/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Configuración desajustada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Enviando datos a la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Enviando datos" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar con la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Conectado a través de la red." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Fecha de envío" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver en pantalla" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Impresión terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar a través de la red" @@ -509,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Supervisar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Hay nuevas funciones disponibles para {machine_name}. Se recomienda actualizar el firmware de la impresora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nuevo firmware de %s disponible" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Cómo actualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "No se pudo acceder a la información actualizada." @@ -536,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista de capas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista de simulación" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modificar GCode" @@ -560,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Cree un volumen que no imprima los soportes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura recopila estadísticas de uso de forma anónima." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Recopilando datos" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Más información" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Obtenga más información sobre qué datos envía Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permitir a Cura enviar estadísticas de uso de forma anónima para ayudar a priorizar mejoras futuras para Cura. Se envían algunas de sus preferencias y ajustes, la versión de Cura y un resumen de los modelos que está fragmentando." @@ -595,19 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfiles de Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Archivo Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "No ha podido exportarse con la calidad \"{}\"\n" -"Retroceder a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -633,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagen GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "No se puede segmentar con el material actual, ya que es incompatible con el dispositivo o la configuración seleccionados." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Los ajustes actuales no permiten la segmentación. Los siguientes ajustes contienen errores: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Los ajustes de algunos modelos no permiten la segmentación. Los siguientes ajustes contienen errores en uno o más modelos: {error_labels}." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "No se puede segmentar porque la torre auxiliar o la posición o posiciones de preparación no son válidas." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "No hay nada que segmentar porque ninguno de los modelos se adapta al volumen de impresión. Escale o rote los modelos para que se adapten." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Procesando capas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Información" @@ -702,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Archivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Tobera" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -724,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Archivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizar GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Datos de GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -746,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil de cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Asistente del perfil" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Asistente del perfil" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Archivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Archivo 3MF del proyecto de Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -837,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Desconocido" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Archivo {0} presegmentado" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "El archivo ya existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -861,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "No reemplazado" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "El material seleccionado no es compatible con la máquina o la configuración seleccionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material incompatible" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes actualizados" @@ -960,13 +956,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "No se ha podido encontrar un tipo de calidad {0} para la configuración actual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -993,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos los archivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Material personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volumen de impresión" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "No se ha podido crear el archivo desde el directorio de datos de usuario: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Copia de seguridad" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Se ha intentado restaurar una copia de seguridad de Cura sin tener los datos o metadatos adecuados." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Se ha intentado restaurar una copia de seguridad de Cura que no coincide con la versión actual." @@ -1039,32 +1035,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Buscando nueva ubicación para los objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Buscando ubicación" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "No se puede encontrar la ubicación" @@ -1203,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar informe" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Cargando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando escena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Cargando interfaz..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ajustes de la máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impresora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ajustes de la impresora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (anchura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (profundidad)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma de la placa de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origen en el centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Plataforma caliente" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Tipo de GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ajustes del cabezal de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte izquierda del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte frontal del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte derecha del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte trasera del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura del caballete" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Diferencia de altura entre la punta de la tobera y el sistema del puente (ejes X e Y). Se usa para evitar que colisionen la impresión anterior con el caballete al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Iniciar GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Los comandos de GCode que se ejecutarán justo al inicio." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Finalizar GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Los comandos de GCode que se ejecutarán justo al final." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ajustes de la tobera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamaño de la tobera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diámetro del material compatible" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "El diámetro nominal del filamento compatible con la impresora. El diámetro exacto se sobrescribirá según el material o el perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Desplazamiento de la tobera sobre el eje X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desplazamiento de la tobera sobre el eje Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "GCode inicial del extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "GCode final del extrusor" @@ -1439,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "No se ha podido conectar con la base de datos del Paquete Cura. Compruebe la conexión." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiales" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Versión" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Última actualización" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Desconocido" @@ -1494,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Atrás" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Tendrá que reiniciar Cura para que los cambios de los paquetes surtan efecto." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Salir de Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1535,7 +1584,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Este complemento incluye una licencia.\nDebe aceptar dicha licencia para instalar el complemento.\n¿Acepta las condiciones que aparecen a continuación?" +msgstr "" +"Este complemento incluye una licencia.\n" +"Debe aceptar dicha licencia para instalar el complemento.\n" +"¿Acepta las condiciones que aparecen a continuación?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1547,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Rechazar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Destacado" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidad" @@ -1562,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Buscando paquetes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contacto" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1579,9 +1636,9 @@ msgstr "Registro de cambios" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1629,356 +1686,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Acuerdo de usuario" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Conexión existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar con la impresora en red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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 esta 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:" +msgstr "" +"Para imprimir directamente en la impresora a través de la red, asegúrese de que esta 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:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Agregar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Eliminar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Actualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Versión de firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Dirección" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "La impresora no está configurada para alojar un grupo de impresoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "La impresora aloja un grupo de %1 impresoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Dirección de la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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 red." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Aceptar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Imprimir a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Selección de la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Agregar/eliminar impresoras" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre la página de trabajos de impresión en su navegador web por defecto." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Ver trabajos de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparando para impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Imprimiendo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Disponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Se ha perdido la conexión con la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "No disponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconocido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Deshabilitado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Terminado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparando para impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Acción requerida" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "En pausa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Reanudando" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Impresión cancelada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "No se aceptan trabajos de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina a las: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Borrar placa de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Esperando a que se cambie la configuración" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabajos de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Imprimiendo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "En cola" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impresoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Imprimiendo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Ver impresoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Cancela la impresión" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Terminado" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Preparando" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "En pausa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Reanudando" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Acción requerida" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Conecta a una impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Carga la configuración de la impresora en Cura." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Activar configuración" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Combinación de colores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Color del material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de línea" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocidad" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Grosor de la capa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo de compatibilidad" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Mostrar desplazamientos" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Mostrar asistentes" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Mostrar perímetro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Mostrar relleno" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Mostrar solo capas superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Mostrar cinco capas detalladas en la parte superior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superior o inferior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Pared interior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx." @@ -2098,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavizado" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de malla" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimir según compatibilidad" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "No es compatible la superposición con otros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modificar ajustes para superponer con otros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modificar ajustes para rellenar con otros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Seleccionar ajustes" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Seleccionar ajustes o personalizar este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostrar todo" @@ -2166,13 +2232,13 @@ msgid "Create new" msgstr "Crear nuevo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumen: proyecto de Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ajustes de la impresora" @@ -2189,7 +2255,7 @@ msgid "Update" msgstr "Actualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" @@ -2200,7 +2266,7 @@ msgid "Printer Group" msgstr "Grupo de impresoras" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes del perfil" @@ -2212,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nombre" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2254,7 +2320,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "¿Cómo debería solucionarse el conflicto en el material?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidad de los ajustes" @@ -2265,13 +2331,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Ajustes visibles:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de un total de %2" @@ -2286,6 +2352,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Abrir" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 h 00 min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Especificación de costes" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Total:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1 m/~ %2 g/~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1 m/~ %2 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2504,26 +2646,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Retire la impresión." -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausar" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Reanudar" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Cancelar impresión" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Cancela la impresión" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2540,7 +2666,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Ha personalizado parte de los ajustes del perfil.\n¿Desea descartar los cambios o guardarlos?" +msgstr "" +"Ha personalizado parte de los ajustes del perfil.\n" +"¿Desea descartar los cambios o guardarlos?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2558,19 +2686,17 @@ msgid "Customized" msgstr "Valor personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Preguntar siempre" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar y no volver a preguntar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Guardar y no volver a preguntar" @@ -2590,101 +2716,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Crear nuevo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Información" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar cambio de diámetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Mostrar nombre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Color" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propiedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diámetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Coste del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Anchura del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Longitud del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Coste por metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descripción" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Información sobre adherencia" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Crear" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "El material se ha exportado correctamente a %1." + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2721,7 +2919,7 @@ msgid "Unit" msgstr "Unidad" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "General" @@ -2913,8 +3111,8 @@ msgstr "Comportamiento predeterminado al abrir un archivo del proyecto: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Preguntar siempre" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2933,77 +3131,75 @@ msgstr "Si ha realizado cambios en un perfil y, a continuación, ha cambiado a o #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Anular perfil" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privacidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Buscar actualizaciones al iniciar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 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:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Más información" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "¿Los modelos recién cargados se deben organizar en la placa de impresión? Se han usado junto con la placa de impresión múltiple (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "No organizar objetos al cargar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Impresoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3047,7 +3243,7 @@ msgid "Aborting print..." msgstr "Cancelando impresión..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfiles" @@ -3062,18 +3258,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3084,18 +3268,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar eliminación" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3116,96 +3288,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impresora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfiles protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfiles personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar cambios actuales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiales" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Crear" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicado" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "El material se ha exportado correctamente a %1." - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impresora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Agregar impresora" @@ -3220,6 +3339,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Agregar impresora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3240,7 +3364,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\nCura se enorgullece de utilizar los siguientes proyectos de código abierto:" +msgstr "" +"Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\n" +"Cura se enorgullece de utilizar los siguientes proyectos de código abierto:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3353,7 +3479,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Algunos valores de los ajustes o sobrescrituras son distintos a los valores almacenados en el perfil.\n\nHaga clic para abrir el administrador de perfiles." +msgstr "" +"Algunos valores de los ajustes o sobrescrituras son distintos a los valores almacenados en el perfil.\n" +"\n" +"Haga clic para abrir el administrador de perfiles." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3370,33 +3499,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "No mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidad de los ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Contraer todo" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Ampliar todo" @@ -3407,7 +3536,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Algunos ajustes ocultos utilizan valores diferentes de los valores normales calculados.\n\nHaga clic para mostrar estos ajustes." +msgstr "" +"Algunos ajustes ocultos utilizan valores diferentes de los valores normales calculados.\n" +"\n" +"Haga clic para mostrar estos ajustes." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3435,7 +3567,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Este ajuste tiene un valor distinto del perfil.\n\nHaga clic para restaurar el valor del perfil." +msgstr "" +"Este ajuste tiene un valor distinto del perfil.\n" +"\n" +"Haga clic para restaurar el valor del perfil." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3443,7 +3578,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Este ajuste se calcula normalmente pero actualmente tiene un valor absoluto establecido.\n\nHaga clic para restaurar el valor calculado." +msgstr "" +"Este ajuste se calcula normalmente pero actualmente tiene un valor absoluto establecido.\n" +"\n" +"Haga clic para restaurar el valor calculado." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3481,7 +3619,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3534,7 +3672,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Tobera insertada en este extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Placa de impresión" @@ -3559,6 +3697,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Caliente la plataforma antes de imprimir. Puede continuar ajustando la impresión durante el calentamiento, así no tendrá que esperar a que la plataforma se caliente para poder imprimir." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3653,40 +3806,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Ajustes de impresión deshabilitados\nNo se pueden modificar los archivos GCode" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00 h 00 min" +msgstr "" +"Ajustes de impresión deshabilitados\n" +"No se pueden modificar los archivos GCode" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificación de tiempos" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Especificación de costes" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Total:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3697,22 +3825,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuración de impresión personalizada

Imprimir con un control muy detallado del proceso de segmentación." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Activar impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nombre del trabajo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tiempo de impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tiempo restante estimado" @@ -3818,184 +3946,183 @@ msgid "About..." msgstr "Acerca de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Eliminar modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar modelo en plataforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Seleccionar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Borrar placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recargar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Organizar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Organizar selección" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir archivo(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuevo proyecto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "&Mostrar registro del motor..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar carpeta de configuración" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Examinar paquetes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Expandir/contraer barra lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Cargue un modelo en 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Preparado para segmentar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Segmentando..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Listo para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "No se puede segmentar." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Fragmentar trabajo de impresión actual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar proceso de fragmentación" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Seleccione el dispositivo de salida activo" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir archivo(s)" @@ -4015,129 +4142,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Archivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Guardar selección en archivo" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Guardar &como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Guardar &proyecto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Edición" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "A&justes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impresora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como extrusor activo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Deshabilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Placa de impresión" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensiones" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Cuadro de herramientas" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Pre&ferencias" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "A&yuda" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Abrir archivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Nuevo proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "¿Está seguro de que desea iniciar un nuevo proyecto? Esto borrará la placa de impresión y cualquier ajuste no guardado." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar paquete" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir archivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4147,112 +4290,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar proyecto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 y material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Guardar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altura de capa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Este perfil de calidad no está disponible para la configuración de material y de tobera actual. Cámbiela para poder habilitar este perfil de calidad." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidad de impresión" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Más lento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Más rápido" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Ha modificado algunos ajustes del perfil. Si desea cambiarlos, hágalo en el modo personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Relleno" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un relleno gradual aumentará gradualmente la cantidad de relleno hacia arriba." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Habilitar gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Generar soporte" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Seleccione qué extrusor se utilizará como soporte. Esta opción formará estructuras de soporte por debajo del modelo para evitar que éste se combe o la impresión se haga en el aire." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adherencia de la placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Habilita la impresión de un borde o una balsa. Esta opción agregará un área plana alrededor del objeto, que es fácil de cortar después." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "¿Necesita ayuda para mejorar sus impresiones?
Lea las Guías de solución de problemas de Ultimaker" @@ -4299,23 +4442,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impresora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use láminas de adherencia o pegamento con esta combinación de materiales" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Comprobar compatibilidad" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Haga clic para comprobar la compatibilidad de los materiales en Utimaker.com." @@ -4405,16 +4547,6 @@ msgctxt "name" msgid "God Mode" msgstr "God Mode" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Acepta códigos GCode y los envía a un enrutador Doodle3D por medio de wifi." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Enrutador Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4495,16 +4627,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase de preparación" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Proporciona una ventana de edición para la edición directa de secuencias de comandos." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Herramienta de secuencia de comandos en directo" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4615,16 +4737,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lector de perfiles antiguos de Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ayuda a abrir archivos de Blender directamente en Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integración de Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4675,6 +4787,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Actualización de la versión 2.7 a la 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4785,6 +4907,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Escritor de perfiles de Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Imprimir asistente del perfil" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4815,6 +4947,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lector de perfiles de Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir con un enrutador Doodle3D" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir con un enrutador Doodle3D" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Conectar con Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Enviando datos a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "No se pueden enviar datos a Doodle3D Connect. ¿Hay otro trabajo que todavía esté activo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Guardando datos en Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Archivo enviado a Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir la interfaz web de Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Archivo Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "No ha podido exportarse con la calidad \"{}\"\n" +#~ "Retroceder a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contacto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "La impresora no está configurada para alojar un grupo de impresoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "La impresora aloja un grupo de %1 impresoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Agregar/eliminar impresoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre la página de trabajos de impresión en su navegador web por defecto." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Ver trabajos de impresión" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para impresión" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Imprimiendo" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponible" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Se ha perdido la conexión con la impresora." + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "No disponible" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Deshabilitado" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para impresión" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Impresión cancelada" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "No se aceptan trabajos de impresión" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina a las: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Borrar placa de impresión" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Esperando a que se cambie la configuración" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabajos de impresión" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impresoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Ver impresoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausar" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Reanudar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Cancelar impresión" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Preguntar siempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Anular perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "¿Los modelos recién cargados se deben organizar en la placa de impresión? Se han usado junto con la placa de impresión múltiple (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "No organizar objetos al cargar" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Guardar selección en archivo" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Guardar &como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Guardar &proyecto..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use láminas de adherencia o pegamento con esta combinación de materiales" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Acepta códigos GCode y los envía a un enrutador Doodle3D por medio de wifi." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Enrutador Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Proporciona una ventana de edición para la edición directa de secuencias de comandos." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Herramienta de secuencia de comandos en directo" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ayuda a abrir archivos de Blender directamente en Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integración de Blender (experimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Advertencia del comprobador de modelos" @@ -5082,10 +5427,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Browse plugins..." #~ msgstr "Examinar complementos..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Placa de impresión" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Complementos" @@ -5311,14 +5652,6 @@ msgstr "Lector de perfiles de Cura" #~ "\n" #~ " Disculpe." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Asistente del perfil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Asistente del perfil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "No se ha cargado material." @@ -5449,14 +5782,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurar la visibilidad de los ajustes..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m/~ %2 g/~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m/~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automático: %1" @@ -5493,14 +5818,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lector de perfiles Gcode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Imprimir asistente del perfil" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Se han producido varios errores al abrir el archivo de SolidWorks. Compruebe que el archivo se puede abrir correctamente en SolidWorks." @@ -5697,10 +6014,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "La impresora aloja un grupo de %1 impresoras conectadas de Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparando" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completado el: " diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po index e8f44ef4f1..d4ed9c33c9 100644 --- a/resources/i18n/es_ES/fdmextruder.def.json.po +++ b/resources/i18n/es_ES/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 b5cd50638f..feb882f45f 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" @@ -57,7 +57,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "Los comandos de GCode que se ejecutarán justo al inicio separados por - \n." +msgstr "" +"Los comandos de GCode que se ejecutarán justo al inicio separados por - \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -69,7 +71,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "Los comandos de GCode que se ejecutarán justo al final separados por -\n." +msgstr "" +"Los comandos de GCode que se ejecutarán justo al final separados por -\n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -81,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID del material. Este valor se define de forma automática. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diámetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta el diámetro del filamento utilizado. Este valor debe coincidir con el diámetro del filamento utilizado." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1056,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1136,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa el flujo en partes de una pared interior que se están imprimiendo donde ya hay una pared." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1501,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1531,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Conectar los extremos donde los patrones de relleno se juntan con la pared interior usando una línea que siga la forma de esta. Habilitar este ajuste puede lograr que el relleno se adhiera mejor a las paredes y se reduzca el efecto del relleno sobre la calidad de las superficies verticales. Deshabilitar este ajuste reduce la cantidad de material utilizado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1561,6 +1610,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1871,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Temperatura de la placa de impresión una vez caliente en la primera capa." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diámetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta el diámetro del filamento utilizado. Este valor debe coincidir con el diámetro del filamento utilizado." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2718,8 +2779,8 @@ msgstr "Modo Peinada" #: 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 by combing within the infill only." -msgstr "La opción de peinada mantiene la tobera dentro de las áreas ya impresas al desplazarse. Esto ocasiona movimientos de desplazamiento ligeramente más largos, pero reduce la necesidad de realizar retracciones. Si se desactiva la opción de peinada, el material se retraerá y la tobera se moverá en línea recta hasta el siguiente punto. Otra posibilidad es evitar la peinada en áreas de forro superiores/inferiores peinando solo dentro del relleno." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2736,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "No en el forro" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3116,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3181,6 +3242,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distancia entre las líneas de estructuras del soporte impresas. Este ajuste se calcula por la densidad del soporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3471,11 +3552,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3511,11 +3587,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3551,16 +3622,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3711,7 +3797,9 @@ msgctxt "skirt_gap description" 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 "La distancia horizontal entre la falda y la primera capa de la impresión.\nSe trata de la distancia mínima. Múltiples líneas de falda se extenderán hacia el exterior a partir de esta distancia." +msgstr "" +"La distancia horizontal entre la falda y la primera capa de la impresión.\n" +"Se trata de la distancia mínima. Múltiples líneas de falda se extenderán hacia el exterior a partir de esta distancia." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3885,8 +3973,8 @@ msgstr "Ancho de las líneas de la capa base de la balsa. Estas deben ser línea #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaciado de líneas de la balsa" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4103,16 +4191,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "El volumen mínimo de cada capa de la torre auxiliar que permite purgar suficiente material." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Grosor de la torre auxiliar" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "El grosor de la torre auxiliar hueca. Un grosor mayor de la mitad del volumen mínimo de la torre auxiliar dará lugar a una torre auxiliar densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4153,26 +4231,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Tras imprimir la torre auxiliar con una tobera, limpie el material rezumado de la otra tobera de la torre auxiliar." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpiar tobera después de cambiar" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Tras cambiar de extrusor, limpie el material que rezuma de la tobera en el primer objeto que imprima. Esto lleva a cabo un movimiento de limpieza lento y suave en un lugar en el que el material que rezuma produzca el menor daño posible a la calidad superficial de la impresión." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volumen de purga de la torre auxiliar" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Cantidad de filamentos que purgar al limpiar la torre auxiliar. La purga sirve para compensar la pérdida de filamentos que se produce durante el rezumado cuando la tobera está inactiva." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4658,6 +4716,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Datos que vinculan el flujo de materiales (en 3 mm por segundo) a la temperatura (grados centígrados)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5168,7 +5236,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Distancia de un movimiento ascendente que se extrude a media velocidad.\nEsto puede causar una mejor adherencia a las capas anteriores, aunque no calienta demasiado el material en esas capas. Solo se aplica a la impresión de alambre." +msgstr "" +"Distancia de un movimiento ascendente que se extrude a media velocidad.\n" +"Esto puede causar una mejor adherencia a las capas anteriores, aunque no calienta demasiado el material en esas capas. Solo se aplica a la impresión de alambre." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5315,6 +5385,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Umbral para usar o no una capa más pequeña. Este número se compara con el curtido de la pendiente más empinada de una capa." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5345,16 +5435,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Si un área de forro es compatible con un porcentaje inferior de su área, se imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes de forro habituales." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Voladizo máximo de pared del puente" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Ancho máximo permitido de la cámara de aire por debajo de una línea de pared antes imprimir la pared utilizando los ajustes de puente. Se expresa como porcentaje del ancho de la línea de la pared. Si la cámara de aire es mayor, la línea de la pared de imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes habituales. Cuando menor sea el valor, más probable es que las líneas de pared del voladizo se impriman utilizando ajustes de puente." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5575,6 +5655,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformación que se aplicará al modelo cuando se cargue desde el archivo." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "La opción de peinada mantiene la tobera dentro de las áreas ya impresas al desplazarse. Esto ocasiona movimientos de desplazamiento ligeramente más largos, pero reduce la necesidad de realizar retracciones. Si se desactiva la opción de peinada, el material se retraerá y la tobera se moverá en línea recta hasta el siguiente punto. Otra posibilidad es evitar la peinada en áreas de forro superiores/inferiores peinando solo dentro del relleno." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaciado de líneas de la balsa" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Grosor de la torre auxiliar" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "El grosor de la torre auxiliar hueca. Un grosor mayor de la mitad del volumen mínimo de la torre auxiliar dará lugar a una torre auxiliar densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpiar tobera después de cambiar" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Tras cambiar de extrusor, limpie el material que rezuma de la tobera en el primer objeto que imprima. Esto lleva a cabo un movimiento de limpieza lento y suave en un lugar en el que el material que rezuma produzca el menor daño posible a la calidad superficial de la impresión." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volumen de purga de la torre auxiliar" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Cantidad de filamentos que purgar al limpiar la torre auxiliar. La purga sirve para compensar la pérdida de filamentos que se produce durante el rezumado cuando la tobera está inactiva." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Voladizo máximo de pared del puente" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Ancho máximo permitido de la cámara de aire por debajo de una línea de pared antes imprimir la pared utilizando los ajustes de puente. Se expresa como porcentaje del ancho de la línea de la pared. Si la cámara de aire es mayor, la línea de la pared de imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes habituales. Cuando menor sea el valor, más probable es que las líneas de pared del voladizo se impriman utilizando ajustes de puente." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimizar el orden en el que se imprimen las paredes a fin de reducir el número de retracciones y la distancia recorrida. La mayoría de los componentes se beneficiarán si este ajuste está habilitado pero, en algunos casos, se puede tardar más, por lo que deben compararse las previsiones de tiempo de impresión con y sin optimización." diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index eb2d6ef7fb..f3e3b7a95c 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -38,6 +38,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "GCode-tiedosto" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,78 +64,17 @@ msgid "" "

View print quality guide

" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Tulostus Doodle3D WiFi-Boxin avulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Tulostus Doodle3D WiFi-Boxin avulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Yhteyden muodostaminen Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Peruuta" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Lähetetään tietoja Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Tietojen lähetys Doodle3D Connectiin ei onnistu. Onko toinen työ yhä aktiivinen?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Tietoja tallennetaan Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Tiedosto lähetetty Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Avaa Doodle3D Connect -verkkoliittymä" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Näytä muutosloki" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aktivoitujen asetusten tasoitus" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profiili on tasoitettu ja aktivoitu." @@ -149,6 +99,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Yhdistetty USB:n kautta" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -171,6 +126,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -193,7 +153,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -232,7 +192,7 @@ msgstr "Ei voitu tallentaa siirrettävälle asemalle {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Virhe" @@ -261,8 +221,8 @@ msgstr "Poista siirrettävä asema {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Varoitus" @@ -289,212 +249,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Siirrettävä asema" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Yhdistetty verkon kautta tulostimeen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Yritä uudelleen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Lähetä käyttöoikeuspyyntö uudelleen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Tulostimen käyttöoikeus hyväksytty" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Pyydä käyttöoikeutta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Lähetä tulostimen käyttöoikeuspyyntö" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Ristiriitainen määritys" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Lähetetään tietoja tulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Lähetetään tietoja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Peruuta" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synkronoi tulostimen kanssa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Tulosta valmis" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Yhdistä verkon kautta" @@ -504,24 +479,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Uusi tulostimen %s laiteohjelmisto saatavilla" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Päivitystietoja ei löytynyt." @@ -531,17 +506,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Kerrosnäkymä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Muokkaa GCode-arvoa" @@ -555,32 +530,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Kerätään tietoja" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "" @@ -590,18 +565,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 -profiilit" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +590,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-kuva" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Viipalointi ei onnistu nykyisellä materiaalilla, sillä se ei sovellu käytettäväksi valitun laitteen tai kokoonpanon kanssa." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Viipalointi ei onnistu" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Viipalointi ei onnistu nykyisten asetuksien ollessa voimassa. Seuraavissa asetuksissa on virheitä: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Viipalointi ei onnistu, koska esitäyttötorni tai esitäytön sijainti tai sijainnit eivät kelpaa." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Ei viipaloitavaa, koska mikään malleista ei sovellu tulostustilavuuteen. Skaalaa tai pyöritä mallia, kunnes se on sopiva." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Käsitellään kerroksia" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Tiedot" @@ -696,18 +666,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Mukautettu" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-tiedosto" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Suutin" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +699,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G File -tiedosto" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-coden jäsennys" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-coden tiedot" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -740,16 +721,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-profiili" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-tiedosto" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-projektin 3MF-tiedosto" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -831,19 +827,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Esiviipaloitu tiedosto {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Tiedosto on jo olemassa" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +851,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Valittu materiaali ei sovellu käytettäväksi valitun laitteen tai kokoonpanon kanssa." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Yhteensopimaton materiaali" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "" @@ -954,13 +950,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profiilista puuttuu laatutyyppi." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Laatutyyppiä {0} ei löydy nykyiselle kokoonpanolle." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +983,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Mukautettu materiaali" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Mukautettu" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Tulostustilavuus" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "" @@ -1033,32 +1029,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Sijoitetaan kappaletta" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Uusien paikkojen etsiminen kappaleille" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Etsitään paikkaa" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Paikkaa ei löydy" @@ -1189,223 +1185,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ladataan laitteita..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Asetetaan näkymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ladataan käyttöliittymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Laitteen asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Tulostin" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Tulostimen asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (leveys)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (syvyys)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (korkeus)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Alustan muoto" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Alkukohta keskellä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Lämmitettävä pöytä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Tulostuspään asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään vasemmalta puolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään etupuolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään oikealta puolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään takapuolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Korokkeen korkeus" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Suuttimen kärjen ja korokejärjestelmän (X- ja Y-akselit) välinen korkeusero. Käytetään estämään aiempien tulosteiden ja korokkeen yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Suulakkeiden määrä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Suutinasetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Suuttimen koko" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Tulostimen tukema tulostuslangan nimellinen halkaisija. Materiaali ja/tai profiili korvaa tarkan halkaisijan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Suuttimen X-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Suuttimen Y-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "" @@ -1425,29 +1421,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiaalit" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Tuntematon" @@ -1480,16 +1489,56 @@ msgctxt "@action:button" msgid "Back" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1533,12 +1582,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Hylkää" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "" @@ -1548,9 +1597,14 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 @@ -1565,9 +1619,9 @@ msgstr "Muutosloki" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1615,22 +1669,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Yhdistä verkkotulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1641,333 +1695,339 @@ msgstr "" "\n" "Valitse tulostin alla olevasta luettelosta:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Lisää" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Muokkaa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Poista" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Päivitä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tyyppi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Laiteohjelmistoversio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Osoite" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Tätä tulostinta ei ole määritetty Ultimaker 3 -tulostinryhmän isännäksi." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Tämä tulostin on {count} tulostimen Ultimaker 3 -ryhmän isäntä." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Yhdistä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Tulostimen osoite" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Anna verkon tulostimen IP-osoite tai isäntänimi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Tulosta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" +msgid "Manage queue" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Näytä tulostustyöt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Tulostetaan" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Saatavilla" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Varattu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Valmis" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Valmistellaan tulostusta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Vaatii toimenpiteitä" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Tulostus keskeytetty" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Ei hyväksy tulostustöitä" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Päättyy: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Tyhjennä alusta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Odotetaan määrityksen muutosta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Tulostustyöt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Tulostetaan" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Jonossa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Tulostimet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Tulostetaan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Näytä tulostimet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Keskeytä tulostus" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Valmis" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Valmistellaan" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Vaatii toimenpiteitä" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Yhdistä tulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Lataa tulostimen määritys Curaan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Aktivoi määritys" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Värimalli" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materiaalin väri" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Linjojen tyyppi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Yhteensopivuustila" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Näytä siirtoliikkeet" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Näytä avustimet" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Näytä kuori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Näytä täyttö" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Näytä vain yläkerrokset" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Näytä 5 yksityiskohtaista kerrosta ylhäällä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Yläosa/alaosa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Sisäseinämä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "" @@ -2087,53 +2147,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Tasoitus" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Valitse asetukset" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Valitse tätä mallia varten mukautettavat asetukset" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Suodatin..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Näytä kaikki" @@ -2155,13 +2215,13 @@ msgid "Create new" msgstr "Luo uusi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Yhteenveto – Cura-projekti" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Tulostimen asetukset" @@ -2178,7 +2238,7 @@ msgid "Update" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tyyppi" @@ -2189,7 +2249,7 @@ msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profiilin asetukset" @@ -2201,19 +2261,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nimi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2243,7 +2303,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Miten materiaalin ristiriita pitäisi ratkaista?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Asetusten näkyvyys" @@ -2254,13 +2314,13 @@ msgid "Mode" msgstr "Tila" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Näkyvät asetukset:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1/%2" @@ -2275,6 +2335,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Avaa" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Vie" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2493,26 +2629,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Poista tuloste" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Keskeytä" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Jatka" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Keskeytä tulostus" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Keskeytä tulostus" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2549,19 +2669,17 @@ msgid "Customized" msgstr "Mukautettu" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Kysy aina" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Hylkää äläkä kysy uudelleen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Säilytä äläkä kysy uudelleen" @@ -2581,101 +2699,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Luo uusi profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Tiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Näytä nimi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Merkki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Materiaalin tyyppi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Väri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Ominaisuudet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Tiheys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Läpimitta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Tulostuslangan hinta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Tulostuslangan paino" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Tulostuslangan pituus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Hinta metriä kohden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Poista materiaalin linkitys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Kuvaus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Tarttuvuustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktivoi" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Luo" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Tuo" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Tuo materiaali" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Vie materiaali" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiaalin vieminen onnistui kohteeseen %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2712,7 +2902,7 @@ msgid "Unit" msgstr "Yksikkö" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Yleiset" @@ -2904,8 +3094,8 @@ msgstr "Projektitiedoston avaamisen oletustoimintatapa: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Kysy aina" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2924,77 +3114,75 @@ msgstr "Kun olet tehnyt muutokset profiiliin ja vaihtanut toiseen, näytetään #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Kumoa profiili" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Tietosuoja" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Lähetä (anonyymit) tulostustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Tulostimet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktivoi" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3038,7 +3226,7 @@ msgid "Aborting print..." msgstr "Keskeytetään tulostus..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profiilit" @@ -3053,18 +3241,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Jäljennös" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Tuo" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Vie" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3075,18 +3251,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Monista profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3107,96 +3271,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Tulostin: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Suojatut profiilit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Mukautetut profiilit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Hylkää tehdyt muutokset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Yleiset asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiaalit" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Luo" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Jäljennös" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Tuo materiaali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Vie materiaali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiaalin vieminen onnistui kohteeseen %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Lisää tulostin" @@ -3211,6 +3322,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Lisää tulostin" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3366,33 +3482,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Piilota tämä asetus" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 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:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pidä tämä asetus näkyvissä" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Määritä asetusten näkyvyys..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "" @@ -3486,7 +3602,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Suulake" @@ -3539,7 +3655,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Tähän suulakkeeseen liitetty suutin." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Alusta" @@ -3564,6 +3680,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Lämmitä pöytä ennen tulostusta. Voit edelleen säätää tulostinta sen lämmitessä, eikä sinun tarvitse odottaa pöydän lämpiämistä, kun olet valmis tulostamaan." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3662,38 +3793,11 @@ msgstr "" "Tulostuksen asennus ei käytössä\n" "G-code-tiedostoja ei voida muokata" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3704,22 +3808,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Mukautettu tulostuksen asennus

Tulosta hallitsemalla täysin kaikkia viipalointiprosessin vaiheita." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktiivinen tulostustyö" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Työn nimi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tulostusaika" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Aikaa jäljellä arviolta" @@ -3825,184 +3929,183 @@ msgid "About..." msgstr "Tietoja..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Poista malli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ke&skitä malli alustalle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Ryhmittele mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Poista mallien ryhmitys" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Yhdistä mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Kerro malli..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Valitse kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Tyhjennä tulostusalusta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Lataa kaikki mallit uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Järjestä kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Järjestä valinta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Avaa tiedosto(t)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Uusi projekti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Näytä moottorin l&oki" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Näytä määrityskansio" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Lataa 3D-malli" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Valmiina viipaloimaan" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Viipaloidaan..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Valmis: %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Viipalointi ei onnistu" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Viipalointi ei käytettävissä" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Valmistele" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Peruuta" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Valitse aktiivinen tulostusväline" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Avaa tiedosto(t)" @@ -4022,129 +4125,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "Tie&dosto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 -msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Tallenna valinta tiedostoon" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Tallenna &nimellä…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." +msgid "&Save..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 +msgctxt "@action:inmenu menubar:file" +msgid "Export Selection..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Muokkaa" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Näytä" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Tulostin" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Aseta aktiiviseksi suulakepuristimeksi" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiili" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Laa&jennukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "L&isäasetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Ohje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Avaa tiedosto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Uusi projekti" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Haluatko varmasti aloittaa uuden projektin? Se tyhjentää alustan ja kaikki tallentamattomat asetukset." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Avaa tiedosto(t)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4154,112 +4273,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Tallenna projekti" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Suulake %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiaali" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Tallenna" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Kerroksen korkeus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Tulostusnopeus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Hitaammin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Nopeammin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Täyttö" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Asteittainen täyttö lisää täytön tiheyttä vähitellen yläosaa kohti." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Ota asteittainen käyttöön" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Muodosta tuki" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Valitse tukena käytettävä suulakepuristin. Näin mallin alle rakennetaan tukirakenteita estämään mallin painuminen tai tulostuminen ilmaan." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Alustan tarttuvuus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Ota reunuksen tai pohjaristikon tulostus käyttöön. Tämä lisää kappaleen ympärille tai alle tasaisen alueen, joka on helppo leikata pois myöhemmin." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Tarvitsetko apua tulosteiden parantamiseen?
Lue Ultimakerin vianmääritysoppaat" @@ -4306,22 +4425,22 @@ msgctxt "@label" msgid "Printer type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiaali" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" +msgid "Use glue with this material combination" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Napsauta ja tarkista materiaalin yhteensopivuus sivustolla Ultimaker.com." @@ -4411,16 +4530,6 @@ msgctxt "name" msgid "God Mode" msgstr "Jumala-tila" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne Wi-Fi-yhteyden kautta Doodle3D WiFi-Boxiin." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4501,16 +4610,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4621,16 +4720,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Aikaisempien Cura-profiilien lukija" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4681,6 +4770,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Päivitys versiosta 2.7 versioon 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4791,6 +4890,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura-profiilin kirjoitin" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4821,6 +4930,138 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiilin lukija" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Tulostus Doodle3D WiFi-Boxin avulla" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Tulostus Doodle3D WiFi-Boxin avulla" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Yhteyden muodostaminen Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Lähetetään tietoja Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Tietojen lähetys Doodle3D Connectiin ei onnistu. Onko toinen työ yhä aktiivinen?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Tietoja tallennetaan Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Tiedosto lähetetty Doodle3D Connectiin" + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Avaa Doodle3D Connect -verkkoliittymä" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Tätä tulostinta ei ole määritetty Ultimaker 3 -tulostinryhmän isännäksi." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Tämä tulostin on {count} tulostimen Ultimaker 3 -ryhmän isäntä." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Näytä tulostustyöt" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Tulostetaan" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Saatavilla" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Varattu" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Valmistellaan tulostusta" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Tulostus keskeytetty" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Ei hyväksy tulostustöitä" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Päättyy: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Tyhjennä alusta" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Odotetaan määrityksen muutosta" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Tulostustyöt" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Tulostimet" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Näytä tulostimet" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Keskeytä" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Jatka" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Keskeytä tulostus" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Kysy aina" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Kumoa profiili" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Tallenna valinta tiedostoon" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Tallenna &nimellä…" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne Wi-Fi-yhteyden kautta Doodle3D WiFi-Boxiin." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + #~ msgctxt "@item:inlistbox" #~ msgid "SolidWorks part file" #~ msgstr "SolidWorks-osatiedosto" @@ -5307,10 +5548,6 @@ msgstr "Cura-profiilin lukija" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Tämä tulostin on %1 tulostimen yhdistetyn Ultimaker 3 -ryhmän isäntä" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Valmistellaan" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Valmistunut: " diff --git a/resources/i18n/fi_FI/fdmextruder.def.json.po b/resources/i18n/fi_FI/fdmextruder.def.json.po index 02f11f3837..89dfcf4de6 100644 --- a/resources/i18n/fi_FI/fdmextruder.def.json.po +++ b/resources/i18n/fi_FI/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+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 862dadaa15..c903182ee6 100644 --- a/resources/i18n/fi_FI/fdmprinter.def.json.po +++ b/resources/i18n/fi_FI/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -80,6 +80,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Materiaalin GUID. Tämä määritetään automaattisesti. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Läpimitta" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Säätää käytetyn tulostuslangan halkaisijaa. Määritä tämä arvo vastaamaan käytetyn tulostuslangan halkaisijaa." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1065,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Siksak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1155,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Kompensoi tulostettaessa virtausta niiden sisäseinämien osien kohdalla, joissa on jo olemassa seinämä." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1500,11 +1540,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1530,6 +1565,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1605,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1937,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Lämmitettävän alustan lämpötila ensimmäistä kerrosta tulostettaessa." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Läpimitta" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Säätää käytetyn tulostuslangan halkaisijaa. Määritä tämä arvo vastaamaan käytetyn tulostuslangan halkaisijaa." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2774,8 @@ msgstr "Pyyhkäisytila" #: 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 by combing within the infill only." -msgstr "Pyyhkäisy pitää suuttimen aiemmin tulostetuilla alueilla siirtoliikkeitä tehtäessä. Tämä johtaa hieman pidempiin siirtoliikkeisiin, mutta vähentää takaisinvedon tarvetta. Jos pyyhkäisy on poistettu käytöstä, materiaalille tehdään takaisinveto ja suutin liikkuu suoraan seuraavaan pisteeseen. On myös mahdollista välttää pyyhkäisy ylä- tai alapintakalvojen yli pyyhkäisemällä vain täytössä." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2792,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3177,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3237,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Tulostettujen tukirakenteiden linjojen välinen etäisyys. Tämä asetus lasketaan tuen tiheyden perusteella." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3547,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3582,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3617,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Siksak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3884,8 +3966,8 @@ msgstr "Pohjaristikon pohjakerroksen linjojen leveys. Näiden tulisi olla paksuj #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Pohjaristikon linjajako" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4184,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Esitäyttötornin kunkin kerroksen minimitilavuus, jotta voidaan poistaa riittävästi materiaalia." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Esitäyttötornin paksuus" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Onton esitäyttötornin paksuus. Jos paksuus ylittää puolet esitäyttötornin minimitilavuudesta, tuloksena on tiheä esitäyttötorni." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4224,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Kun esitäyttötorni on tulostettu yhdellä suuttimella, pyyhi toisesta suuttimesta tihkunut materiaali pois esitäyttötornissa." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Pyyhi suutin vaihdon jälkeen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Pyyhi suuttimen vaihdon jälkeen tihkunut materiaali pois suuttimesta, kun ensimmäinen kappale on tulostettu. Näin saadaan aikaan turvallinen ja hidas pyyhkäisyliike kohdassa, jossa tihkunut materiaali vaurioittaa mahdollisimman vähän tulostuksen pinnan laatua." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Esitäyttötornin poistoainemäärä" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Poistettavan tulostuslangan määrä esitäyttötornia pyyhittäessä. Poisto on hyödyllinen menetetyn tulostuslangan kompensointiin, silloin kun sitä tihkuu suuttimen ollessa ei-aktiivinen." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4709,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Tiedot, jotka yhdistävät materiaalivirran (mm3 sekunnissa) lämpötilaan (celsiusastetta)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5316,6 +5378,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5428,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5576,6 +5648,58 @@ 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 "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Pyyhkäisy pitää suuttimen aiemmin tulostetuilla alueilla siirtoliikkeitä tehtäessä. Tämä johtaa hieman pidempiin siirtoliikkeisiin, mutta vähentää takaisinvedon tarvetta. Jos pyyhkäisy on poistettu käytöstä, materiaalille tehdään takaisinveto ja suutin liikkuu suoraan seuraavaan pisteeseen. On myös mahdollista välttää pyyhkäisy ylä- tai alapintakalvojen yli pyyhkäisemällä vain täytössä." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Pohjaristikon linjajako" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Esitäyttötornin paksuus" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Onton esitäyttötornin paksuus. Jos paksuus ylittää puolet esitäyttötornin minimitilavuudesta, tuloksena on tiheä esitäyttötorni." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Pyyhi suutin vaihdon jälkeen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Pyyhi suuttimen vaihdon jälkeen tihkunut materiaali pois suuttimesta, kun ensimmäinen kappale on tulostettu. Näin saadaan aikaan turvallinen ja hidas pyyhkäisyliike kohdassa, jossa tihkunut materiaali vaurioittaa mahdollisimman vähän tulostuksen pinnan laatua." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Esitäyttötornin poistoainemäärä" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Poistettavan tulostuslangan määrä esitäyttötornia pyyhittäessä. Poisto on hyödyllinen menetetyn tulostuslangan kompensointiin, silloin kun sitä tihkuu suuttimen ollessa ei-aktiivinen." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimoi seinämien tulostusjärjestys takaisinvetojen ja kuljetun etäisyyden vähentämiseksi. Useimmat osat hyötyvät tämän asetuksen käytöstä, mutta joissakin saattaa kestää kauemmin, joten vertaa tulostusajan arvioita optimointia käytettäessä ja ilman sitä." diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 980cb7fa3a..f1c7a62b83 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: French\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Fichier GCode" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,80 +64,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Un ou plusieurs modèles 3D peuvent ne pas s'imprimer de manière optimale en raison de la taille du modèle et de la configuration matérielle :

\n

{model_names}

\n

Découvrez comment optimiser la qualité et la fiabilité de l'impression.

\n

Consultez le guide de qualité d'impression

" +msgstr "" +"

Un ou plusieurs modèles 3D peuvent ne pas s'imprimer de manière optimale en raison de la taille du modèle et de la configuration matérielle :

\n" +"

{model_names}

\n" +"

Découvrez comment optimiser la qualité et la fiabilité de l'impression.

\n" +"

Consultez le guide de qualité d'impression

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimer avec Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimer avec Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Connexion avec Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuler" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Envoi de données vers Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Impossible d'envoyer les données à Doodle3D Connect. Une autre tâche est-elle toujours active ?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Enregistrement de données dans Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Fichier envoyé vers Doodle3D Connecter" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Ouvrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Ouvrir l'interface web Doodle3D Connecter" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Afficher le récapitulatif des changements" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aplatir les paramètres actifs" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Le profil a été aplati et activé." @@ -151,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Connecté via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -173,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Fichier G-Code compressé" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -195,7 +159,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Aucun format de fichier n'est disponible pour écriture !" @@ -234,7 +198,7 @@ msgstr "Impossible d'enregistrer sur le lecteur {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Erreur" @@ -263,8 +227,8 @@ msgstr "Ejecter le lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Avertissement" @@ -291,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Lecteur amovible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Connecté sur le réseau." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Statut d'authentification" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Statut d'authentification" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Réessayer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Renvoyer la demande d'accès" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Accès à l'imprimante accepté" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Demande d'accès" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 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/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 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/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Configuration différente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Envoi des données à l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Envoi des données..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuler" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchroniser avec votre imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Connecté sur le réseau." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Données envoyées" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Afficher sur le moniteur" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Impression terminée" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Connecter via le réseau" @@ -506,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Surveiller" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "De nouvelles fonctionnalités sont disponibles pour votre {machine_name} ! Il est recommandé de mettre à jour le firmware sur votre imprimante." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nouveau firmware %s disponible" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Comment effectuer la mise à jour" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Impossible d'accéder aux informations de mise à jour." @@ -533,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vue en couches" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Vue simulation" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modifier le G-Code" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Créer un volume dans lequel les supports ne sont pas imprimés." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura recueille des statistiques d'utilisation anonymes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Collecte des données..." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Plus d'informations" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Voir plus d'informations sur les données envoyées par Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Autoriser" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Autoriser Cura à envoyer des statistiques d'utilisation anonymes pour mieux prioriser les améliorations futures apportées à Cura. Certaines de vos préférences et paramètres sont envoyés, ainsi que la version du logiciel Cura et un hachage des modèles que vous découpez." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Profils Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Fichier Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Impossible d'exporter avec la qualité \"{}\" !\nQualité redéfinie sur \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Image GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Impossible de découper le matériau actuel, car celui-ci est incompatible avec la machine ou la configuration sélectionnée." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Impossible de découper" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Impossible de couper avec les paramètres actuels. Les paramètres suivants contiennent des erreurs : {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Impossible de couper en raison de certains paramètres par modèle. Les paramètres suivants contiennent des erreurs sur un ou plusieurs modèles : {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Impossible de couper car la tour primaire ou la (les) position(s) d'amorçage ne sont pas valides." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Rien à couper car aucun des modèles ne convient au volume d'impression. Mettez à l'échelle ou faites pivoter les modèles pour les faire correspondre." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Traitement des couches" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informations" @@ -698,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Personnalisé" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Fichier 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Buse" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Fichier G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analyse du G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Détails G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -742,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profil Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Assistant de profil" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Assistant de profil" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Fichier 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Projet Cura fichier 3MF" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -833,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Inconnu" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Fichier {0} prédécoupé" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Le fichier existe déjà" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Pas écrasé" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Le matériau sélectionné est incompatible avec la machine ou la configuration sélectionnée." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Matériau incompatible" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Paramètres mis à jour" @@ -956,13 +956,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Impossible de trouver un type de qualité {0} pour la configuration actuelle." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tous les fichiers (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Matériau personnalisé" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Personnalisé" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume d'impression" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Impossible de créer une archive à partir du répertoire de données de l'utilisateur : {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Sauvegarde" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "A essayé de restaurer une sauvegarde Cura sans disposer de données ou de métadonnées appropriées." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "A essayé de restaurer une sauvegarde Cura qui ne correspond pas à votre version actuelle." @@ -1035,32 +1035,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Placement de l'objet..." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Recherche d'un nouvel emplacement pour les objets" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Recherche d'emplacement..." #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Impossible de trouver un emplacement" @@ -1078,7 +1078,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Oups, un problème est survenu dans Ultimaker Cura.

\n

Une erreur irrécupérable est survenue lors du démarrage. Elle peut avoir été causée par des fichiers de configuration incorrects. Nous vous suggérons de sauvegarder et de réinitialiser votre configuration.

\n

Les sauvegardes se trouvent dans le dossier de configuration.

\n

Veuillez nous envoyer ce rapport d'incident pour que nous puissions résoudre le problème.

\n " +msgstr "" +"

Oups, un problème est survenu dans Ultimaker Cura.

\n" +"

Une erreur irrécupérable est survenue lors du démarrage. Elle peut avoir été causée par des fichiers de configuration incorrects. Nous vous suggérons de sauvegarder et de réinitialiser votre configuration.

\n" +"

Les sauvegardes se trouvent dans le dossier de configuration.

\n" +"

Veuillez nous envoyer ce rapport d'incident pour que nous puissions résoudre le problème.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1116,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

Une erreur fatale est survenue dans Cura. Veuillez nous envoyer ce rapport d'incident pour résoudre le problème

\n

Veuillez utiliser le bouton « Envoyer rapport » pour publier automatiquement un rapport d'erreur sur nos serveurs

\n " +msgstr "" +"

Une erreur fatale est survenue dans Cura. Veuillez nous envoyer ce rapport d'incident pour résoudre le problème

\n" +"

Veuillez utiliser le bouton « Envoyer rapport » pour publier automatiquement un rapport d'erreur sur nos serveurs

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Envoyer rapport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Chargement des machines..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Préparation de la scène..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Chargement de l'interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Le modèle sélectionné était trop petit pour être chargé." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Paramètres de la machine" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Imprimante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Paramètres de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Largeur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondeur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hauteur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forme du plateau" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origine au centre" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Plateau chauffant" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Parfum G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Paramètres de la tête d'impression" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre la gauche de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre le devant de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre la droite de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre le dos de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Hauteur du portique" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "La différence de hauteur entre la pointe de la buse et le système de portique (axes X et Y). Permet d'empêcher les collisions entre les impressions précédentes et le portique lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Nombre d'extrudeuses" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Commandes G-Code à exécuter au tout début." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-Code de fin" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Commandes G-Code à exécuter tout à la fin." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Paramètres de la buse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Taille de la buse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diamètre du matériau compatible" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Le diamètre nominal de filament pris en charge par l'imprimante. Le diamètre exact sera remplacé par le matériau et / ou le profil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Décalage buse X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Décalage buse Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Extrudeuse G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Extrudeuse G-Code de fin" @@ -1427,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Impossible de se connecter à la base de données Cura Package. Veuillez vérifier votre connexion." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Matériaux" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Version" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Dernière mise à jour" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Inconnu" @@ -1482,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Précédent" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Vous devez redémarrer Cura pour que les changements apportés aux paquets ne prennent effet." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Quitter Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1523,7 +1584,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Ce plug-in contient une licence.\nVous devez approuver cette licence pour installer ce plug-in.\nAcceptez-vous les clauses ci-dessous ?" +msgstr "" +"Ce plug-in contient une licence.\n" +"Vous devez approuver cette licence pour installer ce plug-in.\n" +"Acceptez-vous les clauses ci-dessous ?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Refuser" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Fonctionnalités" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilité" @@ -1550,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Récupération des paquets..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1567,9 +1636,9 @@ msgstr "Récapitulatif des changements" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1617,356 +1686,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Accord utilisateur" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Connexion existante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Connecter à l'imprimante en réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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\nSélectionnez votre imprimante dans la liste ci-dessous :" +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 :" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Ajouter" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Modifier" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Supprimer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Rafraîchir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Version du firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Adresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "L'imprimante n'est pas configurée pour héberger un groupe d'imprimantes Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "L'imprimante est le patron pour un groupe de %1 imprimantes Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Connecter" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Adresse de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Sélection d'imprimantes" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Imprimer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Ajouter / supprimer une imprimante" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Ouvre la page des tâches d'impression avec votre navigateur web." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Afficher les tâches d'impression" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Préparation..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Impression..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Disponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Connexion avec l'imprimante perdue" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Inconnu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Désactivé" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Réservée" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Terminé" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Préparation de l'impression..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Action requise" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "En pause" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Reprise" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Abandon de l'impression" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Non acceptation des tâches d'impression" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Complète a: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Enlever les objets du plateau" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "En attente de modification de configuration" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Imprimer les tâches" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Impression..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Mis en file d'attente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Imprimantes" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Impression..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Afficher les imprimantes" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Abandonner l'impression" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Terminé" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Préparation..." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "En pause" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Reprise" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Action requise" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Connecter à une imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Charger la configuration de l'imprimante dans Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Activer la configuration" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Modèle de couleurs" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Couleur du matériau" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Type de ligne" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Taux d'alimentation" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Épaisseur de la couche" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Mode de compatibilité" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Afficher les déplacements" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Afficher les aides" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Afficher la coque" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Afficher le remplissage" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Afficher uniquement les couches supérieures" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Afficher 5 niveaux détaillés en haut" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Haut / bas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Paroi interne" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -2086,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Lissage" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Type de maille" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modèle normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimer comme support" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Ne pas prendre en charge le chevauchement avec d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modifier les paramètres de chevauchement avec d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modifier les paramètres de remplissage d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Sélectionner les paramètres" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Sélectionner les paramètres pour personnaliser ce modèle" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrer..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Afficher tout" @@ -2154,13 +2232,13 @@ msgid "Create new" msgstr "Créer" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Résumé - Projet Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Paramètres de l'imprimante" @@ -2177,7 +2255,7 @@ msgid "Update" msgstr "Mise à jour" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Type" @@ -2188,7 +2266,7 @@ msgid "Printer Group" msgstr "Groupe d'imprimantes" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Paramètres de profil" @@ -2200,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nom" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2242,7 +2320,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Comment le conflit du matériau doit-il être résolu ?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilité des paramètres" @@ -2253,13 +2331,13 @@ msgid "Mode" msgstr "Mode" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Paramètres visibles :" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 sur %2" @@ -2274,6 +2352,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Ouvrir" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exporter" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00h 00min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Spécification de coût" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Total :" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2492,26 +2646,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Supprimez l'imprimante" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pause" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Reprendre" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Abandonner l'impression" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Abandonner l'impression" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2528,7 +2666,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Vous avez personnalisé certains paramètres du profil.\nSouhaitez-vous conserver ces changements, ou les annuler ?" +msgstr "" +"Vous avez personnalisé certains paramètres du profil.\n" +"Souhaitez-vous conserver ces changements, ou les annuler ?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2546,19 +2686,17 @@ msgid "Customized" msgstr "Personnalisé" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Toujours me demander" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Annuler et ne plus me demander" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Conserver et ne plus me demander" @@ -2578,101 +2716,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Créer un nouveau profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informations" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmer le changement de diamètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Afficher le nom" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marque" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Type de matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Couleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriétés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diamètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Coût du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Poids du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Longueur du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Coût au mètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Délier le matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Description" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informations d'adhérence" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Créer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importer un matériau" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exporter un matériau" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Matériau exporté avec succès vers %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2709,7 +2919,7 @@ msgid "Unit" msgstr "Unité" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Général" @@ -2901,8 +3111,8 @@ msgstr "Comportement par défaut lors de l'ouverture d'un fichier de projet : " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Toujours demander" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2921,77 +3131,75 @@ msgstr "Lorsque vous apportez des modifications à un profil puis passez à un a #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Écraser le profil" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Confidentialité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 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:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Plus d'informations" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Expérimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Utiliser la fonctionnalité multi-plateau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Les modèles nouvellement chargés doivent-ils être disposés sur le plateau ? Utilisé en conjonction avec le multi-plateau (EXPÉRIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Ne pas réorganiser les objets lors du chargement" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Imprimantes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activer" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3035,7 +3243,7 @@ msgid "Aborting print..." msgstr "Abandon de l'impression..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profils" @@ -3050,18 +3258,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Dupliquer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exporter" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3072,18 +3268,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Dupliquer un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmer la suppression" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3104,96 +3288,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Imprimante : %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Profils protégés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Personnaliser les profils" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Ignorer les modifications actuelles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Paramètres généraux" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Matériaux" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Créer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Dupliquer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importer un matériau" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exporter un matériau" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Matériau exporté avec succès vers %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Imprimante" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Ajouter une imprimante" @@ -3208,6 +3339,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Ajouter une imprimante" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3228,7 +3364,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\nCura est fier d'utiliser les projets open source suivants :" +msgstr "" +"Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\n" +"Cura est fier d'utiliser les projets open source suivants :" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3341,7 +3479,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Certaines valeurs de paramètre / forçage sont différentes des valeurs enregistrées dans le profil. \n\nCliquez pour ouvrir le gestionnaire de profils." +msgstr "" +"Certaines valeurs de paramètre / forçage sont différentes des valeurs enregistrées dans le profil. \n" +"\n" +"Cliquez pour ouvrir le gestionnaire de profils." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3358,33 +3499,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Masquer ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Masquer ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Afficher ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurer la visibilité des paramètres..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Réduire tout" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Développer tout" @@ -3395,7 +3536,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Certains paramètres masqués utilisent des valeurs différentes de leur valeur normalement calculée.\n\nCliquez pour rendre ces paramètres visibles." +msgstr "" +"Certains paramètres masqués utilisent des valeurs différentes de leur valeur normalement calculée.\n" +"\n" +"Cliquez pour rendre ces paramètres visibles." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3423,7 +3567,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Ce paramètre possède une valeur qui est différente du profil.\n\nCliquez pour restaurer la valeur du profil." +msgstr "" +"Ce paramètre possède une valeur qui est différente du profil.\n" +"\n" +"Cliquez pour restaurer la valeur du profil." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3431,7 +3578,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Ce paramètre est normalement calculé mais il possède actuellement une valeur absolue définie.\n\nCliquez pour restaurer la valeur calculée." +msgstr "" +"Ce paramètre est normalement calculé mais il possède actuellement une valeur absolue définie.\n" +"\n" +"Cliquez pour restaurer la valeur calculée." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3469,7 +3619,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrudeuse" @@ -3522,7 +3672,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Buse insérée dans cet extrudeur." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Plateau" @@ -3547,6 +3697,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Préchauffez le plateau avant l'impression. Vous pouvez continuer à ajuster votre impression pendant qu'il chauffe, et vous n'aurez pas à attendre que le plateau chauffe lorsque vous serez prêt à lancer l'impression." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3641,40 +3806,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Configuration de l'impression désactivée\nLes fichiers G-Code ne peuvent pas être modifiés" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00h 00min" +msgstr "" +"Configuration de l'impression désactivée\n" +"Les fichiers G-Code ne peuvent pas être modifiés" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Spécification de temps" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Spécification de coût" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Total :" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3685,22 +3825,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuration de l'impression personnalisée

Imprimer avec un contrôle fin de chaque élément du processus de découpe." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Activer l'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nom de la tâche" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Durée d'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Durée restante estimée" @@ -3806,184 +3946,183 @@ msgid "About..." msgstr "À propos de..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Supprimer le modèle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 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:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Dégrouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Fusionner les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplier le modèle..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Sélectionner tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Supprimer les objets du plateau" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recharger tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Réorganiser tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Réorganiser la sélection" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Ouvrir le(s) fichier(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nouveau projet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Afficher le &journal du moteur..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Afficher le dossier de configuration" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Parcourir les paquets..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Déplier / replier la barre latérale" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Veuillez charger un modèle 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Prêt à découper" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Découpe en cours..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Prêt à %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Impossible de découper" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Découpe indisponible" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Découper la tâche d'impression en cours" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Annuler le processus de découpe" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Préparer" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annuler" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Sélectionner le périphérique de sortie actif" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Ouvrir le(s) fichier(s)" @@ -4003,129 +4142,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Fichier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Enregi&strer la sélection dans un fichier" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Enregistrer &sous..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Enregistrer le &projet..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Modifier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Visualisation" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&primante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Matériau" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Définir comme extrudeur actif" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Activer l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Désactiver l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Plateau" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensions" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Boîte à outils" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&références" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Aide" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Ouvrir un fichier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Nouveau projet" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Êtes-vous sûr(e) de souhaiter lancer un nouveau projet ? Cela supprimera les objets du plateau ainsi que tous paramètres non enregistrés." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Installer le paquet" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Ouvrir le(s) fichier(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4135,112 +4290,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Enregistrer le projet" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Plateau" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrudeuse %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & matériau" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Enregistrer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Hauteur de la couche" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Ce profil de qualité n'est pas disponible pour votre matériau et configuration des buses actuels. Veuillez modifier ces derniers pour activer ce profil de qualité." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Un profil personnalisé est actuellement actif. Pour activer le curseur de qualité, choisissez un profil de qualité par défaut dans l'onglet Personnaliser" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Vitesse d’impression" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Ralentir" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Accélérer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Vous avez modifié certains paramètres du profil. Si vous souhaitez les modifier, allez dans le mode Personnaliser." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Remplissage" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un remplissage graduel augmentera la quantité de remplissage vers le haut." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Permettre le remplissage graduel" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Générer les supports" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Sélectionnez l'extrudeur à utiliser comme support. Cela créera des structures de support sous le modèle afin de l'empêcher de s'affaisser ou de s'imprimer dans les airs." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adhérence au plateau" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Activez l'impression d'une bordure ou plaquette (Brim/Raft). Cela ajoutera une zone plate autour de ou sous votre objet qui est facile à découper par la suite." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Besoin d'aide pour améliorer vos impressions ?
Lisez les Guides de dépannage Ultimaker" @@ -4287,23 +4442,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Type d'imprimante" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Matériau" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Utilisez feuilles d'adhérence ou de la colle avec cette combinaison des matériaux" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Vérifier la compatibilité" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Cliquez ici pour vérifier la compatibilité des matériaux sur Ultimaker.com." @@ -4393,16 +4547,6 @@ msgctxt "name" msgid "God Mode" msgstr "Mode God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accepte les G-Code et les envoie par Wi-Fi à une box WiFi Doodle3D." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Box WiFi Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4483,16 +4627,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Étape de préparation" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fournit une fenêtre d'édition pour l'édition directe de script." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Outil de scripting en direct" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4603,16 +4737,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lecteur de profil Cura antérieur" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Aide à ouvrir les fichiers Blender directement dans Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Intégration Blender (expérimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4663,6 +4787,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Mise à niveau de version, de 2.7 vers 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4773,6 +4907,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Générateur de profil Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Assistant de profil d'impression" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4803,6 +4947,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lecteur de profil Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimer avec Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimer avec Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Connexion avec Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Envoi de données vers Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Impossible d'envoyer les données à Doodle3D Connect. Une autre tâche est-elle toujours active ?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Enregistrement de données dans Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Fichier envoyé vers Doodle3D Connecter" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Ouvrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Ouvrir l'interface web Doodle3D Connecter" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Fichier Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Impossible d'exporter avec la qualité \"{}\" !\n" +#~ "Qualité redéfinie sur \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contact" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "L'imprimante n'est pas configurée pour héberger un groupe d'imprimantes Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "L'imprimante est le patron pour un groupe de %1 imprimantes Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Ajouter / supprimer une imprimante" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Ouvre la page des tâches d'impression avec votre navigateur web." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Afficher les tâches d'impression" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Préparation..." + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Impression..." + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponible" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Connexion avec l'imprimante perdue" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponible" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Inconnu" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Désactivé" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Réservée" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Préparation de l'impression..." + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Abandon de l'impression" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Non acceptation des tâches d'impression" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Complète a: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Enlever les objets du plateau" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "En attente de modification de configuration" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Imprimer les tâches" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Imprimantes" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Afficher les imprimantes" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pause" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Reprendre" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Abandonner l'impression" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Toujours demander" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Écraser le profil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Les modèles nouvellement chargés doivent-ils être disposés sur le plateau ? Utilisé en conjonction avec le multi-plateau (EXPÉRIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Ne pas réorganiser les objets lors du chargement" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Enregi&strer la sélection dans un fichier" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Enregistrer &sous..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Enregistrer le &projet..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Utilisez feuilles d'adhérence ou de la colle avec cette combinaison des matériaux" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accepte les G-Code et les envoie par Wi-Fi à une box WiFi Doodle3D." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Box WiFi Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fournit une fenêtre d'édition pour l'édition directe de script." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Outil de scripting en direct" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Aide à ouvrir les fichiers Blender directement dans Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Intégration Blender (expérimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Avertissement contrôleur de modèle" @@ -5070,10 +5427,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "Browse plugins..." #~ msgstr "Parcourir les plug-ins..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Plateau" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plug-ins" @@ -5299,14 +5652,6 @@ msgstr "Lecteur de profil Cura" #~ "\n" #~ "Désolé !" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistant de profil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistant de profil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Pas de matériau chargé" @@ -5437,14 +5782,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurer la visibilité des paramètres..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatique : %1" @@ -5481,14 +5818,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lecteur de profil GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistant de profil d'impression" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Des erreurs sont apparues lors de l'ouverture de votre fichier SolidWorks ! Veuillez vérifier s'il est possible d'ouvrir votre fichier dans SolidWorks sans que cela ne cause de problèmes." @@ -5685,10 +6014,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "L'imprimante est configurée pour héberger un groupe de %1 imprimantes connectées Ultimaker 3." -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Préparation..." - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Finalisé sur : " diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po index d4d827870e..e09dde10f3 100644 --- a/resources/i18n/fr_FR/fdmextruder.def.json.po +++ b/resources/i18n/fr_FR/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 68f9060093..539c3502ba 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: French\n" @@ -57,7 +57,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "Commandes G-Code à exécuter au tout début, séparées par \n." +msgstr "" +"Commandes G-Code à exécuter au tout début, séparées par \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -69,7 +71,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "Commandes G-Code à exécuter tout à la fin, séparées par \n." +msgstr "" +"Commandes G-Code à exécuter tout à la fin, séparées par \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -81,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID du matériau. Cela est configuré automatiquement. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diamètre" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajuste le diamètre du filament utilisé. Faites correspondre cette valeur au diamètre du filament utilisé." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1056,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1136,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compenser le débit pour les parties d'une paroi intérieure imprimées aux endroits où une paroi est déjà en place." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1501,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1531,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Relie les extrémités où le motif de remplissage touche la paroi interne, à l'aide d'une ligne épousant la forme de la paroi interne. Activer ce paramètre peut faire mieux coller le remplissage aux parois, et réduit les effets du remplissage sur la qualité des surfaces verticales. Désactiver ce paramètre diminue la quantité de matière utilisée." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1561,6 +1610,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1871,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Température utilisée pour le plateau chauffant à la première couche." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diamètre" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajuste le diamètre du filament utilisé. Faites correspondre cette valeur au diamètre du filament utilisé." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2718,8 +2779,8 @@ msgstr "Mode de détours" #: 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 by combing within the infill only." -msgstr "Les détours (le 'combing') maintiennent le bec dans les zones déjà imprimées lors des déplacements. Cela résulte en des déplacements légèrement plus longs mais réduit le recours aux rétractions. Si les détours sont désactivés, le matériau se rétractera et le bec se déplacera en ligne droite jusqu'au point suivant. Il est également possible d'éviter les détours sur les zones de la couche du dessus / dessous en effectuant les détours uniquement dans le remplissage." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2736,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Pas dans la couche extérieure" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3116,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3181,6 +3242,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distance entre les lignes de support imprimées. Ce paramètre est calculé par la densité du support." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3471,11 +3552,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3511,11 +3587,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3551,16 +3622,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3711,7 +3797,9 @@ msgctxt "skirt_gap description" 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 "La distance horizontale entre la jupe et la première couche de l’impression.\nIl s’agit de la distance minimale séparant la jupe de l’objet. Si la jupe a d’autres lignes, celles-ci s’étendront vers l’extérieur." +msgstr "" +"La distance horizontale entre la jupe et la première couche de l’impression.\n" +"Il s’agit de la distance minimale séparant la jupe de l’objet. Si la jupe a d’autres lignes, celles-ci s’étendront vers l’extérieur." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3885,8 +3973,8 @@ msgstr "Largeur des lignes de la couche de base du radeau. Elles doivent être #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Interligne du radeau" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4103,16 +4191,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Le volume minimum pour chaque touche de la tour primaire afin de purger suffisamment de matériau." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Épaisseur de la tour primaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "L'épaisseur de la tour primaire creuse. Une épaisseur supérieure à la moitié du volume minimum de la tour primaire résultera en une tour primaire dense." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4153,26 +4231,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Après l'impression de la tour primaire à l'aide d'une buse, nettoyer le matériau qui suinte de l'autre buse sur la tour primaire." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Essuyer la buse après chaque changement" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Après un changement d'extrudeuse, essuie le matériau qui suinte de la buse sur la première chose imprimée. Cela exécute un mouvement de nettoyage lent et sûr à l'endroit auquel le matériau qui suinte cause le moins de dommages à la qualité de la surface de votre impression." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume de purge de la tour primaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantité de filament à purger lors de l'essuyage de la tour primaire. La purge est utile pour compenser le filament perdu par la suinte pendant l'inactivité de la buse." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4658,6 +4716,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Données reliant le flux de matériau (en mm3 par seconde) à la température (degrés Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5168,7 +5236,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Distance d’un déplacement ascendant qui est extrudé à mi-vitesse.\nCela peut permettre une meilleure adhérence aux couches précédentes sans surchauffer le matériau dans ces couches. Uniquement applicable à l'impression filaire." +msgstr "" +"Distance d’un déplacement ascendant qui est extrudé à mi-vitesse.\n" +"Cela peut permettre une meilleure adhérence aux couches précédentes sans surchauffer le matériau dans ces couches. Uniquement applicable à l'impression filaire." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5315,6 +5385,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Limite indiquant d'utiliser ou non une couche plus petite. Ce nombre est comparé à la tangente de la pente la plus raide d'une couche." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5345,16 +5435,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Si une région de couche extérieure est supportée pour une valeur inférieure à ce pourcentage de sa surface, elle sera imprimée selon les paramètres du pont. Sinon, elle sera imprimée selon les paramètres normaux de la couche extérieure." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Porte-à-faux max. de la paroi du pont" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Largeur maximale autorisée de la zone d'air sous une ligne de paroi avant que la paroi ne soit imprimée selon les paramètres du pont. Exprimée en pourcentage de la largeur de la ligne de paroi. Si la zone d'air est plus large, la ligne de paroi sera imprimée selon les paramètres du pont. Sinon, la ligne de paroi sera imprimée selon les paramètres normaux. Plus la valeur est faible, plus il est probable que les lignes de paroi en surplomb seront imprimées selon les paramètres du pont." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5575,6 +5655,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matrice de transformation à appliquer au modèle lors de son chargement depuis le fichier." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Les détours (le 'combing') maintiennent le bec dans les zones déjà imprimées lors des déplacements. Cela résulte en des déplacements légèrement plus longs mais réduit le recours aux rétractions. Si les détours sont désactivés, le matériau se rétractera et le bec se déplacera en ligne droite jusqu'au point suivant. Il est également possible d'éviter les détours sur les zones de la couche du dessus / dessous en effectuant les détours uniquement dans le remplissage." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Interligne du radeau" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Épaisseur de la tour primaire" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "L'épaisseur de la tour primaire creuse. Une épaisseur supérieure à la moitié du volume minimum de la tour primaire résultera en une tour primaire dense." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Essuyer la buse après chaque changement" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Après un changement d'extrudeuse, essuie le matériau qui suinte de la buse sur la première chose imprimée. Cela exécute un mouvement de nettoyage lent et sûr à l'endroit auquel le matériau qui suinte cause le moins de dommages à la qualité de la surface de votre impression." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume de purge de la tour primaire" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantité de filament à purger lors de l'essuyage de la tour primaire. La purge est utile pour compenser le filament perdu par la suinte pendant l'inactivité de la buse." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Porte-à-faux max. de la paroi du pont" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Largeur maximale autorisée de la zone d'air sous une ligne de paroi avant que la paroi ne soit imprimée selon les paramètres du pont. Exprimée en pourcentage de la largeur de la ligne de paroi. Si la zone d'air est plus large, la ligne de paroi sera imprimée selon les paramètres du pont. Sinon, la ligne de paroi sera imprimée selon les paramètres normaux. Plus la valeur est faible, plus il est probable que les lignes de paroi en surplomb seront imprimées selon les paramètres du pont." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimiser l'ordre dans lequel des parois sont imprimées de manière à réduire le nombre de retraits et les distances parcourues. La plupart des pièces bénéficieront de cette possibilité, mais certaines peuvent en fait prendre plus de temps à l'impression ; veuillez dès lors comparer les estimations de durée d'impression avec et sans optimisation." diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index e8d84822b8..397ce746de 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" @@ -38,6 +38,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "File G-Code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -51,80 +62,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

La stampa di uno o più modelli 3D può non avvenire in modo ottimale a causa della dimensioni modello e della configurazione materiale:

\n

{model_names}

\n

Scopri come garantire la migliore qualità ed affidabilità di stampa.

\n

Visualizza la guida alla qualità di stampa

" +msgstr "" +"

La stampa di uno o più modelli 3D può non avvenire in modo ottimale a causa della dimensioni modello e della configurazione materiale:

\n" +"

{model_names}

\n" +"

Scopri come garantire la migliore qualità ed affidabilità di stampa.

\n" +"

Visualizza la guida alla qualità di stampa

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Stampa con Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Stampa con Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Collegamento a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Invio dati a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Impossibile inviare dati a Doodle3D Connect. C'è un altro processo in corso?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Memorizzazione dati su Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "File inviato a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Apri Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Apri interfaccia web Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Visualizza registro modifiche" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Impostazioni attive profilo appiattito" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Il profilo è stato appiattito e attivato." @@ -149,6 +103,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Connesso tramite USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -171,6 +130,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "File G-Code compresso" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -193,7 +157,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Non ci sono formati di file disponibili per la scrittura!" @@ -232,7 +196,7 @@ msgstr "Impossibile salvare su unità rimovibile {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Errore" @@ -261,8 +225,8 @@ msgstr "Rimuovi il dispositivo rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Avvertenza" @@ -289,212 +253,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unità rimovibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Collegato alla rete." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Stato di autenticazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Stato di autenticazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Riprova" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Invia nuovamente la richiesta di accesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Accesso alla stampante accettato" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Richiesta di accesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Invia la richiesta di accesso alla stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Impossibile avviare un nuovo processo di stampa." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Mancata corrispondenza della configurazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Invio dati alla stampante in corso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Invio dati" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annulla" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizzazione con la stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Collegato alla rete." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Dati inviati" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Visualizzazione in Controlla" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Stampa finita" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Collega tramite rete" @@ -504,24 +483,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controlla" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Sono disponibili nuove funzioni per la {machine_name}! Si consiglia di aggiornare il firmware sulla stampante." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nuovo firmware %s disponibile" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Modalità di aggiornamento" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Non è possibile accedere alle informazioni di aggiornamento." @@ -531,17 +510,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visualizzazione strato" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista simulazione" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modifica G-code" @@ -555,32 +534,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Crea un volume in cui i supporti non vengono stampati." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura raccoglie statistiche di utilizzo in forma anonima." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Acquisizione dati" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Per saperne di più" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Vedere ulteriori informazioni sui dati inviati da Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Consenti" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Consente a Cura di inviare in forma anonima statistiche d’uso, riguardanti alcune delle preferenze e impostazioni, la versione cura e una serie di modelli in sezionamento, per aiutare a dare priorità a miglioramenti futuri in Cura." @@ -590,18 +569,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Profili Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "File Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Impossibile esportare utilizzando qualità \"{}\" quality!\nTornato a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +594,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Immagine GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Impossibile eseguire il sezionamento con il materiale corrente in quanto incompatibile con la macchina o la configurazione selezionata." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Sezionamento impossibile" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Impossibile eseguire il sezionamento con le impostazioni attuali. Le seguenti impostazioni presentano errori: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Impossibile eseguire il sezionamento a causa di alcune impostazioni per modello. Le seguenti impostazioni presentano errori su uno o più modelli: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Impossibile eseguire il sezionamento perché la torre di innesco o la posizione di innesco non sono valide." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nulla da sezionare in quanto nessuno dei modelli corrisponde al volume di stampa. Ridimensionare o ruotare i modelli secondo necessità." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Elaborazione dei livelli" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informazioni" @@ -696,18 +670,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Personalizzata" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "File 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Ugello" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +703,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "File G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Parsing codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Dettagli codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -740,16 +725,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profilo Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Assistente profilo" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Assistente profilo" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "File 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "File 3MF Progetto Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -831,19 +831,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Sconosciuto" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "File pre-sezionato {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Il file esiste già" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +855,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Non sottoposto a override" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Il materiale selezionato è incompatibile con la macchina o la configurazione selezionata." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Materiale incompatibile" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Impostazioni aggiornate" @@ -954,13 +954,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Impossibile trovare un tipo qualità {0} per la configurazione corrente." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +987,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tutti i file (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Materiale personalizzato" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Personalizzata" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume di stampa" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Impossibile creare un archivio dalla directory dei dati utente: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentativo di ripristinare un backup di Cura senza dati o metadati appropriati." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentativo di ripristinare un backup di Cura non corrispondente alla versione corrente." @@ -1033,32 +1033,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Sistemazione oggetto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Ricerca nuova posizione per gli oggetti" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Ricerca posizione" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Impossibile individuare posizione" @@ -1076,7 +1076,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Oops, Ultimaker Cura ha rilevato qualcosa che non sembra corretto.

\n

Abbiamo riscontrato un errore irrecuperabile durante l’avvio. È stato probabilmente causato da alcuni file di configurazione errati. Suggeriamo di effettuare il backup e ripristinare la configurazione.

\n

I backup sono contenuti nella cartella configurazione.

\n

Si prega di inviare questo Rapporto su crash per correggere il problema.

\n " +msgstr "" +"

Oops, Ultimaker Cura ha rilevato qualcosa che non sembra corretto.

\n" +"

Abbiamo riscontrato un errore irrecuperabile durante l’avvio. È stato probabilmente causato da alcuni file di configurazione errati. Suggeriamo di effettuare il backup e ripristinare la configurazione.

\n" +"

I backup sono contenuti nella cartella configurazione.

\n" +"

Si prega di inviare questo Rapporto su crash per correggere il problema.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1109,7 +1114,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

Si è verificato un errore fatale in Cura. Si prega di inviare questo Rapporto su crash per correggere il problema

\n

Usare il pulsante “Invia report\" per inviare automaticamente una segnalazione errore ai nostri server

\n " +msgstr "" +"

Si è verificato un errore fatale in Cura. Si prega di inviare questo Rapporto su crash per correggere il problema

\n" +"

Usare il pulsante “Invia report\" per inviare automaticamente una segnalazione errore ai nostri server

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1189,223 +1197,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Invia report" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Caricamento macchine in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Impostazione scena in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Caricamento interfaccia in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Il modello selezionato è troppo piccolo per il caricamento." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Impostazioni macchina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Stampante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Impostazioni della stampante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Larghezza)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondità)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altezza)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma del piano di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origine al centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Piano riscaldato" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Versione codice G" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Impostazioni della testina di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato sinistro della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato anteriore della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato destro della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato posteriore della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altezza gantry" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "La differenza di altezza tra la punta dell’ugello e il sistema gantry (assi X e Y). Utilizzata per evitare collisioni tra le stampe precedenti e il gantry durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Numero di estrusori" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Codice G avvio" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandi codice G da eseguire all’avvio." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Codice G fine" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandi codice G da eseguire alla fine." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Impostazioni ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Dimensione ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diametro del materiale compatibile" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Diametro nominale del filamento supportato dalla stampante. Il diametro esatto verrà sovrapposto dal materiale e/o dal profilo." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Scostamento X ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Scostamento Y ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Codice G avvio estrusore" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Codice G fine estrusore" @@ -1425,29 +1433,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Impossibile connettersi al database pacchetto Cura. Verificare la connessione." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugin" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiali" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Versione" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Ultimo aggiornamento" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Autore" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Sconosciuto" @@ -1480,16 +1501,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Indietro" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Riavviare Cura per rendere effettive le modifiche apportate ai pacchetti." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Esci da Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1521,7 +1582,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Questo plugin contiene una licenza.\nÈ necessario accettare questa licenza per poter installare il plugin.\nAccetti i termini sotto riportati?" +msgstr "" +"Questo plugin contiene una licenza.\n" +"È necessario accettare questa licenza per poter installare il plugin.\n" +"Accetti i termini sotto riportati?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1533,12 +1597,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Non accetto" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "In primo piano" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilità" @@ -1548,10 +1612,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Recupero dei pacchetti..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contatto" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1565,9 +1634,9 @@ msgstr "Registro modifiche" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1615,356 +1684,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Contratto di licenza" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Collegamento esistente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Collega alla stampante in rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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\nSelezionare la stampante dall’elenco seguente:" +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:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Aggiungi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Modifica" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Rimuovi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Aggiorna" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Versione firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Indirizzo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Questa stampante comanda un gruppo di %1 stampanti Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Collega" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Indirizzo stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Selezione stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Aggiungi/Rimuovi stampanti" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Apre la pagina processi di stampa con il browser web predefinito." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Visualizza processi di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparazione della stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Stampa in corso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Disponibile" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Persa connessione con la stampante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Non disponibile" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Sconosciuto" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Disabilitato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Riservato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Terminato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparazione della stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Richiede un'azione" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "In pausa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Ripresa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Stampa interrotta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Mancata accettazione processi di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Finisce alle: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Cancellare piano di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "In attesa di modifica configurazione" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Processi di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Stampa in corso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Coda di stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Stampanti" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Stampa in corso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Visualizza stampanti" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Interrompi la stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Terminato" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Preparazione in corso" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "In pausa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Ripresa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Richiede un'azione" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Collega a una stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Carica la configurazione della stampante in Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Attiva la configurazione" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Schema colori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Colore materiale" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo di linea" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocità" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Spessore strato" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modalità di compatibilità" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Mostra spostamenti" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Mostra helper" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Mostra guscio" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Mostra riempimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Mostra solo strati superiori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Mostra 5 strati superiori in dettaglio" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superiore / Inferiore" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parete interna" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -2084,53 +2162,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Smoothing" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo di maglia" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modello normale" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Stampa come supporto" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Non supporta sovrapposizione con altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modifica impostazioni per sovrapposizione con altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modifica impostazioni per riempimento di altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Seleziona impostazioni" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Seleziona impostazioni di personalizzazione per questo modello" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtro..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostra tutto" @@ -2152,13 +2230,13 @@ msgid "Create new" msgstr "Crea nuovo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Riepilogo - Progetto Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Impostazioni della stampante" @@ -2175,7 +2253,7 @@ msgid "Update" msgstr "Aggiorna" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" @@ -2186,7 +2264,7 @@ msgid "Printer Group" msgstr "Gruppo stampanti" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Impostazioni profilo" @@ -2198,19 +2276,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2318,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Come può essere risolto il conflitto nel materiale?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Impostazione visibilità" @@ -2251,13 +2329,13 @@ msgid "Mode" msgstr "Modalità" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Impostazioni visibili:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 su %2" @@ -2272,6 +2350,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Apri" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Esporta" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00h 00min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Indicazione di costo" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Totale:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2490,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Rimuovere la stampa" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausa" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Riprendi" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Interrompi la stampa" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Interrompi la stampa" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2526,7 +2664,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Sono state personalizzate alcune impostazioni del profilo.\nMantenere o eliminare tali impostazioni?" +msgstr "" +"Sono state personalizzate alcune impostazioni del profilo.\n" +"Mantenere o eliminare tali impostazioni?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2684,17 @@ msgid "Customized" msgstr "Valore personalizzato" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Chiedi sempre" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Elimina e non chiedere nuovamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Mantieni e non chiedere nuovamente" @@ -2576,101 +2714,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Crea nuovo profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informazioni" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Conferma modifica diametro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Visualizza nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marchio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo di materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Colore" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Proprietà" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densità" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diametro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Costo del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Lunghezza del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Costo al metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Scollega materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrizione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informazioni sull’aderenza" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Attiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Crea" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importa" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importa materiale" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Esporta materiale" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiale esportato correttamente su %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,7 +2917,7 @@ msgid "Unit" msgstr "Unità" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Generale" @@ -2899,8 +3109,8 @@ msgstr "Comportamento predefinito all'apertura di un file progetto: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Chiedi sempre" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2919,77 +3129,75 @@ msgstr "Dopo aver modificato un profilo ed essere passati a un altro, si apre un #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Override profilo" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Controlla aggiornamenti all’avvio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Invia informazioni di stampa (anonime)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Ulteriori informazioni" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Sperimentale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "I modelli appena caricati devono essere sistemati sul piano di stampa? Utilizzato in abbinamento al piano di stampa multiplo (SPERIMENTALE)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Non posizionare oggetti sul carico" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Stampanti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Attiva" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3033,7 +3241,7 @@ msgid "Aborting print..." msgstr "Interruzione stampa in corso..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profili" @@ -3048,18 +3256,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importa" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Esporta" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3266,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplica profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Conferma rimozione" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,96 +3286,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Stampante: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Profili protetti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Profili personalizzati" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Elimina le modifiche correnti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Impostazioni globali" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Crea" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplica" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importa materiale" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Esporta materiale" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiale esportato correttamente su %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Stampante" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Aggiungi stampante" @@ -3206,6 +3337,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Aggiungi stampante" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3226,7 +3362,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\nCura è orgogliosa di utilizzare i seguenti progetti open source:" +msgstr "" +"Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\n" +"Cura è orgogliosa di utilizzare i seguenti progetti open source:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3339,7 +3477,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Alcuni valori di impostazione/esclusione sono diversi dai valori memorizzati nel profilo.\n\nFare clic per aprire la gestione profili." +msgstr "" +"Alcuni valori di impostazione/esclusione sono diversi dai valori memorizzati nel profilo.\n" +"\n" +"Fare clic per aprire la gestione profili." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3356,33 +3497,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Nascondi questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Nascondi questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mantieni visibile questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configura visibilità delle impostazioni..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Comprimi tutto" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Espandi tutto" @@ -3393,7 +3534,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Alcune impostazioni nascoste utilizzano valori diversi dal proprio valore normale calcolato.\n\nFare clic per rendere visibili queste impostazioni." +msgstr "" +"Alcune impostazioni nascoste utilizzano valori diversi dal proprio valore normale calcolato.\n" +"\n" +"Fare clic per rendere visibili queste impostazioni." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3421,7 +3565,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Questa impostazione ha un valore diverso dal profilo.\n\nFare clic per ripristinare il valore del profilo." +msgstr "" +"Questa impostazione ha un valore diverso dal profilo.\n" +"\n" +"Fare clic per ripristinare il valore del profilo." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3429,7 +3576,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Questa impostazione normalmente viene calcolata, ma attualmente ha impostato un valore assoluto.\n\nFare clic per ripristinare il valore calcolato." +msgstr "" +"Questa impostazione normalmente viene calcolata, ma attualmente ha impostato un valore assoluto.\n" +"\n" +"Fare clic per ripristinare il valore calcolato." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3617,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Estrusore" @@ -3520,7 +3670,7 @@ msgid "The nozzle inserted in this extruder." msgstr "L’ugello inserito in questo estrusore." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Piano di stampa" @@ -3545,6 +3695,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Riscalda il piano prima della stampa. È possibile continuare a regolare la stampa durante il riscaldamento e non è necessario attendere il riscaldamento del piano quando si è pronti per la stampa." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3639,40 +3804,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Impostazione di stampa disabilitata\nI file codice G non possono essere modificati" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00h 00min" +msgstr "" +"Impostazione di stampa disabilitata\n" +"I file codice G non possono essere modificati" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Indicazioni di tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Indicazione di costo" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Totale:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3683,22 +3823,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Impostazione di stampa personalizzata

Stampa con il controllo grana fine su ogni sezione finale del processo di sezionamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Stampa attiva" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome del processo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo di stampa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo residuo stimato" @@ -3804,184 +3944,183 @@ msgid "About..." msgstr "Informazioni..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Elimina modello" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "C&entra modello su piattaforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Raggruppa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Separa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Unisci modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Mo<iplica modello" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Seleziona tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Cancellare piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Ricarica tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Sistema tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Sistema selezione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Apri file..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuovo Progetto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Mostra &log motore..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostra cartella di configurazione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Sfoglia i pacchetti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Espandi/Riduci barra laterale" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Caricare un modello 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Pronto per il sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Sezionamento in corso..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto a %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Sezionamento impossibile" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Sezionamento non disponibile" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Seziona processo di stampa corrente" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Annulla processo di sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Prepara" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annulla" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Seleziona l'unità di uscita attiva" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Apri file" @@ -4001,129 +4140,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&File" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Salva selezione su file" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Salva &come..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Salva &progetto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Modifica" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Visualizza" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "S&tampante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "Ma&teriale" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Imposta come estrusore attivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Abilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Disabilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Piano di stampa" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profilo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Es&tensioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Casella degli strumenti" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referenze" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Help" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Apri file" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Nuovo progetto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Sei sicuro di voler aprire un nuovo progetto? Questo cancellerà il piano di stampa e tutte le impostazioni non salvate." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Installa il pacchetto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Apri file" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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. " @@ -4133,112 +4288,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Salva progetto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Estrusore %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiale" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Salva" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altezza dello strato" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Questo profilo di qualità non è disponibile per il materiale e la configurazione ugello corrente. Modificarli per abilitare questo profilo di qualità." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Un profilo personalizzato è attualmente attivo. Per attivare il cursore qualità, selezionare un profilo di qualità predefinito nella scheda Personalizza" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocità di stampa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Più lenta" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Più veloce" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Sono state modificate alcune impostazioni del profilo. Per modificarle, andare alla modalità personalizzata." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Riempimento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un riempimento graduale aumenterà gradualmente la quantità di riempimento verso l'alto." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Consenti variazione graduale" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Generazione supporto" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Seleziona l’estrusore da utilizzare per la stampa di strutture di supporto. Ciò consentirà di costruire strutture di supporto sotto il modello per evitare cedimenti del modello o di stampare a mezz'aria." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adesione piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Abilita stampa di brim o raft. Questa funzione aggiunge un’area piana attorno o sotto l’oggetto, facile da tagliare successivamente." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Serve aiuto per migliorare le tue stampe?
Leggi la Guida alla ricerca e riparazione guasti Ultimaker" @@ -4285,23 +4440,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo di stampante" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiale" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Utilizzare un foglio di adesione o colla con questa combinazione di materiali" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Controlla compatibilità" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Fai clic per verificare la compatibilità del materiale su Ultimaker.com." @@ -4391,16 +4545,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modalità God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accetta i G-Code e li invia tramite WiFi a un Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4481,16 +4625,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase di preparazione" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fornisce una finestra di modifica per la modifica script diretta." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Strumento di script diretto" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4601,16 +4735,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lettore legacy profilo Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Aiuta ad aprire i file Blender direttamente in Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integrazione Blender (sperimentale)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4661,6 +4785,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Aggiornamento della versione da 2.7 a 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4771,6 +4905,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Writer profilo Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Assistente profilo di stampa" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4801,6 +4945,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lettore profilo Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Stampa con Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Stampa con Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Collegamento a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Invio dati a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Impossibile inviare dati a Doodle3D Connect. C'è un altro processo in corso?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Memorizzazione dati su Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "File inviato a Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Apri Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Apri interfaccia web Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "File Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Impossibile esportare utilizzando qualità \"{}\" quality!\n" +#~ "Tornato a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contatto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Questa stampante comanda un gruppo di %1 stampanti Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Aggiungi/Rimuovi stampanti" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Apre la pagina processi di stampa con il browser web predefinito." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Visualizza processi di stampa" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparazione della stampa" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Stampa in corso" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponibile" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Persa connessione con la stampante" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Non disponibile" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Disabilitato" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Riservato" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparazione della stampa" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Stampa interrotta" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Mancata accettazione processi di stampa" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Finisce alle: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Cancellare piano di stampa" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "In attesa di modifica configurazione" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Processi di stampa" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Stampanti" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Visualizza stampanti" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausa" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Riprendi" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Interrompi la stampa" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Chiedi sempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Override profilo" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "I modelli appena caricati devono essere sistemati sul piano di stampa? Utilizzato in abbinamento al piano di stampa multiplo (SPERIMENTALE)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Non posizionare oggetti sul carico" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Salva selezione su file" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Salva &come..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Salva &progetto..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Utilizzare un foglio di adesione o colla con questa combinazione di materiali" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accetta i G-Code e li invia tramite WiFi a un Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fornisce una finestra di modifica per la modifica script diretta." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Strumento di script diretto" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Aiuta ad aprire i file Blender direttamente in Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integrazione Blender (sperimentale)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Avvertenza controllo modello" @@ -5068,10 +5425,6 @@ msgstr "Lettore profilo Cura" #~ msgid "Browse plugins..." #~ msgstr "Sfoglia plugin..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Piano di stampa" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugin" @@ -5297,14 +5650,6 @@ msgstr "Lettore profilo Cura" #~ "\n" #~ " Spiacenti." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente profilo" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente profilo" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Nessun materiale caricato" @@ -5435,14 +5780,6 @@ msgstr "Lettore profilo Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurazione visibilità delle impostazioni in corso..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatico: %1" @@ -5479,14 +5816,6 @@ msgstr "Lettore profilo Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lettore profilo GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistente profilo di stampa" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Rilevati errori all'apertura del file SolidWorks! Controllare se è possibile aprire il file in SolidWorks senza che si verifichino problemi!" @@ -5683,10 +6012,6 @@ msgstr "Lettore profilo Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Questa stampante fa da host per un gruppo di %1 stampanti Ultimaker 3 connesse" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparazione in corso" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completato su: " diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po index 0ed16e504b..269e8b19be 100644 --- a/resources/i18n/it_IT/fdmextruder.def.json.po +++ b/resources/i18n/it_IT/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 2d883982e3..4d3ac13804 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" @@ -56,7 +56,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "I comandi codice G da eseguire all’avvio, separati da \n." +msgstr "" +"I comandi codice G da eseguire all’avvio, separati da \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +70,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "I comandi codice G da eseguire alla fine, separati da \n." +msgstr "" +"I comandi codice G da eseguire alla fine, separati da \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +84,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Il GUID del materiale. È impostato automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diametro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Regolare il diametro del filamento utilizzato. Abbinare questo valore al diametro del filamento utilizzato." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1069,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1159,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa il flusso per le parti di una parete interna che viene stampata dove è già presente una parete." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1500,11 +1544,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1530,6 +1569,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Collegare le estremità nel punto in cui il riempimento incontra la parete interna utilizzando una linea che segue la forma della parete interna. L'abilitazione di questa impostazione può far meglio aderire il riempimento alle pareti riducendo nel contempo gli effetti del riempimento sulla qualità delle superfici verticali. La disabilitazione di questa impostazione consente di ridurre la quantità di materiale utilizzato." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1609,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1941,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Indica la temperatura usata per il piano di stampa riscaldato per il primo strato." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diametro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Regolare il diametro del filamento utilizzato. Abbinare questo valore al diametro del filamento utilizzato." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2778,8 @@ msgstr "Modalità 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 by combing within the infill only." -msgstr "La funzione Combing tiene l’ugello all’interno delle aree già stampate durante lo spostamento. In tal modo le corse di spostamento sono leggermente più lunghe ma si riduce l’esigenza di effettuare retrazioni. Se questa funzione viene disabilitata, il materiale viene retratto e l’ugello si sposta in linea retta al punto successivo. È anche possibile evitare il combing sopra le aree del rivestimento esterno superiore/inferiore effettuando il combing solo nel riempimento." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2796,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Non nel rivestimento" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3181,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3241,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Indica la distanza tra le linee della struttura di supporto stampata. Questa impostazione viene calcolata mediante la densità del supporto." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3551,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3586,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3621,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3796,9 @@ msgctxt "skirt_gap description" 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 "Indica la distanza orizzontale tra lo skirt ed il primo strato della stampa.\nQuesta è la distanza minima. Più linee di skirt aumenteranno tale distanza." +msgstr "" +"Indica la distanza orizzontale tra lo skirt ed il primo strato della stampa.\n" +"Questa è la distanza minima. Più linee di skirt aumenteranno tale distanza." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3884,8 +3972,8 @@ msgstr "Indica la larghezza delle linee dello strato di base del raft. Le linee #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Spaziatura delle linee del raft" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4190,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Il volume minimo per ciascuno strato della torre di innesco per scaricare materiale a sufficienza." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Spessore torre di innesco" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Lo spessore della torre di innesco cava. Uno spessore superiore alla metà del volume minimo della torre di innesco genera una torre di innesco densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4230,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Dopo la stampa della torre di innesco con un ugello, pulisce il materiale fuoriuscito dall’altro ugello sulla torre di innesco." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Ugello pulitura dopo commutazione" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Dopo la commutazione dell’estrusore, pulire il materiale fuoriuscito dall’ugello sul primo oggetto stampato. Questo effettua un movimento di pulitura lento in un punto in cui il materiale fuoriuscito causa il minor danno alla qualità della superficie della stampa." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume di scarico torre di innesco" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantità di filamento da scaricare durante la pulizia della torre di innesco. Lo scarico è utile per compensare il filamento perso per colatura durante l'inattività dell'ugello." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4715,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Collegamento dei dati di flusso del materiale (in mm3 al secondo) alla temperatura (in °C)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5235,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Indica la distanza di uno spostamento verso l'alto con estrusione a velocità dimezzata.\nCiò può garantire una migliore adesione agli strati precedenti, senza eccessivo riscaldamento del materiale su questi strati. Applicabile solo alla funzione Wire Printing." +msgstr "" +"Indica la distanza di uno spostamento verso l'alto con estrusione a velocità dimezzata.\n" +"Ciò può garantire una migliore adesione agli strati precedenti, senza eccessivo riscaldamento del materiale su questi strati. Applicabile solo alla funzione Wire Printing." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5384,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Soglia per l’utilizzo o meno di uno strato di dimensioni minori. Questo numero è confrontato al valore dell’inclinazione più ripida di uno strato." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5434,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se una zona di rivestimento esterno è supportata per meno di questa percentuale della sua area, effettuare la stampa utilizzando le impostazioni ponte. In caso contrario viene stampata utilizzando le normali impostazioni rivestimento esterno." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Massimo sbalzo parete ponte" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "La larghezza massima ammessa per la zona di aria al di sotto di una linea perimetrale prima di stampare la parete utilizzando le impostazioni ponte. Espressa come percentuale della larghezza della linea perimetrale. Quando la distanza è superiore a questo valore, la linea perimetrale viene stampata utilizzando le normali impostazioni. Più è basso il valore, più è probabile che le linee perimetrali a sbalzo siano stampate utilizzando le impostazioni ponte." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5654,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matrice di rotazione da applicare al modello quando caricato dal file." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ 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 by combing within the infill only." +#~ msgstr "La funzione Combing tiene l’ugello all’interno delle aree già stampate durante lo spostamento. In tal modo le corse di spostamento sono leggermente più lunghe ma si riduce l’esigenza di effettuare retrazioni. Se questa funzione viene disabilitata, il materiale viene retratto e l’ugello si sposta in linea retta al punto successivo. È anche possibile evitare il combing sopra le aree del rivestimento esterno superiore/inferiore effettuando il combing solo nel riempimento." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Spaziatura delle linee del raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Spessore torre di innesco" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Lo spessore della torre di innesco cava. Uno spessore superiore alla metà del volume minimo della torre di innesco genera una torre di innesco densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Ugello pulitura dopo commutazione" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Dopo la commutazione dell’estrusore, pulire il materiale fuoriuscito dall’ugello sul primo oggetto stampato. Questo effettua un movimento di pulitura lento in un punto in cui il materiale fuoriuscito causa il minor danno alla qualità della superficie della stampa." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume di scarico torre di innesco" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantità di filamento da scaricare durante la pulizia della torre di innesco. Lo scarico è utile per compensare il filamento perso per colatura durante l'inattività dell'ugello." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Massimo sbalzo parete ponte" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "La larghezza massima ammessa per la zona di aria al di sotto di una linea perimetrale prima di stampare la parete utilizzando le impostazioni ponte. Espressa come percentuale della larghezza della linea perimetrale. Quando la distanza è superiore a questo valore, la linea perimetrale viene stampata utilizzando le normali impostazioni. Più è basso il valore, più è probabile che le linee perimetrali a sbalzo siano stampate utilizzando le impostazioni ponte." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Ottimizza l'ordine in cui vengono stampate le pareti in modo da ridurre le retrazioni e la distanza percorsa. L'abilitazione di questa funzione porta vantaggi per la maggior parte dei pezzi, ma alcuni potrebbero richiedere un maggior tempo di esecuzione, per cui si consiglia di confrontare i tempi di stampa stimati con e senza ottimizzazione." diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 3f002a6346..8ed120a260 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Japanese\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-codeファイル" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,81 +64,24 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

モデルのサイズまたは材料の設定によっては、適切に印刷しない3Dモデルがあります。:

\n

{model_names}

\n

可能な限り最高の品質および信頼性を得る方法をご覧ください。

\n

印字品質ガイドを見る

" +msgstr "" +"

モデルのサイズまたは材料の設定によっては、適切に印刷しない3Dモデルがあります。:

\n" +"

{model_names}

\n" +"

可能な限り最高の品質および信頼性を得る方法をご覧ください。

\n" +"

印字品質ガイドを見る

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Boxでプリントする" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Boxでプリント" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connectに接続する" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "キャンセル" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connectにデータを送信" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connectにデータを送れませんでした。他のジョブはまだアクティブですか?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connectにデータを保存" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connectにファイル送信完了" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connectを開いています..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect web interfaceを開く" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Changelogの表示" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 #, fuzzy msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "アクティブ設定を平らにします。" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 #, fuzzy msgctxt "@info:status" msgid "Profile has been flattened & activated." @@ -153,6 +107,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "USBにて接続する" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -175,6 +134,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "圧縮G-codeファイル" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -197,7 +161,7 @@ msgid "Save to Removable Drive {0}" msgstr "リムーバブルドライブ{0}に保存" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "書き出すために利用可能な形式のファイルがありません!" @@ -236,7 +200,7 @@ msgstr "リムーバブルドライブ{0}に保存することができません #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "エラー" @@ -265,8 +229,8 @@ msgstr "リムーバブルデバイス{0}を取り出す" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -293,212 +257,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "リムーバブルドライブ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "ネットワーク上のプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "ネットワークのプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "ネットワーク上で接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "ネットワーク上で接続。プリンタへのリクエストを承認してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "ネットワーク上で接続。プリントを操作するアクセス権がありません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "プリンターへのアクセスが申請されました。プリンタへのリクエストを承認してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "認証ステータス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "認証ステータス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "再試行" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "アクセスリクエストを再送信" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "プリンターへのアクセスが承認されました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "このプリンターへのアクセスが許可されていないため、プリントジョブの送信ができませんでした。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "アクセスのリクエスト" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "アクセスのリクエスト送信" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "新しいプリントジョブを開始できません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "ミスマッチの構成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "選択された構成にてプリントを開始してもいいですか。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "新しいデータの送信 (temporarily) をブロックします、前のプリントジョブが送信中です。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "プリンターにプリントデータを送信中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "プリントデータを送信中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "キャンセル" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "プリントコアがスロット{slot_number}に入っていません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "材料がスロット{slot_number}に入っていません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "プリンターと同期する" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Curaで設定しているプリンタ構成を使用されますか?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "ネットワーク上で接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "プリントジョブは正常にプリンターに送信されました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "データを送信しました" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "モニター表示" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "プリントジョブ '{job_name}' は完了しました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "プリント終了" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "ネットワーク上にて接続" @@ -508,24 +487,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "モニター" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name} で利用可能な新しい機能があります。プリンターのファームウェアをアップデートしてください。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "新しい利用可能な%sファームウェアのアップデートがあります。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "アップデートの仕方" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "必要なアップデートの情報にアクセスできません。" @@ -535,17 +514,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "レイヤービュー" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "シミュレーションビュー" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "G-codeを修正" @@ -559,32 +538,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "サポートが印刷されないボリュームを作成します。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Curaは、匿名化した利用統計を収集します。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "データを収集中" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "詳細" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Curaが送信するデータについて詳しくご覧ください。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "許可" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Curaが匿名化した利用統計を送信することを許可し、Curaの将来の改善を優先的に行うことに貢献します。プレファレンスと設定の一部、Curaのバージョン、スライスしているモデルのハッシュが送信されます。" @@ -594,18 +573,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 プロファイル" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blenderファイル" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\"品質を使用したエクスポートができませんでした!\n\"{}\"になりました。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -631,49 +598,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF画像" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "選ばれたプリンターまたは選ばれたプリント構成が異なるため進行中の材料にてスライスを完了できません。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "スライスできません。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "現在の設定でスライスが完了できません。以下の設定にエラーがあります: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "モデル別の設定があるためスライスできません。1つまたは複数のモデルで以下の設定にエラーが発生しました:{error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "プライムタワーまたはプライム位置が無効なためスライスできません。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "モデルのデータがビルトボリュームに入っていないためスライスできるものがありません。スケールやローテーションにて合うように設定してください。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "レイヤーを処理しています。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "インフォメーション" @@ -700,18 +674,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "カスタム" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF ファイル" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "ノズル" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -722,18 +707,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Gファイル" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-codeを解析" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-codeの詳細" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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の表示が適切でない場合があります。" @@ -744,16 +729,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Curaプロファイル" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "プロファイルアシスタント" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "プロファイルアシスタント" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MFファイル" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Curaが3MF fileを算出します。" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -835,19 +835,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "不明" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "スライス前ファイル {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "すでに存在するファイルです。" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -859,23 +859,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "上書きできません" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "選択されたフィラメントはプリンターとそのプリント構成に適応しておりません。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不適合フィラメント" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "現在利用可能なエクストルーダー [%s] に合わせて設定が変更されました。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "設定が更新されました" @@ -958,13 +958,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "プロファイルはクオリティータイプが不足しています。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "進行中のプリント構成にあったクオリティータイプ{0}が見つかりませんでした。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -991,42 +991,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "全てのファイル" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "カスタムフィラメント" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "カスタム" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "造形サイズ" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "ユーザーデータディレクトリからアーカイブを作成できません: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "バックアップ" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "適切なデータまたはメタデータがないのにCuraバックアップをリストアしようとしました。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "現行バージョンと一致しないCuraバックアップをリストアしようとしました。" @@ -1037,32 +1037,32 @@ msgid "Multiplying and placing objects" msgstr "造形データを増やす、配置する。" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "造形データを配置" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "全ての造形物の造形サイズに対し、適切な位置が確認できません" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "造形物のために新しい位置を探索中" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "位置確認" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "位置を確保できません。" @@ -1080,7 +1080,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

申し訳ありません。Ultimaker Cura で何らかの不具合が生じています。

\n

開始時に回復不能のエラーが発生しました。不適切なファイル設定が原因の可能性があります。バックアップを実行してからリセットしてください。

\n

バックアップは、設定フォルダに保存されます。

\n

問題解決のために、このクラッシュ報告をお送りください。

\n " +msgstr "" +"

申し訳ありません。Ultimaker Cura で何らかの不具合が生じています。

\n" +"

開始時に回復不能のエラーが発生しました。不適切なファイル設定が原因の可能性があります。バックアップを実行してからリセットしてください。

\n" +"

バックアップは、設定フォルダに保存されます。

\n" +"

問題解決のために、このクラッシュ報告をお送りください。

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1113,7 +1118,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

致命的なエラーが発生しました。問題解決のためこのクラッシュレポートを送信してください

\n

「レポート送信」ボタンを使用してバグレポートが自動的に当社サーバーに送られるようにしてください

\n " +msgstr "" +"

致命的なエラーが発生しました。問題解決のためこのクラッシュレポートを送信してください

\n" +"

「レポート送信」ボタンを使用してバグレポートが自動的に当社サーバーに送られるようにしてください

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1193,223 +1201,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "レポート送信" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "プリンターを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "シーンをセットアップ中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "インターフェイスを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選択したモデルは読み込むのに小さすぎます。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "プリンターの設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "プリンター" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "プリンターの設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X(幅)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (奥行き)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高さ)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "ビルドプレート形" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "センターを出します。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "ヒーテッドドベッド" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-codeフレーバー" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "プリントヘッド設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド左側からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド前部からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "最大X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド右側からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "最大Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド後部からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "ガントリーの高さ" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "(X 軸及びY軸)ノズルの先端とガントリーシステムの高さに相違があります。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "エクストルーダーの数" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Codeの開始" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-codeコマンドが最初に実行されるようにします。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-codeの終了" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-codeコマンドが最後に実行されるようにします。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "ノズル設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "ノズルサイズ" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "適合する材料直径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "プリンターに対応したフィラメントの直径。正確な直径はフィラメント及びまたはプロファイルに変動します。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "ノズルオフセットX" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "ノズルオフセットY" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "エクストルーダーがG-Codeを開始する" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "エクストルーダーがG-Codeを終了する" @@ -1429,29 +1437,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Curaパッケージデータベースに接続できません。接続を確認してください。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "プラグイン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "マテリアル" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "バージョン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "最終更新日" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "著者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "不明" @@ -1484,16 +1505,56 @@ msgctxt "@action:button" msgid "Back" msgstr "戻る" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "パッケージへの変更を有効にするためにCuraを再起動する必要があります。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Curaを終了する" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1525,7 +1586,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "このプラグインにはライセンスが含まれています。\nこのプラグインをインストールするにはこのライセンスに同意する必要があります。\n下の利用規約に同意しますか?" +msgstr "" +"このプラグインにはライセンスが含まれています。\n" +"このプラグインをインストールするにはこのライセンスに同意する必要があります。\n" +"下の利用規約に同意しますか?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1537,12 +1601,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒否する" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "特長" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "互換性" @@ -1552,10 +1616,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "パッケージ取得中" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "連絡" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1569,9 +1638,9 @@ msgstr "Changelogの表示" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1619,22 +1688,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "ユーザー用使用許諾契約" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "既存の接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "ネットワーク上で繋がったプリンターに接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1642,333 +1711,339 @@ msgid "" "Select your printer from the list below:" msgstr "ネットワーク接続にて直接プリントするためには、必ずケーブルまたはWifiネットワークにて繋がっていることを確認してください。Curaをプリンターに接続していない場合でも、USBメモリを使って直接プリンターにg-codeファイルをトランスファーできます。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "追加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "編集" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "取り除く" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "お持ちのプリンターがリストにない場合、ネットワーク・プリンティング・トラブルシューティング・ガイドを読んでください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "タイプ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "ファームウェアバージョン" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "アドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Ultimaker3のグループをホストするために設定されていません。" +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "このプリンターはUltimaker3 %1グループのホストプリンターです。" +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "このアドレスのプリンターは応答していません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "プリンターアドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "ネットワーク内のプリンターのIPアドレスまたはホストネームを入力してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "ネットワーク上のプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "プリンターの選択" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "プリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1は、繋がっているUltimaker3プリンターのグループをホストするために設定されていません。" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "プリンターの追加/削除" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "デフォルトのウェブブラウザで印刷ジョブページを開きます。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "プリントジョブを見る" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "印刷の準備をする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "プリント中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "利用可能" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "プリンターへの接続が切断されました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "利用不可" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "不明" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "無効" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "予約済み" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "終了" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "プリントの準備をする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "アクションが必要です。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "一時停止" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "再開" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "プリント中止" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "プリントデータを確認できない" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "この層で終了します:" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "ビルドプレートをクリアにする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "プリント構成の変更を待っている" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "プリントジョブ" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "プリント中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "順番を待つ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "複数のプリンター" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "プリント中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "複数のプリンターをみる" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "プリント中止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "終了" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "準備中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "一時停止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "再開" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "アクションが必要です。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "プリンターにつなぐ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "プリンターの構成をCuraに取り入れる。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "プリント構成をアクティベートする" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "カラースキーム" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "フィラメントの色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "ラインタイプ" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "送り速度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "レイヤーの厚さ" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "コンパティビリティモード" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "移動を表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "ヘルプを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "シェルを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "インフィルを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "トップのレイヤーを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "トップの5レイヤーの詳細を表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "トップ/ボトム" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "インナーウォール" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大" @@ -2088,53 +2163,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "スムージング" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "メッシュタイプ" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "標準モデル" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "サポートとしてプリント" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "他のモデルとのオーバーラップは未サポート" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "他のモデルとのオーバーラップの設定を変更" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "他のモデルのインフィルの設定を変更" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "設定を選択する" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "このモデルをカスタマイズする設定を選択する" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "フィルター…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "すべて表示する" @@ -2156,13 +2231,13 @@ msgid "Create new" msgstr "新しいものを作成する" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "サマリーCuraプロジェクト" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "プリンターの設定" @@ -2179,7 +2254,7 @@ msgid "Update" msgstr "アップデート" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "タイプ" @@ -2190,7 +2265,7 @@ msgid "Printer Group" msgstr "プリンターグループ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "プロファイル設定" @@ -2202,20 +2277,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "ネーム" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2246,7 +2321,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "このフィラメントの問題をどのように解決すればいいか?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "視野設定" @@ -2257,13 +2332,13 @@ msgid "Mode" msgstr "モード" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "ビジブル設定:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%2のうち%1" @@ -2278,6 +2353,82 @@ msgctxt "@action:button" msgid "Open" msgstr "開く" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "書き出す" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00時間 00分" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "コスト仕様" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "合計:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2496,26 +2647,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "造形物を取り出してください。" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "一時停止" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "再開" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "プリント中止" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "プリント中止" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2550,19 +2685,17 @@ msgid "Customized" msgstr "カスタマイズ" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "毎回確認する" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "取り消し、再度確認しない。" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "キープし、再度確認しない。" @@ -2582,101 +2715,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "新しいプロファイルを作る" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "インフォメーション" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "直径変更の確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "ディスプレイ名" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "ブランド" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "フィラメントタイプ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "プロパティ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "フィラメントコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "フィラメントの重さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "フィラメントの長さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "毎メーターコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "このフィラメントは %1にリンクすプロパティーを共有する。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "フィラメントをリンクを外す" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "記述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "接着のインフォメーション" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "アクティベート" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "作成する" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "取り込む" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "フィラメントを取り込む" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "フィラメントを書き出す" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "フィラメントの%1への書き出しが完了ました。" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2713,7 +2918,7 @@ msgid "Unit" msgstr "ユニット" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "一般" @@ -2905,8 +3110,8 @@ msgstr "プロジェクトファイル開く際のデフォルト機能:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "いつもお尋ねください。" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2925,77 +3130,75 @@ msgstr "プロファイル内を変更し異なるプロファイルにしまし #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "プロファイルを無効にする" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "プライバシー" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "スタート時にアップデートあるかどうかのチェック" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr " (不特定な) プリントインフォメーションを送信" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "詳細" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "実験" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "マルチビルドプレート機能を使用" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "マルチビルドプレート機能を使用 (再起動が必要)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "新たにロードしたモデルをビルドプレート上に配置すべきですか? マルチビルドプレートと共に使用 (実験的)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "ロード時にオブジェクトを配置しません" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "アクティベート" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3039,7 +3242,7 @@ msgid "Aborting print..." msgstr "プリントを停止します…" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "プロファイル" @@ -3054,18 +3257,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "取り込む" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "書き出す" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3076,18 +3267,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "プロファイルを複製する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "モデルを取り除きました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3108,96 +3287,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "プリンター:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "保護されたプロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "カスタムプロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "プロファイルを現在のセッティング/" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "今の変更を破棄する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "設定は選択したプロファイルにマッチしています。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "グローバル設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "マテリアル" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "作成する" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "複製" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "フィラメントを取り込む" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "フィラメント%1の取り込みに成功しました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "フィラメントを書き出す" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "フィラメントの%1への書き出しが完了ました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "プリンター" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "プリンターを追加する" @@ -3212,6 +3338,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "プリンターについて" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3345,7 +3476,9 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "いくらかの設定プロファイルにある値とことなる場合無効にします。\nプロファイルマネージャーをクリックして開いてください。" +msgstr "" +"いくらかの設定プロファイルにある値とことなる場合無効にします。\n" +"プロファイルマネージャーをクリックして開いてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3362,33 +3495,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "すべてのエクストルーダーに対して変更された値をコピーする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "この設定を非表示にする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "この設定を表示しない" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "常に見えるように設定する" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "視野のセッティングを構成する" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "すべて折りたたむ" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "すべて展開する" @@ -3399,7 +3532,9 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n表示されるようにクリックしてください。" +msgstr "" +"いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n" +"表示されるようにクリックしてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3427,7 +3562,9 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "この設定にプロファイルと異なった値があります。\nプロファイルの値を戻すためにクリックしてください。" +msgstr "" +"この設定にプロファイルと異なった値があります。\n" +"プロファイルの値を戻すためにクリックしてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3435,7 +3572,9 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "このセッティングは通常計算されます、今は絶対値に固定されています。\n計算された値に変更するためにクリックを押してください。" +msgstr "" +"このセッティングは通常計算されます、今は絶対値に固定されています。\n" +"計算された値に変更するためにクリックを押してください。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3473,7 +3612,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "カスタムG-codeコマンドを接続されているプリンターに送信します。「Enter」を押してコマンドを送信します。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "エクストルーダー" @@ -3526,7 +3665,7 @@ msgid "The nozzle inserted in this extruder." msgstr "ノズルが入ったエクストルーダー" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "ビルドプレート" @@ -3551,6 +3690,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "プリント開始前にベッドを加熱します。加熱中もプリントの調整を行えます、またべットが加熱するまでプリント開始を待つ必要もありません。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3645,40 +3799,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "プリントセットアップが無効\nG-codeファイルを修正することができません。" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00時間 00分" +msgstr "" +"プリントセットアップが無効\n" +"G-codeファイルを修正することができません。" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "時間仕様" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "コスト仕様" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "合計:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3689,22 +3818,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "カスタムプリントセットアップ

スライス処理のきめ細かなコントロールにてプリントする" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "プリントをアクティベートする" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "ジョブネーム" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "プリント時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "残り時間" @@ -3811,183 +3940,182 @@ msgstr "アバウト..." # can’t enter japanese text #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "選択した複数のモデル" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "モデルを消去する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "プラットホームの中心にモデルを配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&モデルグループ" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "モデルを非グループ化" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "モ&デルの合体" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&モデルを増倍する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "すべてのモデル選択" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "ビルドプレート上のクリア" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "すべてのモデルを読み込む" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "すべてのモデルをすべてのビルドプレートに配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "すべてのモデルをアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "選択をアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "すべてのモデルのポジションをリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "すべてのモデル&変更点をリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&ファイルを開く(s)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&新しいプロジェクト…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "エンジン&ログを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "コンフィグレーションのフォルダーを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "パッケージを見る…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "サイドバーを展開する/たたむ" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "3Dモデルをロードしてください。" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "スライスの準備ができました。" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "スライス中…" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1の準備完了" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "スライスできません。" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "スライスが利用不可能" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "現在のプリントジョブをスライスします" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "スライスプロセスをキャンセルします" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "準備する" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "キャンセル" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "アクティブなアウトプットデバイスを選択する" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "ファイルを開く" @@ -4007,129 +4135,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&ファイル" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "フ&ァイルに選択したものを保存" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "名前をつけて保存" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "プロジェクトの保存 (&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&編集" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&ビュー" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&フィラメント" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "アクティブエクストルーダーとしてセットする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "エクストルーダーを有効にする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "エクストルーダーを無効にする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "ビルドプレート (&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&プロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "拡張子" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&ツールボックス" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "プレファレンス" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "ヘルプ" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "このパッケージは再起動後にインストールされます。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "ファイルを開く" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "新しいプロジェクト…" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "新しいプロジェクトを開始しますか?この作業では保存していない設定やビルドプレートをクリアします。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "パッケージをインストール" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "ファイルを開く(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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点のみ選んでください。" @@ -4139,112 +4283,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "プロジェクトを保存" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "ビルドプレート" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "エクストルーダー%1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1とフィラメント" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存中のプロジェクトサマリーを非表示にする" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "保存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "レイヤーの高さ" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "この品質プロファイルは現在の材料およびノズル構成では使用できません。この品質プロファイルを使用できるように変更してください。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "カスタムプロファイルが有効になっています。品質スライダーを有効にするには、カスタムタブでデフォルトの品質プロファイルを選択してください" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "プリントスピード" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "ゆっくり" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "早く" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "プロファイルの設定がいくつか変更されました。変更を有効にするにはカスタムモードに移動してください。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "インフィル" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "グラデュアルインフィルはトップに向かうに従ってインフィルの量を増やします。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "グラデュアルを有効にする" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "サポートを生成します。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "サポートに使うエクストルーダーを選択してください。モデルの垂れや中空プリントを避けるためにモデルの下にサポート構造を生成します。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "ビルドプレートの接着" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "ブリムまたはラフトのプリントの有効化。それぞれ、プリントの周り、また造形物の下に底面を加え切り取りやすくします。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "プリントにヘルプが必要ですか?
Ultimakerトラブルシューティングガイドを読んでください。" @@ -4291,22 +4435,22 @@ msgctxt "@label" msgid "Printer type" msgstr "プリンタータイプ" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "フィラメント" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "密着性シートを使用する、またはこの材料の組み合わせで接着する" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "互換性の確認" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Ultimaker.comにてマテリアルのコンパティビリティを調べるためにクリック" @@ -4396,16 +4540,6 @@ msgctxt "name" msgid "God Mode" msgstr "Godモード" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-codeを承認し、Doodle3D WiFi-ボックスにWifi上にて送る" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4486,16 +4620,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "ステージの準備" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "直接スクリプト編集のための編集ウィンドウを提供します。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "ライブスクリプティングツール" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4606,16 +4730,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "レガシーCuraプロファイルリーダー" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Curaの中で直接Blenderファイルを開くために役立ちます。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender統合 (実験的)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4666,6 +4780,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7から3.0にバージョンアップグレート" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4776,6 +4900,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Curaプロファイルライター" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "プリントプロファイルアシスタント" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4806,6 +4940,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Curaプロファイルリーダー" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Boxでプリントする" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Boxでプリント" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connectに接続する" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connectにデータを送信" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connectにデータを送れませんでした。他のジョブはまだアクティブですか?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connectにデータを保存" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connectにファイル送信完了" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connectを開いています..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect web interfaceを開く" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blenderファイル" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\"品質を使用したエクスポートができませんでした!\n" +#~ "\"{}\"になりました。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "連絡" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Ultimaker3のグループをホストするために設定されていません。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "このプリンターはUltimaker3 %1グループのホストプリンターです。" + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1は、繋がっているUltimaker3プリンターのグループをホストするために設定されていません。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "プリンターの追加/削除" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "デフォルトのウェブブラウザで印刷ジョブページを開きます。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "プリントジョブを見る" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "印刷の準備をする" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "プリント中" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "利用可能" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "プリンターへの接続が切断されました。" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "利用不可" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "不明" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "無効" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "予約済み" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "プリントの準備をする" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "プリント中止" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "プリントデータを確認できない" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "この層で終了します:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "ビルドプレートをクリアにする" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "プリント構成の変更を待っている" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "プリントジョブ" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "複数のプリンター" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "複数のプリンターをみる" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "一時停止" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "再開" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "プリント中止" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "いつもお尋ねください。" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "プロファイルを無効にする" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "新たにロードしたモデルをビルドプレート上に配置すべきですか? マルチビルドプレートと共に使用 (実験的)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "ロード時にオブジェクトを配置しません" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "フ&ァイルに選択したものを保存" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "名前をつけて保存" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "プロジェクトの保存 (&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "密着性シートを使用する、またはこの材料の組み合わせで接着する" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-codeを承認し、Doodle3D WiFi-ボックスにWifi上にて送る" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "直接スクリプト編集のための編集ウィンドウを提供します。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "ライブスクリプティングツール" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Curaの中で直接Blenderファイルを開くために役立ちます。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender統合 (実験的)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "モデルチェッカー警告" @@ -5073,10 +5419,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "Browse plugins..." #~ msgstr "プラグインをみる" -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "ビルドプレート (&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "プラグイン" @@ -5302,14 +5644,6 @@ msgstr "Curaプロファイルリーダー" #~ "\n" #~ "申し訳ありません。" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "プロファイルアシスタント" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "プロファイルアシスタント" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "フィラメントがロードされていません。" @@ -5440,14 +5774,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "Configure setting visiblity..." #~ msgstr "視野のセッティングを構成する" -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自動選択: %1" @@ -5484,14 +5810,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "GCode Profile Reader" #~ msgstr "GCodeプロファイルリーダー" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "プリントプロファイルアシスタント" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "ソリッドワークスのファイルを開く際にエラーが発生しました!ソリッドワークスで、問題なく開くことができるか確認してください。" @@ -5688,10 +6006,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "このプリンターは繋がっているUltimaker3プリンターの%1グループのホストです。" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "準備中" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完了:" diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po index 81d7a09420..10ab04ba7a 100644 --- a/resources/i18n/ja_JP/fdmextruder.def.json.po +++ b/resources/i18n/ja_JP/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Brule\n" diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po index cc0ac98b68..a7cfdc3a40 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Brule\n" @@ -61,7 +61,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "最初に実行するG-codeコマンドは、\nで区切ります。" +msgstr "" +"最初に実行するG-codeコマンドは、\n" +"で区切ります。" #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -73,7 +75,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "最後に実行するG-codeコマンドは、\nで区切ります。" +msgstr "" +"最後に実行するG-codeコマンドは、\n" +"で区切ります。" #: fdmprinter.def.json msgctxt "material_guid label" @@ -86,6 +90,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "マテリアルのGUID。これは自動的に設定されます。" +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直径" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "使用するフィラメントの太さの調整 この値を使用するフィラメントの太さと一致させてください。" + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1101,6 +1115,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "ジグザグ" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1181,6 +1205,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "すでに壁が設置されている場所にプリントされている内壁の部分の流れを補正します。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1282,7 +1326,9 @@ msgstr "ZシームX" #: fdmprinter.def.json msgctxt "z_seam_x description" msgid "The X coordinate of the position near where to start printing each part in a layer." -msgstr "レイヤー内の各印刷を開始するX座\n標の位置。" +msgstr "" +"レイヤー内の各印刷を開始するX座\n" +"標の位置。" #: fdmprinter.def.json msgctxt "z_seam_y label" @@ -1572,12 +1618,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心円" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1605,6 +1645,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "内壁の形状に沿ったラインを使用してインフィルパターンと内壁が合うところで接合します。この設定を有効にすると、インフィルが壁により密着するようになり、垂直面の品質に対するインフィルの影響が軽減します。この設定を無効にすると、材料の使用量が減ります。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1636,6 +1686,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "インフィルパターンはY軸に沿ってこの距離を移動します。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1737,7 +1809,9 @@ msgstr "インフィル優先" #: fdmprinter.def.json msgctxt "infill_before_walls description" msgid "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface." -msgstr "壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\nはじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" +msgstr "" +"壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\n" +"はじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" #: fdmprinter.def.json msgctxt "min_infill_area label" @@ -1954,16 +2028,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "最初のレイヤー印刷時のビルドプレートの温度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直径" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "使用するフィラメントの太さの調整 この値を使用するフィラメントの太さと一致させてください。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2813,8 +2877,8 @@ msgstr "コーミングモード" #: 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 by combing within the infill only." -msgstr "コーミングは、走行時にすでに印刷された領域内にノズルを保ちます。その結果、移動距離はわずかに長くなりますが、引き込みの必要性は減ります。コーミングがオフの場合、フィラメントの引き戻しを行い、ノズルは次のポイントまで直線移動します。また、インフィルのみにてコーミングすることにより、トップとボトムのスキン領域上での櫛通りを回避します。" +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2831,6 +2895,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "スキン内にない" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3217,11 +3286,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3283,6 +3347,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "印刷されたサポート材の間隔。この設定は、サポート材の密度によって算出されます。" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3583,11 +3667,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3627,12 +3706,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - # msgstr "同心3D" #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" @@ -3674,18 +3747,32 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - # msgstr "コンセントリック3D" #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "ジグザグ" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_use_towers label" @@ -3843,7 +3930,9 @@ msgctxt "skirt_gap description" 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 "スカートと印刷の最初の層の間の水平距離。\nこれは最小距離です。複数のスカートラインがこの距離から外側に展開されます。" +msgstr "" +"スカートと印刷の最初の層の間の水平距離。\n" +"これは最小距離です。複数のスカートラインがこの距離から外側に展開されます。" #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -4017,8 +4106,8 @@ msgstr "ベースラフト層の線幅。ビルドプレートの接着のため #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "ラフトラインスペース" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4235,16 +4324,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "プライムタワーの各層の最小容積" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "プライムタワーの厚さ" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "中空プライムタワーの厚さ。プライムタワーの半分を超える厚さは、密集したプライムタワーになります。" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4285,27 +4364,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "1本のノズルでプライムタワーを印刷した後、もう片方のノズルから滲み出した材料をプライムタワーが拭き取ります。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "スイッチ後のノズル拭き取り" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "エクストルーダーを切り替えた後、最初に印刷したものの上にあるノズルから滲み出したマテリアルを拭き取ってください。余分に出たマテリアルがプリントの表面品質に与える影響が最も少ない場所で、ゆっくりと払拭を行います。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "プライムタワーのパージ量" - -# msgstr "プライムタワーのパージ時のボリューム" -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "プライムタワーの上を拭くときにパージするフィラメントの量。パージは、ノズルの不活動時にじみ出たフィラメントを補修するため便利です。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4803,6 +4861,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "マテリアルフロー(毎秒 3mm) と温度 (° c) をリンクします。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5471,6 +5539,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "小さいレイヤーを使用するかどうかの閾値。この値が、レイヤー中の最も急な斜面のタンジェントと比較されます。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5501,16 +5589,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "対象領域に対してこのパーセンテージ未満のスキン領域がサポートされている場合、ブリッジ設定で印刷します。それ以外の場合は、通常のスキン設定で印刷します。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "ブリッジ壁最大オーバーハング" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "ブリッジ設定でウォールを印刷する前に、壁の線の下の空気の領域で可能な最大幅。空気ギャップがこれより広い場合は、壁の線はブリッジ設定で印刷されます。それ以外は、通常の設定で印刷されます。この値より低い場合は、オーバーハング壁線がブリッジ設定で印刷されます。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5731,6 +5809,70 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "ファイルから読み込むときに、モデルに適用するトランスフォーメーションマトリックス。" +# msgstr "同心円" +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ 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 by combing within the infill only." +#~ msgstr "コーミングは、走行時にすでに印刷された領域内にノズルを保ちます。その結果、移動距離はわずかに長くなりますが、引き込みの必要性は減ります。コーミングがオフの場合、フィラメントの引き戻しを行い、ノズルは次のポイントまで直線移動します。また、インフィルのみにてコーミングすることにより、トップとボトムのスキン領域上での櫛通りを回避します。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +# msgstr "同心" +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +# msgstr "同心円" +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "ラフトラインスペース" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "プライムタワーの厚さ" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "中空プライムタワーの厚さ。プライムタワーの半分を超える厚さは、密集したプライムタワーになります。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "スイッチ後のノズル拭き取り" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "エクストルーダーを切り替えた後、最初に印刷したものの上にあるノズルから滲み出したマテリアルを拭き取ってください。余分に出たマテリアルがプリントの表面品質に与える影響が最も少ない場所で、ゆっくりと払拭を行います。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "プライムタワーのパージ量" + +# msgstr "プライムタワーのパージ時のボリューム" +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "プライムタワーの上を拭くときにパージするフィラメントの量。パージは、ノズルの不活動時にじみ出たフィラメントを補修するため便利です。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "ブリッジ壁最大オーバーハング" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "ブリッジ設定でウォールを印刷する前に、壁の線の下の空気の領域で可能な最大幅。空気ギャップがこれより広い場合は、壁の線はブリッジ設定で印刷されます。それ以外は、通常の設定で印刷されます。この値より低い場合は、オーバーハング壁線がブリッジ設定で印刷されます。" + # msgstr "壁のプリントの順番を最適化する" #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 77e12af28e..030a2a8739 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-19 16:10+0900\n" "Last-Translator: Jinbuhm Kim \n" "Language-Team: Jinbum Kim , Korean \n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code 파일" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,80 +64,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

하나 이상의 3D 모델이 모델 크기 및 재료 구성으로 인해 최적의 상태로 인쇄되지 않을 수 있습니다.

\n

{model_names}

\n

인쇄 품질 및 안정성을 최고로 높이는 방법을 알아보십시오.

\n

인쇄 품질 가이드 보기

" +msgstr "" +"

하나 이상의 3D 모델이 모델 크기 및 재료 구성으로 인해 최적의 상태로 인쇄되지 않을 수 있습니다.

\n" +"

{model_names}

\n" +"

인쇄 품질 및 안정성을 최고로 높이는 방법을 알아보십시오.

\n" +"

인쇄 품질 가이드 보기

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box로 프린팅" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box로 프린팅" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connect에 연결" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "취소" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connect에 데이터 보내기" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connect에 데이터를 보낼 수 없습니다. 다른 작업이 진행중인가요?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connect에 데이터 저장" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connect에 파일 전송" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect 열기..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect 웹 인터페이스 열기" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "변경 내역 표시" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "활성 설정 병합" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "프로파일이 병합되고 활성화되었습니다." @@ -151,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "USB를 통해 연결" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -173,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "압축된 G-code 파일" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -195,7 +159,7 @@ msgid "Save to Removable Drive {0}" msgstr "이동식 드라이브 {0}에 저장" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "쓸 수있는 파일 형식이 없습니다!" @@ -234,7 +198,7 @@ msgstr "이동식 드라이브 {0}: {1} 에 저장할 수 없습니다 :" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "오류" @@ -263,8 +227,8 @@ msgstr "이동식 장치 {0} 꺼내기" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "경고" @@ -291,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "이동식 드라이브" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "네트워크를 통해 연결됨." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "네트워크를 통해 연결되었습니다. 프린터의 접근 요청을 승인하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "네트워크를 통해 연결되었습니다. 프린터를 제어할 수 있는 권한이 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "요청된 프린터에 대한 액세스. 프린터에서 요청을 승인하십시오" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "인증 상태" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "인증 상태" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "재시도" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "접근 요청 다시 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "허용 된 프린터에 대한 접근 허용" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "이 프린터로 프린팅 할 수 없습니다. 프린팅 작업을 보낼 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "접근 요청" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "프린터에 접근 요청 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "새 프린팅 작업을 시작할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "일치하지 않는 구성" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "선택한 구성으로 프린팅 하시겠습니까?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "새로운 작업 전송 (일시적)이 차단되어 이전 프린팅 작업을 계속 보냅니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "프린터로 데이터 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "데이터 전송 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "취소" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "{slot_number} 슬롯에 로드 된 프린터코어가 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "{slot_number}에 로드 된 재료가 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "프린터와 동기화" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Cura에서 현재 프린터 구성을 사용 하시겠습니까?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "네트워크를 통해 연결됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "출력 작업이 프린터에 성공적으로 보내졌습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "데이터 전송 됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "모니터에서 보기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "인쇄 작업 ‘{job_name}’이 완료되었습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "프린팅이 완료됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "네트워크를 통해 연결" @@ -506,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "모니터" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name}의 새로운 기능을 사용할 수 있습니다! 프린터의 펌웨어를 업데이트하는 것이 좋습니다." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "새로운 %s 펌웨어를 사용할 수 있습니다" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "업데이트하는 방법" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "업데이트 정보에 액세스 할 수 없습니다." @@ -533,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "레이어 뷰" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "시뮬레이션 뷰" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "G 코드 수정" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "서포트가 프린팅되지 않는 볼륨을 만듭니다." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura는 익명의 사용 통계를 수집합니다." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "데이터 수집" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "추가 정보" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Cura가 전송하는 데이터에 대한 추가 정보를 확인하십시오." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "허용" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Cura가 익명의 사용 통계를 보내 Cura에 대한 향후 개선을 우선화하는 데 도움을 줍니다. Cura 버전과 슬라이싱하는 모델의 해쉬 등 일부 환경설정 값이 발송됩니다." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 프로파일" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 파일" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\" 품질을 사용하여 내보낼 수 없습니다!\n \"{}\"(으)로 돌아갑니다." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 이미지" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "선택한 소재 또는 구성과 호환되지 않기 때문에 현재 소재로 슬라이스 할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "슬라이스 할 수 없습니다" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "현재 설정으로 슬라이스 할 수 없습니다. 다음 설정에는 오류가 있습니다 : {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "일부 모델별 설정으로 인해 슬라이스할 수 없습니다. 하나 이상의 모델에서 다음 설정에 오류가 있습니다. {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "프라임 타워 또는 위치가 유효하지 않아 슬라이스 할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "어떤 모델도 빌드 볼륨에 맞지 않으므로 슬라이스 할 수 없습니다. 크기에 맞게 모델을 회전하거나 회전하십시오." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "레이어 처리 중" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "정보" @@ -698,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "사용자 정의" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 파일" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "노즐" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 파일" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G 코드 파싱" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-코드 세부 정보" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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-코드가 정확하지 않을 수 있습니다." @@ -742,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 프로파일" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "프로파일 어시스턴트" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "프로파일 어시스턴트" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 파일" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 프로젝트 3MF 파일" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -833,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "알 수 없음" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "미리 슬라이싱한 파일 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "파일이 이미 있습니다" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "재정의되지 않음" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "선택한 재료가 선택한 기기 또는 구성과 호환되지 않습니다." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "호환되지 않는 재료" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "현재 사용가능한 익스트루더: [% s]에 맞도록 설정이 변경되었습니다" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "설정이 업데이트되었습니다" @@ -956,13 +956,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "프로파일에 품질 타입이 누락되었습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "현재 구성에 대해 품질 타입 {0}을 찾을 수 없습니다." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "모든 파일 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "사용자 정의 소재" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "사용자 정의" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "출력물 크기" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "사용자 데이터 디렉터리에서 압축 파일을 만들 수 없습니다: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "백업" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "적절한 데이터 또는 메타 데이터 없이 Cura 백업을 복원하려고 시도했습니다." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "현재 버전과 일치하지 않는 Cura 백업을 복원하려고 시도했습니다." @@ -1035,32 +1035,32 @@ msgid "Multiplying and placing objects" msgstr "객체를 증가시키고 배치" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "개체 배치 중" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "모든 개체가 출력할 수 있는 최대 사이즈 내에 위치할 수 없습니다" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "객체의 새 위치 찾기" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "위치 찾기" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "위치를 찾을 수 없음" @@ -1078,7 +1078,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

죄송합니다, Ultimaker Cura가 정상적이지 않습니다. \n                    

시작할 때 복구 할 수없는 오류가 발생했습니다. 이 오류는 잘못된 구성 파일로 인해 발생할 수 있습니다. 설정을 백업하고 재설정하는 것이 좋습니다. \n                    

백업은 설정 폴더에서 찾을 수 있습니다. \n                    

문제를 해결하기 위해이 오류 보고서를 보내주십시오. \n " +msgstr "" +"

죄송합니다, Ultimaker Cura가 정상적이지 않습니다. \n" +"                    

시작할 때 복구 할 수없는 오류가 발생했습니다. 이 오류는 잘못된 구성 파일로 인해 발생할 수 있습니다. 설정을 백업하고 재설정하는 것이 좋습니다. \n" +"                    

백업은 설정 폴더에서 찾을 수 있습니다. \n" +"                    

문제를 해결하기 위해이 오류 보고서를 보내주십시오. \n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1116,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

치명적인 오류가 발생했습니다. 문제를 해결할 수 있도록 이 충돌 보고서를 보내주십시오

\n

\"보고서 전송\" 버튼을 사용하면 버그 보고서가 서버에 자동으로 전달됩니다

\n " +msgstr "" +"

치명적인 오류가 발생했습니다. 문제를 해결할 수 있도록 이 충돌 보고서를 보내주십시오

\n" +"

\"보고서 전송\" 버튼을 사용하면 버그 보고서가 서버에 자동으로 전달됩니다

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "보고서 전송" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "기기로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "장면 설정 중..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "인터페이스 로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "기기 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "프린터" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "프린터 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (너비)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (깊이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (높이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "빌드 플레이트 모양" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "중앙이 원점" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "히트 베드" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Gcode 유형" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "프린트헤드 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드 왼쪽에서 노즐 중심까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드 전면에서 노즐 중앙까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드의 오른쪽에서 노즐 중앙까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드의 뒤쪽에서 노즐 중심까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "갠트리 높이" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "노즐 끝과 갠트리 시스템 사이의 높이 차이 (X 및 Y 축). \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 갠트리 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "익스트루더의 수" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "시작 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "시작시 Gcode 명령이 실행됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "종료 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Gcode 명령어가 맨 마지막에 실행됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "노즐 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "노즐 크기" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "호환되는 재료의 직경" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "프린터가 지원하는 필라멘트의 직경. 정확한 직경은 소재 및 / 또는 프로파일에 의해 덮어써집니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "노즐 오프셋 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "노즐 오프셋 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "익스트루더 시작 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "익스트루더 종료 Gcode" @@ -1427,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Cura 패키지 데이터베이스에 연결할 수 없습니다. 연결을 확인하십시오." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "플러그인" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "재료" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "버전" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "마지막으로 업데이트한 날짜" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "원작자" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "알 수 없는" @@ -1482,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "뒤로" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "패키지의 변경 사항이 적용되기 전에 Cura를 다시 시작해야 합니다" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura 끝내기" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1523,7 +1584,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "이 플러그인에는 라이선스가 포함되어 있습니다.\n이 플러그인을 설치하려면 이 라이선스를 수락해야 합니다.\n아래의 약관에 동의하시겠습니까?" +msgstr "" +"이 플러그인에는 라이선스가 포함되어 있습니다.\n" +"이 플러그인을 설치하려면 이 라이선스를 수락해야 합니다.\n" +"아래의 약관에 동의하시겠습니까?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "거절" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "추천" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "호환성" @@ -1550,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "패키지 가져오는 중..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "연락처" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1567,9 +1636,9 @@ msgstr "변경 내역" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1617,356 +1686,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "사용자 계약" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "기존 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "네트워크 프린터에 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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아래 목록에서 프린터를 선택하십시오:" +msgstr "" +"네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n" +"\n" +"아래 목록에서 프린터를 선택하십시오:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "추가" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "편집" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "제거" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "새로고침" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "프린터가 목록에 없으면 네트워크 프린팅 문제 해결 가이드를 읽어보십시오" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "유형" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "펌웨어 버전" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "이 프린터는 Ultimaker 3 프린터 그룹을 호스트하도록 설정되지 않았습니다." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "이 프린터는 1% Ultimaker 3 프린터 그룹의 호스트입니다." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "이 주소의 프린터가 아직 응답하지 않았습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "프린터 주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "네트워크에 프린터의 IP 주소 또는 호스트 이름을 입력하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "확인" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "프린터 선택" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "프린트" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1은 연결된 Ultimaker 3에 연결된 프린터 그룹을 호스트하도록 설정되지 않았습니다" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "프린터 추가/제거" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "프린팅 작업 페이지를 기본 웹 브라우저로 엽니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "프린팅 작업보기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "프린팅 준비" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "유효한" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "프린터와의 연결이 끊어졌습니다" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "사용불가" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "알 수 없음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "사용 중지됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "예약된" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "끝마친" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "프린팅 준비" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "조치가 필요함" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "일시 중지됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "다시 시작" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "프린터가 중단됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "프린팅 작업을 수락하지 않음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "종료시간 : " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "빌드 플레이트를 정리하십시오" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "설정 변경 대기중" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "프린팅 작업" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "대기 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "프린터" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "프린터 보기" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "프린팅 중단" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "끝마친" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "준비중인" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "일시 중지됨" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "다시 시작" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "조치가 필요함" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "프린터에 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Cura에 프린터 설정 로드" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "설정 활성화" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "색 구성표" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "재료 색상" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "라인 유형" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "이송 속도" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "레이어 두께" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "호환 모드" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "이동 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "도움말 보이기" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "셸 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "내부채움 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "상단 레이어 만 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "상단에 5 개의 세부 레이어 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "위 / 아래" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "내벽" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "최소" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "최대" @@ -2086,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "스무딩(smoothing)" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "메쉬 유형" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "일반 모델" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "서포터로 프린팅" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "다른 모델과 오버랩되도록 지원하지 않음" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "다른 모델과의 오버랩에 대한 설정 수정" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "다른 모델의 내부채움에 대한 설정 수정" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "설정 선택" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "이 모델에 맞게 사용자 정의 설정을 선택하십시오" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "필터..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "모두 보이기" @@ -2154,13 +2232,13 @@ msgid "Create new" msgstr "새로 만들기" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "요약 - Cura 프로젝트" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "프린터 설정" @@ -2177,7 +2255,7 @@ msgid "Update" msgstr "업데이트" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "유형" @@ -2188,7 +2266,7 @@ msgid "Printer Group" msgstr "프린터 그룹" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "프로파일 설정" @@ -2200,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "이름" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "프로파일에 없음" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2318,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "재료의 충돌은 어떻게 해결되어야합니까?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "표시 설정" @@ -2251,13 +2329,13 @@ msgid "Mode" msgstr "종류" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "표시 설정 :" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "1 out of %2" @@ -2272,6 +2350,82 @@ msgctxt "@action:button" msgid "Open" msgstr "열기" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "내보내기" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00시간 00분" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "비용 사양" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "총계:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2490,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "프린트물을 제거하십시오" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "중지" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "재개" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "프린팅 중단" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "프린팅 중단" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2526,7 +2664,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "일부 프로파일 설정을 수정했습니다.\n이러한 설정을 유지하거나 삭제 하시겠습니까?" +msgstr "" +"일부 프로파일 설정을 수정했습니다.\n" +"이러한 설정을 유지하거나 삭제 하시겠습니까?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2684,17 @@ msgid "Customized" msgstr "사용자 정의" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "항상 묻기" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "최소하고 다시 묻지않기" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "계속하고 다시 묻지않기" @@ -2576,101 +2714,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "새 프로파일 만들기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "직경 변경 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "표시 이름" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "상표" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "재료 유형" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "색깔" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "속성" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "밀도" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "직경" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "필라멘트 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "필라멘트 무게" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "필라멘트 길이" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "미터 당 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "이 재료는 %1에 연결되어 있으며 일부 속성을 공유합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "재료 연결 해제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "설명" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "접착 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "활성화" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "생성" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "가져오기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "재료 가져 오기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "재료 내보내기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "재료를 성공적으로 내보냈습니다" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,7 +2917,7 @@ msgid "Unit" msgstr "단위" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "일반" @@ -2899,8 +3109,8 @@ msgstr "프로젝트 파일을 열 때 기본 동작 " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "항상 물어보기" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2919,77 +3129,75 @@ msgstr "프로파일을 변경하고 다른 프로파일로 전환하면 수정 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "프로파일 덮어쓰기" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "보안" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "시작시 업데이트 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(익명) 프린터 정보 보내기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "추가 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "실험적 설정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "다수의 빌드 플레이트 사용하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "다수의 빌드 플레이트 사용하기(다시 시작해야 합니다)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "새롭게 로드한 모델을 빌드 플레이트에 정렬할까요? 다수의 빌드 플레이트 사용(실험적 설정)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "로드 중인 대상물을 정렬하지 마십시오" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "프린터" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "활성화" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3033,7 +3241,7 @@ msgid "Aborting print..." msgstr "프린팅 중단 중 ..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "프로파일" @@ -3048,18 +3256,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "복제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "가져오기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "내보내기" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3266,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "프로파일 복제하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "제거 확인" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,96 +3286,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "프린터: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "보호 된 프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "사용자 정의 프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "현재 설정 / 재정의 프로파일 업데이트" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "현재 변경 사항 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "현재 설정이 선택한 프로파일과 일치합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "전역 설정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "재료" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "생성" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "복제" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "재료 가져 오기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "재료를 성공적으로 가져왔습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "재료 내보내기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "재료를 성공적으로 내보냈습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "프린터" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "프린터 추가" @@ -3206,6 +3337,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "프린터 추가" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3226,7 +3362,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura는 커뮤니티와 공동으로 Ultimaker B.V.에 의해 개발되었습니다.\nCura는 다음의 오픈 소스 프로젝트를 사용합니다:" +msgstr "" +"Cura는 커뮤니티와 공동으로 Ultimaker B.V.에 의해 개발되었습니다.\n" +"Cura는 다음의 오픈 소스 프로젝트를 사용합니다:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3339,7 +3477,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "일부 설정/대체 값은 프로파일에 저장된 값과 다릅니다.\n\n프로파일 매니저를 열려면 클릭하십시오." +msgstr "" +"일부 설정/대체 값은 프로파일에 저장된 값과 다릅니다.\n" +"\n" +"프로파일 매니저를 열려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3356,33 +3497,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "변경된 사항을 모든 익스트루더에 복사" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "이 설정 숨기기" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "이 설정을 표시하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "이 설정을 계속 표시하십시오" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "설정 보기..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "모두 축소" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "모두 확장" @@ -3393,7 +3534,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "일부 숨겨진 설정은 일반적인 계산 값과 다른 값을 사용합니다.\n\n이 설정을 표시하려면 클릭하십시오." +msgstr "" +"일부 숨겨진 설정은 일반적인 계산 값과 다른 값을 사용합니다.\n" +"\n" +"이 설정을 표시하려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3421,7 +3565,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "이 설정에는 프로파일과 다른 값이 있습니다.\n\n프로파일 값을 복원하려면 클릭하십시오." +msgstr "" +"이 설정에는 프로파일과 다른 값이 있습니다.\n" +"\n" +"프로파일 값을 복원하려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3429,7 +3576,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "이 설정은 일반적으로 계산되지만 현재는 절대 값이 설정되어 있습니다.\n\n계산 된 값을 복원하려면 클릭하십시오." +msgstr "" +"이 설정은 일반적으로 계산되지만 현재는 절대 값이 설정되어 있습니다.\n" +"\n" +"계산 된 값을 복원하려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3617,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "연결된 프린터에 사용자 정의 G 코드 명령을 보냅니다. ‘Enter’키를 눌러 명령을 전송하십시오." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "익스트루더" @@ -3520,7 +3670,7 @@ msgid "The nozzle inserted in this extruder." msgstr "이 익스트루더에 삽입 된 노즐." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "빌드 플레이트" @@ -3545,6 +3695,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "프린팅하기 전에 베드를 미리 가열하십시오. 가열되는 동안 계속해서 프린팅물을 조정할 수 있으며, 프린팅 준비가 되면 베드가 가열 될 때까지 기다릴 필요가 없습니다." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3637,40 +3802,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "프린팅 설정 사용 안 함\nG-코드 파일은 수정할 수 없습니다" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00시간 00분" +msgstr "" +"프린팅 설정 사용 안 함\n" +"G-코드 파일은 수정할 수 없습니다" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "시간 사양" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "비용 사양" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "총계:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3681,22 +3821,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "사용자 정의 프린팅 설정

미세하게 슬라이싱 설정을 조절하여 프린팅하십시오." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "활성화된 프린트" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "작업 이름" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "프린팅 시간" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "예상 남은 시간" @@ -3802,181 +3942,180 @@ msgid "About..." msgstr "소개..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "선택한 모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "선택한 모델 중심에 놓기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "선택한 모델 복제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "플랫폼중심에 모델 위치하기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "모델 그룹화" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "모델 그룹 해제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "모델 합치기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "모델 복제..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "모든 모델 선택" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "빌드 플레이트 지우기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "모든 모델 다시 로드" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "모든 모델을 모든 빌드 플레이트에 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "모든 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "선택한 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "모든 모델의 위치 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "모든 모델의 변환 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "파일 열기..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "새로운 프로젝트..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "엔진 로그 표시..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "설정 폴더 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "패키지 찾아보기..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "사이드바 확장/축소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "3D 모델을 로드하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "슬라이스 준비 완료" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "슬라이싱..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 준비 완료" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "슬라이스 할 수 없음" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "슬라이스 사용 불가" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "현재 프린트작업 슬라이스" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "슬라이싱 프로세스 취소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "준비" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "취소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "활성 출력 장치 선택" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "파일 열기" @@ -3996,129 +4135,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "파일" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "선택 사항을 파일에 저장" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "다른 이름으로 저장..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "프로젝트 저장(&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "편집" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "보기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "프린터" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "재료" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "활성 익스트루더로 설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "익스트루더 사용" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "익스트루더 사용하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "빌드 플레이트(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "확장 프로그램" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "도구 상자" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "환경설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "도움말" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "다시 시작한 후에 이 패키지가 설치됩니다." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "새 프로젝트" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "새 프로젝트를 시작 하시겠습니까? 빌드 플레이트 및 저장하지 않은 설정이 지워집니다." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "패키지 설치" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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-코드 파일을 열려면 하나만 선택하십시오." @@ -4128,112 +4283,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "프로젝트 저장" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "빌드 플레이트" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "%1익스트루더" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 재료" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "프로젝트 요약을 다시 저장하지 마십시오" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "저장" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "레이어 높이" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "이 품질 프로파일은 현재 재료 및 노즐 설정에 사용할 수 없습니다. 이 품질 프로파일을 사용하려면 이 값을 변경하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "사용자 지정 프로파일이 현재 활성 상태입니다. 품질 슬라이더를 실행하려면 사용자 지정 탭에서 기본 품질 프로파일을 선택하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "프린팅 속도" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "천천히" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "빨리" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "일부 프로파일 설정을 수정했습니다. 이러한 설정을 변경하려면 사용자 지정 모드로 이동하십시오." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "내부채움" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "점차적인 내부채움은 점차적으로 빈 공간 채우기의 양을 증가시킵니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "점진적으로 사용" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "서포트 생성" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "서포트에 사용할 익스트루더를 선택하십시오. 이렇게 하면 모형 아래에 지지 구조가 만들어져 모델이 중간 공기에서 처지거나 프린팅되는 것을 방지합니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "빌드 플레이트 고정" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "브림이나 라프트를 사용합니다. 이렇게하면 출력물 주변이나 아래에 평평한 영역이 추가되어 나중에 쉽게 자를 수 있습니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "프린팅물 개선에 도움이 필요하십니까?Ultimaker Troubleshooting Guides 읽기" @@ -4279,22 +4434,22 @@ msgctxt "@label" msgid "Printer type" msgstr "프린터 유형" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "재료" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "이 재료 조합과 함께 접착 시트 또는 접착제를 사용하십시오" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "호환성 확인" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Ultimaker.com의 재료 호환성을 확인하려면 클릭하십시오." @@ -4384,16 +4539,6 @@ msgctxt "name" msgid "God Mode" msgstr "God 모드" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-코드를 받아서 WiFi를 통해 Doodle3D WiFi-Box로 보냅니다." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle 3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4474,16 +4619,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "준비 단계" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "직접 스크립트 편집을 위한 편집창 제공." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "라이브 스크립팅 도구" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4594,16 +4729,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "레거시 Cura 프로파일 리더" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Cura에서 직접 Blender 파일을 열도록 도와줍니다." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 통합(실험 중)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4654,6 +4779,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7에서 3.0으로 버전 업그레이드" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4764,6 +4899,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura 프로파일 작성자" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "프린트 프로파일 어시스턴트" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4794,6 +4939,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 프로파일 리더" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box로 프린팅" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box로 프린팅" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 연결" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 데이터 보내기" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connect에 데이터를 보낼 수 없습니다. 다른 작업이 진행중인가요?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 데이터 저장" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 파일 전송" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect 열기..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect 웹 인터페이스 열기" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 파일" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\" 품질을 사용하여 내보낼 수 없습니다!\n" +#~ " \"{}\"(으)로 돌아갑니다." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "연락처" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "이 프린터는 Ultimaker 3 프린터 그룹을 호스트하도록 설정되지 않았습니다." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ 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" +#~ msgstr "%1은 연결된 Ultimaker 3에 연결된 프린터 그룹을 호스트하도록 설정되지 않았습니다" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "프린터 추가/제거" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "프린팅 작업 페이지를 기본 웹 브라우저로 엽니다." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "프린팅 작업보기" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "프린팅 준비" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "프린팅" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "유효한" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "프린터와의 연결이 끊어졌습니다" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "사용불가" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "알 수 없음" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "사용 중지됨" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "예약된" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "프린팅 준비" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "프린터가 중단됨" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "프린팅 작업을 수락하지 않음" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "종료시간 : " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "빌드 플레이트를 정리하십시오" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "설정 변경 대기중" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "프린팅 작업" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "프린터" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "프린터 보기" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "중지" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "재개" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "프린팅 중단" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "항상 물어보기" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "프로파일 덮어쓰기" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "새롭게 로드한 모델을 빌드 플레이트에 정렬할까요? 다수의 빌드 플레이트 사용(실험적 설정)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "로드 중인 대상물을 정렬하지 마십시오" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "선택 사항을 파일에 저장" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "다른 이름으로 저장..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "프로젝트 저장(&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "이 재료 조합과 함께 접착 시트 또는 접착제를 사용하십시오" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-코드를 받아서 WiFi를 통해 Doodle3D WiFi-Box로 보냅니다." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle 3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "직접 스크립트 편집을 위한 편집창 제공." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "라이브 스크립팅 도구" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Cura에서 직접 Blender 파일을 열도록 도와줍니다." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 통합(실험 중)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "모델 검사기 경고" @@ -5061,10 +5418,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "Browse plugins..." #~ msgstr "플러그인 찾아보기..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "빌드 플레이트(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "플러그인" @@ -5290,14 +5643,6 @@ msgstr "Cura 프로파일 리더" #~ "\n" #~ "죄송합니다!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "프로파일 어시스턴트" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "프로파일 어시스턴트" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "로드 된 재료가 없음" @@ -5428,14 +5773,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "Configure setting visiblity..." #~ msgstr "표시 설정..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "자동: %1" @@ -5472,14 +5809,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "GCode Profile Reader" #~ msgstr "GCode 프로파일 리더" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "프린트 프로파일 어시스턴트" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "SolidWorks 파일을 여는 중 오류가 발생했습니다! 문제없이 SolidWorks에서 파일을 열 수 있는지 확인하십시오" @@ -5675,10 +6004,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "이 프린터는 Ultimaker 3에 연결된 프린터 그룹의 호스트입니다" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "준비중인" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "완료일: " diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po index bee8d815f4..117cae19de 100644 --- a/resources/i18n/ko_KR/fdmextruder.def.json.po +++ b/resources/i18n/ko_KR/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-19 13:27+0900\n" "Last-Translator: Jinbuhm Kim \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 381fc58c15..7598da0b0b 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-19 13:26+0900\n" "Last-Translator: Jinbuhm Kim \n" "Language-Team: Jinbum Kim , Korean \n" @@ -58,7 +58,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "시작과 동시에형실행될 G 코드 명령어 \n." +msgstr "" +"시작과 동시에형실행될 G 코드 명령어 \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,7 +72,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "맨 마지막에 실행될 G 코드 명령 \n." +msgstr "" +"맨 마지막에 실행될 G 코드 명령 \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -82,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "재료의 GUID. 자동으로 설정됩니다. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "직경" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "사용 된 필라멘트의 직경을 조정합니다. 이 값을 사용될 필라멘트의 직경과 일치시킵니다." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1057,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "지그재그" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1137,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "이미 벽이있는 곳에 프린팅되는 내부 벽 부분에 대한 흐름을 보정하십시오." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1502,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "동심원" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1532,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "내벽의 형태를 따라가는 선을 사용하여 내부채움 패턴과 내벽이 만나는 끝을 연결합니다. 이 설정을 사용하면 내부채움이 벽에 더 잘 붙게되어 내부채움이 수직면의 품질에 미치는 영향을 줄일 수 있습니다. 이 설정을 해제하면 사용되는 재료의 양이 줄어듭니다." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1562,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "내부채움 패턴이 Y축을 따라 이 거리만큼 이동합니다." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1872,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "첫 번째 레이어에서 가열 된 빌드 플레이트에 사용되는 온도." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "직경" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "사용 된 필라멘트의 직경을 조정합니다. 이 값을 사용될 필라멘트의 직경과 일치시킵니다." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2719,8 +2780,8 @@ msgstr "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 by combing within the infill only." -msgstr "빗질은 여행 할 때 이미 인쇄 된 영역 내에 노즐을 유지합니다. 이로 인해 여행 이동이 약간 더 길어 지지만 수축의 필요성은 줄어 듭니다. 빗질이 꺼져 있으면 재료가 후퇴하고 노즐이 직선으로 다음 점으로 이동합니다. 또한 infill 내에서만 빗질하여 상 / 하 피부 영역을 빗질하는 것을 피할 수 있습니다." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2737,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "스킨에 없음" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3117,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3182,6 +3243,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "프린팅 된 서포트 구조 선 사이의 거리. 이 설정은 서포트 밀도로 계산됩니다." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3472,11 +3553,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3512,11 +3588,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원의 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3552,16 +3623,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "지그재그" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3712,7 +3798,9 @@ msgctxt "skirt_gap description" 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 "프린트의 스커트와 첫 번째 레이어 사이의 수평 거리입니다.\n이것은 최소 거리입니다. 여러 개의 스커트 선이 이 거리에서 바깥쪽으로 연장됩니다." +msgstr "" +"프린트의 스커트와 첫 번째 레이어 사이의 수평 거리입니다.\n" +"이것은 최소 거리입니다. 여러 개의 스커트 선이 이 거리에서 바깥쪽으로 연장됩니다." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3886,8 +3974,8 @@ msgstr "기본 래프트 층에있는 선의 너비. 이것은 빌드 플레이 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "래프트 선 간격" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4104,16 +4192,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "충분한 재료를 퍼지하기 위해 프라임 타워 각 층의 최소 부피." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "프라임 타워 두께" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "속이 빈 프라임 타워의 두께. 프라임 타워의 최소 볼륨의 절반보다 큰 두께는 조밀 한 소수 타워가 됩니다." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4154,26 +4232,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "하나의 노즐로 프라임 타워를 프린팅 한 후, 다른 타워의 이물질을 프라임 타워에서 닦아냅니다." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "전환 후 노즐 닦기" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "익스트루더를 전환한 후, 프린팅을 한 노즐에서 흐르는 재료를 닦아냅니다. 이렇게 하면 흘러 나온 물질이 출력물의 표면 품질에 영향을 주지 않는 위치에서 천천히 닦아줍니다." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "프라임 타워 퍼지 볼륨" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "프라임 타워에서 닦을 때 제거 할 필라멘트의 양. 퍼지는 노즐이 작동하지 않을 때 새어 나온 필라멘트를 보정하는 데 유용합니다." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4659,6 +4717,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "재료 공급 데이터 (mm3 / 초) - 온도 (섭씨)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5316,6 +5384,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "더 작은 레이어를 사용할지 여부에 대한 임계 값. 이 숫자는 레이어의 가장 급한 경사의 탄젠트와 비교됩니다." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5434,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "스킨 영역이 해당 영역의 비율 미만으로 생성되면 브릿지 설정을 사용하여 인쇄하십시오. 그렇지 않으면 일반 스킨 설정을 사용하여 인쇄됩니다." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "브리지 벽 최대 오버행" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "브릿지 설정을 사용하여 벽을 인쇄하기 전에 벽 선 아래의 에어영역의 최대 허용 폭. 벽 선 너비의 백분율로 표시됩니다. 에어 갭이 이보다 넓은 경우 브리지 설정을 사용하여 벽 선이 인쇄됩니다. 그렇지 않으면 벽 선이 일반 설정을 사용하여 인쇄됩니다. 값이 낮을수록 브릿지 설정을 사용하여 오버행 된 벽 선이 인쇄 될 가능성이 높아집니다." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5576,6 +5654,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "파일로부터 로드 하는 경유, 모델에 적용될 변환 행렬입니다." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "빗질은 여행 할 때 이미 인쇄 된 영역 내에 노즐을 유지합니다. 이로 인해 여행 이동이 약간 더 길어 지지만 수축의 필요성은 줄어 듭니다. 빗질이 꺼져 있으면 재료가 후퇴하고 노즐이 직선으로 다음 점으로 이동합니다. 또한 infill 내에서만 빗질하여 상 / 하 피부 영역을 빗질하는 것을 피할 수 있습니다." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원의 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "래프트 선 간격" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "프라임 타워 두께" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "속이 빈 프라임 타워의 두께. 프라임 타워의 최소 볼륨의 절반보다 큰 두께는 조밀 한 소수 타워가 됩니다." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "전환 후 노즐 닦기" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "익스트루더를 전환한 후, 프린팅을 한 노즐에서 흐르는 재료를 닦아냅니다. 이렇게 하면 흘러 나온 물질이 출력물의 표면 품질에 영향을 주지 않는 위치에서 천천히 닦아줍니다." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "프라임 타워 퍼지 볼륨" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "프라임 타워에서 닦을 때 제거 할 필라멘트의 양. 퍼지는 노즐이 작동하지 않을 때 새어 나온 필라멘트를 보정하는 데 유용합니다." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "브리지 벽 최대 오버행" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "브릿지 설정을 사용하여 벽을 인쇄하기 전에 벽 선 아래의 에어영역의 최대 허용 폭. 벽 선 너비의 백분율로 표시됩니다. 에어 갭이 이보다 넓은 경우 브리지 설정을 사용하여 벽 선이 인쇄됩니다. 그렇지 않으면 벽 선이 일반 설정을 사용하여 인쇄됩니다. 값이 낮을수록 브릿지 설정을 사용하여 오버행 된 벽 선이 인쇄 될 가능성이 높아집니다." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "리트렉션 및 이동 거리를 줄이도록 벽이 프린팅되는 순서를 최적화하십시오. 대부분 이 기능을 사용하면 도움이되지만, 실제로는 시간이 오래 걸릴 수 있으므로, 최적화 여부에 관계없이 프린팅 시간을 비교하십시오." diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 8d21c5a805..cb576b5f26 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" @@ -38,6 +38,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code-bestand" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -51,80 +62,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Een of meer 3D-modellen worden mogelijk niet optimaal geprint vanwege het modelformaat en de materiaalconfiguratie:

\n

{model_names}

\n

Ontdek hoe u de best mogelijke printkwaliteit en betrouwbaarheid verkrijgt.

\n

Handleiding printkwaliteit bekijken

" +msgstr "" +"

Een of meer 3D-modellen worden mogelijk niet optimaal geprint vanwege het modelformaat en de materiaalconfiguratie:

\n" +"

{model_names}

\n" +"

Ontdek hoe u de best mogelijke printkwaliteit en betrouwbaarheid verkrijgt.

\n" +"

Handleiding printkwaliteit bekijken

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Printen via Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Printen via Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Verbinding maken met Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuleren" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "De gegevens worden naar Doodle3D Connect verzonden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Kan geen gegevens naar Doodle3D Connect verzenden. Is er nog een andere taak actief?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Gegevens op Doodle3D Connect opslaan" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Het bestand is naar Doodle3D Connect verzonden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect openen..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "De Doodle3D Connect-webinterface openen" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Wijzigingenlogboek Weergeven" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Actieve instellingen vlakken" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profiel is gevlakt en geactiveerd." @@ -149,6 +103,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Aangesloten via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -171,6 +130,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Gecomprimeerd G-code-bestand" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -193,7 +157,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Er zijn geen bestandsindelingen beschikbaar om te schrijven!" @@ -232,7 +196,7 @@ msgstr "Kan niet opslaan op verwisselbaar station {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Fout" @@ -261,8 +225,8 @@ msgstr "Verwisselbaar station {0} uitwerpen" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Waarschuwing" @@ -289,212 +253,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Verwisselbaar Station" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Via het netwerk verbonden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Verificatiestatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Verificatiestatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Opnieuw proberen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "De toegangsaanvraag opnieuw verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Toegang tot de printer is geaccepteerd" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Toegang aanvragen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Toegangsaanvraag naar de printer verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Er kan geen nieuwe taak worden gestart." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "De configuratie komt niet overeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "De gegevens worden naar de printer verzonden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Gegevens Verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuleren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchroniseren met de printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Via het netwerk verbonden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Gegevens verzonden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "In monitor weergeven" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Print klaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Verbinding Maken via Netwerk" @@ -504,24 +483,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controleren" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Er zijn nieuwe functies beschikbaar voor uw {machine_name}! Het wordt aanbevolen de firmware van uw printer bij te werken." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nieuwe firmware voor %s beschikbaar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Instructies voor bijwerken" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Geen toegang tot update-informatie." @@ -531,17 +510,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Laagweergave" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulatieweergave" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "G-code wijzigen" @@ -555,32 +534,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Maak een volume waarin supportstructuren niet worden geprint." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura verzamelt geanonimiseerde gebruiksstatistieken." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Gegevens verzamelen" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Meer informatie" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Lees meer over welke gegevens Cura verzendt." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Toestaan" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Cura toestaan geanonimiseerde gebruiksstatistieken te verzenden om toekomstige verbeteringen aan Cura te helpen prioriteren. Onder de verzonden gegevens bevindt zich informatie over uw voorkeuren en instellingen, de Cura-versie en een selectie van de modellen die u slicet." @@ -590,18 +569,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04-profielen" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender-bestand" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Kan niet exporteren met de kwaliteit \"{}\"!\nInstelling teruggezet naar \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +594,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-afbeelding" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Met het huidige materiaal is slicen niet mogelijk, omdat het materiaal niet compatibel is met de geselecteerde machine of configuratie." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Kan niet slicen" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Met de huidige instellingen is slicing niet mogelijk. De volgende instellingen bevatten fouten: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Slicing is niet mogelijk vanwege enkele instellingen per model. De volgende instellingen bevatten fouten voor een of meer modellen: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Slicen is niet mogelijk omdat de terugduwpijler of terugduwpositie(s) ongeldig zijn." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Er valt niets te slicen omdat geen van de modellen in het bouwvolume past. Schaal of roteer de modellen totdat deze passen." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Lagen verwerken" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informatie" @@ -696,18 +670,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Aangepast" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-bestand" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +703,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-bestand" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code parseren" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Details van de G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -740,16 +725,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-profiel" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Profielassistent" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Profielassistent" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-bestand" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-project 3MF-bestand" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -831,19 +831,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Onbekend" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Vooraf geslicet bestand {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Het Bestand Bestaat Al" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +855,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Niet overschreven" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Het geselecteerde materiaal is niet compatibel met de geselecteerde machine of configuratie." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Niet-compatibel materiaal" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "De instellingen zijn bijgewerkt" @@ -954,13 +954,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Kan geen kwaliteitstype {0} vinden voor de huidige configuratie." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +987,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Bestanden (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Aangepast materiaal" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Aangepast" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Werkvolume" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Kan geen archief maken van gegevensmap van gebruiker: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Back-up" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Geprobeerd een Cura-back-up te herstellen zonder correcte gegevens of metadata." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Geprobeerd een Cura-back-up te herstellen die niet overeenkomt met uw huidige versie." @@ -1033,32 +1033,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Object plaatsen" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Nieuwe locatie vinden voor objecten" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Locatie vinden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Kan locatie niet vinden" @@ -1076,7 +1076,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Oeps, Ultimaker Cura heeft een probleem gedetecteerd.

\n

Tijdens het opstarten is een onherstelbare fout opgetreden. Deze fout is mogelijk veroorzaakt door enkele onjuiste configuratiebestanden. Het wordt aanbevolen een back-up te maken en de standaardinstelling van uw configuratie te herstellen.

\n

Back-ups bevinden zich in de configuratiemap.

\n

Stuur ons dit crashrapport om het probleem op te lossen.

\n " +msgstr "" +"

Oeps, Ultimaker Cura heeft een probleem gedetecteerd.

\n" +"

Tijdens het opstarten is een onherstelbare fout opgetreden. Deze fout is mogelijk veroorzaakt door enkele onjuiste configuratiebestanden. Het wordt aanbevolen een back-up te maken en de standaardinstelling van uw configuratie te herstellen.

\n" +"

Back-ups bevinden zich in de configuratiemap.

\n" +"

Stuur ons dit crashrapport om het probleem op te lossen.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1109,7 +1114,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

Er is een fatale fout opgetreden in Cura. Stuur ons het crashrapport om het probleem op te lossen

\n

Druk op de knop \"Rapport verzenden\" om het foutenrapport automatisch naar onze servers te verzenden

\n " +msgstr "" +"

Er is een fatale fout opgetreden in Cura. Stuur ons het crashrapport om het probleem op te lossen

\n" +"

Druk op de knop \"Rapport verzenden\" om het foutenrapport automatisch naar onze servers te verzenden

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1189,223 +1197,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Rapport verzenden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Machines laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Scene instellen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Interface laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Het geselecteerde model is te klein om te laden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Machine-instellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Printer" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Printerinstellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Breedte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Diepte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hoogte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Vorm van het platform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Centraal oorsprongpunt" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Verwarmd bed" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Versie G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Instellingen Printkop" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de linkerkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de voorkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de rechterkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de achterkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Hoogte rijbrug" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Het hoogteverschil tussen de punt van de nozzle en het rijbrugsysteem (X- en Y-as). Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en het rijbrugsysteem te voorkomen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Aantal extruders" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Start G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-code-opdrachten die aan het begin worden uitgevoerd." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Eind G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-code-opdrachten die aan het eind worden uitgevoerd." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Nozzle-instellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Maat nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Compatibele materiaaldiameter" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "De nominale diameter van het filament dat wordt ondersteund door de printer. De exacte diameter wordt overschreven door het materiaal en/of het profiel." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozzle-offset X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozzle-offset Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Start-G-code van Extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Eind-G-code van Extruder" @@ -1425,29 +1433,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Kan geen verbinding maken met de Cura Package-database. Controleer uw verbinding." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Invoegtoepassingen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materialen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Versie" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Laatst bijgewerkt" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Onbekend" @@ -1480,16 +1501,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Terug" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "U moet Cura opnieuw starten voordat wijzigingen in packages van kracht worden." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura sluiten" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1521,7 +1582,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Deze invoegtoepassing bevat een licentie.\nU moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\nGaat u akkoord met de onderstaande voorwaarden?" +msgstr "" +"Deze invoegtoepassing bevat een licentie.\n" +"U moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\n" +"Gaat u akkoord met de onderstaande voorwaarden?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1533,12 +1597,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Nee, ik ga niet akkoord" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Functies" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibiliteit" @@ -1548,10 +1612,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Packages ophalen..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1565,9 +1634,9 @@ msgstr "Wijzigingenlogboek" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1615,356 +1684,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Gebruikersovereenkomst" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Bestaande verbinding" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Verbinding Maken met Printer in het Netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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\nSelecteer uw printer in de onderstaande lijst:" +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:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Toevoegen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Bewerken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Verwijderen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Vernieuwen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Firmwareversie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Deze printer is niet opgezet om een groep Ultimaker 3 printers te hosten." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Deze printer is de host voor een groep van %1 Ultimaker 3 printers." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Printeradres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Printerselectie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Printen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Printers toevoegen/verwijderen" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Hiermee opent u de pagina met printtaken in uw standaard webbrowser." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Printtaken weergeven" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Printen voorbereiden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Printen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Beschikbaar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Verbinding met de printer is verbroken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Niet beschikbaar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Onbekend" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Uitgeschakeld" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Gereserveerd" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Gereed" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Voorbereiden om te printen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Handeling nodig" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Gepauzeerd" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Hervatten" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Print afgebroken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Accepteert geen printtaken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Klaar om: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Platform leegmaken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Wacht op wijziging van configuratie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Printtaken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Printen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "In wachtrij" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Printen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Printers weergeven" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Printen afbreken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Gereed" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Voorbereiden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Gepauzeerd" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Hervatten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Handeling nodig" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Verbinding maken met een printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "De configuratie van de printer in Cura laden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Configuratie Activeren" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Kleurenschema" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materiaalkleur" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Lijntype" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Doorvoersnelheid" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Laagdikte" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Compatibiliteitsmodus" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Bewegingen weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Helpers weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Shell weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Vulling weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Alleen bovenlagen weergegeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 gedetailleerde lagen bovenaan weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Boven-/onderkant" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Binnenwand" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -2084,53 +2162,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Effenen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Rastertype" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normaal model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Printen als supportstructuur" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Supportstructuur niet laten overlappen met andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Instellingen aanpassen voor overlapping met andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Instellingen aanpassen voor vulling van andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Instellingen selecteren" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Instellingen Selecteren om Dit Model Aan te Passen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filteren..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Alles weergeven" @@ -2152,13 +2230,13 @@ msgid "Create new" msgstr "Nieuw maken" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Samenvatting - Cura-project" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Printerinstellingen" @@ -2175,7 +2253,7 @@ msgid "Update" msgstr "Bijwerken" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Type" @@ -2186,7 +2264,7 @@ msgid "Printer Group" msgstr "Printergroep" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profielinstellingen" @@ -2198,19 +2276,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Naam" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2318,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Hoe dient het materiaalconflict te worden opgelost?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Zichtbaarheid instellen" @@ -2251,13 +2329,13 @@ msgid "Mode" msgstr "Modus" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Zichtbare instellingen:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 van %2" @@ -2272,6 +2350,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Openen" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exporteren" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00u 00min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Kostenspecificatie" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Totaal:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1 m / ~ %2 g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1 m / ~ %2 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2490,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Verwijder de print" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pauzeren" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Hervatten" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Printen Afbreken" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Printen afbreken" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2526,7 +2664,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "U hebt enkele profielinstellingen aangepast.\nWilt u deze instellingen behouden of verwijderen?" +msgstr "" +"U hebt enkele profielinstellingen aangepast.\n" +"Wilt u deze instellingen behouden of verwijderen?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2684,17 @@ msgid "Customized" msgstr "Aangepast" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Altijd vragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Verwijderen en nooit meer vragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Behouden en nooit meer vragen" @@ -2576,101 +2714,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Nieuw profiel maken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informatie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Diameterwijziging bevestigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Naam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Merk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Type Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Kleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Eigenschappen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Dichtheid" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diameter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Kostprijs Filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Gewicht filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Lengte filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Kostprijs per meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Materiaal ontkoppelen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Beschrijving" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Gegevens Hechting" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Maken" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Materiaal Importeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Materiaal Exporteren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiaal is geëxporteerd naar %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,7 +2917,7 @@ msgid "Unit" msgstr "Eenheid" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Algemeen" @@ -2899,8 +3109,8 @@ msgstr "Standaardgedrag tijdens het openen van een projectbestand: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Altijd vragen" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2919,77 +3129,75 @@ msgstr "Wanneer u wijzigingen hebt aangebracht aan een profiel en naar een ander #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Profiel overschrijven" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bij starten op updates controleren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonieme) printgegevens verzenden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Meer informatie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Experimenteel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Functionaliteit voor meerdere platformen gebruiken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Moeten nieuw geladen modellen op het platform worden geschikt? Gebruikt in combinatie met meerdere platformen (EXPERIMENTEEL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Objecten niet schikken na laden" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Printers" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activeren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3033,7 +3241,7 @@ msgid "Aborting print..." msgstr "Printen afbreken..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profielen" @@ -3048,18 +3256,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importeren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exporteren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3266,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profiel Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Verwijderen Bevestigen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,96 +3286,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Printer: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Beschermde profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Aangepaste profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Huidige wijzigingen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Algemene Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materialen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Maken" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Dupliceren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Materiaal Importeren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Materiaal Exporteren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiaal is geëxporteerd naar %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Printer" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Printer Toevoegen" @@ -3206,6 +3337,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Printer Toevoegen" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3226,7 +3362,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\nCura maakt met trots gebruik van de volgende opensourceprojecten:" +msgstr "" +"Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\n" +"Cura maakt met trots gebruik van de volgende opensourceprojecten:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3339,7 +3477,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Sommige waarden of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n\nKlik om het profielbeheer te openen." +msgstr "" +"Sommige waarden of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n" +"\n" +"Klik om het profielbeheer te openen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3356,33 +3497,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Deze instelling verbergen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Deze instelling verbergen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Deze instelling zichtbaar houden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Zichtbaarheid Instelling Configureren..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Alles samenvouwen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Alles uitvouwen" @@ -3393,7 +3534,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n\nKlik om deze instellingen zichtbaar te maken." +msgstr "" +"Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n" +"\n" +"Klik om deze instellingen zichtbaar te maken." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3421,7 +3565,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Deze instelling heeft een andere waarde dan in het profiel.\n\nKlik om de waarde van het profiel te herstellen." +msgstr "" +"Deze instelling heeft een andere waarde dan in het profiel.\n" +"\n" +"Klik om de waarde van het profiel te herstellen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3429,7 +3576,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n\nKlik om de berekende waarde te herstellen." +msgstr "" +"Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n" +"\n" +"Klik om de berekende waarde te herstellen." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3617,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extruder" @@ -3520,7 +3670,7 @@ msgid "The nozzle inserted in this extruder." msgstr "De nozzle die in deze extruder geplaatst is." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Platform" @@ -3545,6 +3695,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Verwarm het bed voordat u gaat printen. U kunt doorgaan met het aanpassen van uw print terwijl het bed wordt verwarmd. Zo hoeft u niet te wachten totdat het bed opgewarmd is wanneer u gereed bent om te printen." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3639,40 +3804,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Instelling voor printen uitgeschakeld\nG-code-bestanden kunnen niet worden aangepast" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00u 00min" +msgstr "" +"Instelling voor printen uitgeschakeld\n" +"G-code-bestanden kunnen niet worden aangepast" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Tijdspecificatie" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Kostenspecificatie" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Totaal:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3683,22 +3823,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Aangepaste instellingen voor printen

Print met uiterst precieze controle over elk detail van het slice-proces." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Actieve print" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Taaknaam" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Printtijd" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Geschatte resterende tijd" @@ -3804,184 +3944,183 @@ msgid "About..." msgstr "Over..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Model Verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Model op Platform Ce&ntreren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modellen &Groeperen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Groeperen van Modellen Opheffen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modellen Samen&voegen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Model verveelvoudigen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Alle Modellen Selecteren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Platform Leegmaken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Alle Modellen Opnieuw Laden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle modellen schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Selectie schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modelposities Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Alle Modeltransformaties Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Bestand(en) &openen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nieuw project..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Engine-&logboek Weergeven..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Open Configuratiemap" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Door packages bladeren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Zijbalk uitbreiden/samenvouwen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Laad een 3D-model" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Gereed om te slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Slicen..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Gereed voor %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Kan Niet Slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Slicen is niet beschikbaar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Huidige printtaak slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Slicen annuleren" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Voorbereiden" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annuleren" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Actief Uitvoerapparaat Selecteren" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Bestand(en) openen" @@ -4001,129 +4140,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Bestand" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Selectie Opslaan naar Bestand" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Opslaan &als..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "&Project opslaan..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "B&ewerken" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "Beel&d" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "In&stellingen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Printer" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Instellen als Actieve Extruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder inschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder uitschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Platform" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiel" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensies" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "Werkse&t" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Voo&rkeuren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Help" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Bestand Openen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Nieuw project" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Weet u zeker dat u een nieuw project wilt starten? Hiermee wordt het platform leeggemaakt en worden eventuele niet-opgeslagen instellingen verwijderd." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Package installeren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Bestand(en) openen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4133,112 +4288,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Project opslaan" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Platform" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 &materiaal" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Opslaan" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Laaghoogte" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Dit kwaliteitsprofiel is niet beschikbaar voor uw huidige materiaal- en nozzleconfiguratie. Breng hierin wijzigingen aan om gebruik van dit kwaliteitsprofiel mogelijk te maken" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Er is momenteel een aangepast profiel actief. Als u de kwaliteitsschuifregelaar wilt gebruiken, kiest u een standaard kwaliteitsprofiel op het tabblad Aangepast" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Printsnelheid" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Langzamer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Sneller" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "U hebt enkele profielinstellingen aangepast. Ga naar de aangepaste modus als u deze wilt wijzigen." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Vulling" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Met geleidelijke vulling neemt de hoeveelheid vulling naar boven toe." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Geleidelijke vulling" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Support genereren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecteren welke extruder voor support wordt gebruikt. Deze optie zorgt ervoor dat onder het model ondersteuning wordt geprint, om te voorkomen dat dit doorzakt of dat er midden in de lucht moet worden geprint." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Hechting aan platform" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Het printen van een brim of raft inschakelen. Deze optie zorgt ervoor dat er extra materiaal rondom of onder het object wordt neergelegd, dat er naderhand eenvoudig kan worden afgesneden." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Hebt u hulp nodig om betere prints te krijgen?
Lees de Ultimaker Troubleshooting Guides (Handleiding voor probleemoplossing)" @@ -4285,23 +4440,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Type printer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiaal" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Gebruik een hechtingsvel of lijm met deze materiaalcombinatie" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Compatibiliteit controleren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Klik om de materiaalcompatibiliteit te controleren op Ultimaker.com." @@ -4391,16 +4545,6 @@ msgctxt "name" msgid "God Mode" msgstr "Godmodus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accepteert G-code en verzendt deze code via wifi naar een Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4481,16 +4625,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Stadium voorbereiden" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Deze optie biedt een bewerkingsvenster voor rechtstreeks bewerken van scripts." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Gereedschap voor live uitvoeren van scripts" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4601,16 +4735,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lezer voor Profielen van oudere Cura-versies" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Hiermee kunnen Blender-bestanden rechtstreeks in Cura worden geopend." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender-integratie (experimenteel)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4661,6 +4785,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Versie-upgrade van 2.7 naar 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4771,6 +4905,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura-profielschrijver" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Profielassistent afdrukken" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4801,6 +4945,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiellezer" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Printen via Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Printen via Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Verbinding maken met Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "De gegevens worden naar Doodle3D Connect verzonden" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Kan geen gegevens naar Doodle3D Connect verzenden. Is er nog een andere taak actief?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Gegevens op Doodle3D Connect opslaan" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Het bestand is naar Doodle3D Connect verzonden" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect openen..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "De Doodle3D Connect-webinterface openen" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender-bestand" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Kan niet exporteren met de kwaliteit \"{}\"!\n" +#~ "Instelling teruggezet naar \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contact" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Deze printer is niet opgezet om een groep Ultimaker 3 printers te hosten." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Deze printer is de host voor een groep van %1 Ultimaker 3 printers." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Printers toevoegen/verwijderen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Hiermee opent u de pagina met printtaken in uw standaard webbrowser." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Printtaken weergeven" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Printen voorbereiden" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Printen" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Beschikbaar" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Verbinding met de printer is verbroken" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Niet beschikbaar" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Onbekend" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Uitgeschakeld" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Gereserveerd" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Voorbereiden om te printen" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Print afgebroken" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Accepteert geen printtaken" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Klaar om: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Platform leegmaken" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Wacht op wijziging van configuratie" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Printtaken" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Printers" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Printers weergeven" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pauzeren" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Hervatten" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Printen Afbreken" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Altijd vragen" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profiel overschrijven" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Moeten nieuw geladen modellen op het platform worden geschikt? Gebruikt in combinatie met meerdere platformen (EXPERIMENTEEL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Objecten niet schikken na laden" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Selectie Opslaan naar Bestand" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Opslaan &als..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "&Project opslaan..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Gebruik een hechtingsvel of lijm met deze materiaalcombinatie" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accepteert G-code en verzendt deze code via wifi naar een Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Deze optie biedt een bewerkingsvenster voor rechtstreeks bewerken van scripts." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Gereedschap voor live uitvoeren van scripts" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Hiermee kunnen Blender-bestanden rechtstreeks in Cura worden geopend." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender-integratie (experimenteel)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Waarschuwing modelcontrole" @@ -5068,10 +5425,6 @@ msgstr "Cura-profiellezer" #~ msgid "Browse plugins..." #~ msgstr "Door invoegtoepassingen bladeren..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Platform" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugins" @@ -5297,14 +5650,6 @@ msgstr "Cura-profiellezer" #~ "\n" #~ "Sorry." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profielassistent" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profielassistent" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Geen materiaal ingevoerd" @@ -5435,14 +5780,6 @@ msgstr "Cura-profiellezer" #~ msgid "Configure setting visiblity..." #~ msgstr "Zichtbaarheid van instelling configureren..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m / ~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatisch: %1" @@ -5479,14 +5816,6 @@ msgstr "Cura-profiellezer" #~ msgid "GCode Profile Reader" #~ msgstr "G-code-profiellezer" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Profielassistent afdrukken" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Er zijn fouten opgetreden tijdens het openen van het SolidWorks-bestand. Controleer of u het bestand zonder problemen in SolidWorks kunt openen." @@ -5683,10 +6012,6 @@ msgstr "Cura-profiellezer" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Deze printer is de host voor een groep van %1 aaneengesloten Ultimaker 3-printers" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Voorbereiden" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Voltooid op: " diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po index 80241171ac..d6590e69a0 100644 --- a/resources/i18n/nl_NL/fdmextruder.def.json.po +++ b/resources/i18n/nl_NL/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 038b2a4e56..91156b8307 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" @@ -56,7 +56,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "G-code-opdrachten die aan het begin worden uitgevoerd, gescheiden door \n." +msgstr "" +"G-code-opdrachten die aan het begin worden uitgevoerd, gescheiden door \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +70,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "G-code-opdrachten die aan het eind worden uitgevoerd, gescheiden door \n." +msgstr "" +"G-code-opdrachten die aan het eind worden uitgevoerd, gescheiden door \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +84,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID van het materiaal. Deze optie wordt automatisch ingesteld. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diameter" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Bepaalt de diameter van het gebruikte filament. Pas deze waarde aan de diameter van het gebruikte filament aan." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1069,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1159,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Hiermee wordt de doorvoer gecompenseerd voor delen van binnenwanden die worden geprint op een plek waar zich al een wanddeel bevindt." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1500,11 +1544,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1530,6 +1569,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Verbindt de uiteinden waar het vulpatroon bij de binnenwand komt, met een lijn die de vorm van de binnenwand volgt. Als u deze instelling inschakelt, kan de vulling beter hechten aan de wanden en wordt de invloed van de vulling op de kwaliteit van de verticale oppervlakken kleiner. Als u deze instelling uitschakelt, wordt er minder materiaal gebruikt." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1609,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1941,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "De temperatuur van het verwarmde platform voor de eerste laag." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diameter" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Bepaalt de diameter van het gebruikte filament. Pas deze waarde aan de diameter van het gebruikte filament aan." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2778,8 @@ msgstr "Combing-modus" #: 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 by combing within the infill only." -msgstr "Met combing blijft de nozzle tijdens bewegingen binnen eerder geprinte delen. Hierdoor zijn de bewegingen iets langer, maar hoeft het filament minder vaak te worden ingetrokken. Als combing is uitgeschakeld, wordt het materiaal ingetrokken en beweegt de nozzle in een rechte lijn naar het volgende punt. Het is ook mogelijk om combing over boven-/onderskingedeelten te voorkomen door alleen combing te gebruiken over de vulling." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2796,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Niet in skin" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3181,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3241,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "De afstand tussen de geprinte lijnen van de supportstructuur. Deze instelling wordt berekend op basis van de dichtheid van de supportstructuur." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3551,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3586,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3621,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3796,9 @@ msgctxt "skirt_gap description" 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 "De horizontale afstand tussen de skirt en de eerste laag van de print.\nDit is de minimumafstand. Als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." +msgstr "" +"De horizontale afstand tussen de skirt en de eerste laag van de print.\n" +"Dit is de minimumafstand. Als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3884,8 +3972,8 @@ msgstr "Breedte van de lijnen van de onderste laag van de raft. Deze lijnen moet #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Tussenruimte Lijnen Raft" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4190,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Het minimale volume voor elke laag van de primepijler om voldoende materiaal te zuiveren." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Dikte primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "De dikte van de holle primepijler. Een dikte groter dan de helft van het minimale volume van de primepijler leidt tot een primepijler met een hoge dichtheid." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4230,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Veeg na het printen van de primepijler met één nozzle het doorgevoerde materiaal van de andere nozzle af aan de primepijler." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Nozzle vegen na wisselen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Veeg na het wisselen van de extruder het doorgevoerde materiaal van de nozzle af aan het eerste dat wordt geprint. Hiermee wordt met een langzame beweging het doorgevoerde materiaal veilig afgeveegd op een plek waar dit het minste kwaad kan voor de oppervlaktekwaliteit van de print." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Zuiveringsvolume primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "De hoeveelheid filament die wordt gezuiverd tijdens afvegen aan de primepijler. Zuiveren wordt gebruikt om filament te compenseren dat tijdens inactiviteit van de nozzle wordt verloren via uitloop." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4715,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Grafiek om de materiaaldoorvoer (in mm3 per seconde) te koppelen aan de temperatuur (graden Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5235,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\nHierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." +msgstr "" +"De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\n" +"Hierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5384,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "De drempel of er al dan niet een kleinere laag moet worden gebruikt. Deze waarde wordt vergeleken met de waarde van de steilste helling in een laag." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5434,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Als voor een skinregio minder supportstructuur wordt geprint dan dit percentage van zijn oppervlakte, print u dit met de bruginstellingen. Anders wordt er geprint met de normale skininstellingen." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Maximale overhang brugwand" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "De maximaal toegestane breedte van de vrije ruimte onder een wandlijn voordat de wand wordt geprint met de bruginstellingen. Dit wordt uitgedrukt in een percentage van de lijnbreedte van de wand. Als de vrije ruimte breder is dan deze waarde, wordt de wandlijn geprint met de bruginstellingen. Anders wordt de wandlijn geprint met de normale instellingen. Hoe lager de waarde, hoe meer kans dat de overhangende wandlijnen met bruginstellingen worden geprint." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5654,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Omzettingsmatrix die moet worden toegepast op het model wanneer dit wordt geladen vanuit een bestand." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Met combing blijft de nozzle tijdens bewegingen binnen eerder geprinte delen. Hierdoor zijn de bewegingen iets langer, maar hoeft het filament minder vaak te worden ingetrokken. Als combing is uitgeschakeld, wordt het materiaal ingetrokken en beweegt de nozzle in een rechte lijn naar het volgende punt. Het is ook mogelijk om combing over boven-/onderskingedeelten te voorkomen door alleen combing te gebruiken over de vulling." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Tussenruimte Lijnen Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Dikte primepijler" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "De dikte van de holle primepijler. Een dikte groter dan de helft van het minimale volume van de primepijler leidt tot een primepijler met een hoge dichtheid." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Nozzle vegen na wisselen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Veeg na het wisselen van de extruder het doorgevoerde materiaal van de nozzle af aan het eerste dat wordt geprint. Hiermee wordt met een langzame beweging het doorgevoerde materiaal veilig afgeveegd op een plek waar dit het minste kwaad kan voor de oppervlaktekwaliteit van de print." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Zuiveringsvolume primepijler" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "De hoeveelheid filament die wordt gezuiverd tijdens afvegen aan de primepijler. Zuiveren wordt gebruikt om filament te compenseren dat tijdens inactiviteit van de nozzle wordt verloren via uitloop." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Maximale overhang brugwand" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "De maximaal toegestane breedte van de vrije ruimte onder een wandlijn voordat de wand wordt geprint met de bruginstellingen. Dit wordt uitgedrukt in een percentage van de lijnbreedte van de wand. Als de vrije ruimte breder is dan deze waarde, wordt de wandlijn geprint met de bruginstellingen. Anders wordt de wandlijn geprint met de normale instellingen. Hoe lager de waarde, hoe meer kans dat de overhangende wandlijnen met bruginstellingen worden geprint." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimaliseer de volgorde waarin wanden worden geprint om het aantal intrekbewegingen en de afgelegde afstand te verkleinen. Deze instelling is gunstig voor de meeste onderdelen. Bij sommige onderdelen duurt het printen echter langer. Controleer daarom de verwachte printtijd met en zonder optimalisatie." diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 722826cc8b..1a1efdc2f2 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-14 14:35+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Pliki G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -55,78 +66,17 @@ msgid "" "

View print quality guide

" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Drukuj z Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Drukuj z Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Łączenie z Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Anuluj" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Wysyłanie danych do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Nie można wysłać danych do Doodle3D Connect. Czy inne zadanie jest aktywne?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Przetrzymywanie danych na Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Plik wysłany do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Otwórz Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Otwórz interfejs Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Pokaż Dziennik" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Spłaszczyć aktywne ustawienia" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil został spłaszczony i aktywowany." @@ -151,6 +101,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Połączono przez USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -173,6 +128,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Skompresowany Plik G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -195,7 +155,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Nie ma żadnych formatów plików do zapisania!" @@ -234,7 +194,7 @@ msgstr "Nie można zapisać na wymiennym dysku {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Błąd" @@ -263,8 +223,8 @@ msgstr "Wyjmij urządzenie wymienne {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Ostrzeżenie" @@ -291,212 +251,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Dysk wymienny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Połączono przez sieć." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Status uwierzytelniania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Status Uwierzytelniania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Spróbuj ponownie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Prześlij ponownie żądanie dostępu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Dostęp do drukarki został zaakceptowany" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Poproś o dostęp" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Wyślij żądanie dostępu do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Nie można uruchomić nowego zadania drukowania." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Niedopasowana konfiguracja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Wysyłanie danych do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Wysyłanie danych" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Anuluj" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchronizuj się z drukarką" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Połączone przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Dane Wysłane" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Zobacz w Monitorze" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Drukowanie zakończone" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Połącz przez sieć" @@ -506,24 +481,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Nowe funkcje są dostępne dla twojej {machine_name}! Rekomendowane jest zaktualizowanie oprogramowania drukarki." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nowe oprogramowanie %s jest dostępne" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Jak zaktualizować" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Nie można uzyskać dostępu do informacji o aktualizacji" @@ -533,17 +508,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Widok warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Widok symulacji" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modyfikuj G-Code" @@ -557,32 +532,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Stwórz obszar, w którym podpory nie będą drukowane." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura zbiera anonimowe dane statystyczne." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Zbieranie Danych" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Zezwól" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Zezwól Cura na wysyłanie anonimowych danych statystycznych, aby pomóc w wyborze przyszłych usprawnień Cura. Część twoich ustawień i preferencji jest wysyłana, a także wersja Cury i kod modelu który tniesz." @@ -592,20 +567,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Profile Cura 15.04 " -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Plik Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Nie można wyeksportować używając \"{}\" jakości!\n" -"Powrócono do \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -631,49 +592,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Obraz GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Nie można pociąć z obecnym materiałem, ponieważ nie jest on kompatybilny z wybraną maszyną lub konfiguracją." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Nie można pociąć" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Nie można pociąć z bieżącymi ustawieniami. Następujące ustawienia mają błędy: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Nie można pokroić przez ustawienia osobne dla modelu. Następujące ustawienia mają błędy w jednym lub więcej modeli: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Nie można pociąć, ponieważ wieża czyszcząca lub jej pozycja(e) są niewłaściwe." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nic do pocięcia, ponieważ żaden z modeli nie pasuje do obszaru roboczego. Proszę o przeskalowanie lub obrócenie modelu, żeby pasował." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Przetwarzanie warstw" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informacja" @@ -700,18 +668,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Niestandardowe" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Plik 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Dysza" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -722,18 +701,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Plik G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizowanie G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Szczegóły G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -744,16 +723,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profile Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Asystent Profilu" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Asystent Profilu" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Plik 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Plik Cura Project 3MF" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -835,19 +829,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Nieznany" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Plik pocięty wcześniej {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Plik już istnieje" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -859,23 +853,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Nie zastąpione" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Wybrany materiał jest niezgodny z wybranym urządzeniem lub konfiguracją." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Niekompatybilny Materiał" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Ustawienia zostały zaaktualizowane" @@ -958,13 +952,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profilowi brakuje typu jakości." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Nie można znaleźć typu jakości {0} dla bieżącej konfiguracji." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -991,42 +985,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Wszystkie Pliki (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Niestandardowy materiał" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Niestandardowy" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Obszar Roboczy" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "" @@ -1037,32 +1031,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Rozmieszczenie Obiektów" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Znajdowanie nowej lokalizacji obiektów" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Szukanie Lokalizacji" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Nie można Znaleźć Lokalizacji" @@ -1201,223 +1195,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Wyślij raport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ładowanie drukarek..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Ustawianie sceny ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ładowanie interfejsu ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Wybrany model był zbyta mały do załadowania." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ustawienia Drukarki" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Drukarka" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ustawienia drukarki" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Szerokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Głębokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Wysokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Kształt stołu roboczego" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Początek na środku" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Podgrzewany stół" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Wersja G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ustawienia głowic drukujących" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od lewej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od przedniej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od prawej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od tylnej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Wysokość ramy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Różnica w wysokości pomiędzy końcówką dyszy i systemem suwnym (osie X i Y). Używane do unikania kolizji z poprzednimi wydrukami podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Liczba ekstruderów" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Początkowy G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Komedy G-code, które są wykonywane na samym początku." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Końcowy G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Komendy G-code, które są wykonywane na samym końcu." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ustawienia dyszy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Rozmiar dyszy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Kompatybilna średnica materiału" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Nominalna średnica filamentu wspierana przez drukarkę. Dokładna średnica będzie nadpisana przez materiał i/lub profil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Korekcja dyszy X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Korekcja dyszy Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Początkowy G-code Ekstrudera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Końcowy G-code Ekstrudera" @@ -1437,29 +1431,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Wtyczki" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiał" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Nieznany" @@ -1492,16 +1499,56 @@ msgctxt "@action:button" msgid "Back" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1548,12 +1595,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Odrzuć" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "" @@ -1563,9 +1610,14 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 @@ -1580,9 +1632,9 @@ msgstr "Dziennik" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1630,22 +1682,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Zgoda Użytkownika" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Istniejące Połączenie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Połącz się z drukarką sieciową" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1656,333 +1708,339 @@ msgstr "" "\n" "Wybierz drukarkę z poniższej listy:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Dodaj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Edycja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Usunąć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Odśwież" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Rodzaj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Wersja oprogramowania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Ta drukarka nie jest skonfigurowana do zarządzania grupą drukarek Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Ta drukarka jest gospodarzem grupy %1 drukarek Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Połącz" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Adres drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Wpisz adres IP lub nazwę hosta drukarki w sieci." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Wybór drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Drukuj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 nie została ustawiona do hostowania grupy podłączonych drukarek Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Dodaj/Usuń drukarki" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Otwiera stronę zadań drukowania w twojej domyślnej przeglądarce sieciowej." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Zobacz zadania drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Przygotowywanie do drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Drukowanie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Dostępna" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Utracono połączenie z drukarką" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Niedostępne" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Nieznane" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Wyłączona" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Zajęta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Zakończono" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Przygotowywanie do druku" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Konieczne są działania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Wstrzymana" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Wznawianie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Drukowanie zostaje przerwane" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Nie akceptuje zadań drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Wykończenia na: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Oczyść platformę roboczą" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Oczekuje na zmianę konfiguracji" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Zadania drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Drukowanie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "W kolejce" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Drukarki" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Drukowanie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Zobacz drukarki" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Przerwij wydruk" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Zakończono" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Przygotowywanie" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Wstrzymana" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Wznawianie" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Konieczne są działania" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Podłącz do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Załaduj konfigurację drukarki do Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Uaktywnij konfigurację" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Schemat kolorów" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Kolor materiału" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Rodzaj linii" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Szybkość Posuwu" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Grubość warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Tryb zgodności" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Pokaż ruch jałowy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Pokaż pomocnik" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Pokaż powłokę" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Pokaż wypełnienie" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Pokaż tylko najwyższe warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Pokaż 5 Szczegółowych Warstw" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Góra/ Dół" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Wewnętrzna ściana" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max" @@ -2102,53 +2160,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Wygładzanie" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Typ siatki" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normalny model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Drukuj jako podpora" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Nie wspieraj nałożeń z innymi modelami" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modyfikuj ustawienia nakładania z innymi modelami" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modyfikuj ustawienia wypełnienia innych modeli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Wybierz ustawienia" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Wybierz Ustawienia, aby dostosować ten model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtr..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Pokaż wszystko" @@ -2170,13 +2228,13 @@ msgid "Create new" msgstr "Utwórz nowy" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Podsumowanie - Projekt Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ustawienia drukarki" @@ -2193,7 +2251,7 @@ msgid "Update" msgstr "Aktualizacja" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Typ" @@ -2204,7 +2262,7 @@ msgid "Printer Group" msgstr "Grupa drukarek" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ustawienia profilu" @@ -2216,19 +2274,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nazwa" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2258,7 +2316,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Jak powinien zostać rozwiązany problem z materiałem?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Ustawienie widoczności" @@ -2269,13 +2327,13 @@ msgid "Mode" msgstr "Tryb" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Widoczne ustawienie:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 poza %2" @@ -2290,6 +2348,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Otwórz" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Eksportuj" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00godz. 00min." + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Szacowanie kosztów" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Razem:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2508,26 +2642,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Usuń wydruk" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Wstrzymaj" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Wznów" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Przerwij wydruk" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Przerwij wydruk" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2564,19 +2682,17 @@ msgid "Customized" msgstr "Dostosowane" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Zawsze pytaj o to" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Odrzuć i nigdy nie pytaj" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Zachowaj i nigdy nie pytaj" @@ -2596,101 +2712,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Utwórz nowy profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informacja" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Potwierdź Zmianę Średnicy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Wyświetlana nazwa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Typ Materiału" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Kolor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Właściwości" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Gęstość" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Średnica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Koszt Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Waga filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Długość Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Koszt na metr" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Odłącz materiał" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Opis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informacje dotyczące przyczepności" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktywuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Stwórz" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importuj Materiał" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Eksportuj Materiał" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Udało się wyeksportować materiał do %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2727,7 +2915,7 @@ msgid "Unit" msgstr "Jednostka" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Ogólny" @@ -2919,8 +3107,8 @@ msgstr "Domyślne zachowanie podczas otwierania pliku projektu: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Zawsze pytaj" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2939,77 +3127,75 @@ msgstr "Kiedy dokonasz zmian w profilu i przełączysz się na inny, zostanie wy #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Nadpisz profil" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Prywatność" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Wyślij (anonimowe) informacje o drukowaniu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Eksperymentalne" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Czy nowo załadowane modele powinny zostać rozłożone na platformie roboczej? Używane w połączeniu z multi platformą roboczą (EKSPERYMENTALNE)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Nie układaj obiektów podczas ładowania" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Drukarki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktywuj" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3053,7 +3239,7 @@ msgid "Aborting print..." msgstr "Przerywanie drukowania..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profile" @@ -3068,18 +3254,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplikuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importuj" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Eksportuj" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3090,18 +3264,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplikuj profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Potwierdź Usunięcie" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3122,96 +3284,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drukarka: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Chronione profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Profile niestandardowe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Odrzuć bieżące zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ustawienia ogólne" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Stwórz" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplikuj" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importuj Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Eksportuj Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Udało się wyeksportować materiał do %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Drukarka" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Dodaj drukarkę" @@ -3226,6 +3335,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Dodaj drukarkę" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3381,33 +3495,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ukryj tę opcję" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Nie pokazuj tej opcji" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pozostaw tę opcję widoczną" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Skonfiguruj widoczność ustawień ..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "" @@ -3501,7 +3615,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Ekstruder" @@ -3554,7 +3668,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Dysza włożona do tego ekstrudera." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Stół roboczy" @@ -3579,6 +3693,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Przed drukowaniem podgrzej stół. W dalszym ciągu można dostosowywać druk podczas nagrzewania, a nie będziesz musiał czekać na rozgrzanie stołu, gdy będziesz gotowy do drukowania." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3677,38 +3806,11 @@ msgstr "" "Konfiguracja wydruku jest wyłączona\n" "Pliki G-code nie mogą zostać zmodyfikowane" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00godz. 00min." - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Specyfikacja czasu" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Szacowanie kosztów" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Razem:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3719,22 +3821,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Niestandardowa konfiguracja wydruku

Drukowanie z precyzyjną kontrolą nad każdym elementem procesu cięcia." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktywny wydruk" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nazwa pracy" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Czas druku" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Szacowany czas pozostały" @@ -3840,184 +3942,183 @@ msgid "About..." msgstr "O..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Usuń model" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Wyśrodkuj model na platformie" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grupuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Rozgrupuj modele " -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Połącz modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Powiel model..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Wybierz wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Wyczyść stół" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Przeładuj wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Ułóż wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Wybór ułożenia" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Zresetuj wszystkie pozycje modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Zresetuj wszystkie przekształcenia modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Otwórz plik(i)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nowy projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Pokaż &dziennik silnika..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Pokaż folder konfiguracji" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Rozłóż/Schowaj Pasek Boczny" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Proszę załaduj model 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Gotowy do cięcia" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Cięcie..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Gotowy do %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Nie można pociąć" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Cięcie niedostępne" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Potnij aktualny wydruk" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Przerwij proces cięcia" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Przygotuj" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Anuluj" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Wybierz aktywne urządzenie wyjściowe" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Otwórz plik(i)" @@ -4037,129 +4138,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Cura Ultimaker" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Plik" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Z&apisz wybór w pliku" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Zapisz &jako..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Zapisz &Project..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Edytuj" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Widok" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Drukarka" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Ustaw jako aktywną głowicę" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Włącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Wyłącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Pole robocze" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "&Rozszerzenia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Preferencje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "P&omoc" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Otwórz plik" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Nowy projekt" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Czy na pewno chcesz rozpocząć nowy projekt? Spowoduje to wyczyszczenie stołu i niezapisanych ustawień." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Otwórz plik(i)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4169,112 +4286,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Zapisz projekt" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Pole robocze" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiał" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Zapisz" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Wysokość warstwy" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Ten profil jakości nie jest dostępny dla wybranego materiału i konfiguracji dyszy. Proszę to zmienić, aby włączyć ten profil jakości" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Niestandardowy profil jest obecnie aktywny. Aby włączyć pasek jakości, wybierz domyślny profil w zakładce Niestandardowe" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Prędkość Druku" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Wolniej" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Szybciej" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Zmodyfikowałeś ustawienia profilu. Jeżeli chcesz je zmienić, przejdź do trybu niestandardowego." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Wypełnienie" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Stopniowe wypełnienie stopniowo zwiększa ilość wypełnień w górę." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Włącz stopniowane" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Generuj podpory" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Wybierz, który ekstruder ma służyć do drukowania podpór. Powoduje to tworzenie podpór poniżej modelu, aby zapobiec spadaniu lub drukowaniu modelu w powietrzu." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Popraw przycz. modelu" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 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." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Potrzebujesz pomocy w ulepszaniu wydruków?
Przeczytaj instrukcje dotyczące rozwiązywania problemów" @@ -4321,22 +4438,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Typ drukarki" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiał" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" +msgid "Use glue with this material combination" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Sprawdź kompatybilność" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Kliknij, aby sprawdzić zgodność materiału na Ultimaker.com." @@ -4426,16 +4543,6 @@ msgctxt "name" msgid "God Mode" msgstr "Tryb Boga" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Akceptuje G-Code i wysyła go przez WiFi do Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4516,16 +4623,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Etap Przygotowania" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Zapewnia okno edycji dla bezpośredniego edytowania skryptów." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Narzędzie pisania skryptów na żywo." - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4636,16 +4733,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Czytnik Profili Starszej Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Pomaga w otwieraniu plików Blender bezpośrednio w Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integracja z Blenderem (eksperymentalny)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4696,6 +4783,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Ulepszenie Wersji 2.7 do 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4806,6 +4903,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura Profile Writer" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Pozwala twórcą materiałów na tworzenie nowych profili materiałów i jakości używając rozwijanego menu." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Asystent Profilów Druku" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4836,6 +4943,210 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Czytnik Profili Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Drukuj z Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Drukuj z Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Łączenie z Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Wysyłanie danych do Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Nie można wysłać danych do Doodle3D Connect. Czy inne zadanie jest aktywne?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Przetrzymywanie danych na Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Plik wysłany do Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Otwórz Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Otwórz interfejs Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Plik Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Nie można wyeksportować używając \"{}\" jakości!\n" +#~ "Powrócono do \"{}\"." + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Ta drukarka nie jest skonfigurowana do zarządzania grupą drukarek Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Ta drukarka jest gospodarzem grupy %1 drukarek Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 nie została ustawiona do hostowania grupy podłączonych drukarek Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Dodaj/Usuń drukarki" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Otwiera stronę zadań drukowania w twojej domyślnej przeglądarce sieciowej." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Zobacz zadania drukowania" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Przygotowywanie do drukowania" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Drukowanie" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Dostępna" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Utracono połączenie z drukarką" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Niedostępne" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Nieznane" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Wyłączona" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Zajęta" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Przygotowywanie do druku" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Drukowanie zostaje przerwane" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Nie akceptuje zadań drukowania" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Wykończenia na: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Oczyść platformę roboczą" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Oczekuje na zmianę konfiguracji" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Zadania drukowania" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Drukarki" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Zobacz drukarki" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Wstrzymaj" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Wznów" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Przerwij wydruk" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Zawsze pytaj" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Nadpisz profil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Czy nowo załadowane modele powinny zostać rozłożone na platformie roboczej? Używane w połączeniu z multi platformą roboczą (EKSPERYMENTALNE)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Nie układaj obiektów podczas ładowania" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Z&apisz wybór w pliku" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Zapisz &jako..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Zapisz &Project..." + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Akceptuje G-Code i wysyła go przez WiFi do Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Zapewnia okno edycji dla bezpośredniego edytowania skryptów." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Narzędzie pisania skryptów na żywo." + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Pomaga w otwieraniu plików Blender bezpośrednio w Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integracja z Blenderem (eksperymentalny)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Ostrzeżenie Sprawdzacza Modelu" @@ -5102,10 +5413,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "Browse plugins..." #~ msgstr "Przeglądaj wtyczki..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Pole robocze" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "W&tyczki" @@ -5331,14 +5638,6 @@ msgstr "Czytnik Profili Cura" #~ "\n" #~ "Przepraszamy!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Asystent Profilu" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Asystent Profilu" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Nie załadowano materiału" @@ -5469,14 +5768,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Skonfiguruj widoczność ustawień..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatyczny: %1" @@ -5513,14 +5804,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Czytnik Profili GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Pozwala twórcą materiałów na tworzenie nowych profili materiałów i jakości używając rozwijanego menu." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Asystent Profilów Druku" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Wystąpił błąd podczas otwierania pliku SolidWorks! Proszę sprawdź, czy możesz otworzyć plik SolidWorks bez żadnych problemów!" @@ -5717,10 +6000,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Ta drukarka nie została ustawiona do hostowania grupy %1 podłączonych drukarek Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Przygotowywanie" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Zakończono:" diff --git a/resources/i18n/pl_PL/fdmextruder.def.json.po b/resources/i18n/pl_PL/fdmextruder.def.json.po index eda4694124..bd94e365f0 100644 --- a/resources/i18n/pl_PL/fdmextruder.def.json.po +++ b/resources/i18n/pl_PL/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-03-30 20:33+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\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 88634c37ab..04e8c28dfc 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-17 16:45+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" @@ -85,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID materiału. To jest ustawiana automatycznie " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Średnica" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Dostosowuje średnicę stosowanego filamentu. Dopasuj tę wartość do średnicy stosowanego filamentu." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1060,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zygzak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1140,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Kompensuje przepływ dla części, których wewnętrzna ściana jest drukowana kiedy jest już w tym miejscu ściana." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1505,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1535,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Łączy końce gdzie wzór wypełnienia spotyka się z wewn. ścianą używając linii, która podąża za kształtem wewn. ściany. Włączenie tego ustawienia może spowodować lepszą przyczepność wypełnienia do ścian i zredukować efekty wypełnienia w jakości powierzchni. Wyłączenie tego ustawienia redukuje ilość potrzebnego materiału." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1610,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1875,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Temperatura stosowana przy podgrzewanym stole na pierwszej warstwie." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Średnica" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Dostosowuje średnicę stosowanego filamentu. Dopasuj tę wartość do średnicy stosowanego filamentu." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2722,8 +2779,8 @@ msgstr "Tryb Kombinowania" #: 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 by combing within the infill only." -msgstr "Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach skóry przez kombinowanie tylko wewnątrz wypełnienia." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2740,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3120,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3185,6 +3242,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Odległość między drukowanymi liniami struktury podpory. To ustawienie jest obliczane przez gęstość podpory." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3475,11 +3552,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3515,11 +3587,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3555,16 +3622,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zygzak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3891,8 +3973,8 @@ msgstr "Szerokość linii na podstawowej warstwie tratwy. Powinny być to grube #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Rozstaw Linii Tratwy" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4109,16 +4191,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Minimalna objętość każdej warstwy wieży czyszczącej w celu oczyszczenia wystarczającej ilości materiału." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Grubość Wieży Czyszcz." - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Grubość pustej wieży czyszczącej. Grubość większa niż połowa minimalnej objętości wieży czyszczącej spowoduje, że wieża będzie miała dużą gęstość." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4231,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Po wydrukowaniu podstawowej wieży jedną dyszą, wytrzyj wytłoczony materiał z drugiej dyszy o wieżę czyszczącą." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Wytrzyj Dyszę po Przełączeniu" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Po przełączeniu ekstrudera, wytrzyj materiał wyciekający z dyszy na pierwszą drukowaną część. powoduje to bezpieczny, powolny ruch wycierania w miejscu gdzie wyciekający materiał nie spowoduje dużej szkody dla powierzchni modelu." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Pole Czyszczące Wieży Czyszcz." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Ilość filamentu, która jest czyszczona podczas wycierania na wieży czyszczącej. Czyszczenie jest użyteczne do kompensowania utraty filamentu przez wypływanie z nieużywanej dyszy." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4716,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Dane łączące przepływ materiału (w mm3 na sekundę) z temperaturą (stopnie Celsjusza)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5323,6 +5385,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Opóźnienie w wyborze, czy użyć mniejszej warstwy, czy nie. Ta liczba jest porównywana do najbardziej stromego nachylenia na warstwie." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5435,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Jeśli obszar skóry jest podpierany w mniejszym procencie jego powierzchni, drukuj to według ustawień mostu. W przeciwnym wypadku użyj normalnych ustawień skóry." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Maks. Nachylenie Ściany Mostu" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Maksymalna dozwolona szerokość obszaru powietrza pod linią ściany zanim zostanie wydrukowana ściana używająca ustawień mostu. Wyrażona w procentach szerokości linii ściany. Kiedy przestrzeń powietrza jest szersza od tego, linia ściany jest drukowana używając ustawień mostu. W przeciwnym wypadku linia ściany jest drukowana z normalnymi ustawieniami. Tym niższa wartość, tym większa szansa, że linie ściany na nawisach będą drukowane z ustawieniami mostu." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5583,6 +5655,66 @@ 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 "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach skóry przez kombinowanie tylko wewnątrz wypełnienia." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Rozstaw Linii Tratwy" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Grubość Wieży Czyszcz." + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Grubość pustej wieży czyszczącej. Grubość większa niż połowa minimalnej objętości wieży czyszczącej spowoduje, że wieża będzie miała dużą gęstość." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Wytrzyj Dyszę po Przełączeniu" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Po przełączeniu ekstrudera, wytrzyj materiał wyciekający z dyszy na pierwszą drukowaną część. powoduje to bezpieczny, powolny ruch wycierania w miejscu gdzie wyciekający materiał nie spowoduje dużej szkody dla powierzchni modelu." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Pole Czyszczące Wieży Czyszcz." + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Ilość filamentu, która jest czyszczona podczas wycierania na wieży czyszczącej. Czyszczenie jest użyteczne do kompensowania utraty filamentu przez wypływanie z nieużywanej dyszy." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Maks. Nachylenie Ściany Mostu" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Maksymalna dozwolona szerokość obszaru powietrza pod linią ściany zanim zostanie wydrukowana ściana używająca ustawień mostu. Wyrażona w procentach szerokości linii ściany. Kiedy przestrzeń powietrza jest szersza od tego, linia ściany jest drukowana używając ustawień mostu. W przeciwnym wypadku linia ściany jest drukowana z normalnymi ustawieniami. Tym niższa wartość, tym większa szansa, że linie ściany na nawisach będą drukowane z ustawieniami mostu." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optymalizuj kolejność, według której drukowane są ściany, aby zredukować ilość retrakcji i długości ruchu jałowego. Większość części powinno na tym zyskać, ale niektóre mogą drukować się dłużej, dlatego prosimy o porównaniu czasu drukowania z i bez włączonej opcji." diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 34e842eb55..e81588b086 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-23 02:20-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" @@ -39,6 +39,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Arquivo G-Code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -58,78 +69,17 @@ msgstr "" "

Descubra como assegurar a melhor qualidade de impressão e confiabilidade possível.

\n" "

Ver guia de qualidade de impressão

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a WiFi-Box do Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a WiFi-Box do Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Conectando ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Enviando dados ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Incapaz de enviar dados ao Doodle3D Connect. Há outro trabalho ainda ativo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Armazenando dados no Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Arquivo enviado ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir a interface web do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Exibir registro de alterações" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Achatar os ajustes ativos" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi achatado & ativado." @@ -154,6 +104,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -176,6 +131,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Arquivo de G-Code Comprimido" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -198,7 +158,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Há formatos de arquivo disponíveis com os quais escrever!" @@ -237,7 +197,7 @@ 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/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -266,8 +226,8 @@ 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/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -294,212 +254,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidade Removível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimir pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprime pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Conectado pela rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Status da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Status da Autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Tentar novamente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Reenvia o pedido de acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acesso à impressora confirmado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Sem acesso para imprimir por esta impressora. Incapaz de enviar o trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Envia pedido de acesso à impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Incapaz de iniciar novo trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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 que torna impossível iniciar a impressão. Por favor resolva este problema antes de continuar." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Configuração divergente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Enviando dados à impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Enviando Dados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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: {cure_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar com a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Conectado pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Dados Enviados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver no Monitor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Impressão Concluída" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar pela rede" @@ -509,24 +484,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Novos recursos estão disponível para sua {machine_name}! Recomenda-se atualizar o firmware da impressora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Novo firmware de %s disponível" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Como atualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Não foi possível acessar informação de atualização." @@ -536,17 +511,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visão de Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Visão Simulada" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modificar G-Code" @@ -560,32 +535,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Cria um volume em que suportes não são impressos." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "O Cura coleta estatísticas anônimas de uso." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Coletando Dados" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Mais informações" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Ver mais informações em que dados o Cura envia." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permite que o Cura envie estatísticas anônimas de uso para ajudar a priorizar futuras melhorias ao software. Algumas de suas preferências e ajustes são enviados junto à versão atual do Cura e um hash dos modelos que estão sendo fatiados." @@ -595,20 +570,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfis do Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Arquivo do Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Não foi possível exportar usando qualidade \"{}\"!\n" -"Foi usada a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -634,49 +595,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Incapaz de fatiar com o material atual visto que é incompatível com a máquina ou configuração selecionada." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Incapaz de fatiar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Incapaz de fatiar com os ajustes atuais. Os seguintes ajustes têm erros: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Incapaz de fatiar devido a alguns ajustes por modelo. Os seguintes ajustes têm erros em um ou mais dos modelos: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Incapaz de fatiar porque a torre de purga ou posição de purga são inválidas." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nada a fatiar porque nenhum dos modelos cabe no volume de impressão. Por favor redimensione ou rotacione os modelos para caberem." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Processando Camadas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informação" @@ -703,18 +671,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Arquivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Bico" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -725,18 +704,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Arquivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Interpretando G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -747,16 +726,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil do Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Assistente de Perfil" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Assistente de Perfil" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Arquivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Arquivo de Projeto 3MF do Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -838,19 +832,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Desconhecido" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Arquivo pré-fatiado {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Arquivo Já Existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -862,23 +856,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Não sobrepujado" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "O material selecionado é incompatível com a máquina ou configuração selecionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material Incompatível" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes atualizados" @@ -961,13 +955,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Não foi possível encontrar tipo de qualidade {0} para a configuração atual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -994,42 +988,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos Os Arquivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Material Personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de Impressão" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Não pude criar arquivo do diretório de dados de usuário: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentativa de restauração de backup do Cura sem dados ou metadados apropriados." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentativa de restauração de backup do Cura que não corresponde à versão atual." @@ -1040,32 +1034,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando Objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Incapaz de achar um lugar dentro do volume de construção para todos os objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Achando novos lugares para objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Buscando Localização" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Não Foi Encontrada Localização" @@ -1204,223 +1198,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Carregando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando cena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Carregando interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado é pequenos demais para carregar." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ajustes da Máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ajustes da Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (largura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da plataforma de impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Mesa aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Sabor de G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ajustes da Cabeça de Impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da esquerda da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da frente da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da direita da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da traseira da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura do eixo" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "A diferença de altura entre a ponta do bico e o sistema de eixos X e Y. Usado para prevenir colisões entre impressões e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Code Inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandos de G-Code a serem executados no início da impressão." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-Code Final" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandos de G-Code a serem executados no final da impressão." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ajustes do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamanho do bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diâmetro de material compatível" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "O diâmetro nominal do filamento suportado pela impressora. O diâmetro exato será sobrepujado pelo material e/ou perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Deslocamento X do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Deslocamento Y do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-Code Inicial do Extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-Code Final do Extrusor" @@ -1440,29 +1434,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Não foi possível conectar-se à base de dados de Pacotes do Cura. Por favor verifique sua conexão." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiais" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Versão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Última atualização" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Desconhecido" @@ -1495,16 +1502,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Voltar" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Você precisará reiniciar o Cura para que as alterações tenham efeito." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1551,12 +1598,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Recusar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Em destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" @@ -1566,10 +1613,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Obtendo pacotes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contato" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1583,9 +1635,9 @@ msgstr "Registro de alterações" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1633,22 +1685,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Termos de Acordo do Usuário" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Conexão Existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar a Impressora de Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1659,333 +1711,339 @@ msgstr "" "\n" "Selecione sua impressora da lista abaixo:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Versão do firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Introduza o endereço IP ou hostname da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Ok" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Imprimir pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Seleção de impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker 3 conectadas" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Adicionar/Remover impressoras" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre a página de trabalhos de impressão com seu navegador default." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Visualizar trabalhos de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparando para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Imprimindo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Disponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Conexão à impressora perdida" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Desabilitado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Finalizado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparando para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Necessária uma ação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Pausado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Continuando" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "A impressão foi interrompida" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Não aceitando trabalhos de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina em: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Esvaziar a mesa de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Esperando alteração de configuração" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabalhos de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Imprimindo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Enfileirados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Imprimindo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Visualizar impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Abortar impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Finalizado" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Preparando" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Pausado" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Continuando" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Necessária uma ação" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Conecta a uma impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Carrega a configuração da impressora no Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Ativar Configuração" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Esquema de Cores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Cor do Material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de Linha" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Taxa de alimentação" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Largura de camada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo de Compatibilidade" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Exibir Percursos" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Exibir Assistentes" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Exibir Perímetro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Exibir Preenchimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Somente Exibir Camadas Superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Exibir 5 Camadas Superiores Detalhadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Topo / Base" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parede Interna" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx" @@ -2105,53 +2163,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavização" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de Malha" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimir como suporte" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Não suportar sobreposição com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modificar ajustes para sobrepor com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modificar ajustes para preenchimento de outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Selecionar ajustes" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Selecionar Ajustes a Personalizar para este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Exibir tudo" @@ -2173,13 +2231,13 @@ msgid "Create new" msgstr "Criar novo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumo - Projeto do Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ajustes da impressora" @@ -2196,7 +2254,7 @@ msgid "Update" msgstr "Atualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" @@ -2207,7 +2265,7 @@ msgid "Printer Group" msgstr "Grupo de Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes de perfil" @@ -2219,19 +2277,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2261,7 +2319,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Como o conflito no material deve ser resolvido?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidade dos ajustes" @@ -2272,13 +2330,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Ajustes visíveis:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de %2" @@ -2293,6 +2351,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Abrir" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00h 00min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Especificação de custo" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Total:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2511,26 +2645,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Por favor remova a impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausar" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Continuar" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Abortar Impressão" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Abortar impressão" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2567,19 +2685,17 @@ msgid "Customized" msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Sempre perguntar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Manter e não perguntar novamente" @@ -2599,101 +2715,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Criar Novo Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informação" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar Mudança de Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Exibir Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informação sobre Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Ativar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Criar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material exportado para %1 com sucesso" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2730,7 +2918,7 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Geral" @@ -2922,8 +3110,8 @@ msgstr "Comportamento default ao abrir um arquivo de projeto" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Sempre perguntar" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2942,77 +3130,75 @@ msgstr "Quando você faz alterações em um perfil e troca para um diferent, um #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Sobrepujar Perfil" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 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:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Mais informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Novos modelos carregados devem ser posicionados na plataforma de impressão? Usado em conjunção com plataforma múltipla de impressão (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Não posicionar objetos ao carregar." - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Ativar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3056,7 +3242,7 @@ msgid "Aborting print..." msgstr "Abortando impressão..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" @@ -3071,18 +3257,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3093,18 +3267,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar Remoção" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3125,96 +3287,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfis Protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Atualizar perfil com ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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 e sobrepujanças na lista abaixo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiais" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Criar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material exportado para %1 com sucesso" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impressora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" @@ -3229,6 +3338,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Adicionar Impressora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3384,33 +3498,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Não exibir este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter este ajuste visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar a visibilidade dos ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Encolher Todos" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Expandir Todos" @@ -3504,7 +3618,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3557,7 +3671,7 @@ msgid "The nozzle inserted in this extruder." msgstr "O bico inserido neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Mesa de Impressão" @@ -3582,6 +3696,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Aquecer a mesa antes de imprimir. Você pode continuar ajustando sua impressão enquanto ela está aquecendo, e não terá que esperar o aquecimento quando estiver pronto pra imprimir." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3680,38 +3809,11 @@ msgstr "" "Configuração de Impressão desabilitada\n" "Arquivos G-Code não podem ser modificados" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00h 00min" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificação de tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Especificação de custo" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Total:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3722,22 +3824,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuração de Impressão Personalizada

Imprimir com controle fino sobre cada parte do processo de fatiamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome do Trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" @@ -3843,184 +3945,183 @@ msgid "About..." msgstr "Sobre..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Remover Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntralizar Modelo na Mesa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Selecionar Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Esvaziar a Mesa de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recarregar Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Posicionar Todos os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Posicionar Seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Abrir Arquiv&o(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Exibir o Registro do Motor de Fatiamento (&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Exibir Pasta de Configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Navegar pacotes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Expandir/Encolher Barra Lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Por favor carregue um modelo 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Pronto para fatiar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Fatiando..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Incapaz de Fatiar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Fatiamento indisponível" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Fatiar trabalho de impressão atual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar processo de fatiamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Selecione o dispositivo de saída ativo" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir arquivo(s)" @@ -4040,129 +4141,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "Arquivo (&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Salvar &Seleção em Arquivo" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "S&alvar Como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Salvar &Projeto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Editar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "Aju&stes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&pressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir Como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desabilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "Plataforma de Impressão (&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensões" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "Ferramen&tas" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referências" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "Ajuda (&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Abrir arquivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Novo projeto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Tem certeza que quer iniciar novo projeto? Isto esvaziará a mesa de impressão e quaisquer ajustes não salvos." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir Arquivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4172,112 +4289,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Salvar Projeto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Plataforma de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Salvar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altura de Camada" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Este perfil de qualidade não está disponível para seu material e sua configuração de bicos atuais. Por favor altere-os para abilitar este perfil de qualidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Um perfil personalizado está atualmente ativo. Para habilitar o controle deslizante de qualidade, escolha um perfil de qualidade default na aba Personalizado" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidade de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Mais Lento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Mais Rápido" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, use o modo personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Preenchimento:" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Preenchimento gradual aumentará gradualmente a quantidade de preenchimento em direção ao topo." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Habilitar gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Gerar Suportes" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecione qual extrusor a usar para o suporte. Isto construirá estruturas de suportes abaixo do modelo para prevenir que o modelo desabe ou seja impresso no ar." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Aderência à Mesa de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 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." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Precisa de ajuda para melhorar sua impressões?
Leia os Guias de Resolução de Problema da Ultimaker" @@ -4324,22 +4441,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impressora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use camada de aderência ou cola com esta combinação de material" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Verificar compatibilidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Clique para verificar a compatibilidade do material em Ultimaker.com." @@ -4429,16 +4546,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modo Deus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Aceita G-Code e o envia através da WiFi para uma WiFi-Box Doodle3D." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "WiFi-Box Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4519,16 +4626,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Estágio de Preparação" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Provê uma janela de edição para edição direta de script." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Ferramenta de scripting integrada" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4639,16 +4736,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Leitor de Perfis de Cura Legado" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ajuda a abrir arquivos do Blender diretamente no Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integração ao Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4699,6 +4786,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Atualização de Versão de 2.7 para 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4809,6 +4906,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Gravador de Perfis do Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Permite que fabricantes de material criem novos perfis de material e qualidade usando uma interface drop-in." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Assistente de Perfil de Impressão" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4839,6 +4946,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis do Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a WiFi-Box do Doodle3D" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a WiFi-Box do Doodle3D" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Conectando ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Enviando dados ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Incapaz de enviar dados ao Doodle3D Connect. Há outro trabalho ainda ativo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Armazenando dados no Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Arquivo enviado ao Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir a interface web do Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Arquivo do Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Não foi possível exportar usando qualidade \"{}\"!\n" +#~ "Foi usada a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contato" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker 3 conectadas" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Adicionar/Remover impressoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre a página de trabalhos de impressão com seu navegador default." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Visualizar trabalhos de impressão" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Imprimindo" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponível" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Conexão à impressora perdida" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponível" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Desabilitado" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "A impressão foi interrompida" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Não aceitando trabalhos de impressão" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina em: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Esvaziar a mesa de impressão" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Esperando alteração de configuração" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabalhos de impressão" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impressoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Visualizar impressoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausar" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Continuar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Abortar Impressão" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Sempre perguntar" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Sobrepujar Perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Novos modelos carregados devem ser posicionados na plataforma de impressão? Usado em conjunção com plataforma múltipla de impressão (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Não posicionar objetos ao carregar." + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Salvar &Seleção em Arquivo" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "S&alvar Como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Salvar &Projeto..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use camada de aderência ou cola com esta combinação de material" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Aceita G-Code e o envia através da WiFi para uma WiFi-Box Doodle3D." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "WiFi-Box Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Provê uma janela de edição para edição direta de script." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Ferramenta de scripting integrada" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ajuda a abrir arquivos do Blender diretamente no Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integração ao Blender (experimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Alerta de Verificador de Modelo" @@ -5106,10 +5425,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Browse plugins..." #~ msgstr "Navegar complementos..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "Plataforma de Impressão (&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "Comp&lementos" @@ -5335,14 +5650,6 @@ msgstr "Leitor de Perfis do Cura" #~ "\n" #~ "Desculpe!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente de Perfil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente de Perfil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Não há material carregado" @@ -5473,14 +5780,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurar a visibilidade dos ajustes..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automático: %1" @@ -5517,14 +5816,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Leitor de Perfis de G-Code" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permite que fabricantes de material criem novos perfis de material e qualidade usando uma interface drop-in." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistente de Perfil de Impressão" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Erros apareceram ao abrir seu arquivo SolidWorks! Por favor verifique se é possível abrir seu arquivo no próprio SolidWorks sem problema também!" @@ -5721,10 +6012,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3 conectadas" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparando" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completado em: " diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index d1d9bebbd2..94fa46f849 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-23 05:00-0300\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 e6df9e6b39..81462bcf6e 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-23 05:20-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" @@ -85,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID do material. Este valor é ajustado automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diâmetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâmetro real do filamento." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1060,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1140,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa o fluxo para partes de uma parede interna sendo impressa onde já há outra parede." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1505,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1535,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Conecta as extremidades onde o padrão de preenchimento toca a parede interna usando uma linha que segue a forma da parede interna. Habilitar este ajuste pode fazer o preenchimento aderir melhor às paredes e reduzir o efeito do preenchimento na qualidade de superfícies verticais. Desabilitar este ajuda diminui a quantidade de material usado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1610,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1875,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "A temperatura usada para a mesa aquecida na primeira camada." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diâmetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâmetro real do filamento." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2722,8 +2779,8 @@ 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 by combing within the infill only." -msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas se movimenta. Isso resulta em percursos ligeiramente mais longos mas reduz a necessidade de retrações. Se o penteamento estiver desligado, o material sofrerá retração e o bico se moverá em linha reta para o próximo ponto. É também possível evitar o penteamento em área de contornos superiores e inferiores habilitando o penteamento no preenchimento somente." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2740,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Não no Contorno" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3120,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3185,6 +3242,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distância entre as linhas impressas da estrutura de suporte. Este ajuste é calculado a partir da densidade de suporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3475,11 +3552,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3515,11 +3587,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3555,16 +3622,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3891,8 +3973,8 @@ msgstr "Largura das linhas na camada de base do raft. Devem ser grossas para aux #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaçamento de Linhas do Raft" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4109,16 +4191,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "O volume mínimo para cada camada da torre de purga de forma a purgar material suficiente." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Espessura da Torre de Purga" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "A espessura da torre de purga (que é oca). Uma espessura maior que a metade do volume mínimo da torre de purga resultará em uma torre de purga densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4231,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Depois de imprimir a torre de purga com um bico, limpar o material escorrendo do outro bico na torre de purga." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpar Bico Depois da Troca" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Depois de trocar extrusores, limpar o material escorrendo do bico na primeira peça impressa. Isso causa um movimento lento de limpeza do bico em um lugar onde o material escorrido causa o menor dano à qualidade de superfície da sua impressão." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume de Purga da Torre de Purga" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantidade de filamento a ser purgado na torre de purga. A purga é útil para compensar filamento perdido por escorrimento durante inatividade do bico." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4716,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Dados relacionando fluxo de material (em mm³ por segundo) a temperatura (graus Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5323,6 +5385,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Limite até onde se usa uma camada menor ou não. Este número é comparado à tangente da ladeira mais vertical da camada." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5435,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se uma região do contorno for suportada por menos do que esta porcentagem de sua área, imprimi-la com os ajustes de ponte. Senão, imprimir usando os ajustes normais de contorno." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Seção Pendente Máxima da Parede de Ponte" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "O comprimento máximo permitido da região de ar abaixo da linha da parede antes que a parede seja impressa usando ajustes de ponte. Expressado como uma porcentagem da espessura de filete de parede. Quando o vão for mais largo que esta quantia, a parede é impressa usando os ajustes de ponte. Senão, a parede é impressa com os ajustes normais. Quanto menor o valor, mais provável que os filetes da parede sejam impressos com os ajustes de ponte." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5583,6 +5655,66 @@ 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 "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas se movimenta. Isso resulta em percursos ligeiramente mais longos mas reduz a necessidade de retrações. Se o penteamento estiver desligado, o material sofrerá retração e o bico se moverá em linha reta para o próximo ponto. É também possível evitar o penteamento em área de contornos superiores e inferiores habilitando o penteamento no preenchimento somente." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaçamento de Linhas do Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Espessura da Torre de Purga" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "A espessura da torre de purga (que é oca). Uma espessura maior que a metade do volume mínimo da torre de purga resultará em uma torre de purga densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpar Bico Depois da Troca" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Depois de trocar extrusores, limpar o material escorrendo do bico na primeira peça impressa. Isso causa um movimento lento de limpeza do bico em um lugar onde o material escorrido causa o menor dano à qualidade de superfície da sua impressão." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume de Purga da Torre de Purga" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantidade de filamento a ser purgado na torre de purga. A purga é útil para compensar filamento perdido por escorrimento durante inatividade do bico." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Seção Pendente Máxima da Parede de Ponte" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "O comprimento máximo permitido da região de ar abaixo da linha da parede antes que a parede seja impressa usando ajustes de ponte. Expressado como uma porcentagem da espessura de filete de parede. Quando o vão for mais largo que esta quantia, a parede é impressa usando os ajustes de ponte. Senão, a parede é impressa com os ajustes normais. Quanto menor o valor, mais provável que os filetes da parede sejam impressos com os ajustes de ponte." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Otimiza a ordem em que paredes são impressas de modo a reduzir o número de retrações e a distância percorrida. A maioria das peças se beneficiarão deste ajuste habilitado mas algumas podem acabar levando mais tempo, portanto por favor compare as estimativas de tempo de impressão com e sem otimização." diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index 8a8ff0a769..2f4608cac9 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \n" "Language-Team: Paulo Miranda , Portuguese \n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Ficheiro G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -60,68 +71,7 @@ msgstr "" "

Descubra como assegurar a melhor qualidade e fiabilidade possível da impressão.

\n" "

Ver o guia de qualidade da impressão

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "A ligar ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "A enviar dados para o Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Não é possível enviar dados para o Doodle3D Connect. Será que há outro trabalho ainda ativo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "A guardar dados no Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Ficheiro enviado para o Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir a interface web do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Mostrar Lista das Alterações de cada Versão" @@ -129,12 +79,12 @@ msgstr "Mostrar Lista das Alterações de cada Versão" # rever! # flatten -ver contexto! # nivelar? -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Nivelar Definições Ativas" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi nivelado & ativado." @@ -159,6 +109,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Ligado via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -181,6 +136,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Ficheiro G-code comprimido" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -205,7 +165,7 @@ msgstr "Guardar no Disco Externo {0}" # rever! # contexto #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 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!" @@ -244,7 +204,7 @@ 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/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -276,8 +236,8 @@ 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/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -304,97 +264,97 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Disco Externo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimir através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprimir através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Ligado através da rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Estado da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Estado da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Tentar de Novo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Reenviar a solicitação de acesso" # rever! # aceite? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acesso à impressora confirmado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar Acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Enviar pedido de acesso para a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 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/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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." @@ -402,110 +362,125 @@ msgstr "Existe um problema com a configuração da sua Ultimaker, o qual impede # rever! # ver contexto! pode querer dizer # Configuração incompatível -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Divergência de Configuração" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "A enviar dados para a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "A Enviar Dados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar com a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Ligado através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Dados Enviados" # rever! # contexto -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver no Monitor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." @@ -513,12 +488,12 @@ msgstr "O trabalho de impressão '{job_name}' terminou." # rever! # Concluída? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Impressão terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ligar Através da Rede" @@ -528,24 +503,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitorizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Estão disponíveis novas funcionalidades para a impressora {machine_name}! É recomendado atualizar o firmware da impressora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Novo firmware para %s está disponível" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Como atualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Não foi possível aceder às informações de atualização." @@ -555,17 +530,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Visualização por Camadas" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Modificar G-code" @@ -579,32 +554,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Criar um volume dentro do qual não são impressos suportes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "O Cura recolhe, de forma anónima, estatísticas sobre as opções usadas." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "A Recolher Dados" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Mais informação" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Saiba mais sobre que informação o Cura envia." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permitir que o Cura envie de forma anónima, estatísticas sobre as opções usadas, para nos ajudar a estabelecer as prioridades para os futuros desenvolvimentos do Cura. São enviadas apenas algumas das preferências e definições usadas, a versão do Cura e um valor \"hash\" dos modelos que está a seccionar." @@ -614,20 +589,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfis Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Ficheiro Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Não foi possível exportar utilizando a qualidade \"{}\"!\n" -"Foi revertido para \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -653,55 +614,62 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Não é possível seccionar com o material atual, uma vez que é incompatível com a impressora ou configuração selecionada." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Não é possível Seccionar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Não é possível seccionar com as definições atuais. As seguintes definições apresentam erros: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Não é possível seccionar devido a algumas definições por modelo. As seguintes definições apresentam erros num ou mais modelos: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Não é possível seccionar porque a torre de preparação ou a(s) posição(ões) de preparação é(são) inválidas." +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + # rever! # models fit the # dentro do? # contido pelo # se adapta? # cabem no...? -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Sem conteúdo para seccionar porque nenhum dos modelos está dentro do volume de construção. Por favor redimensione, mova ou rode os modelos para os adaptar ao volume de construção." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "A Processar Camadas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Informações" @@ -728,18 +696,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Ficheiro 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -750,18 +729,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Ficheiro G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "A analisar G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -772,16 +751,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Ficheiro 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Ficheiro 3MF de Projeto Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -863,19 +857,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Desconhecido" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Ficheiro pré-seccionado {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Ficheiro Já Existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -887,23 +881,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Manter" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "O material selecionado é incompatível com a máquina ou a configuração selecionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material incompatível" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Definições atualizadas" @@ -986,13 +980,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Não foi possível encontrar um tipo de qualidade {0} para a configuração atual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1021,42 +1015,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos os Ficheiros (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Material Personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de construção" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Não é possível criar um arquivo a partir do directório de dados do utilizador: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentou restaurar um Cura backup sem existirem dados ou metadados correctos." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentou restaurar um Cura backup que não corresponde á sua versão actual." @@ -1067,33 +1061,33 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "A Posicionar Objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "A procurar nova posição para os objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "A Procurar Posição" # rever! #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Não é Possível Posicionar" @@ -1236,223 +1230,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "A carregar máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "A configurar cenário..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "A carregar interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado era demasiado pequeno para carregar." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Definições da máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Definições da Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Largura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da base de construção" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Base aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Variante do G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Definições Cabeça de Impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte esquerda da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte frontal da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte direita da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte posterior da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura do pórtico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "A diferença de altura entre a ponta do nozzle e o sistema de pórtico (eixos X e Y). Utilizado para impedir colisões entre as impressões anteriores e o pórtico ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-code Inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandos G-code a serem executados no início." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-code Final" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandos G-code a serem executados no final." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Definições do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamanho do nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diâmetro do material compatível" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "O diâmetro nominal do filamento suportado pela impressora. O diâmetro exato será substituído pelo material e/ou perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Desvio X do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desvio Y do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-code Inicial do Extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-code Final do Extrusor" @@ -1472,29 +1466,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Não foi possível aceder á base de dados de Pacotes do Cura. Por favor verifique a sua ligação." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiais" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Versão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Actualizado em" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Desconhecido" @@ -1527,16 +1534,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Anterior" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "É necessário reiniciar o Cura para que as alterações dos pacotes sejam aplicadas." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1583,12 +1630,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Rejeitar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Em Destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" @@ -1598,10 +1645,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "A obter pacotes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contacto" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1615,9 +1667,9 @@ msgstr "Lista das Alterações" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1665,22 +1717,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Contrato de Utilizador" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Ligação Existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ligar a uma Impressora em Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1691,285 +1743,291 @@ msgstr "" "\n" "Selecione a sua impressora na lista em baixo:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Versão de Firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Esta impressora não está configurada para ser Host de um grupo de impressoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Esta impressora é o Host de um grupo de %1 impressoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Ligar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Introduza o endereço IP ou o hostname da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Imprimir Através da Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Seleção de Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 não está configurada para ser Host de um grupo de impressoras Ultimaker 3 ligadas em rede" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Adicionar / Remover Impressoras" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre a página com a lista dos trabalhos de impressão, no seu browser predefinido." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Ver Trabalhos em Impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "A preparar para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "A Imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Disponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Perdeu-se a ligação com a impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconhecida" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Desativada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Impressão terminada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "A preparar para imprimir" - -# rever! -# ver contexto! -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Ação necessária" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Em Pausa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "A Recomeçar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Impressão cancelada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Não são aceites trabalhos de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina às: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Limpar base de construção" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "A aguardar pela alteração de configuração" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabalhos em Impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "A Imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Em fila" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "A Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Ver Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Cancelar impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Impressão terminada" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Em Pausa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "A Recomeçar" + +# rever! +# ver contexto! +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Ação necessária" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Ligar a uma impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Importar a configuração da impressora para o Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Ativar Configuração" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Esquema de cores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Cor do Material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de Linha" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocidade de Alimentação" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Espessura da Camada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo Compatibilidade" @@ -1977,32 +2035,32 @@ msgstr "Modo Compatibilidade" # rever! # Mostrar...? # Ver...? -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Deslocações" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Auxiliares" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Invólucro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Enchimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Só Camadas Superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 Camadas Superiores Detalhadas" @@ -2010,22 +2068,22 @@ msgstr "5 Camadas Superiores Detalhadas" # rever! # todas as strings com a frase # Topo / Base ?? -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superior / Inferior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parede Interior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx" @@ -2146,53 +2204,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavização" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de Objecto" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimir como suporte" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Retirar suportes na intercepção com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Alterar as definições dos objetos que intercepta" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modificar definições do enchimento de outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Selecionar definições" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Selecionar definições a personalizar para este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostrar tudo" @@ -2214,13 +2272,13 @@ msgid "Create new" msgstr "Criar nova" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumo – Projeto Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Definições da impressora" @@ -2237,7 +2295,7 @@ msgid "Update" msgstr "Atualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" @@ -2248,7 +2306,7 @@ msgid "Printer Group" msgstr "Grupo da Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Definições do perfil" @@ -2260,13 +2318,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Inexistente no perfil" @@ -2274,7 +2332,7 @@ msgstr "Inexistente no perfil" # rever! # contexto?! #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2304,7 +2362,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Como deve ser resolvido o conflito no material?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidade das definições" @@ -2315,13 +2373,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Definições visíveis:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de %2" @@ -2336,6 +2394,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Abrir" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00h00min" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Especificação de custos" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Total:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2562,26 +2696,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Remova a impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Colocar em pausa" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Retomar" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Cancelar impressão" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Cancelar impressão" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2618,19 +2736,17 @@ msgid "Customized" msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Perguntar sempre isto" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Manter e não perguntar novamente" @@ -2650,101 +2766,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Criar novo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar Alteração de Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desassociar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informações de Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Ativar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Criar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material exportado com êxito para %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2781,7 +2969,7 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Geral" @@ -2975,8 +3163,8 @@ msgstr "Comportamento predefinido ao abrir um ficheiro de projeto: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Perguntar sempre" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2995,79 +3183,77 @@ msgstr "Quando tiver realizado alterações a um perfil e mudado para outro, ser #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Substituir perfil" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 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:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Mais informação" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Devem os novos modelos abertos ser dispostos na base de construção? Utilizado em conjunto com múltiplas bases de construção (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Não dispor os objectos ao abrir" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Ativar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3111,7 +3297,7 @@ msgid "Aborting print..." msgstr "A cancelar impressão..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" @@ -3126,18 +3312,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3148,18 +3322,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar Remoção" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3180,96 +3342,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfis protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar alterações atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Definições Globais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiais" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Criar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material exportado com êxito para %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impressora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" @@ -3284,6 +3393,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Adicionar Impressora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3442,33 +3556,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Esconder esta definição" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 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:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter esta definição visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidade das definições..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Esconder Tudo" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Mostrar Tudo" @@ -3581,7 +3695,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3634,7 +3748,7 @@ msgid "The nozzle inserted in this extruder." msgstr "O nozzle inserido neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Base de construção" @@ -3659,6 +3773,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Aqueçer a base 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 a base aqueça quando começar a impressão." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3759,38 +3888,11 @@ msgstr "" "Configuração da Impressão desativada\n" "Os ficheiros G-code não podem ser modificados" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00h00min" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificação de tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Especificação de custos" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Total:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3801,22 +3903,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuração de Impressão Personalizada

Imprimir com um controlo detalhado de todas as definições específicas de cada uma das etapas do processo de seccionamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" @@ -3922,130 +4024,129 @@ msgid "About..." msgstr "Sobre..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Apagar Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar Modelo na Base" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Agrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Combinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Selecionar todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Limpar base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recarregar todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Dispor todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Dispor seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir Ficheiro(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Mostrar ®isto de motor..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar pasta de configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Procurar pacotes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Mostrar/Esconder Barra Lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Por favor abra um Modelo 3D ou Projeto" @@ -4053,12 +4154,12 @@ msgstr "Por favor abra um Modelo 3D ou Projeto" # rever! # Pronto para? # Preparado para? -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Disponível para seccionar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "A Seccionar..." @@ -4067,48 +4168,48 @@ msgstr "A Seccionar..." # Pronto para? # Preparado para? # Disponível para? -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Não é possível Seccionar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Seccionamento indisponível" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Seccionar o trabalho de impressão atual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar o processo de seccionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Selecione o dispositivo de saída" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir ficheiro(s)" @@ -4128,129 +4229,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Ficheiro" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Guardar seleção para ficheiro" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Guardar &como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Guardar &Projeto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Editar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Visualizar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Definições" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Base de construção" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensões" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Toolbox" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referências" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Ajuda" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Abrir ficheiro" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Definições" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Novo projeto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Tem a certeza de que deseja iniciar um novo projeto? Isto irá apagar tudo na base de construção assim como quaisquer definições que não tenham sido guardadas." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir ficheiro(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4260,87 +4377,87 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar projeto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Base de construção" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Guardar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Espessura da Camada" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Este perfil de qualidade não está disponível para a sua atual configuração de nozzle e material. Por favor altere-a para poder ativar este perfil de qualidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "De momento está ativo um perfil personalizado. Para poder ativar o controlo de qualidade, por favor selecione um dos perfis de qualidade predefinidos no modo Personalizado" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidade Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Mais Lenta" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Mais Rápida" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Algumas definições do perfil foram modificadas. Se pretender alterá-las, aceda ao modo Personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Enchimento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "O enchimento gradual irá aumentar progressivamente a densidade do enchimento em direção ao topo." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Enchimento Gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Criar Suportes" @@ -4348,7 +4465,7 @@ msgstr "Criar Suportes" # rever! # collapse ? # desmoronar? desabar? -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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." @@ -4358,22 +4475,22 @@ msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliê # sagging? deformar? # Isto irá construir estruturas de suporte debaixo do modelo para impedir a deformação de partes suspensas do modelo ou que a impressão seja feita no ar. # a utilizar? usado? -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecionar qual o extrusor usado para imprimir os suportes. Isto irá construir estruturas de suporte por debaixo do modelo para impedir que as partes suspensas do modelo se deformem ou que sejam impressas no ar." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Aderência à Base" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 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." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Precisa de ajuda para melhorar as suas impressões?
Por favor leia os Guias Ultimaker de Resolução de Problemas" @@ -4425,22 +4542,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impressora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use folhas de adesão ou cola, com estes materiais" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Compatibilidade entre Materiais" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Clique para verificar a compatibilidade entre os materiais em Ultimaker.com." @@ -4530,16 +4647,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modo God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Recebe ficheiros G-code e envia-os por Wi-Fi para uma Doodle3D Wi-Fi Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D Wi-Fi Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4628,16 +4735,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase de preparação" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fornece uma janela de edição para a edição direta de scripts." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Ferramenta de scripting em direto" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4749,16 +4846,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Leitor de perfis antigos do Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ajuda a abrir ficheiros do Blender diretamente no Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integração com o Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4809,6 +4896,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Atualização da versão 2.7 para 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4921,6 +5018,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Gravador de perfis Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4951,6 +5058,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "A ligar ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "A enviar dados para o Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Não é possível enviar dados para o Doodle3D Connect. Será que há outro trabalho ainda ativo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "A guardar dados no Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Ficheiro enviado para o Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir a interface web do Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Ficheiro Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Não foi possível exportar utilizando a qualidade \"{}\"!\n" +#~ "Foi revertido para \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contacto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Esta impressora não está configurada para ser Host de um grupo de impressoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Esta impressora é o Host de um grupo de %1 impressoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 não está configurada para ser Host de um grupo de impressoras Ultimaker 3 ligadas em rede" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Adicionar / Remover Impressoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre a página com a lista dos trabalhos de impressão, no seu browser predefinido." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Ver Trabalhos em Impressão" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "A preparar para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "A Imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponível" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Perdeu-se a ligação com a impressora" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponível" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconhecida" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Desativada" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservada" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "A preparar para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Impressão cancelada" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Não são aceites trabalhos de impressão" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina às: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Limpar base de construção" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "A aguardar pela alteração de configuração" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabalhos em Impressão" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impressoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Ver Impressoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Colocar em pausa" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Retomar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Cancelar impressão" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Perguntar sempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Substituir perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Devem os novos modelos abertos ser dispostos na base de construção? Utilizado em conjunto com múltiplas bases de construção (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Não dispor os objectos ao abrir" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Guardar seleção para ficheiro" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Guardar &como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Guardar &Projeto..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use folhas de adesão ou cola, com estes materiais" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Recebe ficheiros G-code e envia-os por Wi-Fi para uma Doodle3D Wi-Fi Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D Wi-Fi Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fornece uma janela de edição para a edição direta de scripts." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Ferramenta de scripting em direto" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ajuda a abrir ficheiros do Blender diretamente no Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integração com o Blender (experimental)" + # rever! #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" @@ -5223,10 +5542,6 @@ msgstr "Leitor de Perfis Cura" #~ msgid "Browse plugins..." #~ msgstr "Procurar plug-ins..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Base de construção" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "P&lug-ins" diff --git a/resources/i18n/pt_PT/fdmextruder.def.json.po b/resources/i18n/pt_PT/fdmextruder.def.json.po index db86214140..d5c63ba5b4 100644 --- a/resources/i18n/pt_PT/fdmextruder.def.json.po +++ b/resources/i18n/pt_PT/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \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 6b573364cb..f6979e872d 100644 --- a/resources/i18n/pt_PT/fdmprinter.def.json.po +++ b/resources/i18n/pt_PT/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \n" "Language-Team: Paulo Miranda , Portuguese \n" @@ -86,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID do material. Este é definido automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diâmetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta o diâmetro do filamento utilizado. Faça corresponder este valor com o diâmetro do filamento utilizado." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1081,6 +1091,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1170,6 +1190,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensar o fluxo em partes de uma parede interior a ser impressa, onde já exista uma parede." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1574,11 +1614,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1604,6 +1639,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Ligar as extremidades onde o padrão de enchimento entra em contacto com a parede interior utilizando uma linha que acompanha a forma da parede interior. Ativar esta definição pode melhorar a adesão do enchimento às paredes e reduzir os efeitos do enchimento na qualidade das superfícies verticais. Desativar esta definição reduz a quantidade de material utilizado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1637,6 +1682,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1952,16 +2019,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "A temperatura utilizada para a base de construção aquecida na primeira camada." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diâmetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta o diâmetro do filamento utilizado. Faça corresponder este valor com o diâmetro do filamento utilizado." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2843,8 +2900,8 @@ 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 by combing within the infill only." -msgstr "\"Combing\" mantém o nozzle dentro das áreas já impressas durante o movimento. Isto resulta em movimentos 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 recta para o próximo ponto. Também é possível evitar o \"Combing\" em áreas de revestimento superiores/inferiores efetuando o \"Combing\" apenas dentro do enchimento." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2861,6 +2918,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Não no Revestimento" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3256,11 +3318,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3324,6 +3381,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "A distância entre as linhas da estrutura de suporte impressas. Esta definição é calculada através da densidade do suporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3614,11 +3691,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3654,11 +3726,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3697,16 +3764,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -4037,8 +4119,8 @@ msgstr "O diâmetro das linhas na camada inferior (base) do raft. Devem ser linh #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaçamento Linhas Base Raft" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4255,16 +4337,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "O volume mínimo para cada camada da torre de preparação para preparar material suficiente." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Espessura da torre de preparação" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "A espessura da torre de preparação oca. Uma espessura superior a metade do Volume mínimo da torre de preparação irá resultar numa torre de preparação densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4305,33 +4377,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Após a impressão da torre de preparação com um nozzle, limpe o material que vazou do nozzle para a torre de preparação." -# rever! -# mudança? -# troca? -# substituição? -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpar nozzle após mudança" - -# rever! -# vazou? vazado? -# escorreu? escorrido? -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Após a mudança de extrusor, limpar o material que escorreu do nozzle na primeira \"coisa\" impressa. Isto executa um movimento lento de limpeza num local onde o material que tenha escorrido seja menos prejudicial para a qualidade da superfície da sua impressão." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume Purga Torre Preparação" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantidade de filamento a ser purgado ao limpar na torre de preparação. A purga é útil para compensar o filamento perdido por escorrimento durante a inatividade do nozzle." - # rever! #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4844,6 +4889,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Os dados que ligam o fluxo de material (em mm3 por segundo) à temperatura (graus Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5368,7 +5423,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "A distância de um movimento ascendente que é extrudido a metade da velocidade.\nIsto pode causar melhor aderência às camadas anteriores, sendo que o material nessas camadas não é demasiado aquecido. Aplica-se apenas à impressão de fios." +msgstr "" +"A distância de um movimento ascendente que é extrudido a metade da velocidade.\n" +"Isto pode causar melhor aderência às camadas anteriores, sendo que o material nessas camadas não é demasiado aquecido. Aplica-se apenas à impressão de fios." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5515,6 +5572,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "O limiar em que se deve usar, ou não, uma menor espessura de camada. Este número é comparado com a tangente da inclinação mais acentuada numa camada." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5545,16 +5622,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se uma região de revestimento for suportada por menos do que esta percentagem da sua área, imprima-a utilizando as definições de Bridge. Caso contrário, será impressa utilizando as definições de revestimento normais." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Saliências máx. da parede de Bridge" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "A largura máxima permitida para a região de ar sob uma linha de parede, antes de a parede ser impressa utilizando as definições de Bridge. Expressa como uma percentagem da largura da linha de parede. Quando a folga de ar é mais larga do que este valor, a linha de parede é impressa utilizando as definições de Bridge. Caso contrário, a linha de parede é impressa utilizando as definições normais. Quanto mais baixo for o valor, mais provável é que as linhas de parede das saliências sejam impressas utilizando definições de Bridge." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5775,6 +5842,73 @@ 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." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "\"Combing\" mantém o nozzle dentro das áreas já impressas durante o movimento. Isto resulta em movimentos 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 recta para o próximo ponto. Também é possível evitar o \"Combing\" em áreas de revestimento superiores/inferiores efetuando o \"Combing\" apenas dentro do enchimento." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaçamento Linhas Base Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Espessura da torre de preparação" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "A espessura da torre de preparação oca. Uma espessura superior a metade do Volume mínimo da torre de preparação irá resultar numa torre de preparação densa." + +# rever! +# mudança? +# troca? +# substituição? +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpar nozzle após mudança" + +# rever! +# vazou? vazado? +# escorreu? escorrido? +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Após a mudança de extrusor, limpar o material que escorreu do nozzle na primeira \"coisa\" impressa. Isto executa um movimento lento de limpeza num local onde o material que tenha escorrido seja menos prejudicial para a qualidade da superfície da sua impressão." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume Purga Torre Preparação" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantidade de filamento a ser purgado ao limpar na torre de preparação. A purga é útil para compensar o filamento perdido por escorrimento durante a inatividade do nozzle." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Saliências máx. da parede de Bridge" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "A largura máxima permitida para a região de ar sob uma linha de parede, antes de a parede ser impressa utilizando as definições de Bridge. Expressa como uma percentagem da largura da linha de parede. Quando a folga de ar é mais larga do que este valor, a linha de parede é impressa utilizando as definições de Bridge. Caso contrário, a linha de parede é impressa utilizando as definições normais. Quanto mais baixo for o valor, mais provável é que as linhas de parede das saliências sejam impressas utilizando definições de Bridge." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Otimizar a ordem pela qual as paredes são impressas de forma a reduzir o número de retrações e a distância percorrida. A maioria das peças irá beneficiar com a ativação desta opção, mas algumas podem na realidade demorar mais tempo, portanto, por favor compare as estimativas do tempo de impressão com e sem otimização." diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index acc35df94f..cbe3219019 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Файл G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,80 +64,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Одна или несколько 3D-моделей могут не напечататься оптимальным образом из-за размера модели и конфигурации материала:

\n

{model_names}

\n

Узнайте, как обеспечить максимально возможное качество и высокую надежность печати.

\n

Ознакомиться с руководством по качеству печати

" +msgstr "" +"

Одна или несколько 3D-моделей могут не напечататься оптимальным образом из-за размера модели и конфигурации материала:

\n" +"

{model_names}

\n" +"

Узнайте, как обеспечить максимально возможное качество и высокую надежность печати.

\n" +"

Ознакомиться с руководством по качеству печати

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Печать через Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Печать через Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Соединение с Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Отмена" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Отправка данных через Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Невозможно отправить данные через Doodle3D Connect. Другое задание активно?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Сохранение данных на Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Файл отправлен через Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Открыть Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Открыть Doodle3D Connect web интерфейс" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Показать журнал изменений" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Сбросить текущие параметры к стандартным значениям" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Профиль был нормализован и активирован." @@ -151,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "Подключено через USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -173,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Сжатый файл с G-кодом" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -195,7 +159,7 @@ msgid "Save to Removable Drive {0}" msgstr "Сохранить на внешний носитель {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Ни один из форматов файлов не доступен для записи!" @@ -234,7 +198,7 @@ msgstr "Невозможно сохранить на внешний носите #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Ошибка" @@ -263,8 +227,8 @@ msgstr "Извлекает внешний носитель {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Внимание" @@ -291,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Внешний носитель" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Подключен по сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Подключен по сети. Пожалуйста, подтвердите запрос на принтере." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Подключен по сети. Нет доступа к управлению принтером." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос на принтере" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Состояние аутентификации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Состояние аутентификации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Повторить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Послать запрос доступа ещё раз" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Доступ к принтеру получен" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Нет доступа к использованию этого принтера. Невозможно отправить задачу на печать." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Запросить доступ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Отправить запрос на доступ к принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Не удалось начать новое задание печати." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Несовпадение конфигурации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Вы уверены, что желаете печатать с использованием выбранной конфигурации?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Отправка новых заданий (временно) заблокирована, идёт отправка предыдущего задания." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Отправка данных на принтер" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Отправка данных" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Отмена" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Модуль экструдера PrintCore не загружен в слот {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Материал не загружен в слот {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Синхронизация с вашим принтером" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Желаете использовать текущую конфигурацию принтера в Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Подключен по сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Задание печати успешно отправлено на принтер." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Данные отправлены" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Просмотр на мониторе" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Задание печати '{job_name}' выполнено." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Печать завершена" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Подключиться через сеть" @@ -506,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Монитор" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Для {machine_name} доступны новые функции! Рекомендуется обновить встроенное программное обеспечение принтера." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Доступна новая прошивка %s" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Порядок обновления" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Не могу получить информацию об обновлениях." @@ -533,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Просмотр слоёв" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Вид моделирования" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "Изменить G-код" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Создание объема без печати элементов поддержки." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura собирает анонимизированную статистику об использовании." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Сбор данных" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Дополнительно" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Ознакомьтесь с дополнительной информацией о данных, отправляемых Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "Разрешить" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Разрешить Cura отправлять анонимизированную статистику об использовании, чтобы помочь назначить приоритеты будущим улучшениям в Cura. Отправлены некоторые ваши настройки и параметры, включая версию Cura и хэш моделей, разделяемых на слои." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Профили Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Файл Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Не удалось выполнить экспорт с использованием качества \"{}\"!\nВыполнен возврат к \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF изображение" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Невозможно нарезать модель, используя текущий материал, так как он несовместим с выбранной машиной или конфигурацией." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Невозможно нарезать" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Не могу выполнить слайсинг на текущих настройках. Проверьте следующие настройки: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Не удалось выполнить слайсинг из-за настроек модели. Следующие настройки ошибочны для одной или нескольких моделей: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Слайсинг невозможен, так как черновая башня или её позиция неверные." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Нечего нарезать, так как ни одна модель не попадает в объём принтера. Пожалуйста, отмасштабируйте или поверните модель." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Обработка слоёв" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Информация" @@ -698,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Своя" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Файл 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Сопло" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Файл G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Обработка G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "Параметры G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -742,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Профиль Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Помощник по профилю" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Помощник по профилю" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF файл" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "3MF файл проекта Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -833,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Неизвестно" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Предообратка файла {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Файл уже существует" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Не переопределен" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Выбранный материал несовместим с выбранным принтером или конфигурацией." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Несовместимый материал" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Настройки изменены в соответствии с текущей доступностью экструдеров: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Настройки обновлены" @@ -956,13 +956,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "У профайла отсутствует тип качества." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Невозможно найти тип качества {0} для текущей конфигурации." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Все файлы (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Собственный материал" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Своё" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Объём печати" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Не удалось создать архив из каталога с данными пользователя: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Резервное копирование" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Попытка восстановить резервную копию Cura при отсутствии необходимых данных или метаданных." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Попытка восстановить резервную копию Cura, не совпадающую с вашей текущей версией." @@ -1035,32 +1035,32 @@ msgid "Multiplying and placing objects" msgstr "Размножение и размещение объектов" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Размещение объекта" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Невозможно разместить все объекты внутри печатаемого объёма" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Поиск места для новых объектов" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Поиск места" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Не могу найти место" @@ -1078,7 +1078,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

В ПО Ultimaker Cura обнаружена ошибка.

\n

Во время запуска обнаружена неустранимая ошибка. Возможно, она вызвана некоторыми файлами конфигурации с неправильными данными. Рекомендуется создать резервную копию конфигурации и сбросить ее.

\n

Резервные копии хранятся в папке конфигурации.

\n

Отправьте нам этот отчет о сбое для устранения проблемы.

\n " +msgstr "" +"

В ПО Ultimaker Cura обнаружена ошибка.

\n" +"

Во время запуска обнаружена неустранимая ошибка. Возможно, она вызвана некоторыми файлами конфигурации с неправильными данными. Рекомендуется создать резервную копию конфигурации и сбросить ее.

\n" +"

Резервные копии хранятся в папке конфигурации.

\n" +"

Отправьте нам этот отчет о сбое для устранения проблемы.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1116,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

В Cura возникла критическая ошибка. Отправьте нам этот отчет о сбое для устранения проблемы

\n

Нажмите кнопку «Отправить отчет», чтобы автоматически опубликовать отчет об ошибке на наших серверах

\n " +msgstr "" +"

В Cura возникла критическая ошибка. Отправьте нам этот отчет о сбое для устранения проблемы

\n" +"

Нажмите кнопку «Отправить отчет», чтобы автоматически опубликовать отчет об ошибке на наших серверах

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Отправить отчёт" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Загрузка принтеров..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Настройка сцены..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Загрузка интерфейса..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Выбранная модель слишком мала для загрузки." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Параметры принтера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Параметры принтера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Ширина)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "мм" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Глубина)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Высота)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Форма стола" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Начало координат в центре" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Нагреваемый стол" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Вариант G-кода" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Параметры головы" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от левого края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от переднего края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от правого края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от заднего края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Высота портала" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Разница в высоте от кончика сопла до портала (по осям X и Y). Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Количество экструдеров" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Стартовый G-код" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Команды в G-коде, которые будут выполнены в самом начале." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Завершающий G-код" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Команды в G-коде, которые будут выполнены в самом конце." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Параметры сопла" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Диаметр сопла" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Диаметр совместимого материала" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Номинальный диаметр материала, поддерживаемый принтером. Точный диаметр будет указан в материале и/или в профиле." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Смещение сопла по оси X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Смещение сопла по оси Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Стартовый G-код экструдера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Завершающий G-код экструдера" @@ -1427,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Не удалось подключиться к базе данных пакета Cura. Проверьте свое подключение." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Плагины" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Материалы" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Версия" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Последнее обновление" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Автор" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Неизвестно" @@ -1482,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Назад" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Вам потребуется перезапустить Cura для активации изменений в пакетах." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Выйти из Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1523,7 +1584,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Этот плагин содержит лицензию.\nЧтобы установить этот плагин, необходимо принять условия лицензии.\nПринять приведенные ниже условия?" +msgstr "" +"Этот плагин содержит лицензию.\n" +"Чтобы установить этот плагин, необходимо принять условия лицензии.\n" +"Принять приведенные ниже условия?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Отклонить" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Рекомендуемые" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Совместимость" @@ -1550,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Выборка пакетов..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Контакт" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1567,9 +1636,9 @@ msgstr "Журнал изменений" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1617,356 +1686,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Пользовательское соглашение" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Текущее подключение" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Подключение к сетевому принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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Укажите ваш принтер в списке ниже:" +msgstr "" +"Для печати на вашем принтере через сеть, пожалуйста, удостоверьтесь, что ваш принтер подключен к сети с помощью кабеля или через WiFi. Если вы не подключили Cura к вашему принтеру, вы по-прежнему можете использовать USB флешку для переноса G-Code файлов на ваш принтер.\n" +"\n" +"Укажите ваш принтер в списке ниже:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Добавить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Правка" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Удалить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Обновить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Если ваш принтер отсутствует в списке, обратитесь к руководству по решению проблем с сетевой печатью" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Тип" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Версия прошивки" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Адрес" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Данный принтер не настроен для управления группой принтеров Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Данный принтер управляет группой из %1 принтеров Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Принтер по этому адресу ещё не отвечал." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Подключить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Адрес принтера" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Введите IP-адрес принтера или его имя в сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Выбор принтера" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Печать" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 не настроен для управления группой подключенных принтеров Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Добавить/удалить принтеры" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Открытие страницы заданий печати в веб-браузере по умолчанию." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Просмотреть задания на печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Подготовка к печати" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Доступен" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Потеряно соединение с принтером" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Недоступен" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Неизвестно" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Отключено" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Занят" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Завершено" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Подготовка к печати" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Необходимое действие" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Приостановлено" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Возобновляется" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Печать прервана" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Не принимает задания на печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Заканчивается на: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Очистите стол" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Ожидание изменения конфигурации" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Задания на печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Запланировано" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Принтеры" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Печать" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Просмотреть принтеры" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Прекращение печати" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Завершено" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Подготовка" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Приостановлено" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Возобновляется" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Необходимое действие" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Подключение к принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Загрузка конфигурации принтера в Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Активировать конфигурацию" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Цветовая схема" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Цвет материала" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Тип линии" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Скорость подачи" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Толщина слоя" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Режим совместимости" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Показать движения" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Показать поддержку" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Показать стенки" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Показать заполнение" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Показать только верхние слои" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Показать 5 детализированных слоёв сверху" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Дно / крышка" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Внутренняя стенка" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "мин." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "макс." @@ -2086,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Сглаживание" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Тип объекта" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Нормальная модель" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Печать в качестве поддержки" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Не поддерживать перекрытие с другими моделями" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Изменять настройки для перекрытия с другими моделями" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Изменять настройки для заполнения других моделей" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Выберите параметры" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Выберите параметр для изменения этой модели" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Фильтр..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Показать всё" @@ -2154,13 +2232,13 @@ msgid "Create new" msgstr "Создать новый" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Сводка - Проект Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Параметры принтера" @@ -2177,7 +2255,7 @@ msgid "Update" msgstr "Обновить" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Тип" @@ -2188,7 +2266,7 @@ msgid "Printer Group" msgstr "Группа принтеров" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Параметры профиля" @@ -2200,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Название" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Вне профиля" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2244,7 +2322,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Как следует решать конфликт в материале?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Видимость параметров" @@ -2255,13 +2333,13 @@ msgid "Mode" msgstr "Режим" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Видимые параметры:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 из %2" @@ -2276,6 +2354,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Открыть" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Экспорт" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 ч 00 мин" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Настройка расчета стоимости" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 м" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 г" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Итого:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1 м / ~ %2 г / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1 м / ~ %2 г" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2494,26 +2648,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Пожалуйста, удалите напечатанное" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Пауза" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Продолжить" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Прервать печать" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Прекращение печати" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2530,7 +2668,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Вы изменили некоторые параметры профиля.\nЖелаете сохранить их или вернуть к прежним значениям?" +msgstr "" +"Вы изменили некоторые параметры профиля.\n" +"Желаете сохранить их или вернуть к прежним значениям?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2548,19 +2688,17 @@ msgid "Customized" msgstr "Свой" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Всегда спрашивать меня" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Сбросить и никогда больше не спрашивать" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Сохранить и никогда больше не спрашивать" @@ -2580,101 +2718,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Создать новый профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Информация" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Подтвердить изменение диаметра" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Отображаемое имя" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Брэнд" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Тип материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Цвет" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Свойства" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Плотность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Диаметр" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Стоимость материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Вес материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Длина материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Стоимость метра" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Данный материал привязан к %1 и имеет ряд его свойств." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Отвязать материал" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Описание" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Информация об адгезии" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Активировать" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Создать" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "Импорт" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Импортировать материал" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Экспортировать материал" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Материал успешно экспортирован в %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2711,7 +2921,7 @@ msgid "Unit" msgstr "Единица" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Общее" @@ -2903,8 +3113,8 @@ msgstr "Стандартное поведение при открытии фай #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Всегда спрашивать" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2923,77 +3133,75 @@ msgstr "При внесении изменений в профиль и пере #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Переопределение профиля" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Приватность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Проверять обновления при старте" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Отправлять (анонимно) информацию о печати" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Дополнительная информация" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Экспериментальное" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Использовать функционал нескольких рабочих столов" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Использовать функционал нескольких рабочих столов (требуется перезапуск)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Должны ли новые загруженные модели выравниваться на рабочем столе? Используется в сочетании с несколькими рабочими столами (ЭКСПЕРИМЕНТАЛЬНАЯ ОПЦИЯ)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Не выравнивать объекты под нагрузкой" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Принтеры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Активировать" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3037,7 +3245,7 @@ msgid "Aborting print..." msgstr "Прерывание печати…" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Профили" @@ -3052,18 +3260,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Дублировать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Импорт" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Экспорт" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3074,18 +3270,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Скопировать профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Подтвердите удаление" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3106,96 +3290,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Принтер: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Защищённые профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Собственные профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Обновить профиль текущими параметрами" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Сбросить текущие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Ваши текущие параметры совпадают с выбранным профилем." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Общие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Материалы" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Создать" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Дублировать" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Импортировать материал" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Успешно импортированный материал %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Экспортировать материал" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Материал успешно экспортирован в %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Принтер" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Добавление принтера" @@ -3210,6 +3341,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Добавить принтер" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3230,7 +3366,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura разработана компанией Ultimaker B.V. совместно с сообществом.\nCura использует следующие проекты с открытым исходным кодом:" +msgstr "" +"Cura разработана компанией Ultimaker B.V. совместно с сообществом.\n" +"Cura использует следующие проекты с открытым исходным кодом:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3343,7 +3481,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Значения некоторых параметров отличаются от значений профиля.\n\nНажмите для открытия менеджера профилей." +msgstr "" +"Значения некоторых параметров отличаются от значений профиля.\n" +"\n" +"Нажмите для открытия менеджера профилей." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3360,33 +3501,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Копировать все измененные значения для всех экструдеров" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Спрятать этот параметр" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Не показывать этот параметр" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Оставить этот параметр видимым" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Видимость параметров…" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Свернуть все" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Развернуть все" @@ -3397,7 +3538,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Некоторые из скрытых параметров используют значения, отличающиеся от их вычисленных значений.\n\nЩёлкните, чтобы сделать эти параметры видимыми." +msgstr "" +"Некоторые из скрытых параметров используют значения, отличающиеся от их вычисленных значений.\n" +"\n" +"Щёлкните, чтобы сделать эти параметры видимыми." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3425,7 +3569,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Значение этого параметра отличается от значения в профиле.\n\nЩёлкните для восстановления значения из профиля." +msgstr "" +"Значение этого параметра отличается от значения в профиле.\n" +"\n" +"Щёлкните для восстановления значения из профиля." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3433,7 +3580,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Обычно это значение вычисляется, но в настоящий момент было установлено явно.\n\nЩёлкните для восстановления вычисленного значения." +msgstr "" +"Обычно это значение вычисляется, но в настоящий момент было установлено явно.\n" +"\n" +"Щёлкните для восстановления вычисленного значения." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3471,7 +3621,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Отправить свою команду в G-коде подключенному принтеру. Нажмите Enter (Ввод) для отправки команды." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Экструдер" @@ -3524,7 +3674,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Сопло, вставленное в данный экструдер." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Стол" @@ -3549,6 +3699,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Нагрев горячего стола перед печатью. Вы можете продолжать настройки вашей печати, пока стол нагревается, и вам не понадобится ждать нагрева стола для старта печати." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3645,40 +3810,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Настройка принтера отключена\nG-code файлы нельзя изменять" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00 ч 00 мин" +msgstr "" +"Настройка принтера отключена\n" +"G-code файлы нельзя изменять" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Настройка расчета времени" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Настройка расчета стоимости" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 м" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 г" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Итого:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3689,22 +3829,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Свои параметры печати

Печатайте с полным контролем над каждой особенностью процесса слайсинга." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Идёт печать" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Имя задачи" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Время печати" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Осталось примерно" @@ -3810,7 +3950,6 @@ msgid "About..." msgstr "О Cura..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" @@ -3818,7 +3957,7 @@ msgstr[0] "Удалить выбранную модель" msgstr[1] "Удалить выбранные модели" msgstr[2] "Удалить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" @@ -3826,7 +3965,7 @@ msgstr[0] "Центрировать выбранную модель" msgstr[1] "Центрировать выбранные модели" msgstr[2] "Центрировать выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" @@ -3834,163 +3973,163 @@ msgstr[0] "Размножить выбранную модель" msgstr[1] "Размножить выбранные модели" msgstr[2] "Размножить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Удалить модель" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Поместить модель по центру" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Сгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Разгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Объединить модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Дублировать модель..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Выбрать все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Очистить стол" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Перезагрузить все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Выровнять все модели по всем рабочим столам" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Выровнять все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Выровнять выбранные" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Сбросить позиции всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Сбросить преобразования всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Открыть файл(ы)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "Новый проект..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Показать журнал движка..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Показать конфигурационный каталог" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Обзор пакетов..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Развернуть/свернуть боковую панель" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Пожалуйста, загрузите 3D модель" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Готов к нарезке" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Нарезка на слои..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Готов к %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Невозможно нарезать" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Нарезка недоступна" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Разделить на слои текущее задание на печать" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Отмена разделения на слои" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Подготовка" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Отмена" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Выберите активное целевое устройство" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Открыть файл(ы)" @@ -4010,129 +4149,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "Файл" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Сохранить выделенное в файл" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Сохранить как..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Сохранить проект..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "Правка" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "Вид" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Установить как активный экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Включить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Отключить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "Рабочий стол" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "Профиль" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Расширения" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Панель инструментов" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Настройки" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "Справка" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Этот пакет будет установлен после перезапуска." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Открыть файл" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Новый проект" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Вы действительно желаете начать новый проект? Это действие очистит область печати и сбросит все несохранённые настройки." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Установить пакет" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Открыть файл(ы)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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-кодом. Вы можете открыть только один файл за раз. Измените свой выбор, пожалуйста." @@ -4142,112 +4297,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Сохранить проект" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Рабочий стол" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Экструдер %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 и материал" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Больше не показывать сводку по проекту" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Сохранить" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Высота слоя" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Этот профиль качества недоступен для вашей текущей конфигурации материала и сопла. Измените эти настройки для задействования данного профиля качества" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "В настоящее время активен пользовательский профиль. Чтобы включить ползунок качества, на вкладке «Пользовательские» выберите профиль качества по умолчанию" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Скорость печати" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Медленнее" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Быстрее" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "В некоторые настройки профиля были внесены изменения. Если их необходимо изменить, перейдите в пользовательский режим." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Заполнение" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Постепенное заполнение будет постепенно увеличивать объём заполнения по направлению вверх." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Постепенное" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Генерация поддержек" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Выбирает, какой экструдер следует использовать для поддержек. Будут созданы поддерживающие структуры под моделью для предотвращения проседания краёв или печати в воздухе." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Тип прилипания к столу" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Разрешает печать каймы или подложки. Это добавляет плоскую область вокруг или под вашим объектом, которую легко удалить после печати." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Требуется помощь в улучшении вашей печати?
Обратитесь к Руководству Ultimaker по решению проблем" @@ -4295,22 +4450,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Тип принтера" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Использовать клейкий лист или клей с этой комбинацией материалов" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Проверить совместимость" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Нажмите для проверки совместимости материала на Ultimaker.com." @@ -4400,16 +4555,6 @@ msgctxt "name" msgid "God Mode" msgstr "Режим бога" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Принять G-code и отправить его через WiFi на Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4490,16 +4635,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Подготовительный этап" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Открывает окно редактирования для непосредственного редактирования скриптов." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Интерактивный инструмент для работы со скриптами" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4610,16 +4745,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Чтение устаревших профилей Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Помогает открывать файлы Blender непосредственно в Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Интеграция Blender (экспериментальная опция)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4670,6 +4795,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Обновление версии с 2.7 до 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4780,6 +4915,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Запись профиля Cura" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Позволяет производителям материалов создавать новые профили материалов и качества с помощью дружественного интерфейса." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Помощник по профилю печати" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4810,6 +4955,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Чтение профиля Cura" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Печать через Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Печать через Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Соединение с Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Отправка данных через Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Невозможно отправить данные через Doodle3D Connect. Другое задание активно?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Сохранение данных на Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Файл отправлен через Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Открыть Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Открыть Doodle3D Connect web интерфейс" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Файл Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Не удалось выполнить экспорт с использованием качества \"{}\"!\n" +#~ "Выполнен возврат к \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Контакт" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Данный принтер не настроен для управления группой принтеров Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ 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" +#~ msgstr "%1 не настроен для управления группой подключенных принтеров Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Добавить/удалить принтеры" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Открытие страницы заданий печати в веб-браузере по умолчанию." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Просмотреть задания на печать" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Подготовка к печати" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Печать" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Доступен" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Потеряно соединение с принтером" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Недоступен" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Неизвестно" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Отключено" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Занят" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Подготовка к печати" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Печать прервана" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Не принимает задания на печать" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Заканчивается на: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Очистите стол" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Ожидание изменения конфигурации" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Задания на печать" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Принтеры" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Просмотреть принтеры" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Пауза" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Продолжить" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Прервать печать" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Всегда спрашивать" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Переопределение профиля" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Должны ли новые загруженные модели выравниваться на рабочем столе? Используется в сочетании с несколькими рабочими столами (ЭКСПЕРИМЕНТАЛЬНАЯ ОПЦИЯ)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Не выравнивать объекты под нагрузкой" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Сохранить выделенное в файл" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Сохранить как..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Сохранить проект..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Использовать клейкий лист или клей с этой комбинацией материалов" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Принять G-code и отправить его через WiFi на Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Открывает окно редактирования для непосредственного редактирования скриптов." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Интерактивный инструмент для работы со скриптами" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Помогает открывать файлы Blender непосредственно в Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Интеграция Blender (экспериментальная опция)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Предупреждение средства проверки моделей" @@ -5077,10 +5434,6 @@ msgstr "Чтение профиля Cura" #~ msgid "Browse plugins..." #~ msgstr "Просмотр плагинов..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "Рабочий стол" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "Плагины" @@ -5306,14 +5659,6 @@ msgstr "Чтение профиля Cura" #~ "\n" #~ "Сожалеем!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Помощник по профилю" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Помощник по профилю" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Материал не загружен" @@ -5444,14 +5789,6 @@ msgstr "Чтение профиля Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Настроить видимость параметров..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 м / ~ %2 г / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 м / ~ %2 г" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Автоматически: %1" @@ -5488,14 +5825,6 @@ msgstr "Чтение профиля Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Чтение профиля из G-Code" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Позволяет производителям материалов создавать новые профили материалов и качества с помощью дружественного интерфейса." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Помощник по профилю печати" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Возникли ошибки во время открытия файла SolidWorks! Пожалуйста, проверьте может ли SolidWorks открыть этот файл без проблем!" @@ -5691,10 +6020,6 @@ msgstr "Чтение профиля Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Данный принтер управляет группой из {count} подключенных принтеров Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Подготовка" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Выполнено на:" diff --git a/resources/i18n/ru_RU/fdmextruder.def.json.po b/resources/i18n/ru_RU/fdmextruder.def.json.po index 26bb958876..1ddc9f0445 100644 --- a/resources/i18n/ru_RU/fdmextruder.def.json.po +++ b/resources/i18n/ru_RU/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 c5273561ca..123b07d08a 100644 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" @@ -58,7 +58,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "Команды в G-коде, которые будут выполнены в самом начале, разделенные с помощью \n." +msgstr "" +"Команды в G-коде, которые будут выполнены в самом начале, разделенные с помощью \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,7 +72,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "Команды в G-коде, которые будут выполнены в самом конце, разделенные с помощью \n." +msgstr "" +"Команды в G-коде, которые будут выполнены в самом конце, разделенные с помощью \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -82,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Идентификатор материала, устанавливается автоматически. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Диаметр" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Укажите диаметр используемой нити." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1057,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Зигзаг" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1137,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Компенсирует поток для печатаемых частей внутренних стен в местах, где уже напечатана стена." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1502,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Концентрическое" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрическое 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1532,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Соединение мест пересечения шаблона заполнения и внутренних стенок с использованием линии, повторяющей контур внутренней стенки. Использование этой функции улучшает сцепление заполнения со стенками и снижает влияние заполнения на качество вертикальных поверхностей. Отключение этой функции снижает расход материала." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1562,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Расстояние перемещения шаблона заполнения по оси Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1872,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Температура стола, используемая при печати первого слоя." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Диаметр" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Укажите диаметр используемой нити." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2719,8 +2780,8 @@ msgstr "Режим комбинга" #: 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 by combing within the infill only." -msgstr "Комбинг удерживает сопло при перемещении внутри уже напечатанных зон. Это выражается в небольшом увеличении пути, но уменьшает необходимость в откатах. При отключенном комбинге выполняется откат и сопло передвигается в следующую точку по прямой. Также есть возможность не применять комбинг над областями поверхностей крышки/дна, разрешив комбинг только над заполнением." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2737,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Не в оболочке" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3117,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Концентрические" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрические 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3182,6 +3243,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Дистанция между напечатанными линями структуры поддержек. Этот параметр вычисляется по плотности поддержек." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3472,11 +3553,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3512,11 +3588,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3552,16 +3623,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Зигзаг" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3712,7 +3798,9 @@ msgctxt "skirt_gap description" 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 "Горизонтальное расстояние между юбкой и первым слоем печати.\nМинимальное расстояние. Несколько линий юбки будут расширяться от этого расстояния." +msgstr "" +"Горизонтальное расстояние между юбкой и первым слоем печати.\n" +"Минимальное расстояние. Несколько линий юбки будут расширяться от этого расстояния." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3886,8 +3974,8 @@ msgstr "Ширина линий нижнего слоя подложки. Она #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Дистанция между линиями подложки" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4104,16 +4192,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Минимальный объём материала на каждый слой черновой башни, который требуется выдавить." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Толщина черновой башни" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Толщина полости черновой башни. Если толщина больше половины минимального объёма черновой башни, то результатом будет увеличение плотности башни." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4154,26 +4232,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "После печати черновой башни одним соплом, вытирает вытекший материал из другого сопла об эту башню." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Очистка сопла после переключения" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "После смены экструдера убираем на первой печатаемой части материал, вытекший из сопла. Выполняется безопасная медленная очистка на месте, где вытекший материал нанесёт наименьший ущерб качеству печатаемой поверхности." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Объём очистки черновой башни" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Объём материала, который будет выдавлен при очистке на черновой башне. Очистка полезна для компенсации недостатка материала из-за его вытекания при простое сопла." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4659,6 +4717,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "График, объединяющий поток (в мм3 в секунду) с температурой (в градусах Цельсия)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5169,7 +5237,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Расстояние движения вверх, при котором выдавливание идёт на половине скорости.\nЭто может улучшить прилипание к предыдущим слоям, не перегревая материал тех слоёв. Применяется только при каркасной печати." +msgstr "" +"Расстояние движения вверх, при котором выдавливание идёт на половине скорости.\n" +"Это может улучшить прилипание к предыдущим слоям, не перегревая материал тех слоёв. Применяется только при каркасной печати." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5316,6 +5386,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Пороговое значение, при достижении которого будет использоваться меньший слой. Это число сравнивается с тангенсом наиболее крутого наклона в слое." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5436,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Если поддержка области оболочки составляет меньше указанного процентного значения от ее площади, печать должна быть выполнена с использованием настроек мостика. В противном случае печать осуществляется с использованием стандартных настроек оболочки." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Максимальное нависание стенки мостика" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Максимальная разрешенная ширина области воздушного зазора ниже линии стенки перед печатью стенки с использованием настроек мостика. Выражается в процентах от ширины линии стенки. Если ширина воздушного зазора превышает указанное значение, линия стенки печатается с использованием настроек мостика. В противном случае линия стенки печатается с использованием стандартных настроек. Чем меньше это значение, тем вероятнее, что линии стенки с нависанием будут напечатаны с использованием настроек мостика." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5576,6 +5656,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Матрица преобразования, применяемая к модели при её загрузки из файла." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрическое 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Комбинг удерживает сопло при перемещении внутри уже напечатанных зон. Это выражается в небольшом увеличении пути, но уменьшает необходимость в откатах. При отключенном комбинге выполняется откат и сопло передвигается в следующую точку по прямой. Также есть возможность не применять комбинг над областями поверхностей крышки/дна, разрешив комбинг только над заполнением." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрические 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Дистанция между линиями подложки" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Толщина черновой башни" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Толщина полости черновой башни. Если толщина больше половины минимального объёма черновой башни, то результатом будет увеличение плотности башни." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Очистка сопла после переключения" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "После смены экструдера убираем на первой печатаемой части материал, вытекший из сопла. Выполняется безопасная медленная очистка на месте, где вытекший материал нанесёт наименьший ущерб качеству печатаемой поверхности." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Объём очистки черновой башни" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Объём материала, который будет выдавлен при очистке на черновой башне. Очистка полезна для компенсации недостатка материала из-за его вытекания при простое сопла." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Максимальное нависание стенки мостика" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Максимальная разрешенная ширина области воздушного зазора ниже линии стенки перед печатью стенки с использованием настроек мостика. Выражается в процентах от ширины линии стенки. Если ширина воздушного зазора превышает указанное значение, линия стенки печатается с использованием настроек мостика. В противном случае линия стенки печатается с использованием стандартных настроек. Чем меньше это значение, тем вероятнее, что линии стенки с нависанием будут напечатаны с использованием настроек мостика." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Оптимизирует порядок, в котором печатаются стенки для уменьшения количества откатов и перемещений. Большинство моделей будут распечатываться быстрее, но не все. Сравнивайте печать с оптимизацией и без." diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index b6eb498620..239a952812 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" @@ -38,6 +38,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code dosyası" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -51,80 +62,23 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Model boyutu ve model yapılandırması nedeniyle bir veya daha fazla 3D model optimum yazdırılamayabilir:

\n

{model_names}

\n

En iyi kalite ve güvenilirliği nasıl elde edeceğinizi öğrenin.

\n

Yazdırma kalitesi kılavuzunu görüntüleyin

" +msgstr "" +"

Model boyutu ve model yapılandırması nedeniyle bir veya daha fazla 3D model optimum yazdırılamayabilir:

\n" +"

{model_names}

\n" +"

En iyi kalite ve güvenilirliği nasıl elde edeceğinizi öğrenin.

\n" +"

Yazdırma kalitesi kılavuzunu görüntüleyin

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box ile yazdır" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box ile yazdır" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connect’e bağlanıyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "İptal Et" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connect’e veri gönderiliyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connect’e veri gönderilemiyor. Hala etkin olan başka bir iş var mı?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connect üzerinde veri depolanıyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connect’e dosya gönderildi" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect'i aç.." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect web arayüzünü aç" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Değişiklik Günlüğünü Göster" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Düzleştirme aktif ayarları" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil düzleştirilmiş ve aktifleştirilmiştir." @@ -149,6 +103,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "USB ile bağlı" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -171,6 +130,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Sıkıştırılmış G-code Dosyası" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -193,7 +157,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/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Yazılacak dosya biçimleri mevcut değil!" @@ -232,7 +196,7 @@ msgstr "Çıkarılabilir aygıta {0} kaydedilemedi: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "Hata" @@ -261,8 +225,8 @@ 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/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "Uyarı" @@ -289,212 +253,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Çıkarılabilir Sürücü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "Ağ üzerinden bağlandı." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 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/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 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/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 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/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "Kimlik doğrulama durumu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "Kimlik Doğrulama Durumu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "Yeniden dene" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Erişim talebini yeniden gönder" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Kabul edilen yazıcıya erişim" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 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/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "Erişim Talep Et" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 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/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 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/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Uyumsuz yapılandırma" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 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/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 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/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Veriler yazıcıya gönderiliyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "Veri gönderiliyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "İptal Et" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, 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/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Yazıcınız ile eşitleyin" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 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/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "Ağ üzerinden bağlandı." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 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/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "Veri Gönderildi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "Monitörde Görüntüle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, 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/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "Baskı tamamlandı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ağ ile Bağlan" @@ -504,24 +483,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "Görüntüle" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name} adlı cihazınız için yeni özellikler var! Yazıcınızın fabrika yazılımını güncellemeniz önerilir." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Yeni %s bellenimi mevcut" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "Nasıl güncellenir" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "Güncelleme bilgilerine erişilemedi." @@ -531,17 +510,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Katman görünümü" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "Simülasyon Görünümü" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "GCode Değiştir" @@ -555,32 +534,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Desteklerin yazdırılmadığı bir hacim oluşturun." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura anonimleştirilmiş kullanım istatistikleri toplar." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "Veri Toplanıyor" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "Daha fazla bilgi" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Cura’nın gönderdiği veriler hakkında daha fazla bilgi alın" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "İzin Verme" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Programın gelecek sürümlerinin iyileştirilmesine yardımcı olmak için Cura’ya anonimleştirilmiş kullanım istatistikleri gönderme izni verin. Tercih ve ayarlarınızın bazıları, Cura sürümü ve dilimlere ayırdığınız modellerin sağlaması gönderilir." @@ -590,18 +569,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 profilleri" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender dosyası" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\" quality!\nFell back to \"{}\" kullanarak dışarı aktarım yapılamadı." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +594,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF Resmi" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Mevcut malzeme, seçilen makine veya yapılandırma ile uyumlu olmadığından mevcut malzeme ile dilimlenemedi." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "Dilimlenemedi" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Geçerli ayarlarla dilimlenemiyor. Şu ayarlarda hata var: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Modele özgü ayarlar nedeniyle dilimlenemedi. Şu ayarlar bir veya daha fazla modelde hataya yol açıyor: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "İlk direk veya ilk konum(lar) geçersiz olduğu için dilimlenemiyor." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Modeller yapı hacmine sığmadığı için dilimlenecek bir şey yok. Lütfen sığdırmak için modelleri ölçeklendirin veya döndürün." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "Katmanlar İşleniyor" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "Bilgi" @@ -696,18 +670,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "Özel" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF Dosyası" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "Nozül" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +703,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G Dosyası" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code ayrıştırma" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code Ayrıntıları" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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." @@ -740,16 +725,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura Profili" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "Profil Asistanı" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "Profil Asistanı" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF dosyası" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura Projesi 3MF dosyası" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -831,19 +831,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "Bilinmiyor" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Önceden dilimlenmiş dosya {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Dosya Zaten Mevcut" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +855,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Geçersiz kılınmadı" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Seçilen malzeme, seçilen makine veya yapılandırma ile uyumlu değil." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Uyumsuz Malzeme" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, 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]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "Ayarlar güncellendi" @@ -954,13 +954,13 @@ 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:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Mevcut yapılandırma için bir kalite tipi {0} bulunamıyor." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +987,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tüm Dosyalar (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "Özel Malzeme" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "Özel" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Yapı Disk Bölümü" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Kullanıcı veri dizininden arşiv oluşturulamadı: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "Yedekle" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Uygun veri veya meta veri olmadan Cura yedeği geri yüklenmeye çalışıldı." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Geçerli sürümünüzle eşleşmeyen bir Cura yedeği geri yüklenmeye çalışıldı." @@ -1033,32 +1033,32 @@ 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:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Nesne Yerleştiriliyor" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 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/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Nesneler için yeni konum bulunuyor" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Konumu Buluyor" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Konum Bulunamıyor" @@ -1076,7 +1076,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Ultimaker Cura doğru görünmeyen bir şeyle karşılaştı.

\n

Başlatma esnasında kurtarılamaz bir hata ile karşılaştık. Muhtemelen bazı hatalı yapılandırma dosyalarından kaynaklanıyordu. Yapılandırmanızı yedekleyip sıfırlamanızı öneriyoruz.

\n

Yedekler yapılandırma klasöründe bulunabilir.

\n

Sorunu düzeltmek için lütfen bu Çökme Raporunu bize gönderin.

\n " +msgstr "" +"

Ultimaker Cura doğru görünmeyen bir şeyle karşılaştı.

\n" +"

Başlatma esnasında kurtarılamaz bir hata ile karşılaştık. Muhtemelen bazı hatalı yapılandırma dosyalarından kaynaklanıyordu. Yapılandırmanızı yedekleyip sıfırlamanızı öneriyoruz.

\n" +"

Yedekler yapılandırma klasöründe bulunabilir.

\n" +"

Sorunu düzeltmek için lütfen bu Çökme Raporunu bize gönderin.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1109,7 +1114,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

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

\n" " " -msgstr "

Cura’da onarılamaz bir hata oluştu. Lütfen sorunu çözmek için bize Çökme Raporunu gönderin

\n

Sunucularımıza otomatik olarak bir hata raporu yüklemek için lütfen \"Rapor gönder\" düğmesini kullanın

\n " +msgstr "" +"

Cura’da onarılamaz bir hata oluştu. Lütfen sorunu çözmek için bize Çökme Raporunu gönderin

\n" +"

Sunucularımıza otomatik olarak bir hata raporu yüklemek için lütfen \"Rapor gönder\" düğmesini kullanın

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1189,223 +1197,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "Rapor gönder" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Makineler yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Görünüm ayarlanıyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Arayüz yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Seçilen model yüklenemeyecek kadar küçüktü." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Makine Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Yazıcı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Yazıcı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Genişlik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Derinlik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Yükseklik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Yapı levhası şekli" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Merkez nokta" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Isıtılmış yatak" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code türü" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Yazıcı Başlığı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının solundan nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının ön kısmından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının sağından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının arkasından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Portal yüksekliği" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Nozül ucu ve portal sistemi (X ve Y aksları) arasındaki yükseklik farkı. “Birer birer” çıktı alırken önceki çıktılar ile portalın çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Ekstrüder Sayısı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-code’u Başlat" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Başlangıçta yürütülecek G-code komutları." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-code’u Sonlandır" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Bitişte yürütülecek G-code komutları." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Nozül Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Nozzle boyutu" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Uyumlu malzeme çapı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Yazıcı tarafından desteklenen nominal filaman çapı. Tam çap malzeme ve/veya profil tarafından etkisiz kılınacaktır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozül X ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozül Y ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Ekstruder G-Code'u Başlatma" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "Ekstruder G-Code'u Sonlandırma" @@ -1425,29 +1433,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Cura Paket veri tabanına bağlanılamadı. Lütfen bağlantınızı kontrol edin." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "Eklentiler" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Malzemeler" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "Sürüm" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "Son güncelleme" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "Yazar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "Bilinmiyor" @@ -1480,16 +1501,56 @@ msgctxt "@action:button" msgid "Back" msgstr "Geri" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Pakette değişikliklerin geçerli olması için Cura’yı yeniden başlatmalısınız." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura’dan Çıkın" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1521,7 +1582,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Bu eklenti bir lisans içerir.\nBu eklentiyi yüklemek için bu lisansı kabul etmeniz gerekir.\nAşağıdaki koşulları kabul ediyor musunuz?" +msgstr "" +"Bu eklenti bir lisans içerir.\n" +"Bu eklentiyi yüklemek için bu lisansı kabul etmeniz gerekir.\n" +"Aşağıdaki koşulları kabul ediyor musunuz?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1533,12 +1597,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Reddet" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Öne Çıkan" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Uyumluluk" @@ -1548,10 +1612,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Paketler alınıyor..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "İletişim" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1565,9 +1634,9 @@ msgstr "Değişiklik Günlüğü" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1615,356 +1684,365 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Kullanıcı Anlaşması" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "Mevcut Bağlantı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ağ Yazıcısına Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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\nAşağıdaki listeden yazıcınızı seçin:" +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:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Ekle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "Düzenle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Kaldır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "Yenile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 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/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "Tür" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "Üretici yazılımı sürümü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Bu yazıcı, Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Bu yazıcı, %1 Ultimaker 3 yazıcı grubunun ana makinesidir." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 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/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "Yazıcı Adresi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" 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." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Tamam" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "Yazıcı seçimi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "Yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Yazıcı Ekle/Kaldır" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Yazdırma işlerini varsayılan web tarayıcınızda açar." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Yazdırma işlerini görüntüle" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Yazdırmaya hazırlanıyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Yazdırma" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "Mevcut" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Yazıcı bağlantısı koptu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Mevcut değil" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Bilinmiyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Devre dışı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Rezerve edildi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "Tamamlandı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Yazdırmaya hazırlanıyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "Eylem gerekli" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Duraklatıldı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Devam ediliyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Yazdırma durduruldu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Yazdırma işleri kabul edilmiyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "Şu tarihlerde bitirir: " - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "Yapı levhasını temizle" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Yapılandırma değişikliğini bekliyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Yazdırma görevleri" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "Yazdırma" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "Kuyrukta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Yazıcılar" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "Yazdırma" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Yazıcıları görüntüle" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Yazdırmayı durdur" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "Tamamlandı" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Hazırlanıyor" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "Duraklatıldı" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Devam ediliyor" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "Eylem gerekli" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Yazıcıya Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "Yazıcı yapılandırmasını Cura’ya yükle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Yapılandırmayı Etkinleştir" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Renk şeması" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Malzeme Rengi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Çizgi Tipi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Besleme hızı" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Katman kalınlığı" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Uyumluluk Modu" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Geçişleri Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Yardımcıları Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Kabuğu Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Dolguyu Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Yalnızca Üst Katmanları Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "En Üstteki 5 Ayrıntılı Katmanı Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Üst / Alt" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "İç Duvar" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "maks" @@ -2084,53 +2162,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Düzeltme" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Ağ Tipi" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normal model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Destek olarak yazdır" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Diğer modellerle örtüşmeyi destekleme" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Diğer modellerle örtüşme ayarlarını değiştir" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Diğer modellerle doldurma ayarlarını değiştir" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "Ayarları seçin" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Bu modeli Özelleştirmek için Ayarları seçin" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrele..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "Tümünü göster" @@ -2152,13 +2230,13 @@ msgid "Create new" msgstr "Yeni oluştur" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Özet - Cura Projesi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Yazıcı ayarları" @@ -2175,7 +2253,7 @@ msgid "Update" msgstr "Güncelle" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tür" @@ -2186,7 +2264,7 @@ msgid "Printer Group" msgstr "Yazıcı Grubu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profil ayarları" @@ -2198,19 +2276,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "İsim" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 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/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2318,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Malzemedeki çakışma nasıl çözülmelidir?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Görünürlük ayarı" @@ -2251,13 +2329,13 @@ msgid "Mode" msgstr "Mod" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Görünür ayarlar:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2272,6 +2350,82 @@ msgctxt "@action:button" msgid "Open" msgstr "Aç" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Dışa Aktar" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00sa 00dk" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "Maliyet koşulları" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1 m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "Toplam:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1 m / ~ %2 g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1 m / ~ %2 g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2490,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Lütfen yazıcıyı çıkarın " -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Durdur" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Devam et" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Yazdırmayı Durdur" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Yazdırmayı durdur" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2526,7 +2664,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Bazı profil ayarlarını özelleştirdiniz.\nBu ayarları kaydetmek veya iptal etmek ister misiniz?" +msgstr "" +"Bazı profil ayarlarını özelleştirdiniz.\n" +"Bu ayarları kaydetmek veya iptal etmek ister misiniz?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2684,17 @@ msgid "Customized" msgstr "Özelleştirilmiş" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Her zaman sor" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "İptal et ve bir daha sorma" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Kaydet ve bir daha sorma" @@ -2576,101 +2714,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Yeni Profil Oluştur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Bilgi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Çap Değişikliğini Onayla" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Görünen Ad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Malzeme Türü" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Renk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Özellikler" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Yoğunluk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Çap" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Filaman masrafı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Filaman ağırlığı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Filaman uzunluğu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Metre başına maliyet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 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/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Malzemeyi Ayır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Tanım" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Yapışma Bilgileri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Etkinleştir" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Oluştur" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "İçe Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Malzemeyi İçe Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Malzemeyi Dışa Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +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ı" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,7 +2917,7 @@ msgid "Unit" msgstr "Birim" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "Genel" @@ -2899,8 +3109,8 @@ msgstr "Bir proje dosyası açıldığında varsayılan davranış: " #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Her zaman sor" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2919,77 +3129,75 @@ msgstr "Bir profil üzerinde değişiklik yapıp farklı bir profile geçtiğini #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "Profilin Üzerine Yaz" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "Gizlilik" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 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:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonim) yazdırma bilgisi gönder" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "Daha fazla bilgi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "Deneysel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 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:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 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/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Yeni yüklenen modeller yapılı levhaya mı yerleştirilsin? Çok yapılı levha ile birlikte kullanılır (DENEYSEL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Yüklemenin ardından nesneleri yerleştirme" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "Yazıcılar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Etkinleştir" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3033,7 +3241,7 @@ msgid "Aborting print..." msgstr "Yazdırma durduruluyor..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "Profiller" @@ -3048,18 +3256,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "İçe Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Dışa Aktar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3266,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profili Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Kaldırmayı Onayla" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,96 +3286,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Yazıcı: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Korunan profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Özel profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 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:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Geçerli değişiklikleri iptal et" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 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:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Küresel Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Malzemeler" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Oluştur" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Çoğalt" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Malzemeyi İçe Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -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/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Malzemeyi Dışa Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -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ı" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Yazıcı" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "Yazıcı Ekle" @@ -3206,6 +3337,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "Yazıcı Ekle" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3226,7 +3362,9 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\nCura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" +msgstr "" +"Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\n" +"Cura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3339,7 +3477,10 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n\nProfil yöneticisini açmak için tıklayın." +msgstr "" +"Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n" +"\n" +"Profil yöneticisini açmak için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 msgctxt "@label:textbox" @@ -3356,33 +3497,33 @@ 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:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Bu ayarı gizle" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Bu ayarı gösterme" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 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:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Görünürlük ayarını yapılandır..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Tümünü Daralt" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Tümünü Genişlet" @@ -3393,7 +3534,10 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n\nBu ayarları görmek için tıklayın." +msgstr "" +"Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n" +"\n" +"Bu ayarları görmek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3421,7 +3565,10 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Bu ayarın değeri profilden farklıdır.\n\nProfil değerini yenilemek için tıklayın." +msgstr "" +"Bu ayarın değeri profilden farklıdır.\n" +"\n" +"Profil değerini yenilemek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 msgctxt "@label" @@ -3429,7 +3576,10 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n\nHesaplanan değeri yenilemek için tıklayın." +msgstr "" +"Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n" +"\n" +"Hesaplanan değeri yenilemek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3617,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s 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:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Ekstrüder" @@ -3520,7 +3670,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Bu ekstrudere takılan nozül." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Yapı levhası" @@ -3545,6 +3695,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Yazdırma öncesinde yatağı ısıt. Isıtma sırasında yazdırma işinizi ayarlamaya devam edebilirsiniz. Böylece yazdırmaya hazır olduğunuzda yatağın ısınmasını beklemeniz gerekmez." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3639,40 +3804,15 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Yazdırma Ayarı devre dışı\nG-code dosyaları üzerinde değişiklik yapılamaz" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00sa 00dk" +msgstr "" +"Yazdırma Ayarı devre dışı\n" +"G-code dosyaları üzerinde değişiklik yapılamaz" #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "Zaman Özellikleri" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "Maliyet koşulları" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1 m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1 g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "Toplam:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3683,22 +3823,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Özel Yazıcı Ayarları

Dilimleme işleminin her bir bölümünü detaylıca kontrol ederek yazdırın." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Geçerli yazdırma" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "İşin Adı" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Yazdırma süresi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Kalan tahmini süre" @@ -3804,184 +3944,183 @@ msgid "About..." msgstr "Hakkında..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 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:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 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:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modeli Sil" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modeli Platformda Ortala" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelleri Gruplandır" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Model Grubunu Çöz" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Modelleri Birleştir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Modeli Çoğalt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Tüm modelleri Seç" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Yapı Levhasını Temizle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Tüm Modelleri Yeniden Yükle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 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:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Tüm Modelleri Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Seçimi Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 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:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 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:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Dosya Aç..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Yeni Proje..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Motor Günlüğünü Göster..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Paketlere gözat..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Kenar Çubuğunu Genişlet/Daralt" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Lütfen bir 3D model yükleyin" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Dilimlemeye hazır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Dilimleniyor..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 Hazır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Dilimlenemedi" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Dilimleme kullanılamıyor" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Mevcut yazdırma görevini dilimlere ayır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Dilimleme sürecini iptal et" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Hazırla" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "İptal Et" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Etkin çıkış aygıtını seçin" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "Dosya aç" @@ -4001,129 +4140,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Dosya" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Seçimi Dosyaya Kaydet" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "&Farklı Kaydet" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Kaydet&Projelendir..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "Düz&enle" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "&Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "&Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Yazıcı" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "&Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Etkin Ekstruder olarak ayarla" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ekstruderi Etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Ekstruderi Devre Dışı Bırak" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Yapı levhası" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Uzantılar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Araç kutusu" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Tercihler" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Yardım" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 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:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "Dosya Aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "Yeni proje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Yeni bir proje başlatmak istediğinizden emin misiniz? Bu işlem yapı levhasını ve kaydedilmemiş tüm ayarları silecektir." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "Paketi Kur" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "Dosya Aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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." @@ -4133,112 +4288,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projeyi Kaydet" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Baskı tepsisi" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & malzeme" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 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/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Kaydet" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Katman Yüksekliği" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" 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 bunları değiştirin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Özel bir profil şu anda aktif. Kalite kaydırıcısını etkinleştirmek için Özel sekmesinde varsayılan bir kalite seçin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Yazdırma Hızı" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Daha yavaş" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Daha Hızlı" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Bazı profil ayarlarını değiştirdiniz. Bunları değişiklikleri kaydetmek istiyorsanız, özel moda gidin." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Dolgu" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Kademeli dolgu, yukarıya doğru dolgu miktarını kademeli olarak yükselecektir." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "Kademeli özelliği etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "Oluşturma Desteği" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Destek için kullanacağınız ekstruderi seçin. Bu, modelin havadayken düşmesini veya yazdırılmasını önlemek için modelin altındaki destekleyici yapıları güçlendirir." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Yapı Levhası Yapıştırması" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 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." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Yazıcı çıktılarınızı iyileştirmek için yardıma mı ihtiyacınız var?
Ultimaker Sorun Giderme Kılavuzlarını okuyun" @@ -4285,22 +4440,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Yazıcı türü" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Bu malzeme kombinasyonuyla yapışkanlı kağıt veya yapışkan kullan" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Uyumluluğu Kontrol Et" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Malzemenin uyumluluğunu Ultimaker.com üzerinden kontrol etmek için tıklayın." @@ -4390,16 +4545,6 @@ msgctxt "name" msgid "God Mode" msgstr "Tanrı Modu" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-Code’u kabul eder ve WiFi üzerinden Doodle3D WiFi-Box'a gönderir." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4480,16 +4625,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Hazırlık Aşaması" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Doğrudan komut dosyası düzenlemek için düzenleme penceresi sunar." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Canlı komut dosyası aracı" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4600,16 +4735,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Eski Cura Profil Okuyucu" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Cura’da Blender dosyalarını doğrudan açmanıza yardımcı olur." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender Entegrasyonu (deneysel)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4660,6 +4785,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7’den 3.0’a Sürüm Yükseltme" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4770,6 +4905,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura Profili Yazıcı" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "Malzeme üreticilerine bir drop-in UI kullanarak yeni malzeme ve kalite profili oluşturma imkanı sunar." + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "Baskı Profili Asistanı" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4800,6 +4945,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura Profil Okuyucu" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box ile yazdır" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box ile yazdır" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e bağlanıyor" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e veri gönderiliyor" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connect’e veri gönderilemiyor. Hala etkin olan başka bir iş var mı?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connect üzerinde veri depolanıyor" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e dosya gönderildi" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect'i aç.." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect web arayüzünü aç" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender dosyası" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\" quality!\n" +#~ "Fell back to \"{}\" kullanarak dışarı aktarım yapılamadı." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "İletişim" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Bu yazıcı, Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Bu yazıcı, %1 Ultimaker 3 yazıcı grubunun ana makinesidir." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Yazıcı Ekle/Kaldır" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Yazdırma işlerini varsayılan web tarayıcınızda açar." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Yazdırma işlerini görüntüle" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Yazdırmaya hazırlanıyor" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Yazdırma" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Mevcut" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Yazıcı bağlantısı koptu" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Mevcut değil" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Bilinmiyor" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Devre dışı" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Rezerve edildi" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Yazdırmaya hazırlanıyor" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Yazdırma durduruldu" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Yazdırma işleri kabul edilmiyor" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Şu tarihlerde bitirir: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Yapı levhasını temizle" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Yapılandırma değişikliğini bekliyor" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Yazdırma görevleri" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Yazıcılar" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Yazıcıları görüntüle" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Durdur" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Devam et" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Yazdırmayı Durdur" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Her zaman sor" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profilin Üzerine Yaz" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Yeni yüklenen modeller yapılı levhaya mı yerleştirilsin? Çok yapılı levha ile birlikte kullanılır (DENEYSEL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Yüklemenin ardından nesneleri yerleştirme" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Seçimi Dosyaya Kaydet" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "&Farklı Kaydet" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Kaydet&Projelendir..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Bu malzeme kombinasyonuyla yapışkanlı kağıt veya yapışkan kullan" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-Code’u kabul eder ve WiFi üzerinden Doodle3D WiFi-Box'a gönderir." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Doğrudan komut dosyası düzenlemek için düzenleme penceresi sunar." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Canlı komut dosyası aracı" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Cura’da Blender dosyalarını doğrudan açmanıza yardımcı olur." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender Entegrasyonu (deneysel)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Model Kontrol Edici Uyarısı" @@ -5067,10 +5424,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Browse plugins..." #~ msgstr "Eklentilere göz at..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Yapı levhası" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Eklentiler" @@ -5296,14 +5649,6 @@ msgstr "Cura Profil Okuyucu" #~ "\n" #~ "Üzgünüz!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profil Asistanı" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profil Asistanı" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Hiçbir malzeme yüklenmedi" @@ -5434,14 +5779,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Configure setting visiblity..." #~ msgstr "Görünürlük ayarını yapılandır..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m / ~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Otomatik: %1" @@ -5478,14 +5815,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "GCode Profile Reader" #~ msgstr "GCode Profil Okuyucu" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Malzeme üreticilerine bir drop-in UI kullanarak yeni malzeme ve kalite profili oluşturma imkanı sunar." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Baskı Profili Asistanı" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "SolidWorks dosyanızı açarken hata meydana geldi! Lütfen dosyanızın SolidWorks’te sorunsuz açılıp açılmadığını kontrol edin!" @@ -5682,10 +6011,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Bu yazıcı, %1 bağlı Ultimaker 3 yazıcı grubunun ana makinesidir" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Hazırlanıyor" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Tamamlandığı tarih: " diff --git a/resources/i18n/tr_TR/fdmextruder.def.json.po b/resources/i18n/tr_TR/fdmextruder.def.json.po index d8412d67cb..098583a81d 100644 --- a/resources/i18n/tr_TR/fdmextruder.def.json.po +++ b/resources/i18n/tr_TR/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 c7b62f1da3..e8748046c6 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" @@ -56,7 +56,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr " \n ile ayrılan, başlangıçta yürütülecek G-code komutları." +msgstr "" +" \n" +" ile ayrılan, başlangıçta yürütülecek G-code komutları." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +70,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr " \n ile ayrılan, bitişte yürütülecek G-code komutları." +msgstr "" +" \n" +" ile ayrılan, bitişte yürütülecek G-code komutları." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +84,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Malzemedeki GUID Otomatik olarak ayarlanır. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Çap" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Kullanılan filamanın çapını ayarlar. Bu değeri kullanılan filaman çapı ile eşitleyin." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1069,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zikzak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1159,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Halihazırda duvarın olduğu bir yere yazdırılan bir iç duvarın parçaları için akışı telafi eder." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1500,11 +1544,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1530,6 +1569,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "İç duvarın şeklini takip eden bir hattı kullanarak dolgu şeklinin iç duvarla buluştuğu noktada uçları bağlar. Bu ayarın etkinleştirilmesi, dolgunun duvarlara daha iyi yapışmasını sağlayabilir ve dolgunun dikey yüzeylerin kalitesinin etkilerini azaltabilir. Bu ayarın devre dışı bırakılması, kullanılan malzemenin miktarını azaltır." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1609,28 @@ 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_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1941,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "İlk katmanda ısınan yapı levhası için kullanılan sıcaklık." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Çap" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Kullanılan filamanın çapını ayarlar. Bu değeri kullanılan filaman çapı ile eşitleyin." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2778,8 @@ msgstr "Tarama Modu" #: 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 by combing within the infill only." -msgstr "Tarama, hareket sırasında nozülü halihazırda yazdırılmış bölgelerde tutar. Bu şekilde biraz daha uzun hareket hamleleri sağlarken geri çekme ihtiyacını azaltır. Tarama kapatıldığında, malzeme geri çekilecek ve nozül bir sonraki noktaya kadar düz bir çizgide hareket edecektir. Sadece dolgunun taratılmasıyla üst/alt yüzey bölgelerinde taramanın engellenmesi de mümkündür." +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2796,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Yüzey Alanında Değil" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3181,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3241,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Yazdırılan destek yapısı hatları arasındaki mesafe. Bu ayar, destek yoğunluğu ile hesaplanır." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3551,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3586,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Eş Merkezli" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş Merkezli 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3621,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Eş Merkezli" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş Merkezli 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zikzak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3796,9 @@ msgctxt "skirt_gap description" 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 "Baskının eteği ve ilk katmanı arasındaki yatay mesafe.\nMinimum mesafedir. Bu mesafeden çok sayıda etek hattı dışarı doğru uzanır." +msgstr "" +"Baskının eteği ve ilk katmanı arasındaki yatay mesafe.\n" +"Minimum mesafedir. Bu mesafeden çok sayıda etek hattı dışarı doğru uzanır." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3884,8 +3972,8 @@ msgstr "Radyenin taban katmanındaki hatların genişliği. Bunlar, yapı levhas #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Radye Hat Boşluğu" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4190,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Yeterince malzeme temizlemek için ilk direğin her bir katmanı için minimum hacim." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "İlk Direğin Kalınlığı" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Boş olan ilk direğin kalınlığı Kalınlığın Minimum İlk Direk Hacminin yarısından fazla olması ilk direğin yoğun olmasına neden olur." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4230,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Bir nozül ile ilk direği yazdırdıktan sonra, diğer nozülden ilk direğe sızdırılan malzemeyi silin." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Değişimden Sonra Sürme Nozülü" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Ekstruderi değiştirdikten sonra ilk nesne yazdırıldığında nozülden sızan malzemeyi temizleyin. Bu, sızdırılan malzemenin yazdırmanın yüzey kalitesine en az zarar verdiği yerlerde güvenli ve yavaş bir temizleme hareketi gerçekleştirir." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "İlk Direk Temizleme Hacmi" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "İlk direk silinirken temizlenecek olan filaman miktarı. Temizleme işlemi, nozül aktif değilken sızarak kaybolan filamanı dengelemeye yarar." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4715,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Malzeme akışını (saniye başına mm3 bazında) sıcaklığa (santigrat derece) bağlayan veri." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5235,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\nBu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." +msgstr "" +"Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\n" +"Bu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5384,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Daha küçük bir katmanın kullanılıp kullanılmayacağını belirleyen eşik. Bu rakam bir katmandaki en dik eğimin tanjantına eşittir." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5434,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Eğer bir yüzey alanı bölgesi, alanının bu yüzdeden daha azı için destekleniyorsa, köprü ayarlarını kullanarak yazdırın. Aksi halde normal yüzey alanı ayarları kullanılarak yazdırılır." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Köprü Duvarı Maksimum Çıkıntısı" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Bir duvar, köprü ayarları kullanılarak yazdırılmadan önce o duvar çizgisinin altındaki hava bölgesinin maksimum izin verilen genişliği. Duvar çizgisi genişliğinin bir yüzdesi olarak ifade edilir. Hava boşluğu bundan daha geniş olduğunda, duvar çizgisi köprü ayarları kullanılarak yazdırılır. Aksi halde duvar çizgisi normal ayarlar kullanılarak yazdırılır. Değer ne kadar düşük olursa, çıkıntı yapan duvar çizgilerinin köprü ayarları kullanılarak yazdırılması ihtimali o kadar yüksek olur." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5654,66 @@ 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 "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ 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 by combing within the infill only." +#~ msgstr "Tarama, hareket sırasında nozülü halihazırda yazdırılmış bölgelerde tutar. Bu şekilde biraz daha uzun hareket hamleleri sağlarken geri çekme ihtiyacını azaltır. Tarama kapatıldığında, malzeme geri çekilecek ve nozül bir sonraki noktaya kadar düz bir çizgide hareket edecektir. Sadece dolgunun taratılmasıyla üst/alt yüzey bölgelerinde taramanın engellenmesi de mümkündür." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş Merkezli 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş Merkezli 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Radye Hat Boşluğu" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "İlk Direğin Kalınlığı" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Boş olan ilk direğin kalınlığı Kalınlığın Minimum İlk Direk Hacminin yarısından fazla olması ilk direğin yoğun olmasına neden olur." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Değişimden Sonra Sürme Nozülü" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Ekstruderi değiştirdikten sonra ilk nesne yazdırıldığında nozülden sızan malzemeyi temizleyin. Bu, sızdırılan malzemenin yazdırmanın yüzey kalitesine en az zarar verdiği yerlerde güvenli ve yavaş bir temizleme hareketi gerçekleştirir." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "İlk Direk Temizleme Hacmi" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "İlk direk silinirken temizlenecek olan filaman miktarı. Temizleme işlemi, nozül aktif değilken sızarak kaybolan filamanı dengelemeye yarar." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Köprü Duvarı Maksimum Çıkıntısı" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Bir duvar, köprü ayarları kullanılarak yazdırılmadan önce o duvar çizgisinin altındaki hava bölgesinin maksimum izin verilen genişliği. Duvar çizgisi genişliğinin bir yüzdesi olarak ifade edilir. Hava boşluğu bundan daha geniş olduğunda, duvar çizgisi köprü ayarları kullanılarak yazdırılır. Aksi halde duvar çizgisi normal ayarlar kullanılarak yazdırılır. Değer ne kadar düşük olursa, çıkıntı yapan duvar çizgilerinin köprü ayarları kullanılarak yazdırılması ihtimali o kadar yüksek olur." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Geri çekmelerin sayısını ve kat edilen mesafeyi azaltmak için duvarların yazdırıldığı sırayı optimize edin. Çoğu parça, bunun etkinleştirilmesinden yararlanır, ancak bazılarının yararlanması için gerçekte daha uzun bir süre gerekebilir. Bu yüzden, yazdırma süresi tahminlerini optimizasyonlu ve optimizasyonsuz olarak karşılaştırın." diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 019f8bc7c3..3971ec5138 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-22 11:32+0800\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "GCode 文件" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -59,78 +70,17 @@ msgstr "" "

找出如何确保最好的打印质量和可靠性.

\n" "

查看打印质量指南

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D WiFi-Box 打印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D WiFi-Box 打印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "连接至 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "发送数据至 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "无法发送数据至 Doodle3D Connect。 是否有另一项作业仍在进行?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "在 Doodle3D Connect 中存储数据" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "已发送至 Doodle3D Connect 的文件" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "打开 链接..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "打开 Doodle3D Connect Web 界面" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "显示更新日志" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "合并有效设置" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "配置文件已被合并并激活。" @@ -155,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "通过 USB 连接" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -177,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "压缩 G-code 文件" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -199,7 +159,7 @@ msgid "Save to Removable Drive {0}" msgstr "保存到可移动磁盘 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "没有可进行写入的文件格式!" @@ -238,7 +198,7 @@ msgstr "无法保存到可移动磁盘 {0}:{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "错误" @@ -267,8 +227,8 @@ msgstr "弹出可移动设备 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -295,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "可移动磁盘" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "已通过网络连接。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "已通过网络连接。请在打印机上接受访问请求。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "已通过网络连接,但没有打印机的控制权限。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "已发送打印机访问请求,请在打印机上批准该请求。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "身份验证状态" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "身份验证状态" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "重试" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "重新发送访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "打印机接受了访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "无法使用本打印机进行打印,无法发送打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "请求访问" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "向打印机发送访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "无法启动新的打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "配置不匹配" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "您确定要使用所选配置进行打印吗?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "发送新作业(暂时)受阻,仍在发送前一份打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "向打印机发送数据" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "正在发送数据" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "插槽 {slot_number} 中未加载 Printcore" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "插槽 {slot_number} 中未加载材料" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "与您的打印机同步" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "您想在 Cura 中使用当前的打印机配置吗?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "已通过网络连接。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "打印作业已成功发送到打印机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "数据已发送" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "在监控器中查看" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "打印作业 '{job_name}' 已完成。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "打印完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "通过网络连接" @@ -510,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "监控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "您的 {machine_name} 有新功能可用! 建议您更新打印机上的固件。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "新 %s 固件可用" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "如何更新" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "无法获取更新信息。" @@ -537,17 +512,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分层视图" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "仿真视图" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "修改 G-Code 文件" @@ -561,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "创建一个不打印支撑的体积。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura 将收集匿名的使用统计数据。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "正在收集数据" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "详细信息" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "请参阅更多关于Cura发送的数据的信息。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "允许" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "允许 Cura 发送匿名的使用统计数据,以帮助确定将来 Cura 的改进优先顺序。已发送您的一些偏好和设置,Cura 版本和您正在切片的模型的散列值。" @@ -596,20 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 配置文件" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 文件" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"无法使用 \"{}\" 导出质量!\n" -"返回 \"{}\"。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -635,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 图像" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "无法使用当前材料进行切片,因为该材料与所选机器或配置不兼容。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "无法切片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "无法使用当前设置进行切片。以下设置存在错误:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "因部分特定模型设置而无法切片。 以下设置在一个或多个模型上存在错误: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "无法切片(原因:主塔或主位置无效)。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "无法执行,因为没有一个模型符合成形空间体积。请缩放或旋转模型以适应打印平台。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "正在处理层" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "信息" @@ -704,18 +672,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "自定义" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 文件" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "喷嘴" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -726,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 文件" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 详细信息" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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 文件可能不准确。" @@ -748,16 +727,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 配置文件" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "配置文件助手" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "配置文件助手" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 文件" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 项目 3MF 文件" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -839,19 +833,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "未知" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "预切片文件 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "文件已存在" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -863,23 +857,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "未覆盖" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "所选材料与所选机器或配置不兼容。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不兼容材料" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "已根据挤出机的当前可用性更改设置:[%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "设置已更新" @@ -962,13 +956,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "配置文件缺少打印质量类型定义。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "无法为当前配置找到质量类型 {0}。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -995,42 +989,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有文件 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "自定义材料" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "自定义" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "成形空间体积" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "不能从用户数据目录创建存档: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "备份" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "试图在没有适当数据或元数据的情况下恢复Cura备份。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "试图恢复与您当前版本不匹配的Cura备份。" @@ -1041,32 +1035,32 @@ msgid "Multiplying and placing objects" msgstr "复制并放置模型" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "无法在成形空间体积内放下全部模型" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "正在为模型寻找新位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "正在寻找位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "找不到位置" @@ -1205,223 +1199,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "发送报告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在载入打印机..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在设置场景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在载入界面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "所选模型过小,无法加载。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "打印机设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "打印机" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "打印机设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (宽度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "打印平台形状" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "置中" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "加热床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 风格" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "打印头设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头左侧至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头前端至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头右侧至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头后部至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "十字轴高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "喷嘴尖端与十字轴系统(X 轴和 Y 轴)之间的高度差。 用于防止“排队”打印时之前的打印品与十字轴发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "挤出机数目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "将在开始时执行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "结束 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "将在结束时执行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "喷嘴设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "喷嘴孔径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "兼容的材料直径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "打印机所支持耗材的公称直径。 材料和/或配置文件将覆盖精确直径。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "喷嘴偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "喷嘴偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "挤出机的开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "挤出机的结束 G-code" @@ -1441,29 +1435,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "无法连接到Cura包数据库。请检查您的连接。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "插件" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "材料" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "版本" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "更新日期" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "未知" @@ -1496,16 +1503,56 @@ msgctxt "@action:button" msgid "Back" msgstr "背部" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "在包装更改生效之前,您需要重新启动Cura。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "退出 Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1552,12 +1599,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒绝" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "精选" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "兼容性" @@ -1567,10 +1614,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "获取包……" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "联系方式" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1584,9 +1636,9 @@ msgstr "更新日志" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1634,22 +1686,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "用户协议" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "现有连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "连接到网络打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1660,333 +1712,339 @@ msgstr "" "\n" "从以下列表中选择您的打印机:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "添加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "编辑" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "删除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果您的打印机未列出,请阅读网络打印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "类型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "固件版本" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "地址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机。" +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "这台打印机是一组共 %1 台已连接 Ultimaker 3 打印机的主机。" +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "该网络地址的打印机尚未响应。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "打印机网络地址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "输入打印机在网络上的 IP 地址或主机名。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "确定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "打印机选择" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "添加/删除打印机" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "使用默认 Web 浏览器打开打印作业页面。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "查看打印作业" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "正在准备打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "可用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "与打印机的连接中断" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "不可用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "已禁用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "保留" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "已完成" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "正在准备打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "需要采取行动" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "已暂停" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "恢复" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "打印已中止" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "不接受打印作业" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "完成时间:" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "清空打印平台" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "正在等待配置更改" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "打印作业" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "已排队" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "查看打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "中止打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "已完成" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "准备" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "已暂停" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "恢复" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "需要采取行动" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "连接到打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "将打印机配置导入 Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "应用配置" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "颜色方案" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "材料颜色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "走线类型" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "进给速度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "层厚度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "兼容模式" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "显示移动轨迹" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "显示打印辅助结构" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "显示外壳" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "显示填充" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "只显示顶层" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "在顶部显示 5 层打印细节" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "顶 / 底层" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "内壁" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大" @@ -2106,53 +2164,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "平滑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "网格类型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "正常模式" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "打印为支撑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "不支持与其他模型重叠" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "修改与其他模型重叠的设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "修改其他模型填充物的设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "选择设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "选择对此模型的自定义设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "筛选…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "显示全部" @@ -2174,13 +2232,13 @@ msgid "Create new" msgstr "新建" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "摘要 - Cura 项目" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "打印机设置" @@ -2197,7 +2255,7 @@ msgid "Update" msgstr "更新" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "类型" @@ -2208,7 +2266,7 @@ msgid "Printer Group" msgstr "打印机组" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "配置文件设置" @@ -2220,19 +2278,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "名字" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "不在配置文件中" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2260,7 +2318,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "材料的设置冲突应如何解决?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "设置可见性" @@ -2271,13 +2329,13 @@ msgid "Mode" msgstr "模式" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "可见设置:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2292,6 +2350,82 @@ msgctxt "@action:button" msgid "Open" msgstr "打开" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "导出" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 小时 00 分" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "成本规定" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "总计:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2510,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "请取出打印件" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "暂停" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "恢复" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "中止打印" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "中止打印" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2566,19 +2684,17 @@ msgid "Customized" msgstr "自定义" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "总是询问" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "舍弃更改,并不再询问此问题" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "保留更改,并不再询问此问题" @@ -2598,101 +2714,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "创建新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "确认直径更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "显示名称" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "材料类型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "颜色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "属性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "耗材长度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "每米成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "此材料与 %1 相关联,并共享其某些属性。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "解绑材料" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "粘附信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "激活" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "创建" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "导入" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "导入配置" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "导出材料" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "成功导出材料至: %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2729,7 +2917,7 @@ msgid "Unit" msgstr "单位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "基本" @@ -2921,8 +3109,8 @@ msgstr "打开项目文件时的默认行为:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "总是询问" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2941,77 +3129,75 @@ msgstr "当您对配置文件进行更改并切换到其他配置文件时将显 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "重写配置文件" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "隐私" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "启动时检查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)发送打印信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "详细信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "实验性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "使用多打印平台功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "使用多打印平台功能(需要重启)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "是否在打印平台上编位新加载的模型?与多打印平台结合使用(实验性)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "不要编位加载的对象" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "打印机" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "激活" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3055,7 +3241,7 @@ msgid "Aborting print..." msgstr "中止打印..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "配置文件" @@ -3070,18 +3256,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "复制" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "导入" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "导出" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3092,18 +3266,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "复制配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "确认删除" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3124,96 +3286,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "打印机:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "受保护的配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "自定义配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用当前设置 / 重写值更新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "舍弃当前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "您当前的设置与选定的配置文件相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局设置" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "材料" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "创建" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "复制" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "导入配置" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "成功导入材料 %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "导出材料" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "成功导出材料至: %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "打印机" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "新增打印机" @@ -3228,6 +3337,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "新增打印机" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3383,33 +3497,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "将所有修改值复制到所有挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "隐藏此设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "不再显示此设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此设置可见" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "配置设定可见性..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "全部折叠" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "全部展开" @@ -3503,7 +3617,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "向连接的打印机发送自定义 G-code 命令。按“Enter”发送命令。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "挤出机" @@ -3556,7 +3670,7 @@ msgid "The nozzle inserted in this extruder." msgstr "该挤出机所使用的喷嘴。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "打印平台" @@ -3581,6 +3695,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "打印前请预热热床。您可以在热床加热时继续调整相关项,让您在准备打印时不必等待热床加热完毕。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3677,38 +3806,11 @@ msgstr "" "打印设置已禁用\n" "G-code 文件无法被修改" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00 小时 00 分" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "时间规格" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "成本规定" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "总计:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3719,22 +3821,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "自定义打印设置

对切片过程中的每一个细节进行精细控制。" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "正在打印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "作业名" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "打印时间" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "预计剩余时间" @@ -3840,181 +3942,180 @@ msgid "About..." msgstr "关于…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "删除所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "居中所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "复制所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "删除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "使模型居于平台中央(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "绑定模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "拆分模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "合并模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "复制模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "选择所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "清空打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "重新载入所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "将所有模型编位到所有打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "编位所有的模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "为所选模型编位" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "复位所有模型的位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "复位所有模型的变动" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "打开文件(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建项目(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "显示引擎日志(&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "显示配置文件夹" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "浏览包……" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "展开/折叠侧边栏" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "请载入一个 3D 模型" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "切片已准备就绪" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 已准备就绪" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "无法切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "切片不可用" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "分割当前打印作业" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "取消切片流程" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "准备" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "选择活动的输出装置" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "打开文件" @@ -4034,129 +4135,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "文件(&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "保存到文件(&S)" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "另存为(&A)…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "保存项目(&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "编辑(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "视图(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "设置(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "打印机(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "材料(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "设为主要挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "启用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "禁用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "打印平台(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "配置文件(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "扩展(&X)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&工具箱" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "偏好设置(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "帮助(&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "这个包将在重新启动后安装。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "打开文件" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "设置" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "新建项目" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "你确定要开始一个新项目吗?这将清除打印平台及任何未保存的设置。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "安装包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "打开文件" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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 文件,请仅选择一个。" @@ -4166,112 +4283,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "保存项目" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "打印平台" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "挤出机 %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 材料" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存时不再显示项目摘要" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "保存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "层高" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "此质量配置文件不适用于当前材料和喷嘴配置。请更改配置以便启用此配置文件" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "自定义配置文件目前处于活动状态。 如要启用质量滑块,请在“自定义”选项卡中选择一个默认质量配置文件" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "打印速度" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "更慢" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "更快" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "您已修改部分配置文件设置。 如果您想对其进行更改,请转至自定义模式。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "渐层填充(Gradual infill)将随着打印高度的提升而逐渐加大填充密度。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "启用渐层" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "生成支撑" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "选择用于支撑的挤出机。该挤出机将在模型之下建立支撑结构,以防止模型下垂或在空中打印。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "打印平台附着" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 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。这将在您的对象周围或下方添加一个容易切断的平面区域。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "需要帮助改善您的打印?
阅读 Ultimaker 故障排除指南" @@ -4317,22 +4434,22 @@ msgctxt "@label" msgid "Printer type" msgstr "打印机类型:" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "材料" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "在此材料组合的情况下,请使用附着垫片或者胶水" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "检查兼容性" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "点击查看 Ultimaker.com 上的材料兼容情况。" @@ -4422,16 +4539,6 @@ msgctxt "name" msgid "God Mode" msgstr "God 模式" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "接受 G-Code 并通过 WiFi 将其发送到 Doodle3D WiFi-Box。" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4512,16 +4619,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "准备阶段" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "提供直接脚本编辑的编辑窗口。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "实时脚本工具" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4632,16 +4729,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "旧版 Cura 配置文件读取器" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "帮助直接在 Cura 中打开 Blender 文件。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 集成(实验性)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4692,6 +4779,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "版本自 2.7 升级到 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4802,6 +4899,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura 配置文件写入器" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "允许材料制造商使用下拉式 UI 创建新的材料和质量配置文件。" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "打印配置文件助手" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4832,6 +4939,218 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 配置文件读取器" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D WiFi-Box 打印" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D WiFi-Box 打印" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "连接至 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "发送数据至 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "无法发送数据至 Doodle3D Connect。 是否有另一项作业仍在进行?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "在 Doodle3D Connect 中存储数据" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "已发送至 Doodle3D Connect 的文件" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "打开 链接..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "打开 Doodle3D Connect Web 界面" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 文件" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "无法使用 \"{}\" 导出质量!\n" +#~ "返回 \"{}\"。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "联系方式" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ 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" +#~ msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "添加/删除打印机" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "使用默认 Web 浏览器打开打印作业页面。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "查看打印作业" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "正在准备打印" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "打印" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "可用" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "与打印机的连接中断" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "不可用" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "已禁用" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "保留" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "正在准备打印" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "打印已中止" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "不接受打印作业" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "完成时间:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "清空打印平台" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "正在等待配置更改" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "打印作业" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "打印机" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "查看打印机" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "暂停" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "恢复" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "中止打印" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "总是询问" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "重写配置文件" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "是否在打印平台上编位新加载的模型?与多打印平台结合使用(实验性)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "不要编位加载的对象" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "保存到文件(&S)" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "另存为(&A)…" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "保存项目(&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "在此材料组合的情况下,请使用附着垫片或者胶水" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "接受 G-Code 并通过 WiFi 将其发送到 Doodle3D WiFi-Box。" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "提供直接脚本编辑的编辑窗口。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "实时脚本工具" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "帮助直接在 Cura 中打开 Blender 文件。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 集成(实验性)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "模型检查器警告" @@ -5099,10 +5418,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "Browse plugins..." #~ msgstr "浏览插件..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "打印平台(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "插件" @@ -5328,14 +5643,6 @@ msgstr "Cura 配置文件读取器" #~ "\n" #~ "很抱歉!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "配置文件助手" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "配置文件助手" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "未加载材料" @@ -5466,14 +5773,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "Configure setting visiblity..." #~ msgstr "配置设置可见性..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自动:%1" @@ -5510,14 +5809,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "GCode Profile Reader" #~ msgstr "GCode 配置文件读取器" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "允许材料制造商使用下拉式 UI 创建新的材料和质量配置文件。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "打印配置文件助手" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "打开 SolidWorks 文件时发生错误! 请检查能否在 SolidWorks 中正常打开文件而不出现任何问题!" @@ -5713,10 +6004,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "这台打印机是一组 %1 台已连接 Ultimaker 3 打印机的主机" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "准备" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完成时间: " diff --git a/resources/i18n/zh_CN/fdmextruder.def.json.po b/resources/i18n/zh_CN/fdmextruder.def.json.po index 0ab1209fae..90fd998f6b 100644 --- a/resources/i18n/zh_CN/fdmextruder.def.json.po +++ b/resources/i18n/zh_CN/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\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 b73600c3ef..aa4c9b7d2f 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-22 11:44+0800\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" @@ -86,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "材料 GUID,此项为自动设置。" +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直径" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "调整所用耗材的直径。 将此值与所用耗材的直径匹配。" + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1061,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "锯齿状" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1141,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "在内壁已经存在时补偿所打印内壁部分的流量。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1506,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "同心圆" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立体同心圆" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1536,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "使用沿内壁形状的走线连接填充图案与内壁相接的各端。启用此设置会使填充更好地粘着在壁上,减少填充物效果对垂直表面质量的影响。禁用此设置可减少使用的材料量。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1566,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充图案沿 Y 轴移动此距离。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1876,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "用于第一层加热打印平台的温度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直径" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "调整所用耗材的直径。 将此值与所用耗材的直径匹配。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2723,8 +2780,8 @@ msgstr "梳理模式" #: 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 by combing within the infill only." -msgstr "梳理可在空驶时让喷嘴保持在已打印区域内。 这会使空驶距离稍微延长,但可减少回抽需求。 如果关闭梳理,则材料将回抽,且喷嘴沿着直线移动到下一个点。 也可以通过仅在填充物内进行梳理避免梳理顶部/底部皮肤区域。" +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2741,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "除了皮肤" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3121,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3186,6 +3243,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "已打印支撑结构走线之间的距离。 该设置通过支撑密度计算。" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3476,11 +3553,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3516,11 +3588,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "同心圆" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立体同心圆" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3556,16 +3623,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "锯齿形" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3892,8 +3974,8 @@ msgstr "基础 Raft 层的走线宽度。 这些走线应该是粗线,以便 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Raft 走线间距" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4110,16 +4192,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "为了清除足够的材料,装填塔每层的最小体积。" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "装填塔厚度" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "空装填塔的厚度。 如果厚度大于装填塔最小体积的一半,则将打造一个密集的装填塔。" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4160,26 +4232,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "在用一个喷嘴打印装填塔后,从装填塔上的另一个喷嘴擦去渗出的材料。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "切换后擦拭喷嘴" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "切换挤出机后,在打印的第一个物件上擦去喷嘴上的渗出材料。 这会在渗出材料对打印品表面品质造成最小损害的位置进行缓慢安全的擦拭动作。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "装填塔清洗量" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "在装填塔上进行擦拭时要清洗的耗材量。 清洗可用于补偿在喷嘴不活动期间由于渗出而损失的耗材。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4665,6 +4717,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "数据连接材料流量(mm3/s)到温度(摄氏度)。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5324,6 +5386,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "决定是否使用较小图层的阈值。该数字相当于一层中最大坡度的切线。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5354,16 +5436,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "如果受支撑的表面区域小于整个区域的这一百分比,则使用连桥设置打印。否则,使用正常表面设置打印。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "桥壁最大悬垂" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "在使用连桥设置打印壁之前,壁线下净空区域的最大允许宽度。以壁线宽度的百分比表示。如果间隙大于此宽度,则使用连桥设置打印壁线。否则,将使用正常设置打印壁线。此值越小,使用连桥设置打印悬垂壁线的可能性越大。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5584,6 +5656,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "在将模型从文件中载入时应用在模型上的转换矩阵。" +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立体同心圆" + +#~ 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 by combing within the infill only." +#~ msgstr "梳理可在空驶时让喷嘴保持在已打印区域内。 这会使空驶距离稍微延长,但可减少回抽需求。 如果关闭梳理,则材料将回抽,且喷嘴沿着直线移动到下一个点。 也可以通过仅在填充物内进行梳理避免梳理顶部/底部皮肤区域。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立体同心圆" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Raft 走线间距" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "装填塔厚度" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "空装填塔的厚度。 如果厚度大于装填塔最小体积的一半,则将打造一个密集的装填塔。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "切换后擦拭喷嘴" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "切换挤出机后,在打印的第一个物件上擦去喷嘴上的渗出材料。 这会在渗出材料对打印品表面品质造成最小损害的位置进行缓慢安全的擦拭动作。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "装填塔清洗量" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "在装填塔上进行擦拭时要清洗的耗材量。 清洗可用于补偿在喷嘴不活动期间由于渗出而损失的耗材。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "桥壁最大悬垂" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "在使用连桥设置打印壁之前,壁线下净空区域的最大允许宽度。以壁线宽度的百分比表示。如果间隙大于此宽度,则使用连桥设置打印壁线。否则,将使用正常设置打印壁线。此值越小,使用连桥设置打印悬垂壁线的可能性越大。" + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "优化打印各个壁的顺序,以减少回抽次数和空驶距离。 启用此设置将对大部分零件有益,但有的则会耗费更长时间,因此请将优化和不优化的打印时间估计值进行对比。" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index 5667b643a8..b33274ab8d 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-17 10:40+0800\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code 檔案" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please generate G-code before saving." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -59,78 +70,17 @@ msgstr "" "

了解如何確保最佳的列印品質和可靠性。

\n" "

閱讀列印品質指南

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D 無線網路盒列印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D 無線網路盒列印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "正在連接 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "正在向 Doodle3D Connect 發送資料" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "無法向 Doodle3D Connect 發送資料。請確認是否有另一項列印作業正在進行?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "正在儲存資料到 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "檔案已被傳送到 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "開啟連線..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "開啟 Doodle3D Connect 的網路介面" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "顯示更新日誌" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "合併有效設定" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "列印參數已被合併並啟用。" @@ -155,6 +105,11 @@ msgctxt "@info:status" msgid "Connected via USB" msgstr "透過 USB 連接" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103 +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" @@ -177,6 +132,11 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "壓縮 G-code 檔案" +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" @@ -199,7 +159,7 @@ msgid "Save to Removable Drive {0}" msgstr "儲存到行動裝置 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:131 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "沒有可供寫入的檔案格式!" @@ -238,7 +198,7 @@ msgstr "無法儲存到行動裝置 {0}:{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /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:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1567 msgctxt "@info:title" msgid "Error" msgstr "錯誤" @@ -267,8 +227,8 @@ msgstr "卸載行動裝置 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1557 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1651 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -295,212 +255,227 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "行動裝置" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:86 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:87 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:88 msgctxt "@info:status" msgid "Connected over the network." msgstr "已透過網路連接。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "已透過網路連接。請在印表機上接受存取請求。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:93 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "已透過網路連接,但沒有印表機的控制權限。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "已發送印表機存取請求,請在印表機上批准該請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:101 msgctxt "@info:title" msgid "Authentication status" msgstr "認証狀態" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@info:status" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:114 msgctxt "@info:title" msgid "Authentication Status" msgstr "認証狀態" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 msgctxt "@action:button" msgid "Retry" msgstr "重試" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:106 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "重新發送存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:109 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "印表機接受了存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "無法使用本印表機進行列印,無法發送列印作業。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:29 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:73 msgctxt "@action:button" msgid "Request Access" msgstr "請求存取" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:72 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "向印表機發送存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "Unable to start a new print job." msgstr "無法開始新的列印作業" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:204 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/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "設定不匹配" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "你確定要使用所選設定進行列印嗎?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:226 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/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:197 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "前一列印作業傳送中,暫停傳送新列印作業。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:216 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:232 msgctxt "@info:status" msgid "Sending data to printer" msgstr "正在向印表機發送資料" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:261 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:217 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:233 msgctxt "@info:title" msgid "Sending Data" msgstr "發送資料中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:378 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:92 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:325 #, 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/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Slot {slot_number} 中沒有載入耗材" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:354 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:363 #, 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/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@window:title" msgid "Sync with your printer" msgstr "與你的印表機同步" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "你想在 Cura 中使用目前的印表機設定嗎?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:553 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/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@info:status" msgid "Connected over the network" msgstr "透過網路連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:310 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "列印作業已成功傳送到印表機。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:312 msgctxt "@info:title" msgid "Data Sent" msgstr "資料傳送" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:313 msgctxt "@action:button" msgid "View in Monitor" msgstr "使用監控觀看" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:420 #, 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/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "列印作業 '{job_name}' 已完成。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:423 msgctxt "@info:status" msgid "Print finished" msgstr "列印已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "透過網路連接" @@ -510,24 +485,24 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "監控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:68 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "你的 {machine_name} 有新功能可用!建議更新印表機韌體。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "有新 %s 韌體可用" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:75 msgctxt "@action:button" msgid "How to update" msgstr "如何更新" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91 msgctxt "@info" msgid "Could not access update information." msgstr "無法存取更新資訊。" @@ -538,17 +513,17 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分層檢視" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:102 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:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 msgctxt "@info:title" msgid "Simulation View" msgstr "模擬檢視" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:28 msgid "Modify G-Code" msgstr "修改 G-Code 檔案" @@ -562,32 +537,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "建立一塊不列印支撐的空間。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura 以匿名方式蒐集使用狀況統計資料。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" msgstr "收集資料中" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" msgid "More info" msgstr "更多資訊" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "檢視更多關於 Cura 傳送資料的資訊。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51 msgctxt "@action:button" msgid "Allow" msgstr "允許" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "允許 Cura 以匿名方式傳送使用狀況統計資料,用來協助 Cura 的未來改善工作。你的部份偏好設定和參數,Cura 的版本及你切片模型的雜湊值會被傳送。" @@ -597,20 +572,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 列印參數" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 檔案" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"無法使用 \"{}\" 品質導出!\n" -"覆蓋回 \"{}\"。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -636,49 +597,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 圖片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "無法使用目前耗材切片,因為它與所選機器或設定不相容。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:333 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:364 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:388 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:397 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:406 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:415 msgctxt "@info:title" msgid "Unable to slice" msgstr "無法切片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "無法使用目前設定進行切片。以下設定存在錯誤:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "因部份模型設定問題無法進行切片。部份模型的下列設定有錯誤:{error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "無法切片(原因:換料塔或主位置無效)。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "沒有模型可進行切片,因為模型超出了列印範圍。請縮放或旋轉模型, 讓模型可置入列印範圍。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:49 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:status" msgid "Processing Layers" msgstr "正在處理層" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:242 msgctxt "@info:title" msgid "Information" msgstr "資訊" @@ -705,18 +673,29 @@ msgctxt "@title:tab" msgid "Custom" msgstr "自訂選項" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 檔案" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:711 msgctxt "@label" msgid "Nozzle" msgstr "噴頭" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, 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:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -727,18 +706,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 檔案" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:317 msgctxt "@info:status" msgid "Parsing G-code" msgstr "正在解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:319 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:466 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 細項設定" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:464 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 檔案可能不準確。" @@ -749,16 +728,31 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 列印參數" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Profile Assistant" +msgstr "參數助手" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/__init__.py:17 +msgctxt "@item:inlistbox" +msgid "Profile Assistant" +msgstr "參數助手" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 檔案" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 專案 3MF 檔案" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" @@ -840,19 +834,19 @@ msgctxt "@label unknown material" msgid "Unknown" msgstr "未知" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:314 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "預切片檔案 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:186 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "檔案已經存在" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:187 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -864,23 +858,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "不覆寫" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "所選耗材與所選機器或設定不相容。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:121 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不相容的耗材" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:863 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "設定已改為與目前擠出機性能相匹配:[%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:865 msgctxt "@info:title" msgid "Settings updated" msgstr "設定更新" @@ -963,13 +957,13 @@ msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "列印參數缺少列印品質類型定義。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:370 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "無法為目前設定找到品質類型 {0}。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:59 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -996,42 +990,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有檔案 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:609 msgctxt "@label" msgid "Custom Material" msgstr "自訂耗材" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:610 msgctxt "@label" msgid "Custom" msgstr "自訂" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 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:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "列印範圍" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "無法從使用者資料目錄建立備份檔:{}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102 msgctxt "@info:title" msgid "Backup" msgstr "備份" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "嘗試復原沒有正確資料或 meta data 的 Cura 備份。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "嘗試復原版本不符的 Cura 備份。" @@ -1042,32 +1036,32 @@ msgid "Multiplying and placing objects" msgstr "正在複製並放置模型" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "擺放物件中" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "無法在列印範圍內放下全部物件" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "正在為物件尋找新位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "尋找位置中" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "無法找到位置" @@ -1206,223 +1200,223 @@ msgctxt "@action:button" msgid "Send report" msgstr "送出報告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:454 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在載入印表機..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:748 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在設定場景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:784 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在載入介面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:997 #, 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:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1556 #, 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:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1566 #, 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:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1650 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選擇的模型太小無法載入。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "印表機設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "印表機" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "印表機設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (寬度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:420 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:432 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:857 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "列印平台形狀" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "原點位於中心" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "熱床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 類型" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "列印頭設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭左側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭前端至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭右側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭後部至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "龍門高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "噴頭尖端與龍門系統(X 軸和 Y 軸)之間的高度差。用於防止「排隊列印」時之前的列印品與龍門發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "擠出機數目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "開始時最先執行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "結束 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "結束前最後執行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "噴頭設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "噴頭孔徑" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "相容的耗材直徑" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "印表機所支援的耗材直徑。實際列印的耗材直徑由耗材和/或列印參數提供。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:419 msgctxt "@label" msgid "Nozzle offset X" msgstr "噴頭偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:431 msgctxt "@label" msgid "Nozzle offset Y" msgstr "噴頭偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 msgctxt "@label" msgid "Extruder Start G-code" msgstr "擠出機起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:470 msgctxt "@label" msgid "Extruder End G-code" msgstr "擠出機結束 G-code" @@ -1442,29 +1436,42 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "無法連上 Cura 軟體包資料庫。請檢查你的網路連線。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 msgctxt "@title:tab" msgid "Plugins" msgstr "外掛" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 +msgctxt "@title:tab" +msgid "Materials" +msgstr "耗材" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80 msgctxt "@label" msgid "Version" msgstr "版本" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86 msgctxt "@label" msgid "Last updated" msgstr "最後更新時間" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92 msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:255 msgctxt "@label" msgid "Unknown" msgstr "未知" @@ -1497,16 +1504,56 @@ msgctxt "@action:button" msgid "Back" msgstr "返回" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "需重新啟動 Cura,軟體包的更動才能生效。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "結束 Cura" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 msgctxt "@title:tab" msgid "Installed" @@ -1553,12 +1600,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒絕" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "精選" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "相容性" @@ -1568,10 +1615,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "取得軟體包..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "聯繫" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1585,9 +1637,9 @@ msgstr "更新日誌" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 #: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:56 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 @@ -1635,22 +1687,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "使用者授權" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:43 msgctxt "@window:title" msgid "Existing Connection" msgstr "目前連線中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 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/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:62 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "連接到網路印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:72 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" @@ -1661,333 +1713,339 @@ msgstr "" "\n" "從以下列表中選擇你的印表機:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:82 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "增加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:92 msgctxt "@action:button" msgid "Edit" msgstr "編輯" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "移除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:111 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:204 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果你的印表機未被列出,請閱讀網路列印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:231 msgctxt "@label" msgid "Type" msgstr "類型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:268 msgctxt "@label" msgid "Firmware version" msgstr "韌體版本" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:280 msgctxt "@label" msgid "Address" msgstr "位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "這台印表機未設定成管理一組 Ultimaker 3 印表機的主機。" +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "該網路位址的印表機尚無回應。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:39 msgctxt "@action:button" msgid "Connect" msgstr "連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:335 msgctxt "@title:window" msgid "Printer Address" msgstr "印表機網路位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:358 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "輸入印表機在網路上的 IP 位址或主機名。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:387 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "確定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:34 msgctxt "@title:window" msgid "Print over network" msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:65 msgctxt "@label" msgid "Printer selection" msgstr "印表機選擇" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:105 msgctxt "@action:button" msgid "Print" msgstr "列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 未設定成管理一組連線的 Ultimaker 3 印表機的主機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142 +msgctxt "@label" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144 +msgctxt "@label" +msgid "Waiting for: First available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148 +msgctxt "@label" +msgid "Waiting for: " +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32 msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "新增/移除印表機" +msgid "Manage queue" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "使用預設瀏覽器開啟列印作業頁面。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "檢視列印作業" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "準備列印中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "正在列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" -msgid "Available" -msgstr "可用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "與印表機失去連線" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "無法使用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "已關閉" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "保留" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 -msgctxt "@label:status" -msgid "Finished" -msgstr "已完成" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "準備列印中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 -msgctxt "@label:status" -msgid "Action required" -msgstr "需要採取的動作" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "已暫停" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "繼續" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "列印已取消" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 -msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "不接受列印作業" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 -msgctxt "@label" -msgid "Finishes at: " -msgstr "完成時間:" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 -msgctxt "@label" -msgid "Clear build plate" -msgstr "清空列印平台" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 -msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "等待設定更動" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "列印作業" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 -msgctxt "@label" -msgid "Printing" -msgstr "已排入佇列" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54 msgctxt "@label" msgid "Queued" msgstr "已排入佇列" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "印表機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:44 +msgctxt "@label" +msgid "Printing" +msgstr "已排入佇列" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "檢視印表機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212 +msgctxt "@label" +msgid "Not available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215 +msgctxt "@label" +msgid "Unreachable" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221 +msgctxt "@label" +msgid "Available" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "中斷列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673 +msgctxt "@label:status" +msgid "Aborted" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667 +msgctxt "@label:status" +msgid "Finished" +msgstr "已完成" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:670 +msgctxt "@label:status" +msgid "Preparing" +msgstr "正在準備" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675 +msgctxt "@label:status" +msgid "Pausing" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677 +msgctxt "@label:status" +msgid "Paused" +msgstr "已暫停" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:679 +msgctxt "@label:status" +msgid "Resuming" +msgstr "繼續" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:681 +msgctxt "@label:status" +msgid "Action required" +msgstr "需要採取的動作" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:38 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "連接到印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:117 msgctxt "@info:tooltip" msgid "Load the configuration of the printer into Cura" msgstr "將印表機設定載入 Cura" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:118 msgctxt "@action:button" msgid "Activate Configuration" msgstr "啟用設定" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "顏色方案" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "耗材顏色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "線條類型" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "進給率" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "層厚" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "相容模式" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "顯示移動軌跡" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "顯示輔助結構" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "顯示外殼" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "顯示填充" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "只顯示頂層" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "顯示頂端 5 層列印細節" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "頂 / 底層" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "內壁" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小值" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大值" @@ -2107,53 +2165,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "平滑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "網格類型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "普通模型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "做為支撐" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "不支援與其他模型重疊" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "修改其他模型的重疊設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "修改其他模型的填充設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:341 msgctxt "@action:button" msgid "Select settings" msgstr "選擇設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:383 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "選擇對此模型的自訂設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:431 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "篩選…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:445 msgctxt "@label:checkbox" msgid "Show all" msgstr "顯示全部" @@ -2175,13 +2233,13 @@ msgid "Create new" msgstr "新建" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "摘要 - Cura 專案" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "印表機設定" @@ -2198,7 +2256,7 @@ msgid "Update" msgstr "更新" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "類型" @@ -2209,7 +2267,7 @@ msgid "Printer Group" msgstr "印表機群組" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "列印參數設定" @@ -2221,19 +2279,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/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "名稱" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "不在列印參數中" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2261,7 +2319,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "如何解决耗材的設定衝突?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "參數顯示設定" @@ -2272,13 +2330,13 @@ msgid "Mode" msgstr "模式" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "顯示設定:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2293,6 +2351,82 @@ msgctxt "@action:button" msgid "Open" msgstr "開啟" +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34 +msgctxt "@action:button" +msgid "Previous" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "匯出" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140 +msgctxt "@action:button" +msgid "Next" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163 +msgctxt "@label" +msgid "Tip" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 小時 00 分" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +msgctxt "@label" +msgid "Cost specification" +msgstr "成本明細" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:147 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:156 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:148 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +msgctxt "@label" +msgid "Total:" +msgstr "總共:" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:205 +msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:210 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143 +msgctxt "@label" +msgid "Print experiment" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26 +msgctxt "@label" +msgid "Checklist" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 msgctxt "@title" @@ -2511,26 +2645,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "請取出列印件" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "暫停" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "繼續" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "中斷列印" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "中斷列印" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2567,19 +2685,17 @@ msgid "Customized" msgstr "自訂" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "總是詢問" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "捨棄更改,並不再詢問此問題" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "保留更改,並不再詢問此問題" @@ -2599,101 +2715,173 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "建立新的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "直徑更改確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 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/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "顯示名稱" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "耗材類型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "顏色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "屬性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直徑" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "耗材長度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "每公尺成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "此耗材與 %1 相關聯,並共享其部份屬性。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "解除聯結耗材" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "附著資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 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:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "啟用" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "建立" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +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 +msgctxt "@action:button" +msgid "Import" +msgstr "匯入" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +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:239 +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:240 +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 +msgctxt "@title:window" +msgid "Import Material" +msgstr "匯入耗材設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +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 +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 +msgctxt "@title:window" +msgid "Export Material" +msgstr "匯出耗材設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +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 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "成功匯出耗材至:%1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2730,7 +2918,7 @@ msgid "Unit" msgstr "單位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:537 msgctxt "@title:tab" msgid "General" msgstr "基本" @@ -2922,8 +3110,8 @@ msgstr "開啟專案檔案時的預設行為:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "總是詢問" +msgid "Always ask me this" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 msgctxt "@option:openProject" @@ -2942,77 +3130,75 @@ msgstr "當你對列印參數進行更改然後切換到其他列印參數時, #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@label" -msgid "Override Profile" -msgstr "覆寫列印參數" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625 +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:640 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675 msgctxt "@label" msgid "Privacy" msgstr "隱私權" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 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:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:688 msgctxt "@option:check" msgid "Check for updates on start" msgstr "啟動時檢查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 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:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:704 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)發送列印資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713 msgctxt "@action:button" msgid "More information" msgstr "更多資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731 msgctxt "@label" msgid "Experimental" msgstr "實驗功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "使用多列印平台功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:743 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "使用多列印平台功能(需重啟軟體)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "新載入的模型要擺放在列印平台上嗎?必需與多列印平台功能一起使用(實驗功能)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "載入時不要擺放物件" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:542 msgctxt "@title:tab" msgid "Printers" msgstr "印表機" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "啟用" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3056,7 +3242,7 @@ msgid "Aborting print..." msgstr "中斷列印..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:546 msgctxt "@title:tab" msgid "Profiles" msgstr "列印參數" @@ -3071,18 +3257,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "匯入" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "匯出" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3093,18 +3267,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "複製列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "移除確認" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -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/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3125,96 +3287,43 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "印表機:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "受保護的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "自訂列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用目前設定 / 覆寫值更新列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "捨棄目前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 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:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "你目前的設定與選定的列印參數相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "耗材" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "建立" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "複製" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "匯入耗材設定" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -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/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "成功匯入耗材 %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "匯出耗材設定" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -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/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "成功匯出耗材至:%1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "印表機" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:946 msgctxt "@title:window" msgid "Add Printer" msgstr "新增印表機" @@ -3229,6 +3338,11 @@ msgctxt "@action:button" msgid "Add Printer" msgstr "新增印表機" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" @@ -3384,33 +3498,33 @@ msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "複製所有改變的設定值到所有擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 msgctxt "@action:menu" msgid "Hide this setting" msgstr "隱藏此設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:608 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "不再顯示此設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:612 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此設定顯示" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:636 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:416 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "參數顯示設定..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "全部折疊" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648 msgctxt "@action:inmenu" msgid "Expand All" msgstr "全部展開" @@ -3504,7 +3618,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "傳送一個自訂的 G-code 命令到連接中的印表機。按下 Enter 鍵傳送命令。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "擠出機" @@ -3557,7 +3671,7 @@ msgid "The nozzle inserted in this extruder." msgstr "該擠出機所使用的噴頭。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "列印平台" @@ -3582,6 +3696,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "列印前請預熱熱床。你可以在熱床加熱時繼續調整相關物件,讓你在準備列印時不必等待熱床加熱完畢。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +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" @@ -3678,38 +3807,11 @@ msgstr "" "列印設定已關閉\n" "G-code 檔案無法被修改" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 -msgctxt "@label Hours and minutes" -msgid "00h 00min" -msgstr "00 小時 00 分" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 msgctxt "@tooltip" msgid "Time specification" msgstr "時間規格" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 -msgctxt "@label" -msgid "Cost specification" -msgstr "成本明細" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 -msgctxt "@label m for meter" -msgid "%1m" -msgstr "%1m" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 -msgctxt "@label g for grams" -msgid "%1g" -msgstr "%1g" - -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 -msgctxt "@label" -msgid "Total:" -msgstr "總共:" - #: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." @@ -3720,22 +3822,22 @@ msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "自訂列印設定
對切片過程中的每一個細節進行精細控制。" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "正在列印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "作業名稱" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "列印時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "預計剩餘時間" @@ -3841,181 +3943,180 @@ msgid "About..." msgstr "關於…" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "刪除所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "置中所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "複製所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "刪除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "將模型置中(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:274 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "群組模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "取消模型群組" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "結合模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "複製模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "選擇所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "清空列印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "重新載入所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "將所有模型排列到所有列印平台上" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "排列所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "排列所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "重置所有模型位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "重置所有模型旋轉" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:386 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "開啟檔案(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:394 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建專案(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:401 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "顯示切片引擎日誌(&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:409 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "顯示設定資料夾" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423 msgctxt "@action:menu" msgid "Browse packages..." msgstr "瀏覽軟體包..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "展開/收合側邊欄" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "請載入一個 3D 模型" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "切片已準備就緒" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 已準備就緒" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "無法切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "切片無法使用" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "對目前列印工作進行切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "取消進行中的切片程序" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "準備" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "選擇作用中的輸出裝置" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:760 msgctxt "@title:window" msgid "Open file(s)" msgstr "開啟檔案" @@ -4035,129 +4136,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:104 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "檔案(&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "儲存到檔案(&S)" +msgid "Export Selection..." +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "另存為(&A)…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "儲存專案...(&P)" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "編輯(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:185 msgctxt "@title:menu" msgid "&View" msgstr "檢視(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:190 msgctxt "@title:menu" msgid "&Settings" msgstr "設定(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:192 msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "印表機(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:201 msgctxt "@title:menu" msgid "&Material" msgstr "耗材(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "設為主要擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "啟用擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "關閉擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 +msgctxt "@title:menu" +msgid "&Build plate" +msgstr "列印平台(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" msgid "&Profile" msgstr "列印參數(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:246 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "擴充功能(&X)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "工具箱(&T)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "偏好設定(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:295 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "幫助(&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "此軟體包將在重新啟動後安裝。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370 msgctxt "@action:button" msgid "Open File" msgstr "開啟檔案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:586 msgctxt "@title:window" msgid "New project" msgstr "新建專案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:587 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "你確定要開始一個新專案嗎?這將清除列印平台及任何未儲存的設定。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861 msgctxt "@window:title" msgid "Install Package" msgstr "安裝軟體包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@title:window" msgid "Open File(s)" msgstr "開啟檔案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:871 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 檔案,請僅選擇一個。" @@ -4167,112 +4284,112 @@ msgctxt "@title:window" msgid "Save Project" msgstr "儲存專案" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "列印平台" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "擠出機 %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 耗材" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "儲存時不再顯示專案摘要" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "儲存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "層高" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "品質參數不適用於目前的耗材和噴頭設定。請變更這些設定以啟用此品質參數。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "目前正使用自訂列印參數。若要使用品質滑動條,在自訂分頁中選擇預設的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "列印速度" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "更慢" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "更快" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "你修改過部份列印參數設定。如果你想改變這些設定,請切換到自訂模式。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "漸層填充(Gradual infill)將隨著列印高度的提升而逐漸加大填充密度。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:789 msgctxt "@label" msgid "Enable gradual" msgstr "啟用漸層" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:856 msgctxt "@label" msgid "Generate Support" msgstr "產生支撐" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:890 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/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:962 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "選擇用於支撐的擠出機。該擠出機將在模型之下建立支撐結構,以防止模型下垂或在空中列印。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:985 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "列印平台附著" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1040 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "允許列印邊緣或木筏。這將在你的物件周圍或下方添加一個容易切斷的平面區域。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1080 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "需要幫助改善你的列印?閱讀 Ultimaker 故障排除指南" @@ -4318,23 +4435,22 @@ msgctxt "@label" msgid "Printer type" msgstr "印表機類型" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "耗材" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "在此耗材組合下使用膠水或是附著墊片" +msgid "Use glue with this material combination" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "檢查相容性" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "點擊查看 Ultimaker.com 上的耗材相容性。" @@ -4424,16 +4540,6 @@ msgctxt "name" msgid "God Mode" msgstr "上帝模式" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "接受 G-Code 並透過 WiFi 將其發送到 Doodle3D 無線網路盒。" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D 無線網路盒" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4514,16 +4620,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "準備介面" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "提供一個直接編輯描述檔的編輯視窗。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "即時描述檔工具" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4634,16 +4730,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "舊版 Cura 列印參數讀取器" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "協助你直接在 Cura 中打開 Blender 檔案。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 整合(實驗功能)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4694,6 +4780,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "升級版本 2.7 到 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4804,6 +4900,16 @@ msgctxt "name" msgid "Cura Profile Writer" msgstr "Cura 列印參數寫入器" +#: CuraPrintProfileCreator/plugin.json +msgctxt "description" +msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgstr "允許耗材製造商使用下拉式 UI 建立新的耗材和品質設定參數。" + +#: CuraPrintProfileCreator/plugin.json +msgctxt "name" +msgid "Print Profile Assistant" +msgstr "列印參數設定助手" + #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." @@ -4834,6 +4940,219 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 列印參數讀取器" +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D 無線網路盒列印" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D 無線網路盒列印" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "正在連接 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "正在向 Doodle3D Connect 發送資料" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "無法向 Doodle3D Connect 發送資料。請確認是否有另一項列印作業正在進行?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "正在儲存資料到 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "檔案已被傳送到 Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "開啟連線..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "開啟 Doodle3D Connect 的網路介面" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 檔案" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "無法使用 \"{}\" 品質導出!\n" +#~ "覆蓋回 \"{}\"。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "聯繫" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "這台印表機未設定成管理一組 Ultimaker 3 印表機的主機。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ 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" +#~ msgstr "%1 未設定成管理一組連線的 Ultimaker 3 印表機的主機" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "新增/移除印表機" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "使用預設瀏覽器開啟列印作業頁面。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "檢視列印作業" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "準備列印中" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "正在列印" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "可用" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "與印表機失去連線" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "無法使用" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "已關閉" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "保留" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "準備列印中" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "列印已取消" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "不接受列印作業" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "完成時間:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "清空列印平台" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "等待設定更動" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "列印作業" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "印表機" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "檢視印表機" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "暫停" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "繼續" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "中斷列印" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "總是詢問" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "覆寫列印參數" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "新載入的模型要擺放在列印平台上嗎?必需與多列印平台功能一起使用(實驗功能)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "載入時不要擺放物件" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "儲存到檔案(&S)" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "另存為(&A)…" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "儲存專案...(&P)" + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "在此耗材組合下使用膠水或是附著墊片" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "接受 G-Code 並透過 WiFi 將其發送到 Doodle3D 無線網路盒。" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D 無線網路盒" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "提供一個直接編輯描述檔的編輯視窗。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "即時描述檔工具" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "協助你直接在 Cura 中打開 Blender 檔案。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 整合(實驗功能)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "模型檢查器警告" @@ -5101,10 +5420,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "Browse plugins..." #~ msgstr "瀏覽外掛..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "列印平台(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "外掛(&l)" @@ -5330,14 +5645,6 @@ msgstr "Cura 列印參數讀取器" #~ "\n" #~ "抱歉!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "參數助手" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "參數助手" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "未載入耗材" @@ -5468,14 +5775,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "Configure setting visiblity..." #~ msgstr "設定設定可見性..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自動:%1" @@ -5512,14 +5811,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "GCode Profile Reader" #~ msgstr "G-code 列印參數讀取器" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "允許耗材製造商使用下拉式 UI 建立新的耗材和品質設定參數。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "列印參數設定助手" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "開啟 SolidWorks 檔案時發生錯誤! 請檢查能否在 SolidWorks 中正常開啟檔案而不出現任何問題!" @@ -5712,10 +6003,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "正在準備" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完成時間:" diff --git a/resources/i18n/zh_TW/fdmextruder.def.json.po b/resources/i18n/zh_TW/fdmextruder.def.json.po index 36a1e6505d..47f995c213 100644 --- a/resources/i18n/zh_TW/fdmextruder.def.json.po +++ b/resources/i18n/zh_TW/fdmextruder.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-03-31 15:18+0800\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: TEAM\n" diff --git a/resources/i18n/zh_TW/fdmprinter.def.json.po b/resources/i18n/zh_TW/fdmprinter.def.json.po index 56009ffa00..8e9f41c6f9 100644 --- a/resources/i18n/zh_TW/fdmprinter.def.json.po +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-14 00:09+0800\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" @@ -85,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "耗材 GUID,此項為自動設定。" +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直徑" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "調整所使用耗材的直徑。這個數值要等同於所使用耗材的直徑。" + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1060,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "鋸齒狀" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_skin_polygons description" +msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality." +msgstr "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1140,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "列印內壁時如果該位置已經有牆壁存在,所進行的的流量補償。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1505,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "同心圓" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立體同心圓" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1535,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "使用一條線沿著內牆的形狀,連接填充線條與內牆交會的末端。啟用此設定可以使填充更好地附著在內牆上,並減少對垂直表面品質的影響。關閉此設定可降低材料的使用量。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1610,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充樣式在 Y 軸方向平移此距離。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1875,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "用於第一層加熱列印平台的溫度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直徑" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "調整所使用耗材的直徑。這個數值要等同於所使用耗材的直徑。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2722,8 +2779,8 @@ msgstr "梳理模式" #: 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 by combing within the infill only." -msgstr "梳理可在空跑時讓噴頭保持在已列印區域內。這會使空跑距離稍微延長,但可減少回抽需求。如果關閉梳理,則耗材將回抽,且噴頭沿著直線移動到下一個點。也可以通過僅在填充內進行梳理避免梳理頂部/底部表層區域。" +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 and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2740,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "表層以外區域" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3120,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3185,6 +3242,26 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "已列印支撐結構線條之間的距離。該設定通過支撐密度計算。" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3475,11 +3552,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3515,11 +3587,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "同心圓" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立體同心圓" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3555,16 +3622,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "鋸齒狀" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_fan_enable description" +msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3891,8 +3973,8 @@ msgstr "木筏底部的線寬。這些線條應該是粗線,以便協助列印 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "木筏底部間距" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4109,16 +4191,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "為了清除足夠的耗材,換料塔每層的最小體積。" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "換料塔厚度" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "空心換料塔的厚度。如果厚度大於換料塔最小體積的一半,則將形成一個密集的換料塔。" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4231,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "在一個噴頭列印換料塔後,在換料塔上擦拭另一個噴頭滲出的耗材。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "切換後擦拭噴頭" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "切換擠出機後,在列印的第一個物件上擦拭噴頭上的滲出耗材。這會在滲出耗材對列印品表面品質造成最小損害的位置進行緩慢安全的擦拭動作。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "換料塔清洗量" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "在換料塔上進行擦拭時要清洗的耗材量。清洗可用於補償在噴頭不活動期間由於滲出而損失的耗材。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4716,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "數據連接耗材流量(mm3/s)到溫度(攝氏)。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5323,6 +5385,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "決定是否使用較小層高的門檻值。此值會與一層中最陡坡度的 tan 值做比較。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5435,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "假如表層區域受支撐的面積小於此百分比,使用橋樑設定列印。否則用一般的表層設定列印。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "最大橋樑牆壁突出" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "使用一般設定列印牆壁線條允許最大的突出寬度。以牆壁線寬的百分比表示。當間隙比此寬時,使用橋樑設定列印牆壁線條。否則就使用一般設定列印牆壁線條。數值越低,越有可能使用橋樑設定列印牆壁線條。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5583,6 +5655,66 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "在將模型從檔案中載入時套用在模型上的轉換矩陣。" +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立體同心圓" + +#~ 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 by combing within the infill only." +#~ msgstr "梳理可在空跑時讓噴頭保持在已列印區域內。這會使空跑距離稍微延長,但可減少回抽需求。如果關閉梳理,則耗材將回抽,且噴頭沿著直線移動到下一個點。也可以通過僅在填充內進行梳理避免梳理頂部/底部表層區域。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立體同心圓" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "木筏底部間距" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "換料塔厚度" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "空心換料塔的厚度。如果厚度大於換料塔最小體積的一半,則將形成一個密集的換料塔。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "切換後擦拭噴頭" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "切換擠出機後,在列印的第一個物件上擦拭噴頭上的滲出耗材。這會在滲出耗材對列印品表面品質造成最小損害的位置進行緩慢安全的擦拭動作。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "換料塔清洗量" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "在換料塔上進行擦拭時要清洗的耗材量。清洗可用於補償在噴頭不活動期間由於滲出而損失的耗材。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "最大橋樑牆壁突出" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "使用一般設定列印牆壁線條允許最大的突出寬度。以牆壁線寬的百分比表示。當間隙比此寬時,使用橋樑設定列印牆壁線條。否則就使用一般設定列印牆壁線條。數值越低,越有可能使用橋樑設定列印牆壁線條。" + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "最佳化牆壁列印順序以減少回抽的次數和空跑的距離。啟用此功能對大多數是有益的,但有的可能會花更多的時間。所以請比較有無最佳化的估算時間進行確認。" From ec42a96179e40bbdff786c72edae8255093742b4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 17:25:57 +0200 Subject: [PATCH 328/364] Update version number and fix reporting link I don't know, did we always have it refer to Uranium's issues page? Contributes to issue CURA-5741. --- resources/i18n/de_DE/cura.po | 4 ++-- resources/i18n/de_DE/fdmextruder.def.json.po | 4 ++-- resources/i18n/de_DE/fdmprinter.def.json.po | 4 ++-- resources/i18n/es_ES/cura.po | 4 ++-- resources/i18n/es_ES/fdmextruder.def.json.po | 4 ++-- resources/i18n/es_ES/fdmprinter.def.json.po | 4 ++-- resources/i18n/fi_FI/cura.po | 4 ++-- resources/i18n/fi_FI/fdmextruder.def.json.po | 4 ++-- resources/i18n/fi_FI/fdmprinter.def.json.po | 4 ++-- resources/i18n/fr_FR/cura.po | 4 ++-- resources/i18n/fr_FR/fdmextruder.def.json.po | 4 ++-- resources/i18n/fr_FR/fdmprinter.def.json.po | 4 ++-- resources/i18n/it_IT/cura.po | 2 +- resources/i18n/it_IT/fdmextruder.def.json.po | 4 ++-- resources/i18n/it_IT/fdmprinter.def.json.po | 4 ++-- resources/i18n/ja_JP/cura.po | 2 +- resources/i18n/ja_JP/fdmextruder.def.json.po | 4 ++-- resources/i18n/ja_JP/fdmprinter.def.json.po | 4 ++-- resources/i18n/ko_KR/cura.po | 2 +- resources/i18n/ko_KR/fdmextruder.def.json.po | 4 ++-- resources/i18n/ko_KR/fdmprinter.def.json.po | 4 ++-- resources/i18n/nl_NL/cura.po | 2 +- resources/i18n/nl_NL/fdmextruder.def.json.po | 4 ++-- resources/i18n/nl_NL/fdmprinter.def.json.po | 4 ++-- resources/i18n/pl_PL/cura.po | 2 +- resources/i18n/pl_PL/fdmextruder.def.json.po | 4 ++-- resources/i18n/pl_PL/fdmprinter.def.json.po | 4 ++-- resources/i18n/pt_BR/cura.po | 2 +- resources/i18n/pt_BR/fdmextruder.def.json.po | 4 ++-- resources/i18n/pt_BR/fdmprinter.def.json.po | 4 ++-- resources/i18n/pt_PT/cura.po | 2 +- resources/i18n/pt_PT/fdmextruder.def.json.po | 4 ++-- resources/i18n/pt_PT/fdmprinter.def.json.po | 4 ++-- resources/i18n/ru_RU/cura.po | 2 +- resources/i18n/ru_RU/fdmextruder.def.json.po | 4 ++-- resources/i18n/ru_RU/fdmprinter.def.json.po | 4 ++-- resources/i18n/tr_TR/cura.po | 2 +- resources/i18n/tr_TR/fdmextruder.def.json.po | 4 ++-- resources/i18n/tr_TR/fdmprinter.def.json.po | 4 ++-- resources/i18n/zh_CN/cura.po | 2 +- resources/i18n/zh_CN/fdmextruder.def.json.po | 4 ++-- resources/i18n/zh_CN/fdmprinter.def.json.po | 4 ++-- resources/i18n/zh_TW/cura.po | 2 +- resources/i18n/zh_TW/fdmextruder.def.json.po | 4 ++-- resources/i18n/zh_TW/fdmprinter.def.json.po | 4 ++-- 45 files changed, 79 insertions(+), 79 deletions(-) diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 8e2bc9df68..dac39b8de1 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po index 507e001e63..82b33e656b 100644 --- a/resources/i18n/de_DE/fdmextruder.def.json.po +++ b/resources/i18n/de_DE/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po index a85dc4ce18..a4e3ac334f 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 751246e54c..57b0ecf879 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po index d4ed9c33c9..14bf25d79c 100644 --- a/resources/i18n/es_ES/fdmextruder.def.json.po +++ b/resources/i18n/es_ES/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index feb882f45f..62d8d4a158 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index f3e3b7a95c..ede84960be 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fi_FI/fdmextruder.def.json.po b/resources/i18n/fi_FI/fdmextruder.def.json.po index 89dfcf4de6..381991d5e4 100644 --- a/resources/i18n/fi_FI/fdmextruder.def.json.po +++ b/resources/i18n/fi_FI/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2017-08-11 14:31+0200\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fi_FI/fdmprinter.def.json.po b/resources/i18n/fi_FI/fdmprinter.def.json.po index c903182ee6..6c1decafbf 100644 --- a/resources/i18n/fi_FI/fdmprinter.def.json.po +++ b/resources/i18n/fi_FI/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index f1c7a62b83..0c7f56f1ed 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: \n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po index e09dde10f3..0c408116b4 100644 --- a/resources/i18n/fr_FR/fdmextruder.def.json.po +++ b/resources/i18n/fr_FR/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index 539c3502ba..acf2f8d378 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 397ce746de..3b1d6c2ab3 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po index 269e8b19be..60346c3eb4 100644 --- a/resources/i18n/it_IT/fdmextruder.def.json.po +++ b/resources/i18n/it_IT/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po index 4d3ac13804..f97eef75ba 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 8ed120a260..37636f685d 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po index 10ab04ba7a..0fa92f6afe 100644 --- a/resources/i18n/ja_JP/fdmextruder.def.json.po +++ b/resources/i18n/ja_JP/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po index a7cfdc3a40..85b3a89cfd 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 030a2a8739..79726960af 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-19 16:10+0900\n" diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po index 117cae19de..047515e962 100644 --- a/resources/i18n/ko_KR/fdmextruder.def.json.po +++ b/resources/i18n/ko_KR/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-19 13:27+0900\n" "Last-Translator: Jinbuhm Kim \n" diff --git a/resources/i18n/ko_KR/fdmprinter.def.json.po b/resources/i18n/ko_KR/fdmprinter.def.json.po index 7598da0b0b..8ae7eb2b57 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-19 13:26+0900\n" "Last-Translator: Jinbuhm Kim \n" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index cb576b5f26..5aab3c65c1 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po index d6590e69a0..24c5abae55 100644 --- a/resources/i18n/nl_NL/fdmextruder.def.json.po +++ b/resources/i18n/nl_NL/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 91156b8307..73c9023c88 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 1a1efdc2f2..2ccab5dcfd 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-14 14:35+0200\n" diff --git a/resources/i18n/pl_PL/fdmextruder.def.json.po b/resources/i18n/pl_PL/fdmextruder.def.json.po index bd94e365f0..80605978ce 100644 --- a/resources/i18n/pl_PL/fdmextruder.def.json.po +++ b/resources/i18n/pl_PL/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-03-30 20:33+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po index 04e8c28dfc..caff3d9438 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-17 16:45+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index e81588b086..4e5768e68a 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-23 02:20-0300\n" diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index 94fa46f849..66a9aa7d3d 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-23 05:00-0300\n" "Last-Translator: 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 81462bcf6e..68543a2aef 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-23 05:20-0300\n" "Last-Translator: Cláudio Sampaio \n" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index 2f4608cac9..af2c4d1efa 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" diff --git a/resources/i18n/pt_PT/fdmextruder.def.json.po b/resources/i18n/pt_PT/fdmextruder.def.json.po index d5c63ba5b4..8486de3f69 100644 --- a/resources/i18n/pt_PT/fdmextruder.def.json.po +++ b/resources/i18n/pt_PT/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \n" diff --git a/resources/i18n/pt_PT/fdmprinter.def.json.po b/resources/i18n/pt_PT/fdmprinter.def.json.po index f6979e872d..f56cc56345 100644 --- a/resources/i18n/pt_PT/fdmprinter.def.json.po +++ b/resources/i18n/pt_PT/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \n" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index cbe3219019..158148f817 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" diff --git a/resources/i18n/ru_RU/fdmextruder.def.json.po b/resources/i18n/ru_RU/fdmextruder.def.json.po index 1ddc9f0445..fa8c434d2f 100644 --- a/resources/i18n/ru_RU/fdmextruder.def.json.po +++ b/resources/i18n/ru_RU/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ru_RU/fdmprinter.def.json.po b/resources/i18n/ru_RU/fdmprinter.def.json.po index 123b07d08a..17efdcadaf 100644 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 239a952812..7663d366a1 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" diff --git a/resources/i18n/tr_TR/fdmextruder.def.json.po b/resources/i18n/tr_TR/fdmextruder.def.json.po index 098583a81d..de8f861922 100644 --- a/resources/i18n/tr_TR/fdmextruder.def.json.po +++ b/resources/i18n/tr_TR/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index e8748046c6..d8d7bd6524 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 3971ec5138..fbfdb7015b 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-22 11:32+0800\n" diff --git a/resources/i18n/zh_CN/fdmextruder.def.json.po b/resources/i18n/zh_CN/fdmextruder.def.json.po index 90fd998f6b..a6625a02c6 100644 --- a/resources/i18n/zh_CN/fdmextruder.def.json.po +++ b/resources/i18n/zh_CN/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index aa4c9b7d2f..f2e14bc412 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-22 11:44+0800\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index b33274ab8d..200318ae04 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-17 10:40+0800\n" diff --git a/resources/i18n/zh_TW/fdmextruder.def.json.po b/resources/i18n/zh_TW/fdmextruder.def.json.po index 47f995c213..5ccea0af91 100644 --- a/resources/i18n/zh_TW/fdmextruder.def.json.po +++ b/resources/i18n/zh_TW/fdmextruder.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-03-31 15:18+0800\n" "Last-Translator: 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 8e9f41c6f9..e3eff330ed 100644 --- a/resources/i18n/zh_TW/fdmprinter.def.json.po +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -5,8 +5,8 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"Project-Id-Version: Cura 3.5\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com" "POT-Creation-Date: 2018-09-19 17:07+0000\n" "PO-Revision-Date: 2018-06-14 00:09+0800\n" "Last-Translator: Zhang Heh Ji \n" From ea4015c2cf167b69970d98899a4b4336cf17a20f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Sep 2018 17:31:39 +0200 Subject: [PATCH 329/364] Fix missing report links My IDE crashed while doing a replace all. I see that it missed a few. Contributes to issue CURA-5741. --- resources/i18n/it_IT/cura.po | 2 +- resources/i18n/ja_JP/cura.po | 2 +- resources/i18n/ko_KR/cura.po | 2 +- resources/i18n/nl_NL/cura.po | 2 +- resources/i18n/pl_PL/cura.po | 2 +- resources/i18n/pt_BR/cura.po | 2 +- resources/i18n/pt_PT/cura.po | 2 +- resources/i18n/ru_RU/cura.po | 2 +- resources/i18n/tr_TR/cura.po | 2 +- resources/i18n/zh_CN/cura.po | 2 +- resources/i18n/zh_TW/cura.po | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 3b1d6c2ab3..fa0a1b7b71 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 37636f685d..2730f19b52 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 79726960af..530aede5c7 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-19 16:10+0900\n" "Last-Translator: Jinbuhm Kim \n" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 5aab3c65c1..165d26a8fc 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 2ccab5dcfd..bab972db8c 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-14 14:35+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 4e5768e68a..f79850003a 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-23 02:20-0300\n" "Last-Translator: Cláudio Sampaio \n" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index af2c4d1efa..f77df4d932 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-21 14:30+0100\n" "Last-Translator: Paulo Miranda \n" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index 158148f817..3151acbd34 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 7663d366a1..8c85d5c456 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-04-11 14:40+0100\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index fbfdb7015b..7627e91a91 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-22 11:32+0800\n" "Last-Translator: Bothof \n" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index 200318ae04..22a1cebe5f 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Cura 3.5\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2018-09-19 17:07+0200\n" "PO-Revision-Date: 2018-06-17 10:40+0800\n" "Last-Translator: Zhang Heh Ji \n" From 4111318c7a8cad5188f7a1bb8e897d578c9ac895 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Thu, 20 Sep 2018 08:56:01 +0200 Subject: [PATCH 330/364] Remove duplicate shortcut in French, so the CI won't fail on it. --- resources/i18n/fr_FR/cura.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 0c7f56f1ed..2a075f7c31 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -4207,7 +4207,7 @@ msgstr "Désactiver l'extrudeuse" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:235 msgctxt "@title:menu" msgid "&Build plate" -msgstr "&Plateau" +msgstr "Plateau" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:236 msgctxt "@title:settings" From eb114a8529764ac8a19b6467a141f329cce68884 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 20 Sep 2018 13:50:06 +0200 Subject: [PATCH 331/364] chmod a+x check_setting_visibility.py --- scripts/check_setting_visibility.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/check_setting_visibility.py diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py old mode 100644 new mode 100755 From 2c571d58865697b32f6cb97085e57424a0869417 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 20 Sep 2018 15:11:41 +0200 Subject: [PATCH 332/364] Rework check_setting_visibility.py --- scripts/check_setting_visibility.py | 296 +++++++++++++++++----------- 1 file changed, 178 insertions(+), 118 deletions(-) diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py index 974b922fbd..41b1dc9095 100755 --- a/scripts/check_setting_visibility.py +++ b/scripts/check_setting_visibility.py @@ -2,179 +2,239 @@ # # This script checks the correctness of the list of visibility settings # -from typing import Dict +import collections +import configparser +import json import os import sys -import json -import configparser -import glob +from typing import Any, Dict, List # Directory where this python file resides SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) -# The order of settings type. If the setting is in basic list then it also should be in expert -setting_visibility = ["basic", "advanced", "expert"] - - +# +# This class +# class SettingVisibilityInspection: - def __init__(self) -> None: - self.all_settings_keys = {} + # The order of settings type. If the setting is in basic list then it also should be in expert + self._setting_visibility_order = ["basic", "advanced", "expert"] - def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None: + # This is dictionary with categories as keys and all setting keys as values. + self.all_settings_keys = {} # type: Dict[str, List[str]] - with open(fdmprinter_json_path) as f: + # Load all Cura setting keys from the given fdmprinter.json file + def loadAllCuraSettingKeys(self, fdmprinter_json_path: str) -> None: + with open(fdmprinter_json_path, "r", encoding = "utf-8") as f: json_data = json.load(f) - self._flattenAllSettings(json_data) - - - def _flattenAllSettings(self, json_file: Dict[str, str]) -> None: - for key, data in json_file["settings"].items(): # top level settings are categories + # Get all settings keys in each category + for key, data in json_data["settings"].items(): # top level settings are categories if "type" in data and data["type"] == "category": - self.all_settings_keys[key] = [] self._flattenSettings(data["children"], key) # actual settings are children of top level category-settings - def _flattenSettings(self, settings: Dict[str, str], category) -> None: + def _flattenSettings(self, settings: Dict[str, str], category: str) -> None: for key, setting in settings.items(): - if "type" in setting and setting["type"] != "category": self.all_settings_keys[category].append(key) if "children" in setting: self._flattenSettings(setting["children"], category) + # Loads the given setting visibility file and returns a dict with categories as keys and a list of setting keys as + # values. + def _loadSettingVisibilityConfigFile(self, file_name: str) -> Dict[str, List[str]]: + with open(file_name, "r", encoding = "utf-8") as f: + parser = configparser.ConfigParser(allow_no_value = True) + parser.read_file(f) - def getSettingsFromSettingVisibilityFile(self, file_path: str): - parser = configparser.ConfigParser(allow_no_value = True) - parser.read([file_path]) - - if not parser.has_option("general", "name") or not parser.has_option("general", "weight"): - raise NotImplementedError("Visibility setting file missing general data") - - settings = {} - for section in parser.sections(): - if section == 'general': + data_dict = {} + for category, option_dict in parser.items(): + if category in (parser.default_section, "general"): continue - if section not in settings: - settings[section] = [] + data_dict[category] = [] + for key in option_dict: + data_dict[category].append(key) - for option in parser[section].keys(): - settings[section].append(option) + return data_dict - return settings + def validateSettingsVisibility(self, setting_visibility_files: Dict[str, str]) -> Dict[str, Dict[str, Any]]: + # First load all setting visibility files into the dict "setting_visibility_dict" in the following structure: + # -> -> + # "basic" -> "info" + setting_visibility_dict = {} # type: Dict[str, Dict[str, List[str]]] + for visibility_name, file_path in setting_visibility_files.items(): + setting_visibility_dict[visibility_name] = self._loadSettingVisibilityConfigFile(file_path) - def validateSettingsVisibility(self, setting_visibility_items: Dict): + # The result is in the format: + # -> dict + # "basic" -> "file_name": "basic.cfg" + # "is_valid": True / False + # "invalid_categories": List[str] + # "invalid_settings": Dict[category -> List[str]] + # "missing_categories_from_previous": List[str] + # "missing_settings_from_previous": Dict[category -> List[str]] + all_result_dict = dict() # type: Dict[str, Dict[str, Any]] - not_valid_categories = {} - not_valid_setting_by_category = {} - not_valid_setting_by_order = {} + previous_result = None + previous_visibility_dict = None + is_all_valid = True + for visibility_name in self._setting_visibility_order: + invalid_categories = [] + invalid_settings = collections.defaultdict(list) - visible_settings_order = [] # This list is used to make sure that the settings are in the correct order. - # basic.cfg -> advanced.cfg -> expert.cfg. Like: if the setting 'layer_height' in 'basic.cfg' then the same setting - # also should be in 'advanced.cfg' + this_visibility_dict = setting_visibility_dict[visibility_name] + # Check if categories and keys exist at all + for category, key_list in this_visibility_dict.items(): + if category not in self.all_settings_keys: + invalid_categories.append(category) + continue # If this category doesn't exist at all, not need to check for details - all_settings_categories = list(self.all_settings_keys.keys()) + for key in key_list: + if key not in self.all_settings_keys[category]: + invalid_settings[category].append(key) - # visibility_type = basic, advanced, expert - for visibility_type in setting_visibility: - item = setting_visibility_items[visibility_type] + is_settings_valid = len(invalid_categories) == 0 and len(invalid_settings) == 0 + file_path = setting_visibility_files[visibility_name] + result_dict = {"file_name": os.path.basename(file_path), + "is_valid": is_settings_valid, + "invalid_categories": invalid_categories, + "invalid_settings": invalid_settings, + "missing_categories_from_previous": list(), + "missing_settings_from_previous": dict(), + } - not_valid_setting_by_category[visibility_type] = [] # this list is for keeping invalid settings. - not_valid_categories[visibility_type] = [] + # If this is not the first item in the list, check if the settings are defined in the previous + # visibility file. + # A visibility with more details SHOULD add more settings. It SHOULD NOT remove any settings defined + # in the less detailed visibility. + if previous_visibility_dict is not None: + missing_categories_from_previous = [] + missing_settings_from_previous = collections.defaultdict(list) - for category, category_settings in item.items(): + for prev_category, prev_key_list in previous_visibility_dict.items(): + # Skip the categories that are invalid + if prev_category in previous_result["invalid_categories"]: + continue + if prev_category not in this_visibility_dict: + missing_categories_from_previous.append(prev_category) + continue - # Validate Category, If category is not defined then the test will fail - if category not in all_settings_categories: - not_valid_categories[visibility_type].append(category) + this_key_list = this_visibility_dict[prev_category] + for key in prev_key_list: + # Skip the settings that are invalid + if key in previous_result["invalid_settings"][prev_category]: + continue - for setting in category_settings: + if key not in this_key_list: + missing_settings_from_previous[prev_category].append(key) - # Check whether the setting exist in fdmprinter.def.json or not. - # If the setting is defined in the wrong category or does not exist there then the test will fail - if setting not in self.all_settings_keys[category]: - not_valid_setting_by_category[visibility_type].append(setting) + result_dict["missing_categories_from_previous"] = missing_categories_from_previous + result_dict["missing_settings_from_previous"] = missing_settings_from_previous + is_settings_valid = len(missing_categories_from_previous) == 0 and len(missing_settings_from_previous) == 0 + result_dict["is_valid"] = result_dict["is_valid"] and is_settings_valid - # Add the 'basic' settings to the list - if visibility_type == "basic": - visible_settings_order.append(setting) + # Update the complete result dict + all_result_dict[visibility_name] = result_dict + previous_result = result_dict + previous_visibility_dict = this_visibility_dict + is_all_valid = is_all_valid and result_dict["is_valid"] - # Check whether the settings are added in right order or not. - # The basic settings should be in advanced, and advanced in expert - for visibility_type in setting_visibility: + all_result_dict["all_results"] = {"is_valid": is_all_valid} - # Skip the basic because it cannot be compared to previous list - if visibility_type == 'basic': + return all_result_dict + + def printResults(self, all_result_dict: Dict[str, Dict[str, Any]]) -> None: + print("") + print("Setting Visibility Check Results:") + + prev_visibility_name = None + for visibility_name in self._setting_visibility_order: + if visibility_name not in all_result_dict: continue - all_settings_in_this_type = [] - not_valid_setting_by_order[visibility_type] = [] + result_dict = all_result_dict[visibility_name] + print("=============================") + result_str = "OK" if result_dict["is_valid"] else "INVALID" + print("[%s] : [%s] : %s" % (visibility_name, result_dict["file_name"], result_str)) - item = setting_visibility_items[visibility_type] - for category, category_settings in item.items(): - all_settings_in_this_type.extend(category_settings) + if result_dict["is_valid"]: + continue + + # Print details of invalid settings + if result_dict["invalid_categories"]: + print("It has the following non-existing CATEGORIES:") + for category in result_dict["invalid_categories"]: + print(" - [%s]" % category) + + if result_dict["invalid_settings"]: + print("") + print("It has the following non-existing SETTINGS:") + for category, key_list in result_dict["invalid_settings"].items(): + for key in key_list: + print(" - [%s / %s]" % (category, key)) + + if prev_visibility_name is not None: + if result_dict["missing_categories_from_previous"]: + print("") + print("The following CATEGORIES are defined in the previous visibility [%s] but not here:" % prev_visibility_name) + for category in result_dict["missing_categories_from_previous"]: + print(" - [%s]" % category) + + if result_dict["missing_settings_from_previous"]: + print("") + print("The following SETTINGS are defined in the previous visibility [%s] but not here:" % prev_visibility_name) + for category, key_list in result_dict["missing_settings_from_previous"].items(): + for key in key_list: + print(" - [%s / %s]" % (category, key)) + + print("") + prev_visibility_name = visibility_name - for setting in visible_settings_order: - if setting not in all_settings_in_this_type: - not_valid_setting_by_order[visibility_type].append(setting) +# +# Returns a dictionary of setting visibility .CFG files in the given search directory. +# The dict has the name of the visibility type as the key (such as "basic", "advanced", "expert"), and +# the actual file path (absolute path). +# +def getAllSettingVisiblityFiles(search_dir: str) -> Dict[str, str]: + visibility_file_dict = dict() + extension = ".cfg" + for file_name in os.listdir(search_dir): + file_path = os.path.join(search_dir, file_name) + + # Only check files that has the .cfg extension + if not os.path.isfile(file_path): + continue + if not file_path.endswith(extension): + continue + + base_filename = os.path.basename(file_name)[:-len(extension)] + visibility_file_dict[base_filename] = file_path + return visibility_file_dict - # If any of the settings is defined not correctly then the test is failed - has_invalid_settings = False +def main() -> None: + setting_visibility_files_dir = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility")) + fdmprinter_def_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json")) - for type, settings in not_valid_categories.items(): - if len(settings) > 0: - has_invalid_settings = True - print("The following categories are defined incorrectly") - print(" Visibility type : '%s'" % (type)) - print(" Incorrect categories : '%s'" % (settings)) - print() + setting_visibility_files_dict = getAllSettingVisiblityFiles(setting_visibility_files_dir) + print("--- ", setting_visibility_files_dict) + inspector = SettingVisibilityInspection() + inspector.loadAllCuraSettingKeys(fdmprinter_def_path) + check_result = inspector.validateSettingsVisibility(setting_visibility_files_dict) + is_result_valid = not check_result["all_results"]["is_valid"] + inspector.printResults(check_result) - for type, settings in not_valid_setting_by_category.items(): - if len(settings) > 0: - has_invalid_settings = True - print("The following settings do not exist anymore in fdmprinter definition or in wrong category") - print(" Visibility type : '%s'" % (type)) - print(" Incorrect settings : '%s'" % (settings)) - print() - - - for type, settings in not_valid_setting_by_order.items(): - if len(settings) > 0: - has_invalid_settings = True - print("The following settings are defined in the incorrect order in setting visibility definitions") - print(" Visibility type : '%s'" % (type)) - print(" Incorrect settings : '%s'" % (settings)) - - return has_invalid_settings + sys.exit(0 if is_result_valid else 1) if __name__ == "__main__": - - all_setting_visibility_files = glob.glob(os.path.join(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"), '*.cfg')) - fdmprinter_def_path = os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json") - - inspector = SettingVisibilityInspection() - inspector.defineAllCuraSettings(fdmprinter_def_path) - - setting_visibility_items = {} - for file_path in all_setting_visibility_files: - all_settings_from_visibility_type = inspector.getSettingsFromSettingVisibilityFile(file_path) - - base_name = os.path.basename(file_path) - visibility_type = base_name.split(".")[0] - - setting_visibility_items[visibility_type] = all_settings_from_visibility_type - - has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items) - - sys.exit(0 if not has_invalid_settings else 1) + main() From 72b3f9eb2a861ff6037a9ac82b5e3e2566f46909 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 20 Sep 2018 15:12:54 +0200 Subject: [PATCH 333/364] Remove debugging lines --- scripts/check_setting_visibility.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py index 41b1dc9095..fde1c2fb81 100755 --- a/scripts/check_setting_visibility.py +++ b/scripts/check_setting_visibility.py @@ -224,7 +224,6 @@ def main() -> None: fdmprinter_def_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json")) setting_visibility_files_dict = getAllSettingVisiblityFiles(setting_visibility_files_dir) - print("--- ", setting_visibility_files_dict) inspector = SettingVisibilityInspection() inspector.loadAllCuraSettingKeys(fdmprinter_def_path) From 884c5dea6733f35f19dcfb13eee0e60ac1f8bcf5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 20 Sep 2018 15:14:50 +0200 Subject: [PATCH 334/364] Add check_setting_visibility.py to Jenkinsfile --- Jenkinsfile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 8837fdf487..4f755dcae2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,6 +14,7 @@ parallel_nodes(['linux && cura', 'windows && cura']) { catchError { stage('Pre Checks') { if (isUnix()) { + // Check shortcut keys try { sh """ echo 'Check for duplicate shortcut keys in all translation files.' @@ -22,6 +23,16 @@ parallel_nodes(['linux && cura', 'windows && cura']) { } catch(e) { currentBuild.result = "UNSTABLE" } + + // Check setting visibilities + try { + sh """ + echo 'Check for duplicate shortcut keys in all translation files.' + ${env.CURA_ENVIRONMENT_PATH}/master/bin/python3 scripts/check_setting_visibility.py + """ + } catch(e) { + currentBuild.result = "UNSTABLE" + } } } From 0bc91132edf721564e49b7d23b79229f4c807361 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 20 Sep 2018 15:18:58 +0200 Subject: [PATCH 335/364] Fix check_setting_visibility return value --- scripts/check_setting_visibility.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py index fde1c2fb81..8fb5d5b293 100755 --- a/scripts/check_setting_visibility.py +++ b/scripts/check_setting_visibility.py @@ -229,7 +229,7 @@ def main() -> None: inspector.loadAllCuraSettingKeys(fdmprinter_def_path) check_result = inspector.validateSettingsVisibility(setting_visibility_files_dict) - is_result_valid = not check_result["all_results"]["is_valid"] + is_result_valid = check_result["all_results"]["is_valid"] inspector.printResults(check_result) sys.exit(0 if is_result_valid else 1) From 2dbaa304a01ff67621bfc2638444dc4fe8f0f825 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 20 Sep 2018 15:22:35 +0200 Subject: [PATCH 336/364] Set textFormat for the setting items to PlainText Based on the Qt guide on making qml run much faster, it seems that the default of textFormatting (auto) is quite expensive. As we make a *lot* of settingItems, which we don't want to format, it's better to set it to plain. I haven't checked how much faster it actually is, but i didn't see visual changes, so it's at least a safe step. --- resources/qml/Settings/SettingCategory.qml | 1 + resources/qml/Settings/SettingComboBox.qml | 2 ++ resources/qml/Settings/SettingExtruder.qml | 1 + resources/qml/Settings/SettingItem.qml | 1 + resources/qml/Settings/SettingOptionalExtruder.qml | 2 ++ resources/qml/Settings/SettingTextField.qml | 1 + resources/qml/Settings/SettingView.qml | 7 ++++--- 7 files changed, 12 insertions(+), 3 deletions(-) diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 842b3fd185..e3202323eb 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -79,6 +79,7 @@ Button verticalCenter: parent.verticalCenter; } text: definition.label + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("setting_category") color: diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml index 5d283d5ebb..76d458e427 100644 --- a/resources/qml/Settings/SettingComboBox.qml +++ b/resources/qml/Settings/SettingComboBox.qml @@ -73,6 +73,7 @@ SettingItem anchors.right: downArrow.left text: control.currentText + 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") @@ -115,6 +116,7 @@ SettingItem anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width text: modelData.value + textFormat: Text.PlainText renderType: Text.NativeRendering color: control.contentItem.color font: UM.Theme.getFont("default") diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 4c00a60d0e..a9427f863a 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -145,6 +145,7 @@ SettingItem rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width text: control.currentText + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 34bf9df921..ba7dfd05b6 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -115,6 +115,7 @@ Item { text: definition.label elide: Text.ElideMiddle; renderType: Text.NativeRendering + textFormat: Text.PlainText color: UM.Theme.getColor("setting_control_text"); opacity: (definition.visible) ? 1 : 0.5 diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml index 2d4f25125f..a3c1422b30 100644 --- a/resources/qml/Settings/SettingOptionalExtruder.qml +++ b/resources/qml/Settings/SettingOptionalExtruder.qml @@ -140,6 +140,7 @@ SettingItem rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width text: control.currentText + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") @@ -199,6 +200,7 @@ SettingItem anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width text: model.name + textFormat: Text.PlainText renderType: Text.NativeRendering color: { diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index c2c04ce36c..15782829d3 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -94,6 +94,7 @@ SettingItem anchors.verticalCenter: parent.verticalCenter text: definition.unit + textFormat: Text.PlainText renderType: Text.NativeRendering color: UM.Theme.getColor("setting_unit") font: UM.Theme.getFont("default") diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index e17f11bf99..da50b430ac 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -39,10 +39,11 @@ Item Label { id: globalProfileLabel - text: catalog.i18nc("@label","Profile:"); + text: catalog.i18nc("@label","Profile:") + textFormat: Text.PlainText width: Math.round(parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width - 2) - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") verticalAlignment: Text.AlignVCenter anchors.top: parent.top anchors.bottom: parent.bottom From 2d300ab39539149398716b74a4d2052482215eae Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Thu, 20 Sep 2018 18:34:08 +0200 Subject: [PATCH 337/364] Revert "Fix plugins import in CuraApplication" This reverts commit e87f3d7ca9cf135142bee488f188b9639c8b38fd. --- cura/CuraApplication.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index cdb640c3e2..c7d7fff518 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -82,6 +82,7 @@ from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from cura.Machines.VariantManager import VariantManager +from plugins.SliceInfoPlugin.SliceInfo import SliceInfo from .SingleInstance import SingleInstance from .AutoSave import AutoSave @@ -112,10 +113,6 @@ from cura.ObjectsModel import ObjectsModel from UM.FlameProfiler import pyqtSlot -if TYPE_CHECKING: - from plugins.SliceInfoPlugin.SliceInfo import SliceInfo - - numpy.seterr(all = "ignore") try: From 4bd5d29970f19aa2e038fb7f6e49860ce5a0d725 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Thu, 20 Sep 2018 18:41:30 +0200 Subject: [PATCH 338/364] Don't crash if the plugin is not found (maybe some error while loading). In that case it's better not to show the dialog than crashing. --- cura/CuraApplication.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index c7d7fff518..74c8e805af 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -13,6 +13,7 @@ from PyQt5.QtGui import QColor, QIcon from PyQt5.QtWidgets import QMessageBox from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType +from UM.PluginError import PluginNotFoundError from UM.Scene.SceneNode import SceneNode from UM.Scene.Camera import Camera from UM.Math.Vector import Vector @@ -1704,7 +1705,11 @@ class CuraApplication(QtApplication): @pyqtSlot() def showMoreInformationDialogForAnonymousDataCollection(self): - cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")).showMoreInfoDialog() + try: + slice_info = cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")) + slice_info.showMoreInfoDialog() + except PluginNotFoundError: + Logger.log("w", "Plugin SliceInfo was not found, so not able to show the info dialog.") def addSidebarCustomMenuItem(self, menu_item: dict) -> None: self._sidebar_custom_menu_items.append(menu_item) From 054a49c63de38423bb3ee6e6b1146be6ebd09e55 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 21 Sep 2018 09:33:25 +0200 Subject: [PATCH 339/364] Fix issue with inheritance manager button Removed one of the special detection cases, since it incorrectly removed a value from a stored profile CURA=5646 --- resources/qml/Settings/SettingItem.qml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index ba7dfd05b6..785562cff5 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -261,12 +261,6 @@ Item { // entry (user container) are set, we can simply remove the container. propertyProvider.removeFromContainer(0) } - else if(last_entry - 1 == base.stackLevel) - { - // Another special case. The setting that is overriden is only 1 instance container deeper, - // so we can remove it. - propertyProvider.removeFromContainer(last_entry - 1) - } else { // Put that entry into the "top" instance container. From dbe0d6d82a7383203dee4a4fc45b24a9dfbc9417 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 21 Sep 2018 11:33:06 +0200 Subject: [PATCH 340/364] Add typing --- plugins/SimulationView/SimulationView.py | 167 ++++++++++++----------- 1 file changed, 91 insertions(+), 76 deletions(-) diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 44643dbf1c..8d739654d4 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -18,10 +18,13 @@ from UM.Platform import Platform from UM.PluginRegistry import PluginRegistry from UM.Resources import Resources from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator + from UM.Scene.Selection import Selection from UM.Signal import Signal from UM.View.GL.OpenGL import OpenGL from UM.View.GL.OpenGLContext import OpenGLContext + + from UM.View.View import View from UM.i18n import i18nCatalog from cura.Scene.ConvexHullNode import ConvexHullNode @@ -30,11 +33,20 @@ from cura.CuraApplication import CuraApplication from .NozzleNode import NozzleNode from .SimulationPass import SimulationPass from .SimulationViewProxy import SimulationViewProxy +import numpy +import os.path + +from typing import Optional, TYPE_CHECKING, List + +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + from UM.Scene.Scene import Scene + from UM.View.GL.ShaderProgram import ShaderProgram + from UM.View.RenderPass import RenderPass + from UM.Settings.ContainerStack import ContainerStack catalog = i18nCatalog("cura") -import numpy -import os.path ## View used to display g-code paths. class SimulationView(View): @@ -44,7 +56,7 @@ class SimulationView(View): LAYER_VIEW_TYPE_FEEDRATE = 2 LAYER_VIEW_TYPE_THICKNESS = 3 - def __init__(self): + def __init__(self) -> None: super().__init__() self._max_layers = 0 @@ -64,21 +76,21 @@ class SimulationView(View): self._busy = False self._simulation_running = False - self._ghost_shader = None - self._layer_pass = None - self._composite_pass = None + self._ghost_shader = None # type: Optional["ShaderProgram"] + self._layer_pass = None # type: Optional[SimulationPass] + self._composite_pass = None # type: Optional[RenderPass] self._old_layer_bindings = None - self._simulationview_composite_shader = None + self._simulationview_composite_shader = None # type: Optional["ShaderProgram"] self._old_composite_shader = None - self._global_container_stack = None + self._global_container_stack = None # type: Optional[ContainerStack] self._proxy = SimulationViewProxy() self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) self._resetSettings() self._legend_items = None self._show_travel_moves = False - self._nozzle_node = None + self._nozzle_node = None # type: Optional[NozzleNode] Application.getInstance().getPreferences().addPreference("view/top_layer_count", 5) Application.getInstance().getPreferences().addPreference("view/only_show_top_layers", False) @@ -102,29 +114,29 @@ class SimulationView(View): self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled"), title = catalog.i18nc("@info:title", "Simulation View")) - def _evaluateCompatibilityMode(self): + def _evaluateCompatibilityMode(self) -> bool: return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode")) - def _resetSettings(self): - self._layer_view_type = 0 # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness + def _resetSettings(self) -> None: + self._layer_view_type = 0 # type: int # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness self._extruder_count = 0 self._extruder_opacity = [1.0, 1.0, 1.0, 1.0] - self._show_travel_moves = 0 - self._show_helpers = 1 - self._show_skin = 1 - self._show_infill = 1 + self._show_travel_moves = False + self._show_helpers = True + self._show_skin = True + self._show_infill = True self.resetLayerData() - def getActivity(self): + def getActivity(self) -> bool: return self._activity - def setActivity(self, activity): + def setActivity(self, activity: bool) -> None: if self._activity == activity: return self._activity = activity self.activityChanged.emit() - def getSimulationPass(self): + def getSimulationPass(self) -> SimulationPass: if not self._layer_pass: # Currently the RenderPass constructor requires a size > 0 # This should be fixed in RenderPass's constructor. @@ -133,30 +145,30 @@ class SimulationView(View): self._layer_pass.setSimulationView(self) return self._layer_pass - def getCurrentLayer(self): + def getCurrentLayer(self) -> int: return self._current_layer_num - def getMinimumLayer(self): + def getMinimumLayer(self) -> int: return self._minimum_layer_num - def getMaxLayers(self): + def getMaxLayers(self) -> int: return self._max_layers - def getCurrentPath(self): + def getCurrentPath(self) -> int: return self._current_path_num - def getMinimumPath(self): + def getMinimumPath(self) -> int: return self._minimum_path_num - def getMaxPaths(self): + def getMaxPaths(self) -> int: return self._max_paths - def getNozzleNode(self): + def getNozzleNode(self) -> NozzleNode: if not self._nozzle_node: self._nozzle_node = NozzleNode() return self._nozzle_node - def _onSceneChanged(self, node): + def _onSceneChanged(self, node: "SceneNode") -> None: if node.getMeshData() is None: self.resetLayerData() @@ -164,21 +176,21 @@ class SimulationView(View): self.calculateMaxLayers() self.calculateMaxPathsOnLayer(self._current_layer_num) - def isBusy(self): + def isBusy(self) -> bool: return self._busy - def setBusy(self, busy): + def setBusy(self, busy: bool) -> None: if busy != self._busy: self._busy = busy self.busyChanged.emit() - def isSimulationRunning(self): + def isSimulationRunning(self) -> bool: return self._simulation_running - def setSimulationRunning(self, running): + def setSimulationRunning(self, running: bool) -> None: self._simulation_running = running - def resetLayerData(self): + def resetLayerData(self) -> None: self._current_layer_mesh = None self._current_layer_jumps = None self._max_feedrate = sys.float_info.min @@ -186,7 +198,7 @@ class SimulationView(View): self._max_thickness = sys.float_info.min self._min_thickness = sys.float_info.max - def beginRendering(self): + def beginRendering(self) -> None: scene = self.getController().getScene() renderer = self.getRenderer() @@ -204,7 +216,7 @@ class SimulationView(View): if (node.getMeshData()) and node.isVisible(): renderer.queueNode(node, transparent = True, shader = self._ghost_shader) - def setLayer(self, value): + def setLayer(self, value: int) -> None: if self._current_layer_num != value: self._current_layer_num = value if self._current_layer_num < 0: @@ -218,7 +230,7 @@ class SimulationView(View): self.currentLayerNumChanged.emit() - def setMinimumLayer(self, value): + def setMinimumLayer(self, value: int) -> None: if self._minimum_layer_num != value: self._minimum_layer_num = value if self._minimum_layer_num < 0: @@ -232,7 +244,7 @@ class SimulationView(View): self.currentLayerNumChanged.emit() - def setPath(self, value): + def setPath(self, value: int) -> None: if self._current_path_num != value: self._current_path_num = value if self._current_path_num < 0: @@ -246,7 +258,7 @@ class SimulationView(View): self.currentPathNumChanged.emit() - def setMinimumPath(self, value): + def setMinimumPath(self, value: int) -> None: if self._minimum_path_num != value: self._minimum_path_num = value if self._minimum_path_num < 0: @@ -263,24 +275,24 @@ class SimulationView(View): ## Set the layer view type # # \param layer_view_type integer as in SimulationView.qml and this class - def setSimulationViewType(self, layer_view_type): + def setSimulationViewType(self, layer_view_type: int) -> None: self._layer_view_type = layer_view_type self.currentLayerNumChanged.emit() ## Return the layer view type, integer as in SimulationView.qml and this class - def getSimulationViewType(self): + def getSimulationViewType(self) -> int: return self._layer_view_type ## Set the extruder opacity # # \param extruder_nr 0..3 # \param opacity 0.0 .. 1.0 - def setExtruderOpacity(self, extruder_nr, opacity): + def setExtruderOpacity(self, extruder_nr: int, opacity: float) -> None: if 0 <= extruder_nr <= 3: self._extruder_opacity[extruder_nr] = opacity self.currentLayerNumChanged.emit() - def getExtruderOpacities(self): + def getExtruderOpacities(self)-> List[float]: return self._extruder_opacity def setShowTravelMoves(self, show): @@ -290,46 +302,46 @@ class SimulationView(View): def getShowTravelMoves(self): return self._show_travel_moves - def setShowHelpers(self, show): + def setShowHelpers(self, show: bool) -> None: self._show_helpers = show self.currentLayerNumChanged.emit() - def getShowHelpers(self): + def getShowHelpers(self) -> bool: return self._show_helpers - def setShowSkin(self, show): + def setShowSkin(self, show: bool) -> None: self._show_skin = show self.currentLayerNumChanged.emit() - def getShowSkin(self): + def getShowSkin(self) -> bool: return self._show_skin - def setShowInfill(self, show): + def setShowInfill(self, show: bool) -> None: self._show_infill = show self.currentLayerNumChanged.emit() - def getShowInfill(self): + def getShowInfill(self) -> bool: return self._show_infill - def getCompatibilityMode(self): + def getCompatibilityMode(self) -> bool: return self._compatibility_mode - def getExtruderCount(self): + def getExtruderCount(self) -> int: return self._extruder_count - def getMinFeedrate(self): + def getMinFeedrate(self) -> float: return self._min_feedrate - def getMaxFeedrate(self): + def getMaxFeedrate(self) -> float: return self._max_feedrate - def getMinThickness(self): + def getMinThickness(self) -> float: return self._min_thickness - def getMaxThickness(self): + def getMaxThickness(self) -> float: return self._max_thickness - def calculateMaxLayers(self): + def calculateMaxLayers(self) -> None: scene = self.getController().getScene() self._old_max_layers = self._max_layers @@ -383,7 +395,7 @@ class SimulationView(View): self.maxLayersChanged.emit() self._startUpdateTopLayers() - def calculateMaxPathsOnLayer(self, layer_num): + def calculateMaxPathsOnLayer(self, layer_num: int) -> None: # Update the currentPath scene = self.getController().getScene() for node in DepthFirstIterator(scene.getRoot()): @@ -415,10 +427,10 @@ class SimulationView(View): def getProxy(self, engine, script_engine): return self._proxy - def endRendering(self): + def endRendering(self) -> None: pass - def event(self, event): + def event(self, event) -> bool: modifiers = QApplication.keyboardModifiers() ctrl_is_active = modifiers & Qt.ControlModifier shift_is_active = modifiers & Qt.ShiftModifier @@ -447,7 +459,7 @@ class SimulationView(View): if QOpenGLContext.currentContext() is None: Logger.log("d", "current context of OpenGL is empty on Mac OS X, will try to create shaders later") CuraApplication.getInstance().callLater(lambda e=event: self.event(e)) - return + return False # Make sure the SimulationPass is created layer_pass = self.getSimulationPass() @@ -480,11 +492,14 @@ class SimulationView(View): Application.getInstance().globalContainerStackChanged.disconnect(self._onGlobalStackChanged) if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) - - self._nozzle_node.setParent(None) + if self._nozzle_node: + self._nozzle_node.setParent(None) self.getRenderer().removeRenderPass(self._layer_pass) - self._composite_pass.setLayerBindings(self._old_layer_bindings) - self._composite_pass.setCompositeShader(self._old_composite_shader) + if self._composite_pass: + self._composite_pass.setLayerBindings(self._old_layer_bindings) + self._composite_pass.setCompositeShader(self._old_composite_shader) + + return False def getCurrentLayerMesh(self): return self._current_layer_mesh @@ -492,7 +507,7 @@ class SimulationView(View): def getCurrentLayerJumps(self): return self._current_layer_jumps - def _onGlobalStackChanged(self): + def _onGlobalStackChanged(self) -> None: if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) self._global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -504,17 +519,17 @@ class SimulationView(View): else: self._wireprint_warning_message.hide() - def _onPropertyChanged(self, key, property_name): + def _onPropertyChanged(self, key: str, property_name: str) -> None: if key == "wireframe_enabled" and property_name == "value": - if self._global_container_stack.getProperty("wireframe_enabled", "value"): + if self._global_container_stack and self._global_container_stack.getProperty("wireframe_enabled", "value"): self._wireprint_warning_message.show() else: self._wireprint_warning_message.hide() - def _onCurrentLayerNumChanged(self): + def _onCurrentLayerNumChanged(self) -> None: self.calculateMaxPathsOnLayer(self._current_layer_num) - def _startUpdateTopLayers(self): + def _startUpdateTopLayers(self) -> None: if not self._compatibility_mode: return @@ -525,10 +540,10 @@ class SimulationView(View): self.setBusy(True) self._top_layers_job = _CreateTopLayersJob(self._controller.getScene(), self._current_layer_num, self._solid_layers) - self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) - self._top_layers_job.start() + self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) # type: ignore # mypy doesn't understand the whole private class thing that's going on here. + self._top_layers_job.start() # type: ignore - def _updateCurrentLayerMesh(self, job): + def _updateCurrentLayerMesh(self, job: "_CreateTopLayersJob") -> None: self.setBusy(False) if not job.getResult(): @@ -539,9 +554,9 @@ class SimulationView(View): self._current_layer_jumps = job.getResult().get("jumps") self._controller.getScene().sceneChanged.emit(self._controller.getScene().getRoot()) - self._top_layers_job = None + self._top_layers_job = None # type: Optional["_CreateTopLayersJob"] - def _updateWithPreferences(self): + 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() @@ -563,7 +578,7 @@ class SimulationView(View): self._startUpdateTopLayers() self.preferencesChanged.emit() - def _onPreferencesChanged(self, preference): + def _onPreferencesChanged(self, preference: str) -> None: if preference not in { "view/top_layer_count", "view/only_show_top_layers", @@ -581,7 +596,7 @@ class SimulationView(View): class _CreateTopLayersJob(Job): - def __init__(self, scene, layer_number, solid_layers): + def __init__(self, scene: "Scene", layer_number: int, solid_layers: int) -> None: super().__init__() self._scene = scene @@ -589,7 +604,7 @@ class _CreateTopLayersJob(Job): self._solid_layers = solid_layers self._cancel = False - def run(self): + def run(self) -> None: layer_data = None for node in DepthFirstIterator(self._scene.getRoot()): layer_data = node.callDecoration("getLayerData") @@ -638,6 +653,6 @@ class _CreateTopLayersJob(Job): self.setResult({"layers": layer_mesh.build(), "jumps": jump_mesh}) - def cancel(self): + def cancel(self) -> None: self._cancel = True super().cancel() From 1bf78c086dd10e91db595b5d042e114582df7ac6 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 21 Sep 2018 12:03:12 +0200 Subject: [PATCH 341/364] Remove import plugins which is not a module --- cura/CuraApplication.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 74c8e805af..e5b24f71d3 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -83,7 +83,6 @@ from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from cura.Machines.VariantManager import VariantManager -from plugins.SliceInfoPlugin.SliceInfo import SliceInfo from .SingleInstance import SingleInstance from .AutoSave import AutoSave @@ -1706,7 +1705,7 @@ class CuraApplication(QtApplication): @pyqtSlot() def showMoreInformationDialogForAnonymousDataCollection(self): try: - slice_info = cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")) + slice_info = self._plugin_registry.getPluginObject("SliceInfoPlugin") slice_info.showMoreInfoDialog() except PluginNotFoundError: Logger.log("w", "Plugin SliceInfo was not found, so not able to show the info dialog.") From b26c78202ba7fe5e265736e628279e1d2fec4c39 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 21 Sep 2018 10:00:21 +0200 Subject: [PATCH 342/364] Consolidate log entries about excluded materials I got a log where 80% of the log was this particular message. Let's not do that. --- cura/Machines/MaterialManager.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index dd6376b5e3..b7f3978db8 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -337,6 +337,7 @@ class MaterialManager(QObject): 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 @@ -345,13 +346,14 @@ class MaterialManager(QObject): # 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: - Logger.log("d", "Exclude material [%s] for machine [%s]", - material_id, machine_definition.getId()) + excluded_materials.add(material_id) continue if material_id not in material_id_metadata_dict: material_id_metadata_dict[material_id] = node + 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 # From 86d8f8517d2f7ef05107c1be824dab9acf992872 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Fri, 21 Sep 2018 13:48:46 +0200 Subject: [PATCH 343/364] In material page was not defined the used extruder nr, for generic materials CURA-5682 --- resources/qml/Preferences/Materials/MaterialsList.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index cb5de685e2..f40a5acdb6 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -19,7 +19,11 @@ Item UM.I18nCatalog { id: catalog; name: "cura"; } Cura.MaterialBrandsModel { id: materialsModel } Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } - Cura.GenericMaterialsModel { id: genericMaterialsModel } + Cura.GenericMaterialsModel + { + id: genericMaterialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } property var currentType: null property var currentBrand: null From 30ef724322314ac241d6b552c364091d8d814b61 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 21 Sep 2018 14:11:59 +0200 Subject: [PATCH 344/364] Update STL MIME type Since march, there is now an official MIME type for STL files. See https://www.iana.org/assignments/media-types/model/stl for the new MIME type specification. Fixes #4141. --- cura.desktop.in | 2 +- cura.sharedmimeinfo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cura.desktop.in b/cura.desktop.in index fe61b47217..fbe8b30fed 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -13,6 +13,6 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=cura-icon Terminal=false Type=Application -MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml; +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml; Categories=Graphics; Keywords=3D;Printing;Slicer; diff --git a/cura.sharedmimeinfo b/cura.sharedmimeinfo index 9629aef5df..23d38795eb 100644 --- a/cura.sharedmimeinfo +++ b/cura.sharedmimeinfo @@ -6,7 +6,7 @@ - + Computer-aided design and manufacturing format From b44fb7ca2429a5ffe99d0c5694206d2bb0fe7e35 Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Fri, 21 Sep 2018 17:35:46 +0200 Subject: [PATCH 345/364] Select correct material according to the active extruder CURA-5682 --- .../qml/Preferences/Materials/MaterialsList.qml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index f40a5acdb6..00bead9650 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -17,8 +17,18 @@ Item // Children UM.I18nCatalog { id: catalog; name: "cura"; } - Cura.MaterialBrandsModel { id: materialsModel } - Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel } + Cura.MaterialBrandsModel + { + id: materialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } + + Cura.FavoriteMaterialsModel + { + id: favoriteMaterialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } + Cura.GenericMaterialsModel { id: genericMaterialsModel From fe8aa02e7ce2c643a4ff58a708eb3bf3f88eaef5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 24 Sep 2018 11:44:53 +0200 Subject: [PATCH 346/364] Fix a direct signal emission that causes max recursion error CURA-5682 A max recursion error will occur when the user creates a material on the material management page. Too many signals get directly triggered and some of them head back again and causes a max recursion error. --- cura/Settings/CuraContainerStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index c8d1d9e370..0ec95e2e41 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -291,7 +291,7 @@ class CuraContainerStack(ContainerStack): # Helper to make sure we emit a PyQt signal on container changes. def _onContainersChanged(self, container: Any) -> None: - self.pyqtContainersChanged.emit() + Application.getInstance().callLater(self.pyqtContainersChanged.emit) # Helper that can be overridden to get the "machine" definition, that is, the definition that defines the machine # and its properties rather than, for example, the extruder. Defaults to simply returning the definition property. From c46e0e7556acb6787090cee739960c2b8ed5b581 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 24 Sep 2018 11:59:02 +0200 Subject: [PATCH 347/364] Only print message about excluded materials if there are any Otherwise the message is very strange (with double spaces and such) and unnecessary. --- cura/Machines/MaterialManager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index b7f3978db8..0ca9047620 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -352,7 +352,8 @@ class MaterialManager(QObject): if material_id not in material_id_metadata_dict: material_id_metadata_dict[material_id] = node - Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id)) + 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 From a8493ee35d5bc68c6b1e55a6248ab78ea64b7257 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Sep 2018 11:24:37 +0200 Subject: [PATCH 348/364] Give black materials at least some albedo Otherwise you can't see the diffuse reflections and the entire thing just becomes a black silhouette. --- plugins/SimulationView/layers3d.shader | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index 03e279e9eb..de2b9335d8 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -256,6 +256,7 @@ fragment41core = out vec4 frag_color; uniform mediump vec4 u_ambientColor; + uniform mediump vec4 u_minimumAlbedo; uniform highp vec3 u_lightPosition; void main() @@ -263,7 +264,7 @@ fragment41core = mediump vec4 finalColor = vec4(0.0); float alpha = f_color.a; - finalColor.rgb += f_color.rgb * 0.3; + finalColor.rgb += f_color.rgb * 0.2 + u_minimumAlbedo.rgb; highp vec3 normal = normalize(f_normal); highp vec3 light_dir = normalize(u_lightPosition - f_vertex); @@ -285,6 +286,7 @@ u_extruder_opacity = [1.0, 1.0, 1.0, 1.0] u_specularColor = [0.4, 0.4, 0.4, 1.0] u_ambientColor = [0.3, 0.3, 0.3, 0.0] u_diffuseColor = [1.0, 0.79, 0.14, 1.0] +u_minimumAlbedo = [0.1, 0.1, 0.1, 1.0] u_shininess = 20.0 u_show_travel_moves = 0 From 8837ffc06ddd7a9177e52339088a0f89c2a28624 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 25 Sep 2018 11:52:50 +0200 Subject: [PATCH 349/364] Fix mateial management QML reference CURA-5682 --- .../Preferences/Materials/MaterialsDetailsPanel.qml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index f72d93aff3..92970f40e2 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -27,9 +27,20 @@ Item function updateMaterialPropertiesObject() { + // DRAGON WARNING!!! DO NOT TOUCH THIS IF YOU DON'T KNOW. + // TL;DR: Always update "container_id" first! + // + // Other widgets such as MaterialsView have bindings towards "materialProperties" and its properties. Here the + // properties are updated one by one, and each change can trigger a reaction on those widgets that have + // connections to the property gets changed, and some reactions will use functions such as + // ContainerManager.getContainerMetaDataEntry() to fetch data using the "container_id" as the reference. + // We need to change "container_id" first so any underlying triggers will use the correct "container_id" to + // fetch data. Or, for example, if we change GUID first, which triggered the weight widget to fetch weight + // before we can update "container_id", so it will fetch weight with the wrong (old) "container_id". + materialProperties.container_id = currentItem.id + materialProperties.name = currentItem.name || "Unknown" materialProperties.guid = currentItem.GUID - materialProperties.container_id = currentItem.id materialProperties.brand = currentItem.brand || "Unknown" materialProperties.material = currentItem.material || "Unknown" materialProperties.color_name = currentItem.color_name || "Yellow" From 987ae730787170f8fb5cd735e257fbe28ee04aa4 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 25 Sep 2018 13:15:26 +0200 Subject: [PATCH 350/364] Remove call to undefined function. --- resources/qml/Menus/SettingVisibilityPresetsMenu.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml index 2175cfa402..c34dc2a484 100644 --- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml +++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml @@ -29,7 +29,6 @@ Menu onTriggered: { settingVisibilityPresetsModel.setActivePreset(model.id); - showSettingVisibilityProfile(); } } From 3127108d008ab5547ba5e3f1cf45b474d2e88b91 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 25 Sep 2018 13:17:14 +0200 Subject: [PATCH 351/364] Only set top/bottom pattern to concentric for initial layer I'm taking responsibility for this. I'm changing it as a reaction to #4167 since I think concentric is good for the first layer but not so good for the rest of the layers. That user seems to agree but it hasn't been tested thoroughly. It's my intuition, sorry if it went wrong. --- resources/definitions/creality_cr10.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json index b727834db3..fb63867163 100644 --- a/resources/definitions/creality_cr10.def.json +++ b/resources/definitions/creality_cr10.def.json @@ -37,7 +37,7 @@ "top_bottom_thickness": { "default_value": 0.6 }, - "top_bottom_pattern": { + "top_bottom_pattern_0": { "default_value": "concentric" }, "infill_pattern": { From 1717281d2b84f2f60d3695c61a8a6d3f18a75165 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Sep 2018 11:20:24 +0200 Subject: [PATCH 352/364] Always provide extruder_nr for all models Even if you only have one extruder in your printer. This is more consistent, and probably also faster because executing one set-addition in Python is probably still slower than sending those 20 extra bytes over the socket and parsing them in C++... Contributes to issue CURA-4410. --- plugins/CuraEngineBackend/StartSliceJob.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 28e442033b..dd0d9db0a2 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -440,8 +440,7 @@ class StartSliceJob(Job): Job.yieldThread() # Ensure that the engine is aware what the build extruder is. - if stack.getProperty("machine_extruder_count", "value") > 1: - changed_setting_keys.add("extruder_nr") + changed_setting_keys.add("extruder_nr") # Get values for all changed settings for key in changed_setting_keys: From 88ba2ac3451834db5a11169214d410c8aa3f726d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Sep 2018 13:27:42 +0200 Subject: [PATCH 353/364] Define gcode.gz extension in GCodeGzReader So if you were to disable the GCodeGzReader plug-in, you will now no longer see the extension in the files you can read. Fixes #4151. --- plugins/GCodeGzReader/GCodeGzReader.py | 8 ++++++++ plugins/GCodeReader/GCodeReader.py | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/GCodeGzReader/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py index 73a08075d2..4d33f00870 100644 --- a/plugins/GCodeGzReader/GCodeGzReader.py +++ b/plugins/GCodeGzReader/GCodeGzReader.py @@ -4,8 +4,16 @@ import gzip from UM.Mesh.MeshReader import MeshReader #The class we're extending/implementing. +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType #To add the .gcode.gz files to the MIME type database. from UM.PluginRegistry import PluginRegistry +MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-compressed-gcode-file", + comment = "Cura Compressed GCode File", + suffixes = ["gcode.gz"] + ) +) ## A file reader that reads gzipped g-code. # diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index 45ef1e1058..498c425f68 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -1,4 +1,5 @@ # Copyright (c) 2017 Aleph Objects, Inc. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.FileHandler.FileReader import FileReader @@ -15,7 +16,7 @@ MimeTypeDatabase.addMimeType( MimeType( name = "application/x-cura-gcode-file", comment = "Cura GCode File", - suffixes = ["gcode", "gcode.gz"] + suffixes = ["gcode"] ) ) From 0ce9bf61beb1ed6bf72319b42330cd69251b959e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 27 Sep 2018 13:58:06 +0200 Subject: [PATCH 354/364] Move MIME type declarations into constructors of readers So that if you disable the plug-in, the MIME type declaration is also not added. Fixes #4151. --- plugins/GCodeGzReader/GCodeGzReader.py | 15 +++++++-------- plugins/GCodeReader/GCodeReader.py | 16 +++++++++------- plugins/UFPWriter/UFPWriter.py | 11 +++++++++++ plugins/UFPWriter/__init__.py | 10 ---------- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/plugins/GCodeGzReader/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py index 4d33f00870..d075e4e3b0 100644 --- a/plugins/GCodeGzReader/GCodeGzReader.py +++ b/plugins/GCodeGzReader/GCodeGzReader.py @@ -7,20 +7,19 @@ from UM.Mesh.MeshReader import MeshReader #The class we're extending/implementin from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType #To add the .gcode.gz files to the MIME type database. from UM.PluginRegistry import PluginRegistry -MimeTypeDatabase.addMimeType( - MimeType( - name = "application/x-cura-compressed-gcode-file", - comment = "Cura Compressed GCode File", - suffixes = ["gcode.gz"] - ) -) - ## A file reader that reads gzipped g-code. # # If you're zipping g-code, you might as well use gzip! class GCodeGzReader(MeshReader): def __init__(self) -> None: super().__init__() + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-compressed-gcode-file", + comment = "Cura Compressed GCode File", + suffixes = ["gcode.gz"] + ) + ) self._supported_extensions = [".gcode.gz"] def _read(self, file_name): diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index 498c425f68..1bc22a3e62 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -12,13 +12,7 @@ catalog = i18nCatalog("cura") from . import MarlinFlavorParser, RepRapFlavorParser -MimeTypeDatabase.addMimeType( - MimeType( - name = "application/x-cura-gcode-file", - comment = "Cura GCode File", - suffixes = ["gcode"] - ) -) + # Class for loading and parsing G-code files @@ -30,7 +24,15 @@ class GCodeReader(MeshReader): def __init__(self) -> None: super().__init__() + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-gcode-file", + comment = "Cura GCode File", + suffixes = ["gcode"] + ) + ) self._supported_extensions = [".gcode", ".g"] + self._flavor_reader = None Application.getInstance().getPreferences().addPreference("gcodereader/show_caution", True) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index a85ee489cb..d318a0e77d 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -1,5 +1,6 @@ #Copyright (c) 2018 Ultimaker B.V. #Cura is released under the terms of the LGPLv3 or higher. + from typing import cast from Charon.VirtualFile import VirtualFile #To open UFP files. @@ -9,6 +10,7 @@ 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 @@ -22,6 +24,15 @@ catalog = i18nCatalog("cura") class UFPWriter(MeshWriter): def __init__(self): super().__init__(add_to_recent_files = False) + + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-stl-file", + comment = "Cura UFP File", + suffixes = ["ufp"] + ) + ) + self._snapshot = None Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot) diff --git a/plugins/UFPWriter/__init__.py b/plugins/UFPWriter/__init__.py index a2ec99044f..9db6b042f8 100644 --- a/plugins/UFPWriter/__init__.py +++ b/plugins/UFPWriter/__init__.py @@ -11,16 +11,6 @@ except ImportError: from UM.i18n import i18nCatalog #To translate the file format description. from UM.Mesh.MeshWriter import MeshWriter #For the binary mode flag. -from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType - - -MimeTypeDatabase.addMimeType( - MimeType( - name = "application/x-cura-stl-file", - comment = "Cura UFP File", - suffixes = ["ufp"] - ) -) i18n_catalog = i18nCatalog("cura") From d83241f13aec281e29e08b47bf98be6d94e0d629 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 14:29:09 +0200 Subject: [PATCH 355/364] Add missing typing to number of decorators --- cura/Scene/ConvexHullDecorator.py | 63 ++++++++++++++++---------- cura/Scene/GCodeListDecorator.py | 14 ++++-- cura/Scene/SliceableObjectDecorator.py | 6 +-- cura/Scene/ZOffsetDecorator.py | 11 +++-- 4 files changed, 58 insertions(+), 36 deletions(-) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index ea54d64642..85d1e8e309 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -13,19 +13,28 @@ from cura.Scene import ConvexHullNode import numpy +from typing import TYPE_CHECKING, Any, Optional + + + +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + from cura.Settings.GlobalStack import GlobalStack + + ## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node. # If a scene node has a convex hull decorator, it will have a shadow in which other objects can not be printed. class ConvexHullDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._convex_hull_node = None + self._convex_hull_node = None # type: Optional["SceneNode"] self._init2DConvexHullCache() - self._global_stack = None + self._global_stack = None # type: Optional[GlobalStack] # Make sure the timer is created on the main thread - self._recompute_convex_hull_timer = None + self._recompute_convex_hull_timer = None # type: Optional[QTimer] Application.getInstance().callLater(self.createRecomputeConvexHullTimer) self._raft_thickness = 0.0 @@ -39,13 +48,13 @@ class ConvexHullDecorator(SceneNodeDecorator): self._onGlobalStackChanged() - def createRecomputeConvexHullTimer(self): + def createRecomputeConvexHullTimer(self) -> None: self._recompute_convex_hull_timer = QTimer() self._recompute_convex_hull_timer.setInterval(200) self._recompute_convex_hull_timer.setSingleShot(True) self._recompute_convex_hull_timer.timeout.connect(self.recomputeConvexHull) - def setNode(self, node): + def setNode(self, node: "SceneNode") -> None: previous_node = self._node # Disconnect from previous node signals if previous_node is not None and node is not previous_node: @@ -64,7 +73,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return ConvexHullDecorator() ## Get the unmodified 2D projected convex hull of the node - def getConvexHull(self): + def getConvexHull(self) -> Optional[Polygon]: if self._node is None: return None @@ -78,7 +87,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return hull ## Get the convex hull of the node with the full head size - def getConvexHullHeadFull(self): + def getConvexHullHeadFull(self) -> Optional[Polygon]: if self._node is None: return None @@ -87,7 +96,7 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Get convex hull of the object + head size # In case of printing all at once this is the same as the convex hull. # For one at the time this is area with intersection of mirrored head - def getConvexHullHead(self): + def getConvexHullHead(self) -> Optional[Polygon]: if self._node is None: return None @@ -101,7 +110,7 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Get convex hull of the node # In case of printing all at once this is the same as the convex hull. # For one at the time this is the area without the head. - def getConvexHullBoundary(self): + def getConvexHullBoundary(self) -> Optional[Polygon]: if self._node is None: return None @@ -111,13 +120,13 @@ class ConvexHullDecorator(SceneNodeDecorator): return self._compute2DConvexHull() return None - def recomputeConvexHullDelayed(self): + def recomputeConvexHullDelayed(self) -> None: if self._recompute_convex_hull_timer is not None: self._recompute_convex_hull_timer.start() else: self.recomputeConvexHull() - def recomputeConvexHull(self): + def recomputeConvexHull(self) -> None: controller = Application.getInstance().getController() root = controller.getScene().getRoot() if self._node is None or controller.isToolOperationActive() or not self.__isDescendant(root, self._node): @@ -132,7 +141,7 @@ class ConvexHullDecorator(SceneNodeDecorator): hull_node = ConvexHullNode.ConvexHullNode(self._node, convex_hull, self._raft_thickness, root) self._convex_hull_node = hull_node - def _onSettingValueChanged(self, key, property_name): + def _onSettingValueChanged(self, key: str, property_name: str) -> None: if property_name != "value": #Not the value that was changed. return @@ -142,7 +151,7 @@ class ConvexHullDecorator(SceneNodeDecorator): self._init2DConvexHullCache() #Invalidate the cache. self._onChanged() - def _init2DConvexHullCache(self): + def _init2DConvexHullCache(self) -> None: # Cache for the group code path in _compute2DConvexHull() self._2d_convex_hull_group_child_polygon = None self._2d_convex_hull_group_result = None @@ -152,7 +161,7 @@ class ConvexHullDecorator(SceneNodeDecorator): self._2d_convex_hull_mesh_world_transform = None self._2d_convex_hull_mesh_result = None - def _compute2DConvexHull(self): + def _compute2DConvexHull(self) -> Polygon: if self._node.callDecoration("isGroup"): points = numpy.zeros((0, 2), dtype=numpy.int32) for child in self._node.getChildren(): @@ -228,8 +237,10 @@ class ConvexHullDecorator(SceneNodeDecorator): return offset_hull - def _getHeadAndFans(self): - return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) + def _getHeadAndFans(self) -> Polygon: + if self._global_stack: + return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) + return Polygon() def _compute2DConvexHeadFull(self): return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans()) @@ -245,7 +256,9 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Compensate given 2D polygon with adhesion margin # \return 2D polygon with added margin - def _add2DAdhesionMargin(self, poly): + def _add2DAdhesionMargin(self, poly: Polygon) -> Polygon: + if not self._global_stack: + return Polygon() # Compensate for raft/skirt/brim # Add extra margin depending on adhesion type adhesion_type = self._global_stack.getProperty("adhesion_type", "value") @@ -274,7 +287,7 @@ class ConvexHullDecorator(SceneNodeDecorator): # \param convex_hull Polygon of the original convex hull. # \return New Polygon instance that is offset with everything that # influences the collision area. - def _offsetHull(self, convex_hull): + def _offsetHull(self, convex_hull: Polygon) -> Polygon: horizontal_expansion = max( self._getSettingProperty("xy_offset", "value"), self._getSettingProperty("xy_offset_layer_0", "value") @@ -295,12 +308,12 @@ class ConvexHullDecorator(SceneNodeDecorator): else: return convex_hull - def _onChanged(self, *args): + def _onChanged(self, *args) -> None: self._raft_thickness = self._build_volume.getRaftThickness() if not args or args[0] == self._node: self.recomputeConvexHullDelayed() - def _onGlobalStackChanged(self): + def _onGlobalStackChanged(self) -> None: if self._global_stack: self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged) self._global_stack.containersChanged.disconnect(self._onChanged) @@ -321,7 +334,9 @@ class ConvexHullDecorator(SceneNodeDecorator): self._onChanged() ## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property). - def _getSettingProperty(self, setting_key, prop = "value"): + def _getSettingProperty(self, setting_key: str, prop: str = "value") -> Any: + if not self._global_stack: + return None per_mesh_stack = self._node.callDecoration("getStack") if per_mesh_stack: return per_mesh_stack.getProperty(setting_key, prop) @@ -339,8 +354,8 @@ class ConvexHullDecorator(SceneNodeDecorator): # Limit_to_extruder is set. The global stack handles this then return self._global_stack.getProperty(setting_key, prop) - ## Returns true if node is a descendant or the same as the root node. - def __isDescendant(self, root, node): + ## Returns true if node is a descendant or the same as the root node. + def __isDescendant(self, root: "SceneNode", node: "SceneNode") -> bool: if node is None: return False if root is node: diff --git a/cura/Scene/GCodeListDecorator.py b/cura/Scene/GCodeListDecorator.py index 5738d0a7f2..572fea6ac4 100644 --- a/cura/Scene/GCodeListDecorator.py +++ b/cura/Scene/GCodeListDecorator.py @@ -1,13 +1,19 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator +from typing import List class GCodeListDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._gcode_list = [] + self._gcode_list = [] # type: List[str] - def getGCodeList(self): + def getGCodeList(self) -> List[str]: return self._gcode_list - def setGCodeList(self, list): + def setGCodeList(self, list: List[str]): self._gcode_list = list + + def __deepcopy__(self, memo) -> "GCodeListDecorator": + copied_decorator = GCodeListDecorator() + copied_decorator.setGCodeList(self.getGCodeList()) + return copied_decorator \ No newline at end of file diff --git a/cura/Scene/SliceableObjectDecorator.py b/cura/Scene/SliceableObjectDecorator.py index 1cb589d9c6..982a38d667 100644 --- a/cura/Scene/SliceableObjectDecorator.py +++ b/cura/Scene/SliceableObjectDecorator.py @@ -2,11 +2,11 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator class SliceableObjectDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - def isSliceable(self): + def isSliceable(self) -> bool: return True - def __deepcopy__(self, memo): + def __deepcopy__(self, memo) -> "SliceableObjectDecorator": return type(self)() diff --git a/cura/Scene/ZOffsetDecorator.py b/cura/Scene/ZOffsetDecorator.py index d3ee5c8454..b35b17a412 100644 --- a/cura/Scene/ZOffsetDecorator.py +++ b/cura/Scene/ZOffsetDecorator.py @@ -1,18 +1,19 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator + ## A decorator that stores the amount an object has been moved below the platform. class ZOffsetDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._z_offset = 0 + self._z_offset = 0. - def setZOffset(self, offset): + def setZOffset(self, offset: float) -> None: self._z_offset = offset - def getZOffset(self): + def getZOffset(self) -> float: return self._z_offset - def __deepcopy__(self, memo): + def __deepcopy__(self, memo) -> "ZOffsetDecorator": copied_decorator = ZOffsetDecorator() copied_decorator.setZOffset(self.getZOffset()) return copied_decorator From 1467e703ae121c3f2fa02ee7258bdeba63f80c5c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 15:16:46 +0200 Subject: [PATCH 356/364] No longer make BuildVolume set max bounds. We didn't use it anymore and it added an extra requirement for buildvolume to depend on Application --- cura/BuildVolume.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 4059283a32..9d2f5c1f90 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -479,8 +479,6 @@ class BuildVolume(SceneNode): 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) ) - self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds - self.updateNodeBoundaryCheck() def getBoundingBox(self) -> AxisAlignedBox: From b58c01400baf563bb537d6bc49511c898b1b9689 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 15:28:53 +0200 Subject: [PATCH 357/364] Updated typing & documentation --- cura/Scene/ConvexHullDecorator.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 85d1e8e309..a78f559aa1 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -15,8 +15,6 @@ import numpy from typing import TYPE_CHECKING, Any, Optional - - if TYPE_CHECKING: from UM.Scene.SceneNode import SceneNode from cura.Settings.GlobalStack import GlobalStack @@ -35,10 +33,11 @@ class ConvexHullDecorator(SceneNodeDecorator): # Make sure the timer is created on the main thread self._recompute_convex_hull_timer = None # type: Optional[QTimer] - Application.getInstance().callLater(self.createRecomputeConvexHullTimer) + + if Application.getInstance() is not None: + Application.getInstance().callLater(self.createRecomputeConvexHullTimer) self._raft_thickness = 0.0 - # For raft thickness, DRY self._build_volume = Application.getInstance().getBuildVolume() self._build_volume.raftThicknessChanged.connect(self._onChanged) @@ -72,7 +71,7 @@ class ConvexHullDecorator(SceneNodeDecorator): def __deepcopy__(self, memo): return ConvexHullDecorator() - ## Get the unmodified 2D projected convex hull of the node + ## Get the unmodified 2D projected convex hull of the node (if any) def getConvexHull(self) -> Optional[Polygon]: if self._node is None: return None @@ -120,6 +119,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return self._compute2DConvexHull() return None + ## The same as recomputeConvexHull, but using a timer if it was set. def recomputeConvexHullDelayed(self) -> None: if self._recompute_convex_hull_timer is not None: self._recompute_convex_hull_timer.start() @@ -142,13 +142,13 @@ class ConvexHullDecorator(SceneNodeDecorator): self._convex_hull_node = hull_node def _onSettingValueChanged(self, key: str, property_name: str) -> None: - if property_name != "value": #Not the value that was changed. + if property_name != "value": # Not the value that was changed. return if key in self._affected_settings: self._onChanged() if key in self._influencing_settings: - self._init2DConvexHullCache() #Invalidate the cache. + self._init2DConvexHullCache() # Invalidate the cache. self._onChanged() def _init2DConvexHullCache(self) -> None: @@ -161,7 +161,7 @@ class ConvexHullDecorator(SceneNodeDecorator): self._2d_convex_hull_mesh_world_transform = None self._2d_convex_hull_mesh_result = None - def _compute2DConvexHull(self) -> Polygon: + def _compute2DConvexHull(self) -> Optional[Polygon]: if self._node.callDecoration("isGroup"): points = numpy.zeros((0, 2), dtype=numpy.int32) for child in self._node.getChildren(): @@ -188,8 +188,6 @@ class ConvexHullDecorator(SceneNodeDecorator): else: offset_hull = None - mesh = None - world_transform = None if self._node.getMeshData(): mesh = self._node.getMeshData() world_transform = self._node.getWorldTransformation() @@ -242,10 +240,10 @@ class ConvexHullDecorator(SceneNodeDecorator): return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) return Polygon() - def _compute2DConvexHeadFull(self): + def _compute2DConvexHeadFull(self) -> Polygon: return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans()) - def _compute2DConvexHeadMin(self): + def _compute2DConvexHeadMin(self) -> Polygon: headAndFans = self._getHeadAndFans() mirrored = headAndFans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically. head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored) @@ -276,7 +274,7 @@ class ConvexHullDecorator(SceneNodeDecorator): else: raise Exception("Unknown bed adhesion type. Did you forget to update the convex hull calculations for your new bed adhesion type?") - # adjust head_and_fans with extra margin + # Adjust head_and_fans with extra margin if extra_margin > 0: extra_margin_polygon = Polygon.approximatedCircle(extra_margin) poly = poly.getMinkowskiHull(extra_margin_polygon) @@ -354,7 +352,7 @@ class ConvexHullDecorator(SceneNodeDecorator): # Limit_to_extruder is set. The global stack handles this then return self._global_stack.getProperty(setting_key, prop) - ## Returns true if node is a descendant or the same as the root node. + ## Returns True if node is a descendant or the same as the root node. def __isDescendant(self, root: "SceneNode", node: "SceneNode") -> bool: if node is None: return False From d7901907aff0709c65d0f79439e073c8d3983c8d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 15:37:08 +0200 Subject: [PATCH 358/364] Fix typing --- cura/PrinterOutput/ConfigurationModel.py | 16 ++++++++-------- cura/Scene/ConvexHullDecorator.py | 21 +++++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index a3d6afd01d..b3e8373745 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -13,20 +13,20 @@ class ConfigurationModel(QObject): configurationChanged = pyqtSignal() - def __init__(self): + def __init__(self) -> None: super().__init__() - self._printer_type = None + self._printer_type = "" self._extruder_configurations = [] # type: List[ExtruderConfigurationModel] - self._buildplate_configuration = None + self._buildplate_configuration = "" def setPrinterType(self, printer_type): self._printer_type = printer_type @pyqtProperty(str, fset = setPrinterType, notify = configurationChanged) - def printerType(self): + def printerType(self) -> str: return self._printer_type - def setExtruderConfigurations(self, extruder_configurations): + def setExtruderConfigurations(self, extruder_configurations: List[ExtruderConfigurationModel]): if self._extruder_configurations != extruder_configurations: self._extruder_configurations = extruder_configurations @@ -39,16 +39,16 @@ class ConfigurationModel(QObject): def extruderConfigurations(self): return self._extruder_configurations - def setBuildplateConfiguration(self, buildplate_configuration): + def setBuildplateConfiguration(self, buildplate_configuration: str) -> None: self._buildplate_configuration = buildplate_configuration @pyqtProperty(str, fset = setBuildplateConfiguration, notify = configurationChanged) - def buildplateConfiguration(self): + def buildplateConfiguration(self) -> str: return self._buildplate_configuration ## This method is intended to indicate whether the configuration is valid or not. # The method checks if the mandatory fields are or not set - def isValid(self): + def isValid(self) -> bool: if not self._extruder_configurations: return False for configuration in self._extruder_configurations: diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index a78f559aa1..31e21df6bf 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -78,7 +78,7 @@ class ConvexHullDecorator(SceneNodeDecorator): hull = self._compute2DConvexHull() - if self._global_stack and self._node: + if self._global_stack and self._node and hull is not None: # Parent can be None if node is just loaded. if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")): hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32))) @@ -240,17 +240,22 @@ class ConvexHullDecorator(SceneNodeDecorator): return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) return Polygon() - def _compute2DConvexHeadFull(self) -> Polygon: - return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans()) + def _compute2DConvexHeadFull(self) -> Optional[Polygon]: + convex_hull = self._compute2DConvexHeadFull() + if convex_hull: + return convex_hull.getMinkowskiHull(self._getHeadAndFans()) + return None - def _compute2DConvexHeadMin(self) -> Polygon: - headAndFans = self._getHeadAndFans() - mirrored = headAndFans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically. + def _compute2DConvexHeadMin(self) -> Optional[Polygon]: + head_and_fans = self._getHeadAndFans() + mirrored = head_and_fans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically. head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored) # Min head hull is used for the push free - min_head_hull = self._compute2DConvexHull().getMinkowskiHull(head_and_fans) - return min_head_hull + convex_hull = self._compute2DConvexHeadFull() + if convex_hull: + return convex_hull.getMinkowskiHull(head_and_fans) + return None ## Compensate given 2D polygon with adhesion margin # \return 2D polygon with added margin From 889035ebfadb50cb567860b50824a98fc348ac45 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 15:42:12 +0200 Subject: [PATCH 359/364] Fixed typo --- cura/PrinterOutput/ConfigurationModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index b3e8373745..89e609c913 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -26,7 +26,7 @@ class ConfigurationModel(QObject): def printerType(self) -> str: return self._printer_type - def setExtruderConfigurations(self, extruder_configurations: List[ExtruderConfigurationModel]): + def setExtruderConfigurations(self, extruder_configurations: List["ExtruderConfigurationModel"]): if self._extruder_configurations != extruder_configurations: self._extruder_configurations = extruder_configurations From c15f8aa6935736bb1ed90c877a0fd2399d65d707 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 15:54:23 +0200 Subject: [PATCH 360/364] Move printer type checking to where it belongs; inside the UM3 plugin. --- .../PrinterOutput/NetworkedPrinterOutputDevice.py | 15 +-------------- .../src/UM3OutputDevicePlugin.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 94f86f19a3..d9c5707a03 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -53,21 +53,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._sending_gcode = False self._compressing_gcode = False self._gcode = [] # type: List[str] - self._connection_state_before_timeout = None # type: Optional[ConnectionState] - printer_type = self._properties.get(b"machine", b"").decode("utf-8") - printer_type_identifiers = { - "9066": "ultimaker3", - "9511": "ultimaker3_extended", - "9051": "ultimaker_s5" - } - self._printer_type = "Unknown" - for key, value in printer_type_identifiers.items(): - if printer_type.startswith(key): - self._printer_type = value - break - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: raise NotImplementedError("requestWrite needs to be implemented") @@ -341,7 +328,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): @pyqtProperty(str, constant = True) def printerType(self) -> str: - return self._printer_type + return self._properties.get(b"printer_type", b"Unknown").decode("utf-8") ## IP adress of this printer @pyqtProperty(str, constant = True) diff --git a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py index f4749a6747..9c070f2de2 100644 --- a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py @@ -260,6 +260,19 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): # 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: From 7310a677ced78acab279bfc2a8677ebe1b4bd084 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 16:07:18 +0200 Subject: [PATCH 361/364] Clean up more code This fixes some typing and moves a property to protected, as it should be --- cura/Machines/ContainerNode.py | 13 +++++-------- cura/Machines/MaterialManager.py | 1 - .../Models/SettingVisibilityPresetsModel.py | 4 ++-- cura/Machines/QualityChangesGroup.py | 4 ++-- cura/Machines/QualityNode.py | 8 ++++---- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py index 0d44c7c4a3..eef1c63127 100644 --- a/cura/Machines/ContainerNode.py +++ b/cura/Machines/ContainerNode.py @@ -9,9 +9,6 @@ from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Settings.InstanceContainer import InstanceContainer -if TYPE_CHECKING: - from cura.Machines.QualityGroup import QualityGroup - ## # A metadata / container combination. Use getContainer() to get the container corresponding to the metadata. @@ -24,11 +21,11 @@ if TYPE_CHECKING: # This is used in Variant, Material, and Quality Managers. # class ContainerNode: - __slots__ = ("_metadata", "container", "children_map") + __slots__ = ("_metadata", "_container", "children_map") def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: self._metadata = metadata - self.container = None + self._container = None # type: Optional[InstanceContainer] self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it. ## Get an entry value from the metadata @@ -50,7 +47,7 @@ class ContainerNode: Logger.log("e", "Cannot get container for a ContainerNode without metadata.") return None - if self.container is 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) @@ -59,9 +56,9 @@ class ContainerNode: error_message = ConfigurationErrorMessage.getInstance() error_message.addFaultyContainers(container_id) return None - self.container = container_list[0] + self._container = container_list[0] - return self.container + return self._container def __str__(self) -> str: return "%s[%s]" % (self.__class__.__name__, self.getMetaDataEntry("id")) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 0ca9047620..be97fbc161 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -21,7 +21,6 @@ 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 diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py index 3062e83889..d5fa51d20a 100644 --- a/cura/Machines/Models/SettingVisibilityPresetsModel.py +++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py @@ -58,7 +58,7 @@ class SettingVisibilityPresetsModel(ListModel): break return result - def _populate(self): + def _populate(self) -> None: from cura.CuraApplication import CuraApplication items = [] for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset): @@ -147,7 +147,7 @@ class SettingVisibilityPresetsModel(ListModel): def activePreset(self) -> str: return self._active_preset_item["id"] - def _onPreferencesChanged(self, name: str): + def _onPreferencesChanged(self, name: str) -> None: if name != "general/visible_settings": return diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py index 3dcf2ab1c8..7844b935dc 100644 --- a/cura/Machines/QualityChangesGroup.py +++ b/cura/Machines/QualityChangesGroup.py @@ -24,9 +24,9 @@ class QualityChangesGroup(QualityGroup): ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id")) return - if extruder_position is None: #Then we're a global quality changes profile. + 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. + else: # This is an extruder's quality changes profile. self.nodes_for_extruders[extruder_position] = node def __str__(self) -> str: diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py index a821a1e15d..991388a4bd 100644 --- a/cura/Machines/QualityNode.py +++ b/cura/Machines/QualityNode.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional, Dict, cast +from typing import Optional, Dict, cast, Any from .ContainerNode import ContainerNode from .QualityChangesGroup import QualityChangesGroup @@ -12,21 +12,21 @@ from .QualityChangesGroup import QualityChangesGroup # class QualityNode(ContainerNode): - def __init__(self, metadata: Optional[dict] = None) -> None: + 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 def getChildNode(self, child_key: str) -> Optional["QualityNode"]: return self.children_map.get(child_key) - def addQualityMetadata(self, quality_type: str, metadata: dict): + 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) def getQualityNode(self, quality_type: str) -> Optional["QualityNode"]: return self.quality_type_map.get(quality_type) - def addQualityChangesMetadata(self, quality_type: str, metadata: dict): + 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] From f585afe77bdff9653784242005e1728b972028d3 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 27 Sep 2018 17:31:45 +0200 Subject: [PATCH 362/364] Fix spacing --- cura/Settings/GlobalStack.py | 1 + tests/Settings/TestGlobalStack.py | 43 +++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index e2f7df41ea..517b45eb98 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -23,6 +23,7 @@ from .CuraContainerStack import CuraContainerStack if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack + ## Represents the Global or Machine stack and its related containers. # class GlobalStack(CuraContainerStack): diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index f8052aa4bb..0f1579f78b 100755 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -15,6 +15,7 @@ import UM.Settings.SettingDefinition #To add settings to the definition. from cura.Settings.cura_empty_instance_containers import empty_container + ## Gets an instance container with a specified container type. # # \param container_type The type metadata for the instance container. @@ -24,22 +25,27 @@ def getInstanceContainer(container_type) -> InstanceContainer: container.setMetaDataEntry("type", container_type) return container + class DefinitionContainerSubClass(DefinitionContainer): def __init__(self): super().__init__(container_id = "SubDefinitionContainer") + class InstanceContainerSubClass(InstanceContainer): def __init__(self, container_type): super().__init__(container_id = "SubInstanceContainer") self.setMetaDataEntry("type", container_type) + #############################START OF TEST CASES################################ + ## Tests whether adding a container is properly forbidden. def test_addContainer(global_stack): with pytest.raises(InvalidOperationError): global_stack.addContainer(unittest.mock.MagicMock()) + ## Tests adding extruders to the global stack. def test_addExtruder(global_stack): mock_definition = unittest.mock.MagicMock() @@ -67,6 +73,7 @@ def test_addExtruder(global_stack): # global_stack.addExtruder(unittest.mock.MagicMock()) assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder. + #Tests setting user changes profiles to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -77,6 +84,7 @@ def test_constrainUserChangesInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.userChanges = container + #Tests setting user changes profiles. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "user"), @@ -85,6 +93,7 @@ def test_constrainUserChangesInvalid(container, global_stack): def test_constrainUserChangesValid(container, global_stack): global_stack.userChanges = container #Should not give an error. + #Tests setting quality changes profiles to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -95,6 +104,7 @@ def test_constrainQualityChangesInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.qualityChanges = container + #Test setting quality changes profiles. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "quality_changes"), @@ -103,6 +113,7 @@ def test_constrainQualityChangesInvalid(container, global_stack): def test_constrainQualityChangesValid(container, global_stack): global_stack.qualityChanges = container #Should not give an error. + #Tests setting quality profiles to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -113,6 +124,7 @@ def test_constrainQualityInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.quality = container + #Test setting quality profiles. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "quality"), @@ -121,6 +133,7 @@ def test_constrainQualityInvalid(container, global_stack): def test_constrainQualityValid(container, global_stack): global_stack.quality = container #Should not give an error. + #Tests setting materials to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -131,6 +144,7 @@ def test_constrainMaterialInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.material = container + #Test setting materials. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "material"), @@ -139,6 +153,7 @@ def test_constrainMaterialInvalid(container, global_stack): def test_constrainMaterialValid(container, global_stack): global_stack.material = container #Should not give an error. + #Tests setting variants to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -149,6 +164,7 @@ def test_constrainVariantInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.variant = container + #Test setting variants. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "variant"), @@ -157,6 +173,7 @@ def test_constrainVariantInvalid(container, global_stack): def test_constrainVariantValid(container, global_stack): global_stack.variant = container #Should not give an error. + #Tests setting definition changes profiles to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong container type"), @@ -167,6 +184,7 @@ def test_constrainDefinitionChangesInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.definitionChanges = container + #Test setting definition changes profiles. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "definition_changes"), @@ -175,6 +193,7 @@ def test_constrainDefinitionChangesInvalid(container, global_stack): def test_constrainDefinitionChangesValid(container, global_stack): global_stack.definitionChanges = container #Should not give an error. + #Tests setting definitions to invalid containers. @pytest.mark.parametrize("container", [ getInstanceContainer(container_type = "wrong class"), @@ -184,6 +203,7 @@ def test_constrainDefinitionInvalid(container, global_stack): with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. global_stack.definition = container + #Test setting definitions. @pytest.mark.parametrize("container", [ DefinitionContainer(container_id = "DefinitionContainer"), @@ -192,6 +212,7 @@ def test_constrainDefinitionInvalid(container, global_stack): def test_constrainDefinitionValid(container, global_stack): global_stack.definition = container #Should not give an error. + ## Tests whether deserialising completes the missing containers with empty ones. The initial containers are just the # definition and the definition_changes (that cannot be empty after CURA-5281) def test_deserializeCompletesEmptyContainers(global_stack): @@ -207,6 +228,7 @@ def test_deserializeCompletesEmptyContainers(global_stack): continue assert global_stack.getContainer(container_type_index) == empty_container #All others need to be empty. + ## Tests whether an instance container with the wrong type gets removed when deserialising. def test_deserializeRemovesWrongInstanceContainer(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "wrong type") @@ -217,6 +239,7 @@ def test_deserializeRemovesWrongInstanceContainer(global_stack): assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty. + ## Tests whether a container with the wrong class gets removed when deserialising. def test_deserializeRemovesWrongContainerClass(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = DefinitionContainer(container_id = "wrong class") @@ -227,6 +250,7 @@ def test_deserializeRemovesWrongContainerClass(global_stack): assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty. + ## Tests whether an instance container in the definition spot results in an error. def test_deserializeWrongDefinitionClass(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = getInstanceContainer(container_type = "definition") #Correct type but wrong class. @@ -235,6 +259,7 @@ def test_deserializeWrongDefinitionClass(global_stack): with pytest.raises(UM.Settings.ContainerStack.InvalidContainerStackError): #Must raise an error that there is no definition container. global_stack.deserialize("") + ## Tests whether an instance container with the wrong type is moved into the correct slot by deserialising. def test_deserializeMoveInstanceContainer(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "material") #Not in the correct spot. @@ -246,6 +271,7 @@ def test_deserializeMoveInstanceContainer(global_stack): assert global_stack.quality == empty_container assert global_stack.material != empty_container + ## Tests whether a definition container in the wrong spot is moved into the correct spot by deserialising. def test_deserializeMoveDefinitionContainer(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Material] = DefinitionContainer(container_id = "some definition") #Not in the correct spot. @@ -256,6 +282,7 @@ def test_deserializeMoveDefinitionContainer(global_stack): assert global_stack.material == empty_container assert global_stack.definition != empty_container + ## Tests whether getProperty properly applies the stack-like behaviour on its containers. def test_getPropertyFallThrough(global_stack): #A few instance container mocks to put in the stack. @@ -298,6 +325,7 @@ def test_getPropertyFallThrough(global_stack): global_stack.userChanges = mock_layer_heights[container_indexes.UserChanges] assert global_stack.getProperty("layer_height", "value") == container_indexes.UserChanges + ## In definitions, test whether having no resolve allows us to find the value. def test_getPropertyNoResolveInDefinition(global_stack): value = unittest.mock.MagicMock() #Just sets the value for bed temperature. @@ -307,6 +335,7 @@ def test_getPropertyNoResolveInDefinition(global_stack): global_stack.definition = value assert global_stack.getProperty("material_bed_temperature", "value") == 10 #No resolve, so fall through to value. + ## In definitions, when the value is asked and there is a resolve function, it must get the resolve first. def test_getPropertyResolveInDefinition(global_stack): resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. @@ -316,6 +345,7 @@ def test_getPropertyResolveInDefinition(global_stack): global_stack.definition = resolve_and_value assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition. + ## In instance containers, when the value is asked and there is a resolve function, it must get the value first. def test_getPropertyResolveInInstance(global_stack): container_indices = cura.Settings.CuraContainerStack._ContainerIndexes @@ -342,6 +372,7 @@ def test_getPropertyResolveInInstance(global_stack): global_stack.userChanges = instance_containers[container_indices.UserChanges] assert global_stack.getProperty("material_bed_temperature", "value") == 5 + ## Tests whether the value in instances gets evaluated before the resolve in definitions. def test_getPropertyInstancesBeforeResolve(global_stack): value = unittest.mock.MagicMock() #Sets just the value. @@ -356,6 +387,7 @@ def test_getPropertyInstancesBeforeResolve(global_stack): assert global_stack.getProperty("material_bed_temperature", "value") == 10 + ## Tests whether the hasUserValue returns true for settings that are changed in the user-changes container. def test_hasUserValueUserChanges(global_stack): container = unittest.mock.MagicMock() @@ -367,6 +399,7 @@ def test_hasUserValueUserChanges(global_stack): assert not global_stack.hasUserValue("infill_sparse_density") assert not global_stack.hasUserValue("") + ## Tests whether the hasUserValue returns true for settings that are changed in the quality-changes container. def test_hasUserValueQualityChanges(global_stack): container = unittest.mock.MagicMock() @@ -378,6 +411,7 @@ def test_hasUserValueQualityChanges(global_stack): assert not global_stack.hasUserValue("infill_sparse_density") assert not global_stack.hasUserValue("") + ## Tests whether a container in some other place on the stack is correctly not recognised as user value. def test_hasNoUserValue(global_stack): container = unittest.mock.MagicMock() @@ -387,21 +421,25 @@ def test_hasNoUserValue(global_stack): assert not global_stack.hasUserValue("layer_height") #However this container is quality, so it's not a user value. + ## Tests whether inserting a container is properly forbidden. def test_insertContainer(global_stack): with pytest.raises(InvalidOperationError): global_stack.insertContainer(0, unittest.mock.MagicMock()) + ## Tests whether removing a container is properly forbidden. def test_removeContainer(global_stack): with pytest.raises(InvalidOperationError): global_stack.removeContainer(unittest.mock.MagicMock()) + ## Tests whether changing the next stack is properly forbidden. def test_setNextStack(global_stack): with pytest.raises(InvalidOperationError): global_stack.setNextStack(unittest.mock.MagicMock()) + ## Tests setting properties directly on the global stack. @pytest.mark.parametrize("key, property, value", [ ("layer_height", "value", 0.1337), @@ -415,6 +453,7 @@ def test_setPropertyUser(key, property, value, global_stack): user_changes.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user") global_stack.userChanges = user_changes - global_stack.setProperty(key, property, value) #The actual test. + global_stack.setProperty(key, property, value) # The actual test. - global_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 + # Make sure that the user container gets a setProperty call. + global_stack.userChanges.setProperty.assert_called_once_with(key, property, value, None, False) \ No newline at end of file From dc2c074bc0b5297bf80a20d962bda36cf12c75e5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 16 Aug 2018 15:34:05 +0200 Subject: [PATCH 363/364] Verbose output for Linux CI --- Jenkinsfile | 44 ++++++++++++++++++++++++++++++++++++++++--- cmake/CuraTests.cmake | 2 +- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4f755dcae2..35f07d3987 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -52,10 +52,48 @@ parallel_nodes(['linux && cura', 'windows && cura']) { // Try and run the unit tests. If this stage fails, we consider the build to be "unstable". stage('Unit Test') { - try { + if (isUnix()) { + // For Linux to show everything + def branch = env.BRANCH_NAME + if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) { + branch = "master" + } + def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}") + + try { + sh """ + cd .. + export PYTHONPATH=.:"${uranium_dir}" + ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/pytest -x --verbose --full-trace --capture=no ./tests + """ + } catch(e) { + currentBuild.result = "UNSTABLE" + } + } + else { + // For Windows make('test') - } catch(e) { - currentBuild.result = "UNSTABLE" + } + } + + stage('Code Style') { + if (isUnix()) { + // For Linux to show everything + def branch = env.BRANCH_NAME + if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) { + branch = "master" + } + def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}") + + try { + sh """ + cd .. + export PYTHONPATH=.:"${uranium_dir}" + ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/python3 run_mypy.py + """ + } catch(e) { + currentBuild.result = "UNSTABLE" + } } } } diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake index 801f054bc3..30794ed608 100644 --- a/cmake/CuraTests.cmake +++ b/cmake/CuraTests.cmake @@ -34,7 +34,7 @@ function(cura_add_test) if (NOT ${test_exists}) add_test( NAME ${_NAME} - COMMAND ${PYTHON_EXECUTABLE} -m pytest --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} + COMMAND ${PYTHON_EXECUTABLE} -m pytest --verbose --full-trace --capture=no --no-print-log --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} ) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT LANG=C) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT "PYTHONPATH=${_PYTHONPATH}") From 84bad92f10bbb2175f9b5315338420f0dc63e01f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 28 Sep 2018 09:57:28 +0200 Subject: [PATCH 364/364] Verbose output for Windows CI --- Jenkinsfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 35f07d3987..274e383ffa 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,7 +72,12 @@ parallel_nodes(['linux && cura', 'windows && cura']) { } else { // For Windows - make('test') + try { + // This also does code style checks. + bat 'ctest -V' + } catch(e) { + currentBuild.result = "UNSTABLE" + } } }