From bc300d111653a39688525460c01e44b1a423506e Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Tue, 20 Sep 2016 15:06:28 +0600 Subject: [PATCH 001/816] T524: Added theme picker --- resources/qml/Preferences/GeneralPage.qml | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 6d3cc9c1e7..1d3d149324 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -162,6 +162,74 @@ UM.PreferencesPage width: UM.Theme.getSize("default_margin").width } + Row + { + spacing: UM.Theme.getSize("default_margin").width + Label + { + id: themeLabel + text: catalog.i18nc("@label","Theme:") + anchors.verticalCenter: themeComboBox.verticalCenter + } + + ComboBox + { + id: themeComboBox + model: ListModel + { + id: themeList + + Component.onCompleted: { + append({ text: catalog.i18nc("@item:inlistbox", "Ultimaker"), code: "cura" }) + } + } + + currentIndex: + { + var code = UM.Preferences.getValue("general/theme"); + for(var i = 0; i < themeList.count; ++i) + { + if(model.get(i).code == code) + { + return i + } + } + } + onActivated: UM.Preferences.setValue("general/theme", model.get(index).code) + + Component.onCompleted: + { + // Because ListModel is stupid and does not allow using qsTr() for values. + for(var i = 0; i < themeList.count; ++i) + { + themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text)); + } + + // Glorious hack time. ComboBox does not update the text properly after changing the + // model. So change the indices around to force it to update. + currentIndex += 1; + currentIndex -= 1; + } + } + } + + Label + { + id: themeCaption + + //: Theme change warning + text: catalog.i18nc("@label", "You will need to restart the application for theme changes to have effect.") + wrapMode: Text.WordWrap + font.italic: true + } + + Item + { + //: Spacer + height: UM.Theme.getSize("default_margin").height + width: UM.Theme.getSize("default_margin").width + } + Label { font.bold: true From 7adc1f4870fe65bc156b453ed64a1a23d09d2b0b Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Mon, 14 Nov 2016 14:20:39 +0600 Subject: [PATCH 002/816] T576: Added aliases --- plugins/CuraEngineBackend/StartSliceJob.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index ade86e231d..bbf55a4803 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -251,6 +251,9 @@ class StartSliceJob(Job): settings["material_bed_temp_prepend"] = "{material_bed_temperature}" not in start_gcode #Pre-compute material material_bed_temp_prepend and material_print_temp_prepend settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode + settings["print_bed_temperature"] = settings["material_bed_temperature"] + settings["print_temperature"] = settings["material_print_temperature"] + for key, value in settings.items(): #Add all submessages for each individual setting. setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") setting_message.name = key @@ -260,6 +263,8 @@ class StartSliceJob(Job): setting_message.value = str(value).encode("utf-8") Job.yieldThread() + + ## Sends for some settings which extruder they should fallback to if not # set. # From dbb971fef5f1169e8fbfe060602b70c871d982ca Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Mon, 14 Nov 2016 14:51:25 +0600 Subject: [PATCH 003/816] T576: Added date and time keywords --- plugins/CuraEngineBackend/StartSliceJob.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index bbf55a4803..4b0ec77ca0 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -4,6 +4,7 @@ import numpy from string import Formatter from enum import IntEnum +import time from UM.Job import Job from UM.Application import Application @@ -254,6 +255,16 @@ class StartSliceJob(Job): settings["print_bed_temperature"] = settings["material_bed_temperature"] settings["print_temperature"] = settings["material_print_temperature"] + settings["time"] = time.strftime('%H:%M:%S') + settings["date"] = time.strftime('%d-%m-%Y') + settings["day"] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][int(time.strftime('%w'))] + + settings["print_time"] = Application.getInstance().getPrintInformation().currentPrintTime + settings["filament_amount"] = Application.getInstance().getPrintInformation().materialLengths + settings["filament_weight"] = Application.getInstance().getPrintInformation().materialWeights + settings["filament_cost"] = None + settings["profile_string"] = None + for key, value in settings.items(): #Add all submessages for each individual setting. setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") setting_message.name = key @@ -263,8 +274,6 @@ class StartSliceJob(Job): setting_message.value = str(value).encode("utf-8") Job.yieldThread() - - ## Sends for some settings which extruder they should fallback to if not # set. # From 67aae55640052e669cd3288915ad58d64bbc759e Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Wed, 23 Nov 2016 12:38:02 +0600 Subject: [PATCH 004/816] T576: Added print statistics --- plugins/CuraEngineBackend/CuraEngineBackend.py | 10 +++++++++- plugins/CuraEngineBackend/StartSliceJob.py | 6 ------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index cf53475fb4..0e7f938804 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -13,7 +13,7 @@ from UM.Resources import Resources from UM.Settings.Validator import ValidatorState #To find if a setting is in an error state. We can't slice then. from UM.Platform import Platform from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator - +from UM.Qt.Duration import DurationFormat import cura.Settings @@ -386,6 +386,14 @@ class CuraEngineBackend(Backend): self.backendStateChange.emit(BackendState.Done) self.processingProgress.emit(1.0) + for line in self._scene.gcode_list: + replaced = line.replace("{print_time}", str(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) + replaced = replaced.replace("{filament_amount}", str(Application.getInstance().getPrintInformation().materialLengths)) + replaced = replaced.replace("{filament_weight}", str(Application.getInstance().getPrintInformation().materialWeights)) + replaced = replaced.replace("{filament_cost}", "Not yet implemented") + + self._scene.gcode_list[self._scene.gcode_list.index(line)] = replaced + self._slicing = False Logger.log("d", "Slicing took %s seconds", time() - self._slice_start_time ) if self._layer_view_active and (self._process_layers_job is None or not self._process_layers_job.isRunning()): diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 4b0ec77ca0..ea5bb1f57c 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -259,12 +259,6 @@ class StartSliceJob(Job): settings["date"] = time.strftime('%d-%m-%Y') settings["day"] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][int(time.strftime('%w'))] - settings["print_time"] = Application.getInstance().getPrintInformation().currentPrintTime - settings["filament_amount"] = Application.getInstance().getPrintInformation().materialLengths - settings["filament_weight"] = Application.getInstance().getPrintInformation().materialWeights - settings["filament_cost"] = None - settings["profile_string"] = None - for key, value in settings.items(): #Add all submessages for each individual setting. setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") setting_message.name = key From 7c3728632ff4d237af32ba3d945e06d437954a97 Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Thu, 24 Nov 2016 14:03:53 +0600 Subject: [PATCH 005/816] T576: Added {jobname} keyword --- plugins/CuraEngineBackend/CuraEngineBackend.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 0e7f938804..91bd13c9b6 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -390,7 +390,9 @@ class CuraEngineBackend(Backend): replaced = line.replace("{print_time}", str(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) replaced = replaced.replace("{filament_amount}", str(Application.getInstance().getPrintInformation().materialLengths)) replaced = replaced.replace("{filament_weight}", str(Application.getInstance().getPrintInformation().materialWeights)) + # TODO: calculate filament cost replaced = replaced.replace("{filament_cost}", "Not yet implemented") + replaced = replaced.replace("{jobname}", str(Application.getInstance().getPrintInformation().jobName)) self._scene.gcode_list[self._scene.gcode_list.index(line)] = replaced From 9302f4e9c60d2c3028076cf87e7e98cfe5c77cfe Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Thu, 16 Mar 2017 11:14:53 +0100 Subject: [PATCH 006/816] JSON feat: support_bottom_stair_step_width (CURA-3380) --- 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 a951d6aca6..46055ba0c2 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3025,6 +3025,19 @@ "enabled": "support_enable", "settable_per_mesh": true }, + "support_bottom_stair_step_width": + { + "label": "Support Stair Step Maximum Width", + "description": "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.", + "unit": "mm", + "type": "float", + "default_value": 5.0, + "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", + "minimum_value": "0", + "maximum_value_warning": "10.0", + "enabled": "support_enable", + "settable_per_mesh": true + }, "support_join_distance": { "label": "Support Join Distance", From 36420070fa5f25f30ec05045983da4f11044f826 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Thu, 16 Mar 2017 13:02:50 +0100 Subject: [PATCH 007/816] JSOn fix: more description on support_bottom_stair_step_height (CURA-3380) --- 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 46055ba0c2..971ee91372 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3015,7 +3015,7 @@ "support_bottom_stair_step_height": { "label": "Support Stair Step Height", - "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.", + "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures. Set to zero to turn off the stair-like behaviour.", "unit": "mm", "type": "float", "default_value": 0.3, From aa79ca1d30d5dbc35b8a39e0a53e266e4b27e83b Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 20 Mar 2017 15:49:27 +0100 Subject: [PATCH 008/816] Layer view menu items now have Cura colors, not the system colors. --- plugins/LayerView/LayerView.qml | 12 ++++++++++++ resources/themes/cura/styles.qml | 7 +++++++ 2 files changed, 19 insertions(+) mode change 100644 => 100755 plugins/LayerView/LayerView.qml mode change 100644 => 100755 resources/themes/cura/styles.qml diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml old mode 100644 new mode 100755 index cb8a27d55d..b52aa5bfda --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -58,6 +58,7 @@ Item anchors.left: parent.left text: catalog.i18nc("@label","View Mode: Layers") font.bold: true + style: UM.Theme.styles.text } Label @@ -75,6 +76,7 @@ Item text: catalog.i18nc("@label","Color scheme") visible: !UM.LayerView.compatibilityMode Layout.fillWidth: true + style: UM.Theme.styles.text } ListModel // matches LayerView.py @@ -102,6 +104,7 @@ Item Layout.preferredWidth: UM.Theme.getSize("layerview_row").width model: layerViewTypes visible: !UM.LayerView.compatibilityMode + style: UM.Theme.styles.combobox property int layer_view_type: UM.Preferences.getValue("layerview/layer_view_type") currentIndex: layer_view_type // index matches type_id @@ -174,6 +177,7 @@ Item Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } } @@ -197,6 +201,7 @@ Item Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } CheckBox { checked: view_settings.show_helpers @@ -218,6 +223,7 @@ Item Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } CheckBox { checked: view_settings.show_skin @@ -239,6 +245,7 @@ Item Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } CheckBox { checked: view_settings.show_infill @@ -260,6 +267,7 @@ Item Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } CheckBox { checked: view_settings.only_show_top_layers @@ -268,6 +276,7 @@ Item } text: catalog.i18nc("@label", "Only Show Top Layers") visible: UM.LayerView.compatibilityMode + style: UM.Theme.styles.checkbox } CheckBox { checked: view_settings.top_layer_count == 5 @@ -276,6 +285,7 @@ Item } text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") visible: UM.LayerView.compatibilityMode + style: UM.Theme.styles.checkbox } Label @@ -297,6 +307,7 @@ Item Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width visible: view_settings.show_legend + style: UM.Theme.styles.text } Label @@ -319,6 +330,7 @@ Item Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width visible: view_settings.show_legend + style: UM.Theme.styles.text } } diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml old mode 100644 new mode 100755 index 64b4436622..bc5cd786b1 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -594,6 +594,13 @@ QtObject { } } + property Component text: Component { + TextFieldStyle { + textColor: Theme.getColor("text"); + font: Theme.getFont("default"); + } + } + property Component sidebar_action_button: Component { ButtonStyle { From 3b0fdecb60b9c5e8a104564d5703c85c97c10f27 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 20 Mar 2017 17:22:11 +0100 Subject: [PATCH 009/816] Introduce an ExtruderStack class This will allow us to codify some of the assumptions made about extruders. Contributes to CURA-3497 --- cura/Settings/ExtruderStack.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 cura/Settings/ExtruderStack.py diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py new file mode 100644 index 0000000000..edcce90693 --- /dev/null +++ b/cura/Settings/ExtruderStack.py @@ -0,0 +1,19 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase +from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.ContainerRegistry import ContainerRegistry + +class ExtruderStack(ContainerStack): + def __init__(self, container_id, *args, **kwargs): + super().__init__(container_id, *args, **kwargs) + +extruder_stack_mime = MimeType( + name = "application/x-cura-extruderstack", + comment = "Cura Extruder Stack", + suffixes = [ "extruder.cfg" ] +) + +MimeTypeDatabase.addMimeType(extruder_stack_mime) +ContainerRegistry.addContainerTypeByName(ExtruderStack, "extruder_stack", extruder_stack_mime.name) From 12c50dbac8179b92272136c512e034f6782027df Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 20 Mar 2017 17:26:12 +0100 Subject: [PATCH 010/816] Introduce a GlobalStack class This will allow us to codify some of the assumptions made about the global stack Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 cura/Settings/GlobalStack.py diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py new file mode 100644 index 0000000000..a2a7ae59dd --- /dev/null +++ b/cura/Settings/GlobalStack.py @@ -0,0 +1,22 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase +from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.ContainerRegistry import ContainerRegistry + +class CannotSetNextStackError(Exception): + pass + +class GlobalStack(ContainerStack): + def __init__(self, container_id, *args, **kwargs): + super().__init__(container_id, *args, **kwargs) + +global_stack_mime = MimeType( + name = "application/x-cura-globalstack", + comment = "Cura Global Stack", + suffixes = [ "global.cfg" ] +) + +MimeTypeDatabase.addMimeType(global_stack_mime) +ContainerRegistry.addContainerTypeByName(GlobalStack, "global_stack", global_stack_mime.name) From b9f01b30c8661a9560927dd2994f621248d3430b Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 20 Mar 2017 17:28:01 +0100 Subject: [PATCH 011/816] Convert generic "ContainerStack" to an Extruder or Global stack Dependendant on the "type" metadata key, we create either an ExtruderStack or a GlobalStack instance to replace the ContainerStack instance. This should allow for transparent upgrades to the new classes. Contributes to CURA-3497 --- cura/Settings/CuraContainerRegistry.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 3982418070..bbdc7d6d9e 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -26,6 +26,14 @@ class CuraContainerRegistry(ContainerRegistry): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + ## Overridden from ContainerRegistry + def addContainer(self, container): + # Note: Intentional check with type() because we want to ignore subclasses + if type(container) == ContainerStack: + container = self._convertContainerStack(container) + + super().addContainer(container) + ## Create a name that is not empty and unique # \param container_type \type{string} Type of the container (machine, quality, ...) # \param current_name \type{} Current name of the container, which may be an acceptable option @@ -284,3 +292,26 @@ class CuraContainerRegistry(ContainerRegistry): if global_container_stack: return parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", False)) return False + + def _convertContainerStack(self, container): + assert type(container) == ContainerStack + + container_type = container.getMetaDataEntry("type") + if container_type not in ("extruder_train", "machine"): + # It is not an extruder or machine, so do nothing with the stack + return container + + new_stack = None + if container_type == "extruder_train": + new_stack = ExtruderStack(container.getId()) + else: + new_stack = GlobalStack(container.getId()) + + container_contents = container.serialize() + new_stack.deserialize(container_contents) + + # Delete the old configuration file so we do not get double stacks + if os.path.isfile(container.getPath()): + os.remove(container.getPath()) + + return new_stack From 0656dd53c3651bb9634b301058bc2ec177b07c6a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 20 Mar 2017 17:28:42 +0100 Subject: [PATCH 012/816] Override setNextStack in GlobalStack and raise an error if called Since the global stack should never have a next stack Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index a2a7ae59dd..5013d1505e 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -12,6 +12,9 @@ class GlobalStack(ContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) + def setNextStack(self, next_stack): + raise CannotSetNextStackError("Global stack cannot have a next stack!") + global_stack_mime = MimeType( name = "application/x-cura-globalstack", comment = "Cura Global Stack", From 4904e449a019155f9573644518282cd6dc87d81d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 20 Mar 2017 17:30:00 +0100 Subject: [PATCH 013/816] Start overriding getProperty in GlobalStack Since we have the "resolve" property, we should transparently handle it so lookup can just use "value". Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 5013d1505e..275bf3c9bc 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -12,6 +12,14 @@ class GlobalStack(ContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) + def getProperty(self, key, property_name): + if property_name == "value": + resolve = super().getProperty(key, "resolve") + if resolve: + return resolve + + return super().getProperty(key, property_name) + def setNextStack(self, next_stack): raise CannotSetNextStackError("Global stack cannot have a next stack!") From 3ee3e0aee31b490fce3caedf6b58bf8c3d074c70 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:39:06 +0100 Subject: [PATCH 014/816] Add a private class to GlobalStack that defines the expected indices of each container type --- cura/Settings/GlobalStack.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 275bf3c9bc..ff533d4621 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -31,3 +31,23 @@ global_stack_mime = MimeType( MimeTypeDatabase.addMimeType(global_stack_mime) ContainerRegistry.addContainerTypeByName(GlobalStack, "global_stack", global_stack_mime.name) + +class _ContainerIndexes: + UserChanges = 0 + QualityChanges = 1 + Quality = 2 + Material = 3 + Variant = 4 + DefinitionChanges = 5 + Definition = 6 + + # Simple hash map to map from index to "type" metadata entry + IndexTypeMap = { + UserChanges: "user", + QualityChanges: "quality_changes", + Quality: "quality", + Material: "material", + Variant: "variant", + DefinitionChanges: "definition_changes", + Definition: "definition", + } From f32f8b60df923cf963c72cf3ac840f630b7c066f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:42:57 +0100 Subject: [PATCH 015/816] Explictly import Extruder/Global stack For some reason, things were not being imported properly. This fixes that. --- cura/Settings/CuraContainerRegistry.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index bbdc7d6d9e..983a8d11fa 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -16,8 +16,8 @@ from UM.Platform import Platform from UM.PluginRegistry import PluginRegistry #For getting the possible profile writers to write with. from UM.Util import parseBool -from cura.Settings.ExtruderManager import ExtruderManager -from cura.Settings.ContainerManager import ContainerManager +from . import ExtruderStack +from . import GlobalStack from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -303,9 +303,9 @@ class CuraContainerRegistry(ContainerRegistry): new_stack = None if container_type == "extruder_train": - new_stack = ExtruderStack(container.getId()) + new_stack = ExtruderStack.ExtruderStack(container.getId()) else: - new_stack = GlobalStack(container.getId()) + new_stack = GlobalStack.GlobalStack(container.getId()) container_contents = container.serialize() new_stack.deserialize(container_contents) From 37b4326e996d419e77c8894c433ffd470e0fd6ff Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:43:14 +0100 Subject: [PATCH 016/816] Mark addContainer as override --- cura/Settings/CuraContainerRegistry.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 983a8d11fa..ae4fd2e5c7 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -6,6 +6,7 @@ import os.path import re from PyQt5.QtWidgets import QMessageBox +from UM.Decorators import override from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer @@ -27,6 +28,7 @@ class CuraContainerRegistry(ContainerRegistry): super().__init__(*args, **kwargs) ## Overridden from ContainerRegistry + @override(ContainerRegistry) def addContainer(self, container): # Note: Intentional check with type() because we want to ignore subclasses if type(container) == ContainerStack: From 95a6bef50f2cfcdd90638e3a45715f91f40ce029 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:43:42 +0100 Subject: [PATCH 017/816] Add properties for the individual containers in the global stack --- cura/Settings/GlobalStack.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index ff533d4621..be7ee32ca4 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -13,6 +13,35 @@ class GlobalStack(ContainerStack): super().__init__(container_id, *args, **kwargs) def getProperty(self, key, property_name): + + @pyqtProperty(InstanceContainer) + def userChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.UserChanges] + + @pyqtProperty(InstanceContainer) + def qualityChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.QualityChanges] + + @pyqtProperty(InstanceContainer) + def quality(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Quality] + + @pyqtProperty(InstanceContainer) + def material(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Material] + + @pyqtProperty(InstanceContainer) + def variant(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Variant] + + @pyqtProperty(InstanceContainer) + def definitionChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.DefinitionChanges] + + @pyqtProperty(DefinitionContainer) + def definition(self) -> DefinitionContainer: + return self._containers[_ContainerIndexes.Definition] + if property_name == "value": resolve = super().getProperty(key, "resolve") if resolve: From 88e813800499fcc31cc0846b5137f6994e9078cb Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:44:36 +0100 Subject: [PATCH 018/816] Override ContainerStack::deserialize This ensures we have the right set of containers in the stack --- cura/Settings/GlobalStack.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index be7ee32ca4..f22e352a57 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -52,6 +52,40 @@ class GlobalStack(ContainerStack): def setNextStack(self, next_stack): raise CannotSetNextStackError("Global stack cannot have a next stack!") + ## Overridden from ContainerStack + @override(ContainerStack) + def deserialize(self, contents: str) -> None: + super().deserialize(contents) + + new_containers = self._containers.copy() + while(len(new_containers) < len(_ContainerIndexes.IndexTypeMap)): + new_containers.append(self._empty_instance_container) + + # Validate and ensure the list of containers matches with what we expect + for index, type_name in _ContainerIndexes.IndexTypeMap.items(): + try: + container = new_containers[index] + except IndexError: + container = None + + if type_name == "definition": + if not container or not isinstance(container, DefinitionContainer): + definition = self.findContainer(container_type = DefinitionContainer, category = "*") + if not definition: + raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self._id)) + + new_containers[index] = definition + continue + + if not container or container.getMetaDataEntry("type") != type_name: + actual_container = self.findContainer(type = type_name) + if actual_container: + new_containers[index] = actual_container + + self._containers = new_containers + +## private: + global_stack_mime = MimeType( name = "application/x-cura-globalstack", comment = "Cura Global Stack", From 411e3a3976969a359b7372ce9d1b50117b08401e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 21 Mar 2017 17:45:07 +0100 Subject: [PATCH 019/816] Fix up a bunch of things with type hints and imports --- cura/Settings/GlobalStack.py | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index f22e352a57..4d25293ead 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -1,18 +1,24 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +from PyQt5.QtCore import pyqtProperty, pyqtSlot + +from UM.Decorators import override + from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase -from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry class CannotSetNextStackError(Exception): pass class GlobalStack(ContainerStack): - def __init__(self, container_id, *args, **kwargs): + def __init__(self, container_id: str, *args, **kwargs): super().__init__(container_id, *args, **kwargs) - def getProperty(self, key, property_name): + self._empty_instance_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() @pyqtProperty(InstanceContainer) def userChanges(self) -> InstanceContainer: @@ -42,14 +48,36 @@ class GlobalStack(ContainerStack): def definition(self) -> DefinitionContainer: return self._containers[_ContainerIndexes.Definition] + ## Check whether the specified setting has a 'user' value. + # + # A user value here is defined as the setting having a value in either + # the UserChanges or QualityChanges container. + # + # \return True if the setting has a user value, False if not. + @pyqtSlot(str, result = bool) + def hasUserValue(self, key: str) -> bool: + if self._containers[_ContainerIndexes.UserChanges].hasProperty(key, "value"): + return True + + if self._containers[_ContainerIndexes.QualityChanges].hasProperty(key, "value"): + return True + + return False + + ## Overridden from ContainerStack + @override(ContainerStack) + def getProperty(self, key: str, property_name: str): if property_name == "value": - resolve = super().getProperty(key, "resolve") - if resolve: - return resolve + if not self.hasUserValue(key): + resolve = super().getProperty(key, "resolve") + if resolve: + return resolve return super().getProperty(key, property_name) - def setNextStack(self, next_stack): + ## Overridden from ContainerStack + @override(ContainerStack) + def setNextStack(self, next_stack: ContainerStack) -> None: raise CannotSetNextStackError("Global stack cannot have a next stack!") ## Overridden from ContainerStack From c91765c1ae0d5c938fa82771410c520eb1d02872 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 13:38:30 +0100 Subject: [PATCH 020/816] Add test for type of loaded container stacks This tests if container stacks, when loading, get implemented with the correct class: Either an extruder stack or a global stack. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 49 +++++++++++++++++++ .../Settings/stacks/ExtruderLegacy.stack.cfg | 10 ++++ tests/Settings/stacks/Global.global.cfg | 7 +++ tests/Settings/stacks/Global.stack.cfg | 7 +++ tests/Settings/stacks/Left.extruder.cfg | 7 +++ tests/Settings/stacks/MachineLegacy.stack.cfg | 10 ++++ 6 files changed, 90 insertions(+) create mode 100644 tests/Settings/TestCuraContainerRegistry.py create mode 100644 tests/Settings/stacks/ExtruderLegacy.stack.cfg create mode 100644 tests/Settings/stacks/Global.global.cfg create mode 100644 tests/Settings/stacks/Global.stack.cfg create mode 100644 tests/Settings/stacks/Left.extruder.cfg create mode 100644 tests/Settings/stacks/MachineLegacy.stack.cfg diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py new file mode 100644 index 0000000000..157e6a03f9 --- /dev/null +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -0,0 +1,49 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import os #To find the directory with test files and find the test files. +import pytest #This module contains unit tests. +import unittest.mock #To mock and monkeypatch stuff. + +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry #The class we're testing. +from cura.Settings.ExtruderStack import ExtruderStack #Testing for returning the correct types of stacks. +from cura.Settings.GlobalStack import GlobalStack #Testing for returning the correct types of stacks. +from UM.Resources import Resources #Mocking some functions of this. +import UM.Settings.ContainerRegistry #Making empty container stacks. +import UM.Settings.ContainerStack #Setting the container registry here properly. + +## Gives a fresh CuraContainerRegistry instance. +@pytest.fixture() +def container_registry(): + return CuraContainerRegistry() + +## Tests whether loading gives objects of the correct type. +@pytest.mark.parametrize("filename, output_class", [ + ("ExtruderLegacy.stack.cfg", ExtruderStack), + ("MachineLegacy.stack.cfg", GlobalStack), + ("Left.extruder.cfg", ExtruderStack), + ("Global.global.cfg", GlobalStack), + ("Global.stack.cfg", GlobalStack) +]) +def test_loadTypes(filename, output_class, container_registry): + #Mock some dependencies. + UM.Settings.ContainerStack.setContainerRegistry(container_registry) + Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. + def findContainers(id, container_type = 0): + if id == "empty_material": + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + else: + return [] + container_registry.findContainers = findContainers + + container_registry.load() + + #Check whether the resulting type was correct. + stack_id = filename.split(".")[0] + for container in container_registry._containers: #Stupid ContainerRegistry class doesn't expose any way of getting at this except by prodding the privates. + print(container.getId(), "==", stack_id) + if container.getId() == stack_id: #This is the one we're testing. + assert type(container) == output_class + break + else: + assert False #Container stack with specified ID was not loaded. diff --git a/tests/Settings/stacks/ExtruderLegacy.stack.cfg b/tests/Settings/stacks/ExtruderLegacy.stack.cfg new file mode 100644 index 0000000000..59c4defe06 --- /dev/null +++ b/tests/Settings/stacks/ExtruderLegacy.stack.cfg @@ -0,0 +1,10 @@ +[general] +version = 3 +name = Legacy Extruder Stack +id = ExtruderLegacy + +[metadata] +type = extruder + +[containers] +0 = empty_material diff --git a/tests/Settings/stacks/Global.global.cfg b/tests/Settings/stacks/Global.global.cfg new file mode 100644 index 0000000000..ae06e1cfe3 --- /dev/null +++ b/tests/Settings/stacks/Global.global.cfg @@ -0,0 +1,7 @@ +[general] +version = 3 +name = Global +id = Global + +[containers] +0 = empty_material diff --git a/tests/Settings/stacks/Global.stack.cfg b/tests/Settings/stacks/Global.stack.cfg new file mode 100644 index 0000000000..ae06e1cfe3 --- /dev/null +++ b/tests/Settings/stacks/Global.stack.cfg @@ -0,0 +1,7 @@ +[general] +version = 3 +name = Global +id = Global + +[containers] +0 = empty_material diff --git a/tests/Settings/stacks/Left.extruder.cfg b/tests/Settings/stacks/Left.extruder.cfg new file mode 100644 index 0000000000..fff7afd3e8 --- /dev/null +++ b/tests/Settings/stacks/Left.extruder.cfg @@ -0,0 +1,7 @@ +[general] +version = 3 +name = Left +id = Left + +[containers] +0 = empty_material diff --git a/tests/Settings/stacks/MachineLegacy.stack.cfg b/tests/Settings/stacks/MachineLegacy.stack.cfg new file mode 100644 index 0000000000..257aa633c5 --- /dev/null +++ b/tests/Settings/stacks/MachineLegacy.stack.cfg @@ -0,0 +1,10 @@ +[general] +version = 3 +name = Legacy Global Stack +id = MachineLegacy + +[metadata] +type = machine + +[containers] +0 = empty_material From c5768d89dcd0a21ce154ec33632fa43c13a3f27c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:12:46 +0100 Subject: [PATCH 021/816] Remove debug print Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 157e6a03f9..20a723d2aa 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -41,7 +41,6 @@ def test_loadTypes(filename, output_class, container_registry): #Check whether the resulting type was correct. stack_id = filename.split(".")[0] for container in container_registry._containers: #Stupid ContainerRegistry class doesn't expose any way of getting at this except by prodding the privates. - print(container.getId(), "==", stack_id) if container.getId() == stack_id: #This is the one we're testing. assert type(container) == output_class break From 49fad35d28ac73394ca1a008142c211e96be91ea Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:40:13 +0100 Subject: [PATCH 022/816] Add test for global stack getting user changes Tests fail right now because running the test actually deletes files. Got to fix that. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 9 +++-- tests/Settings/TestGlobalStack.py | 33 +++++++++++++++++++ .../Settings/stacks/ExtruderLegacy.stack.cfg | 3 +- tests/Settings/stacks/Global.global.cfg | 3 +- tests/Settings/stacks/Global.stack.cfg | 3 +- tests/Settings/stacks/Left.extruder.cfg | 3 +- tests/Settings/stacks/MachineLegacy.stack.cfg | 3 +- 7 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 tests/Settings/TestGlobalStack.py diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 20a723d2aa..5c551cf5a8 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -11,6 +11,7 @@ from cura.Settings.GlobalStack import GlobalStack #Testing for returning the cor from UM.Resources import Resources #Mocking some functions of this. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. +from UM.Settings.DefinitionContainer import DefinitionContainer #Checking against the DefinitionContainer class. ## Gives a fresh CuraContainerRegistry instance. @pytest.fixture() @@ -30,13 +31,17 @@ def test_loadTypes(filename, output_class, container_registry): UM.Settings.ContainerStack.setContainerRegistry(container_registry) Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. def findContainers(id, container_type = 0): - if id == "empty_material": + if id == "some_material" or id == "some_definition": return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] else: return [] container_registry.findContainers = findContainers + mock_definition = unittest.mock.MagicMock() + def findContainer(container_id = "*", container_type = None, type = "*", category = None): + return unittest.mock.MagicMock() - container_registry.load() + with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer", findContainer): + container_registry.load() #Check whether the resulting type was correct. stack_id = filename.split(".")[0] diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py new file mode 100644 index 0000000000..d808edd6f1 --- /dev/null +++ b/tests/Settings/TestGlobalStack.py @@ -0,0 +1,33 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import os.path #To find the test files. +import pytest #This module contains unit tests. +import unittest.mock #To monkeypatch some mocks in place of dependencies. + +from cura.Settings.GlobalStack import GlobalStack #The module we're testing. +from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. +import UM.Settings.ContainerRegistry + +## Tests whether the user changes are being read properly from a global stack. +@pytest.mark.parametrize("filename, user_changes_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty") +]) +def test_deserializeUserChanges(filename, user_changes_id): + with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: + serialized = file_handle.read() + stack = GlobalStack("TestStack") + + #Mock the loading of the instances. + def findContainer(container_id = "*", container_type = None, type = None, category = "*"): + if id == "some_material": + return UM.Settings.ContainerRegistry._EmptyInstanceContainer(id) + if container_type == DefinitionContainer: + return unittest.mock.MagicMock() + stack.findContainer = findContainer + + stack.deserialize(serialized) + + assert stack.userChanges.getId() == user_changes_id \ No newline at end of file diff --git a/tests/Settings/stacks/ExtruderLegacy.stack.cfg b/tests/Settings/stacks/ExtruderLegacy.stack.cfg index 59c4defe06..91d5a79b49 100644 --- a/tests/Settings/stacks/ExtruderLegacy.stack.cfg +++ b/tests/Settings/stacks/ExtruderLegacy.stack.cfg @@ -7,4 +7,5 @@ id = ExtruderLegacy type = extruder [containers] -0 = empty_material +3 = some_material +6 = some_definition diff --git a/tests/Settings/stacks/Global.global.cfg b/tests/Settings/stacks/Global.global.cfg index ae06e1cfe3..11ad8fa656 100644 --- a/tests/Settings/stacks/Global.global.cfg +++ b/tests/Settings/stacks/Global.global.cfg @@ -4,4 +4,5 @@ name = Global id = Global [containers] -0 = empty_material +3 = some_material +6 = some_definition diff --git a/tests/Settings/stacks/Global.stack.cfg b/tests/Settings/stacks/Global.stack.cfg index ae06e1cfe3..11ad8fa656 100644 --- a/tests/Settings/stacks/Global.stack.cfg +++ b/tests/Settings/stacks/Global.stack.cfg @@ -4,4 +4,5 @@ name = Global id = Global [containers] -0 = empty_material +3 = some_material +6 = some_definition diff --git a/tests/Settings/stacks/Left.extruder.cfg b/tests/Settings/stacks/Left.extruder.cfg index fff7afd3e8..3abe869a0e 100644 --- a/tests/Settings/stacks/Left.extruder.cfg +++ b/tests/Settings/stacks/Left.extruder.cfg @@ -4,4 +4,5 @@ name = Left id = Left [containers] -0 = empty_material +3 = some_material +6 = some_definition diff --git a/tests/Settings/stacks/MachineLegacy.stack.cfg b/tests/Settings/stacks/MachineLegacy.stack.cfg index 257aa633c5..0f2e77a82e 100644 --- a/tests/Settings/stacks/MachineLegacy.stack.cfg +++ b/tests/Settings/stacks/MachineLegacy.stack.cfg @@ -7,4 +7,5 @@ id = MachineLegacy type = machine [containers] -0 = empty_material +3 = some_material +6 = some_definition \ No newline at end of file From 007f764471ba492c071a96fc9e788df4e927745b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:47:15 +0100 Subject: [PATCH 023/816] Don't let a test remove files from hard disk This test does not test the removing of these files. In general, to make a test run fast, it should not perform any disk operations. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 5c551cf5a8..48b141886b 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -41,7 +41,8 @@ def test_loadTypes(filename, output_class, container_registry): return unittest.mock.MagicMock() with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer", findContainer): - container_registry.load() + with unittest.mock.patch("os.remove"): + container_registry.load() #Check whether the resulting type was correct. stack_id = filename.split(".")[0] From 60b6b7291248ae55efab7c661e3b577e1c4bf07c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:51:45 +0100 Subject: [PATCH 024/816] Rename some_material to some_instance This way we can semantically use it in place of other instances on the stack as well without changing our test. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 2 +- tests/Settings/TestGlobalStack.py | 2 +- tests/Settings/stacks/ExtruderLegacy.stack.cfg | 2 +- tests/Settings/stacks/Global.global.cfg | 2 +- tests/Settings/stacks/Global.stack.cfg | 2 +- tests/Settings/stacks/Left.extruder.cfg | 2 +- tests/Settings/stacks/MachineLegacy.stack.cfg | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 48b141886b..3ae6c8cca7 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -31,7 +31,7 @@ def test_loadTypes(filename, output_class, container_registry): UM.Settings.ContainerStack.setContainerRegistry(container_registry) Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. def findContainers(id, container_type = 0): - if id == "some_material" or id == "some_definition": + if id == "some_instance" or id == "some_definition": return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] else: return [] diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index d808edd6f1..277ae4bd43 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -22,7 +22,7 @@ def test_deserializeUserChanges(filename, user_changes_id): #Mock the loading of the instances. def findContainer(container_id = "*", container_type = None, type = None, category = "*"): - if id == "some_material": + if id == "some_instance": return UM.Settings.ContainerRegistry._EmptyInstanceContainer(id) if container_type == DefinitionContainer: return unittest.mock.MagicMock() diff --git a/tests/Settings/stacks/ExtruderLegacy.stack.cfg b/tests/Settings/stacks/ExtruderLegacy.stack.cfg index 91d5a79b49..e2cdd1c08c 100644 --- a/tests/Settings/stacks/ExtruderLegacy.stack.cfg +++ b/tests/Settings/stacks/ExtruderLegacy.stack.cfg @@ -7,5 +7,5 @@ id = ExtruderLegacy type = extruder [containers] -3 = some_material +3 = some_instance 6 = some_definition diff --git a/tests/Settings/stacks/Global.global.cfg b/tests/Settings/stacks/Global.global.cfg index 11ad8fa656..9034c1d0d0 100644 --- a/tests/Settings/stacks/Global.global.cfg +++ b/tests/Settings/stacks/Global.global.cfg @@ -4,5 +4,5 @@ name = Global id = Global [containers] -3 = some_material +3 = some_instance 6 = some_definition diff --git a/tests/Settings/stacks/Global.stack.cfg b/tests/Settings/stacks/Global.stack.cfg index 11ad8fa656..9034c1d0d0 100644 --- a/tests/Settings/stacks/Global.stack.cfg +++ b/tests/Settings/stacks/Global.stack.cfg @@ -4,5 +4,5 @@ name = Global id = Global [containers] -3 = some_material +3 = some_instance 6 = some_definition diff --git a/tests/Settings/stacks/Left.extruder.cfg b/tests/Settings/stacks/Left.extruder.cfg index 3abe869a0e..fcc9500659 100644 --- a/tests/Settings/stacks/Left.extruder.cfg +++ b/tests/Settings/stacks/Left.extruder.cfg @@ -4,5 +4,5 @@ name = Left id = Left [containers] -3 = some_material +3 = some_instance 6 = some_definition diff --git a/tests/Settings/stacks/MachineLegacy.stack.cfg b/tests/Settings/stacks/MachineLegacy.stack.cfg index 0f2e77a82e..147d63c596 100644 --- a/tests/Settings/stacks/MachineLegacy.stack.cfg +++ b/tests/Settings/stacks/MachineLegacy.stack.cfg @@ -7,5 +7,5 @@ id = MachineLegacy type = machine [containers] -3 = some_material +3 = some_instance 6 = some_definition \ No newline at end of file From ebd08ac9945e837b865cc57ec379545c0776c3ab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:54:32 +0100 Subject: [PATCH 025/816] Add test case where there is only a user changes profile Specifically what this test requires. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 3 ++- tests/Settings/stacks/OnlyUser.global.cfg | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/OnlyUser.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 277ae4bd43..2f284f2f1e 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -13,7 +13,8 @@ import UM.Settings.ContainerRegistry @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty") + ("MachineLegacy.stack.cfg", "empty"), + ("OnlyUser.global.cfg", "some_instance") #This one does have a user profile. ]) def test_deserializeUserChanges(filename, user_changes_id): with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: diff --git a/tests/Settings/stacks/OnlyUser.global.cfg b/tests/Settings/stacks/OnlyUser.global.cfg new file mode 100644 index 0000000000..31371d2c51 --- /dev/null +++ b/tests/Settings/stacks/OnlyUser.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only User +id = OnlyUser + +[containers] +0 = some_instance +6 = some_definition From a2fe051c09e405106efedb3e09f7317f02410593 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 15:58:28 +0100 Subject: [PATCH 026/816] Allow all profiles as some_* to be instances This allows us to differentiate between one container in the stack and the other. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2f284f2f1e..31bca56651 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -23,8 +23,8 @@ def test_deserializeUserChanges(filename, user_changes_id): #Mock the loading of the instances. def findContainer(container_id = "*", container_type = None, type = None, category = "*"): - if id == "some_instance": - return UM.Settings.ContainerRegistry._EmptyInstanceContainer(id) + if container_id.startswith("some_"): + return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) if container_type == DefinitionContainer: return unittest.mock.MagicMock() stack.findContainer = findContainer From c14b3e4f2b975e4795f4068775b03f197cc6076e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 16:45:38 +0100 Subject: [PATCH 027/816] Add test with complete stack In this stack, all profiles are filled in properly with an instance container. This required some magic to make the container registry always return the desired profiles. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 +++++++++++++++++++---- tests/Settings/stacks/Complete.global.cfg | 13 +++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 tests/Settings/stacks/Complete.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 31bca56651..ad0552db92 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -5,21 +5,35 @@ import os.path #To find the test files. import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. -from cura.Settings.GlobalStack import GlobalStack #The module we're testing. +import cura.Settings.GlobalStack #The module we're testing. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. import UM.Settings.ContainerRegistry +import UM.Settings.ContainerStack + +## Fake container registry that always provides all containers you ask of. +@pytest.fixture() +def container_registry(): + registry = unittest.mock.MagicMock() + def findContainers(id = None): + if not id: + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer("test_container")] + else: + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + registry.findContainers = findContainers + return registry ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), ("MachineLegacy.stack.cfg", "empty"), - ("OnlyUser.global.cfg", "some_instance") #This one does have a user profile. + ("OnlyUser.global.cfg", "some_instance"), #This one does have a user profile. + ("Complete.global.cfg", "some_user_changes") ]) -def test_deserializeUserChanges(filename, user_changes_id): +def test_deserializeUserChanges(filename, user_changes_id, container_registry): with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: serialized = file_handle.read() - stack = GlobalStack("TestStack") + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instances. def findContainer(container_id = "*", container_type = None, type = None, category = "*"): @@ -28,6 +42,7 @@ def test_deserializeUserChanges(filename, user_changes_id): if container_type == DefinitionContainer: return unittest.mock.MagicMock() stack.findContainer = findContainer + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. stack.deserialize(serialized) diff --git a/tests/Settings/stacks/Complete.global.cfg b/tests/Settings/stacks/Complete.global.cfg new file mode 100644 index 0000000000..f7f613991a --- /dev/null +++ b/tests/Settings/stacks/Complete.global.cfg @@ -0,0 +1,13 @@ +[general] +version = 3 +name = Complete +id = Complete + +[containers] +0 = some_user_changes +1 = some_quality_changes +2 = some_quality +3 = some_material +4 = some_variant +5 = some_definition_changes +6 = some_definition From 9d9832f8e2f0202c01d847023d41b18b854cd219 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 16:48:58 +0100 Subject: [PATCH 028/816] Move findSomeContainers out to global function This way we can re-use it for other tests. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ad0552db92..99877b2b16 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -22,6 +22,14 @@ def container_registry(): registry.findContainers = findContainers return registry +## Place-in function for findContainer that finds only containers that start +# with "some_". +def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): + if container_id.startswith("some_"): + return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) + if container_type == DefinitionContainer: + return unittest.mock.MagicMock() + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), @@ -36,12 +44,7 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry): stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instances. - def findContainer(container_id = "*", container_type = None, type = None, category = "*"): - if container_id.startswith("some_"): - return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) - if container_type == DefinitionContainer: - return unittest.mock.MagicMock() - stack.findContainer = findContainer + stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. stack.deserialize(serialized) From 2eed5962809d1d2b7df48131403786b107be931f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 16:49:59 +0100 Subject: [PATCH 029/816] Align parameters better for overview Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 99877b2b16..d901642173 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -31,12 +31,12 @@ def findSomeContainers(container_id = "*", container_type = None, type = None, c return unittest.mock.MagicMock() ## Tests whether the user changes are being read properly from a global stack. -@pytest.mark.parametrize("filename, user_changes_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), +@pytest.mark.parametrize("filename, user_changes_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), ("MachineLegacy.stack.cfg", "empty"), - ("OnlyUser.global.cfg", "some_instance"), #This one does have a user profile. - ("Complete.global.cfg", "some_user_changes") + ("OnlyUser.global.cfg", "some_instance"), #This one does have a user profile. + ("Complete.global.cfg", "some_user_changes") ]) def test_deserializeUserChanges(filename, user_changes_id, container_registry): with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: From 09a3b90dcc78a5e0c3c09af66fefffdbb4eb605d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 16:58:06 +0100 Subject: [PATCH 030/816] Add test for detecting quality changes I should try to re-use a bit of code here because there's going to be a lot of these. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 26 +++++++++++++++++-- .../stacks/OnlyQualityChanges.global.cfg | 8 ++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/Settings/stacks/OnlyQualityChanges.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index d901642173..70d4b44964 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -43,10 +43,32 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry): serialized = file_handle.read() stack = cura.Settings.GlobalStack.GlobalStack("TestStack") - #Mock the loading of the instances. + #Mock the loading of the instance containers. stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. stack.deserialize(serialized) - assert stack.userChanges.getId() == user_changes_id \ No newline at end of file + assert stack.userChanges.getId() == user_changes_id + +## Tests whether the quality changes are being read properly from a global +# stack. +@pytest.mark.parametrize("filename, quality_changes_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty"), + ("OnlyQualityChanges.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_quality_changes") +]) +def test_deserializeQualityChanges(filename, quality_changes_id, container_registry): + with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: + serialized = file_handle.read() + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.qualityChanges.getId() == quality_changes_id \ No newline at end of file diff --git a/tests/Settings/stacks/OnlyQualityChanges.global.cfg b/tests/Settings/stacks/OnlyQualityChanges.global.cfg new file mode 100644 index 0000000000..17d279377a --- /dev/null +++ b/tests/Settings/stacks/OnlyQualityChanges.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Quality Changes +id = OnlyQualityChanges + +[containers] +1 = some_instance +6 = some_definition From ba43b835f4a6806d6f41364cc3db877bc1d5adbf Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 17:10:04 +0100 Subject: [PATCH 031/816] Move reading the stack file to a separate function That whole os.path stuff is a bit opaque. Now it's separated from the actual test. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 70d4b44964..169cf12e83 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -30,6 +30,16 @@ def findSomeContainers(container_id = "*", container_type = None, type = None, c if container_type == DefinitionContainer: return unittest.mock.MagicMock() +## Helper function to read the contents of a container stack in the test +# stack folder. +# +# \param filename The name of the file in the "stacks" folder to read from. +# \return The contents of that file. +def readStack(filename): + with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: + serialized = file_handle.read() + return serialized + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), @@ -39,8 +49,7 @@ def findSomeContainers(container_id = "*", container_type = None, type = None, c ("Complete.global.cfg", "some_user_changes") ]) def test_deserializeUserChanges(filename, user_changes_id, container_registry): - with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: - serialized = file_handle.read() + serialized = readStack(filename) stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. @@ -61,8 +70,7 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry): ("Complete.global.cfg", "some_quality_changes") ]) def test_deserializeQualityChanges(filename, quality_changes_id, container_registry): - with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: - serialized = file_handle.read() + serialized = readStack(filename) stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. From eae6ad0e05726dab2ea8d34c81c5a4cdbc665935 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 17:24:21 +0100 Subject: [PATCH 032/816] Add test to see whether quality profiles deserialise well Works just the same as the quality-changes stuff. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 +++++++++++++++++++- tests/Settings/stacks/OnlyQuality.global.cfg | 8 +++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/OnlyQuality.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 169cf12e83..21a6db61a6 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -79,4 +79,25 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis stack.deserialize(serialized) - assert stack.qualityChanges.getId() == quality_changes_id \ No newline at end of file + assert stack.qualityChanges.getId() == quality_changes_id + +## Tests whether the quality profile is being read properly from a global +# stack. +@pytest.mark.parametrize("filename, quality_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty"), + ("OnlyQuality.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_quality") +]) +def test_deserializeQualityChanges(filename, quality_id, container_registry): + serialized = readStack(filename) + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.quality.getId() == quality_id \ No newline at end of file diff --git a/tests/Settings/stacks/OnlyQuality.global.cfg b/tests/Settings/stacks/OnlyQuality.global.cfg new file mode 100644 index 0000000000..f07a35666e --- /dev/null +++ b/tests/Settings/stacks/OnlyQuality.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Quality +id = OnlyQuality + +[containers] +2 = some_instance +6 = some_definition From 66b5fe6702722b7029041d97df0db0e44275e5ab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 17:25:22 +0100 Subject: [PATCH 033/816] Align test parameters for readability Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 21a6db61a6..48b6bd0e2c 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -62,12 +62,12 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry): ## Tests whether the quality changes are being read properly from a global # stack. -@pytest.mark.parametrize("filename, quality_changes_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), +@pytest.mark.parametrize("filename, quality_changes_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty"), ("OnlyQualityChanges.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_quality_changes") + ("Complete.global.cfg", "some_quality_changes") ]) def test_deserializeQualityChanges(filename, quality_changes_id, container_registry): serialized = readStack(filename) @@ -83,12 +83,12 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis ## Tests whether the quality profile is being read properly from a global # stack. -@pytest.mark.parametrize("filename, quality_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), +@pytest.mark.parametrize("filename, quality_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), ("MachineLegacy.stack.cfg", "empty"), - ("OnlyQuality.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_quality") + ("OnlyQuality.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_quality") ]) def test_deserializeQualityChanges(filename, quality_id, container_registry): serialized = readStack(filename) From 80329ad6e877b840deaa6dcc2a61245873ecb7ae Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 17:26:37 +0100 Subject: [PATCH 034/816] Fix test name Oops. Copy-paste mistake. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 48b6bd0e2c..87651086be 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -90,7 +90,7 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis ("OnlyQuality.global.cfg", "some_instance"), ("Complete.global.cfg", "some_quality") ]) -def test_deserializeQualityChanges(filename, quality_id, container_registry): +def test_deserializeQuality(filename, quality_id, container_registry): serialized = readStack(filename) stack = cura.Settings.GlobalStack.GlobalStack("TestStack") From 95a377d54ef7d8adce681b4c3ed3af9494fe627a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 22 Mar 2017 17:32:37 +0100 Subject: [PATCH 035/816] Add test for deserialising materials in stacks Similar to the other tests, but this one is a bit special since the original test stacks had a material defined. Therefore it also defines a separate stack that only has a definition so that we can see if it's fine with the material being empty. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 24 ++++++++++++++++++- .../Settings/stacks/OnlyDefinition.global.cfg | 7 ++++++ tests/Settings/stacks/OnlyMaterial.global.cfg | 8 +++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/OnlyDefinition.global.cfg create mode 100644 tests/Settings/stacks/OnlyMaterial.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 87651086be..a1242bc61d 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -100,4 +100,26 @@ def test_deserializeQuality(filename, quality_id, container_registry): stack.deserialize(serialized) - assert stack.quality.getId() == quality_id \ No newline at end of file + assert stack.quality.getId() == quality_id + +## Tests whether the material profile is being read properly from a global +# stack. +@pytest.mark.parametrize("filename, material_id", [ + ("Global.global.cfg", "some_instance"), + ("Global.stack.cfg", "some_instance"), + ("MachineLegacy.stack.cfg", "some_instance"), + ("OnlyDefinition.global.cfg", "empty"), + ("OnlyMaterial.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_material") +]) +def test_deserializeMaterial(filename, material_id, container_registry): + serialized = readStack(filename) + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.material.getId() == material_id \ No newline at end of file diff --git a/tests/Settings/stacks/OnlyDefinition.global.cfg b/tests/Settings/stacks/OnlyDefinition.global.cfg new file mode 100644 index 0000000000..9534353ed5 --- /dev/null +++ b/tests/Settings/stacks/OnlyDefinition.global.cfg @@ -0,0 +1,7 @@ +[general] +version = 3 +name = Only Definition +id = OnlyDefinition + +[containers] +6 = some_definition diff --git a/tests/Settings/stacks/OnlyMaterial.global.cfg b/tests/Settings/stacks/OnlyMaterial.global.cfg new file mode 100644 index 0000000000..715651a9b9 --- /dev/null +++ b/tests/Settings/stacks/OnlyMaterial.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Material +id = OnlyMaterial + +[containers] +3 = some_instance +6 = some_definition From 79f6e49280d7e684f5191097d3337f0f30e702a0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:00:26 +0100 Subject: [PATCH 036/816] Add test for seeing whether variants are properly found Whether the deserialize function finds the variants properly. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 +++++++++++++++++++- tests/Settings/stacks/OnlyVariant.global.cfg | 8 +++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/OnlyVariant.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index a1242bc61d..84d1de01b4 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -122,4 +122,25 @@ def test_deserializeMaterial(filename, material_id, container_registry): stack.deserialize(serialized) - assert stack.material.getId() == material_id \ No newline at end of file + assert stack.material.getId() == material_id + +## Tests whether the variant profile is being read properly from a global +# stack. +@pytest.mark.parametrize("filename, variant_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty"), + ("OnlyVariant.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_variant") +]) +def test_deserializeVariant(filename, variant_id, container_registry): + serialized = readStack(filename) + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.variant.getId() == variant_id \ No newline at end of file diff --git a/tests/Settings/stacks/OnlyVariant.global.cfg b/tests/Settings/stacks/OnlyVariant.global.cfg new file mode 100644 index 0000000000..dde3276ff5 --- /dev/null +++ b/tests/Settings/stacks/OnlyVariant.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Material +id = OnlyMaterial + +[containers] +4 = some_instance +6 = some_definition From 15de1f235ab3af13f47fa1c9bee41ddaeb50d9f2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:30:54 +0100 Subject: [PATCH 037/816] Add test for seeing whether definition changes are properly found Whether the deserialize function finds the definition changes properly. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 ++++++++++++++++++- .../stacks/OnlyDefinitionChanges.global.cfg | 8 +++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/OnlyDefinitionChanges.global.cfg diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 84d1de01b4..e0ce800eca 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -143,4 +143,25 @@ def test_deserializeVariant(filename, variant_id, container_registry): stack.deserialize(serialized) - assert stack.variant.getId() == variant_id \ No newline at end of file + assert stack.variant.getId() == variant_id + +## Tests whether the definition changes profile is being read properly from a +# global stack. +@pytest.mark.parametrize("filename, definition_changes_id", [ + ("Global.global.cfg", "empty"), + ("Global.stack.cfg", "empty"), + ("MachineLegacy.stack.cfg", "empty"), + ("OnlyDefinitionChanges.global.cfg", "some_instance"), + ("Complete.global.cfg", "some_material") +]) +def test_deserializeDefinitionChanges(filename, definition_changes_id, container_registry): + serialized = readStack(filename) + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.variant.getId() == definition_changes_id \ No newline at end of file diff --git a/tests/Settings/stacks/OnlyDefinitionChanges.global.cfg b/tests/Settings/stacks/OnlyDefinitionChanges.global.cfg new file mode 100644 index 0000000000..39e2105b7d --- /dev/null +++ b/tests/Settings/stacks/OnlyDefinitionChanges.global.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Definition Changes +id = OnlyDefinitionChanges + +[containers] +5 = some_instance +6 = some_definition From 91f51d11cd74f6dd61f3c06425e34f64c73a3f21 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:32:27 +0100 Subject: [PATCH 038/816] Fix ID and name of only-variant stack This makes it consistent with the file name and such. Contributes to issue CURA-3497. --- tests/Settings/stacks/OnlyVariant.global.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Settings/stacks/OnlyVariant.global.cfg b/tests/Settings/stacks/OnlyVariant.global.cfg index dde3276ff5..158d533ac8 100644 --- a/tests/Settings/stacks/OnlyVariant.global.cfg +++ b/tests/Settings/stacks/OnlyVariant.global.cfg @@ -1,7 +1,7 @@ [general] version = 3 -name = Only Material -id = OnlyMaterial +name = Only Variant +id = OnlyVariant [containers] 4 = some_instance From 521e85b2a775d376540052c0e58b6092b57b5795 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:40:44 +0100 Subject: [PATCH 039/816] Add test for deserializing stacks with definitions in them This tests whether the definition is properly found. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index e0ce800eca..bed0edb413 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -164,4 +164,24 @@ def test_deserializeDefinitionChanges(filename, definition_changes_id, container stack.deserialize(serialized) - assert stack.variant.getId() == definition_changes_id \ No newline at end of file + assert stack.variant.getId() == definition_changes_id + +## Tests whether the definition is being read properly from a global stack. +@pytest.mark.parametrize("filename, definition_id", [ + ("Global.global.cfg", "some_definition"), + ("Global.stack.cfg", "some_definition"), + ("MachineLegacy.stack.cfg", "some_definition"), + ("OnlyDefinition.global.cfg", "some_definition"), + ("Complete.global.cfg", "some_definition") +]) +def test_deserializeDefinition(filename, definition_id, container_registry): + serialized = readStack(filename) + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + + #Mock the loading of the instance containers. + stack.findContainer = findSomeContainers + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + stack.deserialize(serialized) + + assert stack.definition.getId() == definition_id \ No newline at end of file From 610d2ae1e603fb765ad1f1cce71d9ee670f7c349 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:41:25 +0100 Subject: [PATCH 040/816] Fix assertion for test_deserializeDefinitionChanges Copy-paste error there. Sorry. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index bed0edb413..ea431d2dad 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -164,7 +164,7 @@ def test_deserializeDefinitionChanges(filename, definition_changes_id, container stack.deserialize(serialized) - assert stack.variant.getId() == definition_changes_id + assert stack.definitionChanges.getId() == definition_changes_id ## Tests whether the definition is being read properly from a global stack. @pytest.mark.parametrize("filename, definition_id", [ From 8a3ab6d289178e0f8d0e7b331f6eac3f4d88882b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 15:46:11 +0100 Subject: [PATCH 041/816] Fix testing ID of mock-definitions This isn't the best solution because all definitions now have to get the ID 'some_definition', but it's the best that I could come up with so far. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ea431d2dad..f624fad329 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -28,7 +28,9 @@ def findSomeContainers(container_id = "*", container_type = None, type = None, c if container_id.startswith("some_"): return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) if container_type == DefinitionContainer: - return unittest.mock.MagicMock() + definition_mock = unittest.mock.MagicMock() + definition_mock.getId = unittest.mock.MagicMock(return_value = "some_definition") #getId returns some_definition. + return definition_mock ## Helper function to read the contents of a container stack in the test # stack folder. From bf2050479b396de5f4e886775b23eedec92b1dc0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:09:03 +0100 Subject: [PATCH 042/816] Add tests for hasUserValue These fail at the moment because they also depend on being able to change the stack, which isn't implemented yet. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index f624fad329..9d55ae16b6 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -186,4 +186,34 @@ def test_deserializeDefinition(filename, definition_id, container_registry): stack.deserialize(serialized) - assert stack.definition.getId() == definition_id \ No newline at end of file + assert stack.definition.getId() == definition_id + +## Tests whether the hasUserValue returns true for settings that are changed in +# the user-changes container. +def test_hasUserValueUserChanges(): + user_changes = unittest.mock.MagicMock() + def hasProperty(key, property): + return key == "layer_height" and property == "value" #Only have the layer_height property set. + user_changes.hasProperty = hasProperty + + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + stack.userChanges = user_changes + + assert not stack.hasUserValue("infill_sparse_density") + assert stack.hasUserValue("layer_height") + assert not stack.hasUserValue("") + +## Tests whether the hasUserValue returns true for settings that are changed in +# the quality-changes container. +def test_hasUserValueQualityChanges(): + quality_changes = unittest.mock.MagicMock() + def hasProperty(key, property): + return key == "layer_height" and property == "value" #Only have the layer_height property set. + quality_changes.hasProperty = hasProperty + + stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + stack.qualityChanges = quality_changes + + assert not stack.hasUserValue("infill_sparse_density") + assert stack.hasUserValue("layer_height") + assert not stack.hasUserValue("") \ No newline at end of file From 91192b702e78f461a0963f08942c324b478a7c08 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:12:28 +0100 Subject: [PATCH 043/816] Use a global stack from a fixture Removes a bit of duplicate code. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 91 +++++++++++++++---------------- 1 file changed, 44 insertions(+), 47 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 9d55ae16b6..a3bf1e5c04 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -22,6 +22,11 @@ def container_registry(): registry.findContainers = findContainers return registry +#An empty global stack to test with. +@pytest.fixture() +def global_stack(): + return cura.Settings.GlobalStack.GlobalStack("TestStack") + ## Place-in function for findContainer that finds only containers that start # with "some_". def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): @@ -50,17 +55,16 @@ def readStack(filename): ("OnlyUser.global.cfg", "some_instance"), #This one does have a user profile. ("Complete.global.cfg", "some_user_changes") ]) -def test_deserializeUserChanges(filename, user_changes_id, container_registry): +def test_deserializeUserChanges(filename, user_changes_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.userChanges.getId() == user_changes_id + assert global_stack.userChanges.getId() == user_changes_id ## Tests whether the quality changes are being read properly from a global # stack. @@ -71,17 +75,16 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry): ("OnlyQualityChanges.global.cfg", "some_instance"), ("Complete.global.cfg", "some_quality_changes") ]) -def test_deserializeQualityChanges(filename, quality_changes_id, container_registry): +def test_deserializeQualityChanges(filename, quality_changes_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.qualityChanges.getId() == quality_changes_id + assert global_stack.qualityChanges.getId() == quality_changes_id ## Tests whether the quality profile is being read properly from a global # stack. @@ -92,17 +95,16 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis ("OnlyQuality.global.cfg", "some_instance"), ("Complete.global.cfg", "some_quality") ]) -def test_deserializeQuality(filename, quality_id, container_registry): +def test_deserializeQuality(filename, quality_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.quality.getId() == quality_id + assert global_stack.quality.getId() == quality_id ## Tests whether the material profile is being read properly from a global # stack. @@ -114,17 +116,16 @@ def test_deserializeQuality(filename, quality_id, container_registry): ("OnlyMaterial.global.cfg", "some_instance"), ("Complete.global.cfg", "some_material") ]) -def test_deserializeMaterial(filename, material_id, container_registry): +def test_deserializeMaterial(filename, material_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.material.getId() == material_id + assert global_stack.material.getId() == material_id ## Tests whether the variant profile is being read properly from a global # stack. @@ -135,17 +136,16 @@ def test_deserializeMaterial(filename, material_id, container_registry): ("OnlyVariant.global.cfg", "some_instance"), ("Complete.global.cfg", "some_variant") ]) -def test_deserializeVariant(filename, variant_id, container_registry): +def test_deserializeVariant(filename, variant_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.variant.getId() == variant_id + assert global_stack.variant.getId() == variant_id ## Tests whether the definition changes profile is being read properly from a # global stack. @@ -156,17 +156,17 @@ def test_deserializeVariant(filename, variant_id, container_registry): ("OnlyDefinitionChanges.global.cfg", "some_instance"), ("Complete.global.cfg", "some_material") ]) -def test_deserializeDefinitionChanges(filename, definition_changes_id, container_registry): +def test_deserializeDefinitionChanges(filename, definition_changes_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") + global_stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.definitionChanges.getId() == definition_changes_id + assert global_stack.definitionChanges.getId() == definition_changes_id ## Tests whether the definition is being read properly from a global stack. @pytest.mark.parametrize("filename, definition_id", [ @@ -176,44 +176,41 @@ def test_deserializeDefinitionChanges(filename, definition_changes_id, container ("OnlyDefinition.global.cfg", "some_definition"), ("Complete.global.cfg", "some_definition") ]) -def test_deserializeDefinition(filename, definition_id, container_registry): +def test_deserializeDefinition(filename, definition_id, container_registry, global_stack): serialized = readStack(filename) - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") #Mock the loading of the instance containers. - stack.findContainer = findSomeContainers + global_stack.findContainer = findSomeContainers UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - stack.deserialize(serialized) + global_stack.deserialize(serialized) - assert stack.definition.getId() == definition_id + assert global_stack.definition.getId() == definition_id ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. -def test_hasUserValueUserChanges(): +def test_hasUserValueUserChanges(global_stack): user_changes = unittest.mock.MagicMock() def hasProperty(key, property): return key == "layer_height" and property == "value" #Only have the layer_height property set. user_changes.hasProperty = hasProperty - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") - stack.userChanges = user_changes + global_stack.userChanges = user_changes - assert not stack.hasUserValue("infill_sparse_density") - assert stack.hasUserValue("layer_height") - assert not stack.hasUserValue("") + assert not global_stack.hasUserValue("infill_sparse_density") + assert global_stack.hasUserValue("layer_height") + assert not global_stack.hasUserValue("") ## Tests whether the hasUserValue returns true for settings that are changed in # the quality-changes container. -def test_hasUserValueQualityChanges(): +def test_hasUserValueQualityChanges(global_stack): quality_changes = unittest.mock.MagicMock() def hasProperty(key, property): return key == "layer_height" and property == "value" #Only have the layer_height property set. quality_changes.hasProperty = hasProperty - stack = cura.Settings.GlobalStack.GlobalStack("TestStack") - stack.qualityChanges = quality_changes + global_stack.qualityChanges = quality_changes - assert not stack.hasUserValue("infill_sparse_density") - assert stack.hasUserValue("layer_height") - assert not stack.hasUserValue("") \ No newline at end of file + assert not global_stack.hasUserValue("infill_sparse_density") + assert global_stack.hasUserValue("layer_height") + assert not global_stack.hasUserValue("") \ No newline at end of file From 96c7a4ed77bb37e476ba4efc57379c74dd840fad Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:16:32 +0100 Subject: [PATCH 044/816] Remove unused variable This was changed earlier that it doesn't return the same mock every time but creates a new mock in findContainer. So the single mock that used to be returned every time is no longer needed. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 3ae6c8cca7..d94344be74 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -36,7 +36,6 @@ def test_loadTypes(filename, output_class, container_registry): else: return [] container_registry.findContainers = findContainers - mock_definition = unittest.mock.MagicMock() def findContainer(container_id = "*", container_type = None, type = "*", category = None): return unittest.mock.MagicMock() @@ -51,4 +50,4 @@ def test_loadTypes(filename, output_class, container_registry): assert type(container) == output_class break else: - assert False #Container stack with specified ID was not loaded. + assert False #Container stack with specified ID was not loaded. \ No newline at end of file From e521f6b38d82611c595616405fdddec7c951f37e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:35:11 +0100 Subject: [PATCH 045/816] Remove unnecessary findContainer replacement By default the patch context returns mock objects anyway, so no need to actually make a function that does that. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index d94344be74..97897fcd6d 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -36,10 +36,8 @@ def test_loadTypes(filename, output_class, container_registry): else: return [] container_registry.findContainers = findContainers - def findContainer(container_id = "*", container_type = None, type = "*", category = None): - return unittest.mock.MagicMock() - with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer", findContainer): + with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): with unittest.mock.patch("os.remove"): container_registry.load() From 053974bc96ef34075612495a7eb537ff691ff38e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:47:37 +0100 Subject: [PATCH 046/816] Add test to see if legacy files are renamed The test seems to fail at the moment. No new file is created. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 97897fcd6d..89eba7b502 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -3,6 +3,7 @@ import os #To find the directory with test files and find the test files. import pytest #This module contains unit tests. +import shutil #To copy files to make a temporary file. import unittest.mock #To mock and monkeypatch stuff. from cura.Settings.CuraContainerRegistry import CuraContainerRegistry #The class we're testing. @@ -48,4 +49,25 @@ def test_loadTypes(filename, output_class, container_registry): assert type(container) == output_class break else: - assert False #Container stack with specified ID was not loaded. \ No newline at end of file + assert False #Container stack with specified ID was not loaded. + +## Tests whether loading a legacy file moves the upgraded file properly. +def test_loadLegacyFileRenamed(container_registry): + #Create a temporary file for the registry to load. + temp_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "temporary.stack.cfg") + temp_file_source = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "MachineLegacy.stack.cfg") + shutil.copyfile(temp_file_source, temp_file) + + #Mock some dependencies. + UM.Settings.ContainerStack.setContainerRegistry(container_registry) + Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [temp_file]) #Return a temporary file that we'll make for this test. + def findContainers(id, container_type = 0): + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + container_registry.findContainers = findContainers + + with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): + container_registry.load() + + assert not os.path.isfile(temp_file) + new_filename = os.path.splitext(os.path.splitext(temp_file)[0])[0] + ".global.cfg" + assert os.path.isfile(new_filename) \ No newline at end of file From b18c72bbbf7b2b4ea04831a2c4dbba99323bcb76 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 16:48:38 +0100 Subject: [PATCH 047/816] Remove unused import This was replaced with mocks, if I recall correctly. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 89eba7b502..0df43020d8 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -12,7 +12,6 @@ from cura.Settings.GlobalStack import GlobalStack #Testing for returning the cor from UM.Resources import Resources #Mocking some functions of this. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. -from UM.Settings.DefinitionContainer import DefinitionContainer #Checking against the DefinitionContainer class. ## Gives a fresh CuraContainerRegistry instance. @pytest.fixture() From 9ce621a02da442da37b714202945c2eaafc14d2f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 17:17:43 +0100 Subject: [PATCH 048/816] Restore the original container registry after each test A bit of code duplication, but I don't see how to reduce this at the moment. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index a3bf1e5c04..af7b2ec7c5 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -60,12 +60,16 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry, g #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. global_stack.deserialize(serialized) assert global_stack.userChanges.getId() == user_changes_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the quality changes are being read properly from a global # stack. @pytest.mark.parametrize("filename, quality_changes_id", [ @@ -80,12 +84,16 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.qualityChanges.getId() == quality_changes_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the quality profile is being read properly from a global # stack. @pytest.mark.parametrize("filename, quality_id", [ @@ -100,12 +108,16 @@ def test_deserializeQuality(filename, quality_id, container_registry, global_sta #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.quality.getId() == quality_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the material profile is being read properly from a global # stack. @pytest.mark.parametrize("filename, material_id", [ @@ -121,12 +133,16 @@ def test_deserializeMaterial(filename, material_id, container_registry, global_s #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.material.getId() == material_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the variant profile is being read properly from a global # stack. @pytest.mark.parametrize("filename, variant_id", [ @@ -141,12 +157,16 @@ def test_deserializeVariant(filename, variant_id, container_registry, global_sta #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.variant.getId() == variant_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the definition changes profile is being read properly from a # global stack. @pytest.mark.parametrize("filename, definition_changes_id", [ @@ -162,12 +182,16 @@ def test_deserializeDefinitionChanges(filename, definition_changes_id, container #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.definitionChanges.getId() == definition_changes_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the definition is being read properly from a global stack. @pytest.mark.parametrize("filename, definition_id", [ ("Global.global.cfg", "some_definition"), @@ -181,12 +205,16 @@ def test_deserializeDefinition(filename, definition_id, container_registry, glob #Mock the loading of the instance containers. global_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. global_stack.deserialize(serialized) assert global_stack.definition.getId() == definition_id + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): From f579b5f3045d2a7cafafae68aed76d19d663f4aa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 17:22:10 +0100 Subject: [PATCH 049/816] Clean up temporary files after test If the test fails to remove the temporary file, this cleans up after it. Contributes to issue CURA-3497. --- tests/Settings/TestCuraContainerRegistry.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 0df43020d8..31348753f4 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -18,6 +18,12 @@ import UM.Settings.ContainerStack #Setting the container registry here properly. def container_registry(): return CuraContainerRegistry() +def teardown(): + #If the temporary file for the legacy file rename test still exists, remove it. + temporary_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "temporary.stack.cfg") + if os.path.isfile(temporary_file): + os.remove(temporary_file) + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From a95404f72f7665ba2c92ee32bc5c985d98cd46f0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 23 Mar 2017 17:31:21 +0100 Subject: [PATCH 050/816] Add test for missing containers in container stack This seems to give a different exception than intended at the moment. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index af7b2ec7c5..ff49f80bd8 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -215,6 +215,15 @@ def test_deserializeDefinition(filename, definition_id, container_registry, glob #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +def test_deserializeMissingContainer(container_registry, global_stack): + serialized = readStack("Global.global.cfg") + try: + global_stack.deserialize(serialized) + except Exception as e: + #Must be exactly Exception, not one of its subclasses, since that is what gets raised when a stack has an unknown container. + #That's why we can't use pytest.raises. + assert type(e) == Exception + ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): From f97a6ebd74caddffbb890a1cf39f1168b33bb461 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 17:49:16 +0100 Subject: [PATCH 051/816] Move exceptions to their own file Since that keeps the GlobalStack cleaner Contributes to CURA-3497 --- cura/Settings/Exceptions.py | 17 +++++++++++++++++ cura/Settings/GlobalStack.py | 5 ++--- 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 cura/Settings/Exceptions.py diff --git a/cura/Settings/Exceptions.py b/cura/Settings/Exceptions.py new file mode 100644 index 0000000000..846e740950 --- /dev/null +++ b/cura/Settings/Exceptions.py @@ -0,0 +1,17 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + + +## Raised when trying to perform an operation like add on a stack that does not allow that. +class InvalidOperationError(Exception): + pass + + +## Raised when trying to replace a container with a container that does not have the expected type. +class InvalidContainerError(Exception): + pass + + +## Raised when trying to add an extruder to a Global stack that already has the maximum number of extruders. +class TooManyExtrudersError(Exception): + pass diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 4d25293ead..622e013a0b 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -11,8 +11,7 @@ from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry -class CannotSetNextStackError(Exception): - pass +from . import Exceptions class GlobalStack(ContainerStack): def __init__(self, container_id: str, *args, **kwargs): @@ -78,7 +77,7 @@ class GlobalStack(ContainerStack): ## Overridden from ContainerStack @override(ContainerStack) def setNextStack(self, next_stack: ContainerStack) -> None: - raise CannotSetNextStackError("Global stack cannot have a next stack!") + raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") ## Overridden from ContainerStack @override(ContainerStack) From 462d5fac8dc8a13cee8bf9d454b4634f193c8aec Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 17:51:50 +0100 Subject: [PATCH 052/816] Add setters for properties Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 622e013a0b..93a31d8e21 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -23,18 +23,30 @@ class GlobalStack(ContainerStack): def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] + def setQualtiyChanges(self, new_quality_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + @pyqtProperty(InstanceContainer) def qualityChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.QualityChanges] + def setQuality(self, new_quality: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Quality, new_quality) + @pyqtProperty(InstanceContainer) def quality(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Quality] + def setMaterial(self, new_material: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Material, new_material) + @pyqtProperty(InstanceContainer) def material(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Material] + def setVariant(self, new_variant: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Variant, new_variant) + @pyqtProperty(InstanceContainer) def variant(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Variant] From 5ad0651fd190b7b887abb56052478e6b3dfbc0ce Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 17:52:16 +0100 Subject: [PATCH 053/816] Add an "extruders" property and an addExtruder method Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 93a31d8e21..b605b8dc76 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -19,6 +19,8 @@ class GlobalStack(ContainerStack): self._empty_instance_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + self._extruders = [] + @pyqtProperty(InstanceContainer) def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] @@ -59,6 +61,17 @@ class GlobalStack(ContainerStack): def definition(self) -> DefinitionContainer: return self._containers[_ContainerIndexes.Definition] + @pyqtProperty("QVariantList") + def extruders(self) -> list: + return self._extruders + + def addExtruder(self, extruder): + extruder_count = self.getProperty("machine_extruder_count", "value") + if len(self._extruders) > extruder_count: + raise Exceptions.TooManyExtrudersError("Tried to add extruder to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count)) + + self._extruders.append(extruder) + ## Check whether the specified setting has a 'user' value. # # A user value here is defined as the setting having a value in either From dc0c666a54336873ccb7dee9c976b9504773b5a0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 17:52:53 +0100 Subject: [PATCH 054/816] Disable add/insert/remove container Since we want to have a fixed list of containers in the stack. Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index b605b8dc76..6118843095 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -105,6 +105,22 @@ class GlobalStack(ContainerStack): raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") ## Overridden from ContainerStack + # + # Since we have a fixed order of containers in the stack, we want to enforce this. + @override(ContainerStack) + def addContainer(self, container: ContainerInterface) -> None: + raise Exceptions.InvalidOperationError("Cannot add a container to Global stack") + + ## Overridden from ContainerStack + @override(ContainerStack) + def insertContainer(self, index: int, container: ContainerInterface) -> None: + raise Exceptions.InvalidOperationError("Cannot insert a container into Global stack") + + ## Overridden from ContainerStack + @override(ContainerStack) + def removeContainer(self, index: int) -> None: + raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") + @override(ContainerStack) def deserialize(self, contents: str) -> None: super().deserialize(contents) From de1dbfbc07fb03408e94ea8c9e57fd444bc2f5a9 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 17:53:39 +0100 Subject: [PATCH 055/816] Override replaceContainer and add some type checking type in this case being container type Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 6118843095..e1c24cf9e2 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -10,6 +10,7 @@ from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackErro from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.Interfaces import ContainerInterface from . import Exceptions @@ -121,6 +122,18 @@ class GlobalStack(ContainerStack): def removeContainer(self, index: int) -> None: raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") + ## Overridden from ContainerStack + @override(ContainerStack) + def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None: + expected_type = _ContainerIndexes.IndexTypeMap[index] + if expected_type == "definition" and not isinstance(container, DefinitionContainer): + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) + if container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type".format(index = index, type = expected_type)) + + super().replaceContainer(index, container, postpone_emit) + + ## Overridden from ContainerStack @override(ContainerStack) def deserialize(self, contents: str) -> None: super().deserialize(contents) @@ -152,17 +165,18 @@ class GlobalStack(ContainerStack): self._containers = new_containers -## private: +## private: global_stack_mime = MimeType( name = "application/x-cura-globalstack", comment = "Cura Global Stack", - suffixes = [ "global.cfg" ] + suffixes = ["global.cfg"] ) MimeTypeDatabase.addMimeType(global_stack_mime) ContainerRegistry.addContainerTypeByName(GlobalStack, "global_stack", global_stack_mime.name) + class _ContainerIndexes: UserChanges = 0 QualityChanges = 1 From 4215ba3ce7ed333f940a70ed95d72fbdd4ae7b24 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 11:59:19 +0100 Subject: [PATCH 056/816] Add test for setting fall-through This tests whether a setting still falls through properly to lower containers if it is not defined in a container. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 38 ++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ff49f80bd8..4a37b79f3e 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -24,7 +24,7 @@ def container_registry(): #An empty global stack to test with. @pytest.fixture() -def global_stack(): +def global_stack() -> cura.Settings.GlobalStack.GlobalStack: return cura.Settings.GlobalStack.GlobalStack("TestStack") ## Place-in function for findContainer that finds only containers that start @@ -224,6 +224,42 @@ def test_deserializeMissingContainer(container_registry, global_stack): #That's why we can't use pytest.raises. assert type(e) == Exception +## 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. + layer_height_5 = unittest.mock.MagicMock() #Sets layer height to 5. + layer_height_5.getProperty = lambda key, property: 5 if (key == "layer_height" and property == "value") else None + layer_height_5.hasProperty = lambda key: key == "layer_height" + layer_height_10 = unittest.mock.MagicMock() #Sets layer height to 10. + layer_height_10.getProperty = lambda key, property: 10 if (key == "layer_height" and property == "value") else None + layer_height_10.hasProperty = lambda key: key == "layer_height" + no_layer_height = unittest.mock.MagicMock() #No settings at all. + no_layer_height.getProperty = lambda key, property: None + no_layer_height.hasProperty = lambda key: False + + global_stack.userChanges = no_layer_height + global_stack.qualityChanges = no_layer_height + global_stack.quality = no_layer_height + global_stack.material = no_layer_height + global_stack.variant = no_layer_height + global_stack.definitionChanges = no_layer_height + global_stack.definition = layer_height_5 #Here it is! + + assert global_stack.getProperty("layer_height", "value") == 5 + global_stack.definitionChanges = layer_height_10 + assert global_stack.getProperty("layer_height", "value") == 10 + global_stack.variant = layer_height_5 + assert global_stack.getProperty("layer_height", "value") == 5 + global_stack.material = layer_height_10 + assert global_stack.getProperty("layer_height", "value") == 10 + global_stack.quality = layer_height_5 + assert global_stack.getProperty("layer_height", "value") == 5 + global_stack.qualityChanges = layer_height_10 + assert global_stack.getProperty("layer_height", "value") == 10 + global_stack.userChanges = layer_height_5 + assert global_stack.getProperty("layer_height", "value") == 5 + ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): From 86a1d3eb105b7ae49763daa33c48c156dea07d5e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 12:01:23 +0100 Subject: [PATCH 057/816] Add marker to indicate where the test cases start Sorting also takes care of this, but it's still more clear this way. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 4a37b79f3e..277a7f69b1 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -47,6 +47,8 @@ def readStack(filename): serialized = file_handle.read() return serialized +#############################START OF TEST CASES################################ + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), From d40a67f2b03b85a6211a2f09369a4dfe173ed5aa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 12:27:39 +0100 Subject: [PATCH 058/816] Add test for addExtruder This mainly tests if it is properly limited by the number of extruders setting. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 277a7f69b1..cb64d78c2b 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -6,6 +6,7 @@ import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. import cura.Settings.GlobalStack #The module we're testing. +from cura.Settings.Exceptions import TooManyExtrudersError #To test raising this error. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack @@ -49,6 +50,18 @@ def readStack(filename): #############################START OF TEST CASES################################ +## Tests adding extruders to the global stack. +def test_addExtruder(global_stack): + mock_definition = unittest.mock.MagicMock() + mock_definition.getProperty = lambda key, property: 2 if key == "machine_extruder_count" and property == "value" else None + + global_stack.definition = mock_definition + + global_stack.addExtruder(unittest.mock.MagicMock()) + global_stack.addExtruder(unittest.mock.MagicMock()) + with pytest.raises(TooManyExtrudersError): + global_stack.addExtruder(unittest.mock.MagicMock()) + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), From f2b9f79fb33684ec363c35cdaeb8b8e56e1e3527 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 12:28:26 +0100 Subject: [PATCH 059/816] Document test_addExtruder better Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index cb64d78c2b..83b5226109 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -59,7 +59,7 @@ def test_addExtruder(global_stack): global_stack.addExtruder(unittest.mock.MagicMock()) global_stack.addExtruder(unittest.mock.MagicMock()) - with pytest.raises(TooManyExtrudersError): + with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. global_stack.addExtruder(unittest.mock.MagicMock()) ## Tests whether the user changes are being read properly from a global stack. From 56082bdbdfe3dba5ab93f60e1447fde0a51d5ff5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 12:42:35 +0100 Subject: [PATCH 060/816] Add tests for prohibited operations Four of these. It's probably too simple to test now, but who knows what could happen in the future. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 83b5226109..d2f2bc881e 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -6,7 +6,7 @@ import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. import cura.Settings.GlobalStack #The module we're testing. -from cura.Settings.Exceptions import TooManyExtrudersError #To test raising this error. +from cura.Settings.Exceptions import TooManyExtrudersError, InvalidOperationError #To test raising these errors. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack @@ -50,6 +50,11 @@ def readStack(filename): #############################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() @@ -301,4 +306,18 @@ def test_hasUserValueQualityChanges(global_stack): assert not global_stack.hasUserValue("infill_sparse_density") assert global_stack.hasUserValue("layer_height") - assert not global_stack.hasUserValue("") \ No newline at end of file + assert not global_stack.hasUserValue("") + +## Tests whether inserting a container is properly forbidden. +def test_insertContainer(global_stack): + with pytest.raises(InvalidOperationError): + global_stack.insertContainer(0, unittest.mock.MagicMock()) + +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()) \ No newline at end of file From f4673b340a94611d9ec26ba49dd075b4636eda39 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 12:44:20 +0100 Subject: [PATCH 061/816] Document tests Missing documentation here. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index d2f2bc881e..632baa4c05 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -313,6 +313,7 @@ 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()) From d1dc48d7e13e6c8aa73c053a96d0347e01353774 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 14:27:30 +0100 Subject: [PATCH 062/816] Add test to verify priority of resolve property The resolve property should get priority over the value in the definition container, but not anywhere else. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 632baa4c05..7eb1cac064 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -280,6 +280,41 @@ def test_getPropertyFallThrough(global_stack): global_stack.userChanges = layer_height_5 assert global_stack.getProperty("layer_height", "value") == 5 +def test_getPropertyWithResolve(global_stack): + #Define some containers for the stack. + resolve = unittest.mock.MagicMock() #Sets just the resolve for bed temperature. + resolve.getProperty = lambda key, property: 15 if (key == "material_bed_temperature" and property == "resolve") else None + resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. + resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + value = unittest.mock.MagicMock() #Sets just the value for bed temperature. + value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None + empty = unittest.mock.MagicMock() #Sets no value or resolve. + empty.getProperty = unittest.mock.MagicMock(return_value = None) + + global_stack.definition = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition. + global_stack.userChanges = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 #Value wins in other places. + global_stack.userChanges = value + assert global_stack.getProperty("material_bed_temperature", "value") == 10 #Resolve in the definition doesn't influence the value in the user changes. + global_stack.userChanges = resolve + assert global_stack.getProperty("material_bed_temperature", "value") == 15 #Falls through to definition for lack of values, but then asks the start of the stack for the resolve. + global_stack.userChanges = empty + global_stack.qualityChanges = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 #Value still wins in lower places, except definition. + global_stack.qualityChanges = empty + global_stack.quality = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.quality = empty + global_stack.material = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.material = empty + global_stack.variant = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.variant = empty + global_stack.definitionChanges = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): From 00c1c2dcf6755d05872538c2f8ca18d3b1ca12ee Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 14:40:32 +0100 Subject: [PATCH 063/816] Add test to verify that you can't change types of containers For instance, you shouldn't be able to put an instance container in the definition slot. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 33 ++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 7eb1cac064..518ad27ef7 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -6,8 +6,9 @@ import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. import cura.Settings.GlobalStack #The module we're testing. -from cura.Settings.Exceptions import TooManyExtrudersError, InvalidOperationError #To test raising these errors. +from cura.Settings.Exceptions import TooManyExtrudersError, InvalidContainerError, InvalidOperationError #To test raising these errors. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. +from UM.Settings.InstanceContainer import InstanceContainer #To test against the class InstanceContainer. import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack @@ -67,6 +68,36 @@ def test_addExtruder(global_stack): with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. global_stack.addExtruder(unittest.mock.MagicMock()) +## Tests whether the container types are properly enforced on the stack. +# +# When setting a field to have a different type of stack than intended, we +# should get an exception. +def test_constrainContainerTypes(global_stack): + definition_container = DefinitionContainer(container_id = "TestDefinitionContainer") + instance_container = InstanceContainer(container_id = "TestInstanceContainer") + + with pytest.raises(InvalidContainerError): #Putting a definition container in the user changes is not allowed. + global_stack.userChanges = definition_container + global_stack.userChanges = instance_container #Putting an instance container in the user changes is allowed. + with pytest.raises(InvalidContainerError): + global_stack.qualityChanges = definition_container + global_stack.qualityChanges = instance_container + with pytest.raises(InvalidContainerError): + global_stack.quality = definition_container + global_stack.quality = instance_container + with pytest.raises(InvalidContainerError): + global_stack.material = definition_container + global_stack.material = instance_container + with pytest.raises(InvalidContainerError): + global_stack.variant = definition_container + global_stack.variant = instance_container + with pytest.raises(InvalidContainerError): + global_stack.definitionChanges = definition_container + global_stack.definitionChanges = instance_container + with pytest.raises(InvalidContainerError): #Putting an instance container in the definition is not allowed. + global_stack.definition = instance_container + global_stack.definition = definition_container #Putting a definition container in the definition is allowed. + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), From 3d7dbe2e3b4ccfcc5cfb21469abf98a6276ca01f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 14:50:57 +0100 Subject: [PATCH 064/816] Expand constrainContainerTypes test with subclasses of container types Subclasses should behave in the same way as their parents. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 518ad27ef7..206d43475b 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -49,6 +49,14 @@ def readStack(filename): serialized = file_handle.read() return serialized +class DefinitionContainerSubClass(DefinitionContainer): + def __init__(self): + super().__init__(container_id = "SubDefinitionContainer") + +class InstanceContainerSubClass(InstanceContainer): + def __init__(self): + super().__init__(container_id = "SubInstanceContainer") + #############################START OF TEST CASES################################ ## Tests whether adding a container is properly forbidden. @@ -72,10 +80,11 @@ def test_addExtruder(global_stack): # # When setting a field to have a different type of stack than intended, we # should get an exception. -def test_constrainContainerTypes(global_stack): - definition_container = DefinitionContainer(container_id = "TestDefinitionContainer") - instance_container = InstanceContainer(container_id = "TestInstanceContainer") - +@pytest.mark.parametrize("definition_container, instance_container", [ + (DefinitionContainer(container_id = "TestDefinitionContainer"), InstanceContainer(container_id = "TestInstanceContainer")), + (DefinitionContainerSubClass(), InstanceContainerSubClass()) +]) +def test_constrainContainerTypes(definition_container, instance_container, global_stack): with pytest.raises(InvalidContainerError): #Putting a definition container in the user changes is not allowed. global_stack.userChanges = definition_container global_stack.userChanges = instance_container #Putting an instance container in the user changes is allowed. From eeb84ac27b924903c10f6a9a1169e57b481256be Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:11:25 +0100 Subject: [PATCH 065/816] Add tests for prohibited operations on extruder stacks These operations are explicitly prohibited, so they should raise an exception. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tests/Settings/TestExtruderStack.py diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py new file mode 100644 index 0000000000..f081a8cd2a --- /dev/null +++ b/tests/Settings/TestExtruderStack.py @@ -0,0 +1,28 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import pytest #This module contains automated tests. +import unittest.mock #For the mocking and monkeypatching functionality. + +import cura.Settings.ExtruderStack #The module we're testing. +from cura.Settings.Exceptions import InvalidOperationError #To check whether the correct exceptions are raised. + +## An empty extruder stack to test with. +@pytest.fixture() +def extruder_stack() -> cura.Settings.ExtruderStack.ExtruderStack: + return cura.Settings.ExtruderStack.ExtruderStack + +## Tests whether adding a container is properly forbidden. +def test_addContainer(extruder_stack): + with pytest.raises(InvalidOperationError): + extruder_stack.addContainer(unittest.mock.MagicMock()) + +## Tests whether inserting a container is properly forbidden. +def test_insertContainer(extruder_stack): + with pytest.raises(InvalidOperationError): + extruder_stack.insertContainer(0, unittest.mock.MagicMock()) + +## Tests whether removing a container is properly forbidden. +def test_removeContainer(extruder_stack): + with pytest.raises(InvalidOperationError): + extruder_stack.removeContainer(unittest.mock.MagicMock()) \ No newline at end of file From 319fd929d8b93c96fe2f66697f86f943b6bbf1ae Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:34:31 +0100 Subject: [PATCH 066/816] Add test for setProperty to set properties on user changes Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 206d43475b..5f8241054c 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -396,4 +396,16 @@ def test_removeContainer(global_stack): ## Tests whether changing the next stack is properly forbidden. def test_setNextStack(global_stack): with pytest.raises(InvalidOperationError): - global_stack.setNextStack(unittest.mock.MagicMock()) \ No newline at end of file + global_stack.setNextStack(unittest.mock.MagicMock()) + +## Tests setting properties directly on the global stack. +@pytest.mark.parametrize("key, property, value, output_value", [ + ("layer_height", "value", "0.1337", 0.1337), + ("foo", "value", "100", 100), + ("support_enabled", "value", "True", True), + ("layer_height", "default_value", 0.1337, 0.1337), + ("layer_height", "is_bright_pink", "of course", "of course") +]) +def test_setPropertyUser(key, property, value, output_value, global_stack): + global_stack.setProperty(key, value, property) + assert global_stack.userChanges.getProperty(key, property) == output_value \ No newline at end of file From 55dd17cae7f960b8d017a30e9749498bab944f24 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:42:05 +0100 Subject: [PATCH 067/816] Add tests for changing properties on specified containers Other than just user, that is. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 5f8241054c..488c768438 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -408,4 +408,33 @@ def test_setNextStack(global_stack): ]) def test_setPropertyUser(key, property, value, output_value, global_stack): global_stack.setProperty(key, value, property) - assert global_stack.userChanges.getProperty(key, property) == output_value \ No newline at end of file + assert global_stack.userChanges.getProperty(key, property) == output_value + +## Tests setting properties on specific containers on the global stack. +@pytest.mark.parametrize("target_container", [ + "user", + "quality_changes", + "quality", + "material", + "variant", + "definition_changes", + "definition" +]) +def test_setPropertyOtherContainers(target_container, global_stack): + #Other parameters that don't need to be varied. + key = "layer_height" + property = "value", + value = "0.1337", + output_value = 0.1337 + + global_stack.setProperty(key, value, property, target_container = target_container) + containers = { + "user": global_stack.userChanges, + "quality_changes": global_stack.qualityChanges, + "quality": global_stack.quality, + "material": global_stack.material, + "variant": global_stack.variant, + "definition_changes": global_stack.definition_changes, + "definition": global_stack.definition + } + assert containers[target_container].getProperty(key, property) == output_value \ No newline at end of file From 72bbb8ec0c6437cfb1470779af20af72b144db4a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:46:29 +0100 Subject: [PATCH 068/816] Also test whether adding an extruder had any effect on the extruder list Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 488c768438..94cb1f9abb 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -71,10 +71,18 @@ def test_addExtruder(global_stack): global_stack.definition = mock_definition - global_stack.addExtruder(unittest.mock.MagicMock()) - global_stack.addExtruder(unittest.mock.MagicMock()) + assert len(global_stack.extruders) == 0 + first_extruder = unittest.mock.MagicMock() + global_stack.addExtruder(first_extruder) + assert len(global_stack.extruders) == 1 + assert global_stack.extruders[0] == first_extruder + second_extruder = unittest.mock.MagicMock() + global_stack.addExtruder(second_extruder) + assert len(global_stack.extruders) == 2 + assert global_stack.extruders[1] == second_extruder with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. global_stack.addExtruder(unittest.mock.MagicMock()) + assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder. ## Tests whether the container types are properly enforced on the stack. # From f29d5e897c18a6affcd5202c7a4d555dd2ff94d3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:55:01 +0100 Subject: [PATCH 069/816] Add tests for setVariantById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 94cb1f9abb..6ae33b1e34 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -445,4 +445,18 @@ def test_setPropertyOtherContainers(target_container, global_stack): "definition_changes": global_stack.definition_changes, "definition": global_stack.definition } - assert containers[target_container].getProperty(key, property) == output_value \ No newline at end of file + assert containers[target_container].getProperty(key, property) == output_value + +## Tests adding a variant by specifying an ID of a variant that exists. +def test_setVariantByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setVariantById("some_variant") #The container registry always has a container with the ID. + + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests adding a variant by specifying an ID of a variant that doesn't exist. +def test_setVariantByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file From 928181507d938060981cdf95a50d45648bb54ec9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 15:58:32 +0100 Subject: [PATCH 070/816] Add tests for setDefinitionById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 6ae33b1e34..e6ca738260 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -401,6 +401,22 @@ def test_removeContainer(global_stack): with pytest.raises(InvalidOperationError): global_stack.removeContainer(unittest.mock.MagicMock()) +## Tests adding a definition by specifying an ID of a definition that exists. +def test_setDefinitionByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests adding a definition by specifying an ID of a definition that doesn't +# exist. +def test_setDefinitionByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setDefinitionById("some_definition") #Container registry is empty now. + ## Tests whether changing the next stack is properly forbidden. def test_setNextStack(global_stack): with pytest.raises(InvalidOperationError): @@ -454,6 +470,7 @@ def test_setVariantByIdExists(global_stack, container_registry): global_stack.setVariantById("some_variant") #The container registry always has a container with the ID. + #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry ## Tests adding a variant by specifying an ID of a variant that doesn't exist. From dbc4a90e10c482230c9b3ea9959405daa525f823 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:00:55 +0100 Subject: [PATCH 071/816] Add tests for setDefinitionChangesById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index e6ca738260..6f7e056f39 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -422,6 +422,23 @@ def test_setNextStack(global_stack): with pytest.raises(InvalidOperationError): global_stack.setNextStack(unittest.mock.MagicMock()) +## Tests adding definition changes by specifying an ID of a container that +# exists. +def test_setDefinitionChangesByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setDefinitionChangesById("some_definition_changes") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests adding definition changes by specifying an ID of a container that +# doesn't exist. +def test_setDefinitionChangesByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setDefinitionChangesById("some_definition_changes") #Container registry is empty now. + ## Tests setting properties directly on the global stack. @pytest.mark.parametrize("key, property, value, output_value", [ ("layer_height", "value", "0.1337", 0.1337), From 3e437074aec235834bee9af998328172d8334dff Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:01:56 +0100 Subject: [PATCH 072/816] Sort tests better Alphabetically. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 6f7e056f39..54988461cd 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -417,11 +417,6 @@ def test_setDefinitionByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setDefinitionById("some_definition") #Container registry is empty now. -## 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 adding definition changes by specifying an ID of a container that # exists. def test_setDefinitionChangesByIdExists(global_stack, container_registry): @@ -439,6 +434,11 @@ def test_setDefinitionChangesByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setDefinitionChangesById("some_definition_changes") #Container registry is empty now. +## 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, output_value", [ ("layer_height", "value", "0.1337", 0.1337), From d9ba848dc8231f1c6d106d1751df1f795565a070 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:15:50 +0100 Subject: [PATCH 073/816] Add tests for setMeterialById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 54988461cd..405edf3759 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -401,7 +401,7 @@ def test_removeContainer(global_stack): with pytest.raises(InvalidOperationError): global_stack.removeContainer(unittest.mock.MagicMock()) -## Tests adding a definition by specifying an ID of a definition that exists. +## Tests setting definitions by specifying an ID of a definition that exists. def test_setDefinitionByIdExists(global_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -411,13 +411,13 @@ def test_setDefinitionByIdExists(global_stack, container_registry): #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry -## Tests adding a definition by specifying an ID of a definition that doesn't +## Tests setting definitions by specifying an ID of a definition that doesn't # exist. def test_setDefinitionByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setDefinitionById("some_definition") #Container registry is empty now. -## Tests adding definition changes by specifying an ID of a container that +## Tests setting definition changes by specifying an ID of a container that # exists. def test_setDefinitionChangesByIdExists(global_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry @@ -428,12 +428,28 @@ def test_setDefinitionChangesByIdExists(global_stack, container_registry): #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry -## Tests adding definition changes by specifying an ID of a container that +## Tests setting definition changes by specifying an ID of a container that # doesn't exist. def test_setDefinitionChangesByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setDefinitionChangesById("some_definition_changes") #Container registry is empty now. +## Tests setting materials by specifying an ID of a material that exists. +def test_setMaterialByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setMaterialById("some_material") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting materials by specifying an ID of a material that doesn't +# exist. +def test_setMaterialByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setMaterialById("some_material") #Container registry is empty now. + ## Tests whether changing the next stack is properly forbidden. def test_setNextStack(global_stack): with pytest.raises(InvalidOperationError): @@ -480,7 +496,7 @@ def test_setPropertyOtherContainers(target_container, global_stack): } assert containers[target_container].getProperty(key, property) == output_value -## Tests adding a variant by specifying an ID of a variant that exists. +## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -490,7 +506,7 @@ def test_setVariantByIdExists(global_stack, container_registry): #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry -## Tests adding a variant by specifying an ID of a variant that doesn't exist. +## Tests setting variants by specifying an ID of a variant that doesn't exist. def test_setVariantByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file From 498956a190ec0f7fcd4a1d87154ce47f52043fcd Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:19:47 +0100 Subject: [PATCH 074/816] Add tests for setQualityById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 405edf3759..2f1fe143ce 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -496,6 +496,21 @@ def test_setPropertyOtherContainers(target_container, global_stack): } assert containers[target_container].getProperty(key, property) == output_value +## Tests setting qualities by specifying an ID of a quality that exists. +def test_setQualityByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setQualityById("some_quality") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting qualities by specifying an ID of a quality that doesn't exist. +def test_setQualityByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setQualityById("some_quality") #Container registry is empty now. + ## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry From 14ac41e58f2a16297a274c76f75a4b71a1cc65aa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:24:27 +0100 Subject: [PATCH 075/816] Add tests for setQualityChangesById One for when the ID exists, one for when it doesn't exist. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2f1fe143ce..54cbbee5fd 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -511,6 +511,23 @@ def test_setQualityByIdDoesntExist(global_stack): with pytest.raises(KeyError): global_stack.setQualityById("some_quality") #Container registry is empty now. +## Tests setting quality changes by specifying an ID of a quality change that +# exists. +def test_setQualityChangesByIdExists(global_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + global_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting quality changes by specifying an ID of a quality change that +# doesn't exist. +def test_setQualityChangesByIdDoesntExist(global_stack): + with pytest.raises(KeyError): + global_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. + ## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry From e881465050ef9edbf2b47071b1fa2fc27ac26c1a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:31:57 +0100 Subject: [PATCH 076/816] Add delimiter between global stuff and test cases Helps provide some oversight since this module is about to explode in size. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index f081a8cd2a..65ce872883 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -12,6 +12,8 @@ from cura.Settings.Exceptions import InvalidOperationError #To check whether the def extruder_stack() -> cura.Settings.ExtruderStack.ExtruderStack: return cura.Settings.ExtruderStack.ExtruderStack +#############################START OF TEST CASES################################ + ## Tests whether adding a container is properly forbidden. def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): From dea86ca53507a1958dc7de87ad46274e2996990d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 16:57:48 +0100 Subject: [PATCH 077/816] Add tests for deserialising a stack with user changes Code is mostly copied over from the global stack, which should work in a similar way. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 58 ++++++++++++++++++++- tests/Settings/stacks/Complete.extruder.cfg | 13 +++++ tests/Settings/stacks/OnlyUser.extruder.cfg | 8 +++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/Settings/stacks/Complete.extruder.cfg create mode 100644 tests/Settings/stacks/OnlyUser.extruder.cfg diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 65ce872883..adfaac3766 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -1,16 +1,52 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +import os.path #To find the test stack files. import pytest #This module contains automated tests. import unittest.mock #For the mocking and monkeypatching functionality. +import UM.Settings.ContainerRegistry #To create empty instance containers. +import UM.Settings.ContainerStack #To set the container registry the container stacks use. +from UM.Settings.DefinitionContainer import DefinitionContainer #To check against the class of DefinitionContainer. import cura.Settings.ExtruderStack #The module we're testing. from cura.Settings.Exceptions import InvalidOperationError #To check whether the correct exceptions are raised. +## Fake container registry that always provides all containers you ask of. +@pytest.fixture() +def container_registry(): + registry = unittest.mock.MagicMock() + def findContainers(id = None): + if not id: + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer("test_container")] + else: + return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + registry.findContainers = findContainers + return registry + ## An empty extruder stack to test with. @pytest.fixture() def extruder_stack() -> cura.Settings.ExtruderStack.ExtruderStack: - return cura.Settings.ExtruderStack.ExtruderStack + return cura.Settings.ExtruderStack.ExtruderStack("TestStack") + +## Place-in function for findContainer that finds only containers that start +# with "some_". +def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): + if container_id.startswith("some_"): + return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) + if container_type == DefinitionContainer: + definition_mock = unittest.mock.MagicMock() + definition_mock.getId = unittest.mock.MagicMock(return_value = "some_definition") #getId returns some_definition. + return definition_mock + +## Helper function to read the contents of a container stack in the test +# stack folder. +# +# \param filename The name of the file in the "stacks" folder to read from. +# \return The contents of that file. +def readStack(filename): + with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: + serialized = file_handle.read() + return serialized #############################START OF TEST CASES################################ @@ -19,6 +55,26 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +@pytest.mark.parametrize("filename, user_changes_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyUser.extruder.cfg", "some_instance"), + ("Complete.extruder.cfg", "some_user_changes") +]) +def test_deserializeUserChanges(filename, user_changes_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.userChanges.getId() == user_changes_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether inserting a container is properly forbidden. def test_insertContainer(extruder_stack): with pytest.raises(InvalidOperationError): diff --git a/tests/Settings/stacks/Complete.extruder.cfg b/tests/Settings/stacks/Complete.extruder.cfg new file mode 100644 index 0000000000..f7f613991a --- /dev/null +++ b/tests/Settings/stacks/Complete.extruder.cfg @@ -0,0 +1,13 @@ +[general] +version = 3 +name = Complete +id = Complete + +[containers] +0 = some_user_changes +1 = some_quality_changes +2 = some_quality +3 = some_material +4 = some_variant +5 = some_definition_changes +6 = some_definition diff --git a/tests/Settings/stacks/OnlyUser.extruder.cfg b/tests/Settings/stacks/OnlyUser.extruder.cfg new file mode 100644 index 0000000000..31371d2c51 --- /dev/null +++ b/tests/Settings/stacks/OnlyUser.extruder.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only User +id = OnlyUser + +[containers] +0 = some_instance +6 = some_definition From 73326ae53dcf247b86d281e201ef31f191809f4f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:03:29 +0100 Subject: [PATCH 078/816] Extruders don't have definition changes So remove them from our test extruder stacks. Contributes to issue CURA-3497. --- tests/Settings/stacks/Complete.extruder.cfg | 3 +-- tests/Settings/stacks/ExtruderLegacy.stack.cfg | 2 +- tests/Settings/stacks/Left.extruder.cfg | 2 +- tests/Settings/stacks/OnlyUser.extruder.cfg | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/Settings/stacks/Complete.extruder.cfg b/tests/Settings/stacks/Complete.extruder.cfg index f7f613991a..789c0978f3 100644 --- a/tests/Settings/stacks/Complete.extruder.cfg +++ b/tests/Settings/stacks/Complete.extruder.cfg @@ -9,5 +9,4 @@ id = Complete 2 = some_quality 3 = some_material 4 = some_variant -5 = some_definition_changes -6 = some_definition +5 = some_definition diff --git a/tests/Settings/stacks/ExtruderLegacy.stack.cfg b/tests/Settings/stacks/ExtruderLegacy.stack.cfg index e2cdd1c08c..41c8ac22a2 100644 --- a/tests/Settings/stacks/ExtruderLegacy.stack.cfg +++ b/tests/Settings/stacks/ExtruderLegacy.stack.cfg @@ -8,4 +8,4 @@ type = extruder [containers] 3 = some_instance -6 = some_definition +5 = some_definition diff --git a/tests/Settings/stacks/Left.extruder.cfg b/tests/Settings/stacks/Left.extruder.cfg index fcc9500659..8ba45d6754 100644 --- a/tests/Settings/stacks/Left.extruder.cfg +++ b/tests/Settings/stacks/Left.extruder.cfg @@ -5,4 +5,4 @@ id = Left [containers] 3 = some_instance -6 = some_definition +5 = some_definition diff --git a/tests/Settings/stacks/OnlyUser.extruder.cfg b/tests/Settings/stacks/OnlyUser.extruder.cfg index 31371d2c51..abf812a859 100644 --- a/tests/Settings/stacks/OnlyUser.extruder.cfg +++ b/tests/Settings/stacks/OnlyUser.extruder.cfg @@ -5,4 +5,4 @@ id = OnlyUser [containers] 0 = some_instance -6 = some_definition +5 = some_definition From 91814a827bef1a672aab8edacbeb2e0122c49275 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:05:06 +0100 Subject: [PATCH 079/816] Line up parameters of test cases Better oversight. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index adfaac3766..da832a9403 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,11 +55,11 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) -@pytest.mark.parametrize("filename, user_changes_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyUser.extruder.cfg", "some_instance"), - ("Complete.extruder.cfg", "some_user_changes") +@pytest.mark.parametrize("filename, user_changes_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyUser.extruder.cfg", "some_instance"), + ("Complete.extruder.cfg", "some_user_changes") ]) def test_deserializeUserChanges(filename, user_changes_id, container_registry, extruder_stack): serialized = readStack(filename) From 71a946d1b9609bdd62ecbc934ac3245c9500b9e1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:08:34 +0100 Subject: [PATCH 080/816] Add tests for deserialising extruders with quality changes Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 20 +++++++++++++++++++ .../stacks/OnlyQualityChanges.extruder.cfg | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/Settings/stacks/OnlyQualityChanges.extruder.cfg diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index da832a9403..71e94d522f 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,6 +55,26 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +@pytest.mark.parametrize("filename, quality_changes_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyQualityChanges.extruder.cfg", "some_instance"), + ("Complete.extruder.cfg", "some_quality_changes") +]) +def test_deserializeQualityChanges(filename, quality_changes_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.qualityChanges.getId() == quality_changes_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + @pytest.mark.parametrize("filename, user_changes_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), diff --git a/tests/Settings/stacks/OnlyQualityChanges.extruder.cfg b/tests/Settings/stacks/OnlyQualityChanges.extruder.cfg new file mode 100644 index 0000000000..653bad840c --- /dev/null +++ b/tests/Settings/stacks/OnlyQualityChanges.extruder.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Quality Changes +id = OnlyQualityChanges + +[containers] +1 = some_instance +5 = some_definition From 9cb7c30fcb096edfc23bd31ae8351081c8e3d9ee Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:13:32 +0100 Subject: [PATCH 081/816] Add tests for deserialising extruders with quality Only the greatest extruders with actual quality are deserialised... Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 20 +++++++++++++++++++ .../Settings/stacks/OnlyQuality.extruder.cfg | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/Settings/stacks/OnlyQuality.extruder.cfg diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 71e94d522f..5b50d03b2b 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,6 +55,26 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +@pytest.mark.parametrize("filename, quality_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyQuality.extruder.cfg", "some_instance"), + ("Complete.extruder.cfg", "some_quality") +]) +def test_deserializeQuality(filename, quality_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.quality.getId() == quality_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + @pytest.mark.parametrize("filename, quality_changes_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), diff --git a/tests/Settings/stacks/OnlyQuality.extruder.cfg b/tests/Settings/stacks/OnlyQuality.extruder.cfg new file mode 100644 index 0000000000..aaf7fb30c5 --- /dev/null +++ b/tests/Settings/stacks/OnlyQuality.extruder.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Quality +id = OnlyQuality + +[containers] +2 = some_instance +5 = some_definition From bbd0ca7b9f737e3a8c59fc719cbebbfda799f5ec Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:17:41 +0100 Subject: [PATCH 082/816] Add tests for deserialising extruders with material Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 21 +++++++++++++++++++ .../stacks/OnlyDefinition.extruder.cfg | 7 +++++++ .../Settings/stacks/OnlyMaterial.extruder.cfg | 8 +++++++ 3 files changed, 36 insertions(+) create mode 100644 tests/Settings/stacks/OnlyDefinition.extruder.cfg create mode 100644 tests/Settings/stacks/OnlyMaterial.extruder.cfg diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 5b50d03b2b..1d16823040 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,6 +55,27 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +@pytest.mark.parametrize("filename, material_id", [ + ("Left.extruder.cfg", "some_instance"), + ("ExtruderLegacy.stack.cfg", "some_instance"), + ("OnlyMaterial.extruder.cfg", "some_instance"), + ("OnlyDefinition.extruder.cfg", "empty"), + ("Complete.extruder.cfg", "some_material") +]) +def test_deserializeMaterial(filename, material_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.material.getId() == material_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + @pytest.mark.parametrize("filename, quality_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), diff --git a/tests/Settings/stacks/OnlyDefinition.extruder.cfg b/tests/Settings/stacks/OnlyDefinition.extruder.cfg new file mode 100644 index 0000000000..e58512b27f --- /dev/null +++ b/tests/Settings/stacks/OnlyDefinition.extruder.cfg @@ -0,0 +1,7 @@ +[general] +version = 3 +name = Only Definition +id = OnlyDefinition + +[containers] +5 = some_definition diff --git a/tests/Settings/stacks/OnlyMaterial.extruder.cfg b/tests/Settings/stacks/OnlyMaterial.extruder.cfg new file mode 100644 index 0000000000..49a9d12389 --- /dev/null +++ b/tests/Settings/stacks/OnlyMaterial.extruder.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Material +id = OnlyMaterial + +[containers] +3 = some_instance +5 = some_definition From df2ae12ca944349bf745ba7e3cda025ac63154cf Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:21:47 +0100 Subject: [PATCH 083/816] Add tests for deserialising extruders with variants Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 20 +++++++++++++++++++ .../Settings/stacks/OnlyVariant.extruder.cfg | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 tests/Settings/stacks/OnlyVariant.extruder.cfg diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 1d16823040..e7619f86cd 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -136,6 +136,26 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry, e #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +@pytest.mark.parametrize("filename, variant_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyVariant.extruder.cfg", "some_instance"), + ("Complete.extruder.cfg", "some_variant") +]) +def test_deserializeVariant(filename, variant_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.variant.getId() == variant_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + ## Tests whether inserting a container is properly forbidden. def test_insertContainer(extruder_stack): with pytest.raises(InvalidOperationError): diff --git a/tests/Settings/stacks/OnlyVariant.extruder.cfg b/tests/Settings/stacks/OnlyVariant.extruder.cfg new file mode 100644 index 0000000000..a31997a6fd --- /dev/null +++ b/tests/Settings/stacks/OnlyVariant.extruder.cfg @@ -0,0 +1,8 @@ +[general] +version = 3 +name = Only Variant +id = OnlyVariant + +[containers] +4 = some_instance +5 = some_definition From e09f41e485b14a5f6840acab63af45d3d9329d15 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:23:56 +0100 Subject: [PATCH 084/816] Add tests for deserialising extruders with definitions All extruders have definitions, but this one specifically tests whether the ID is correct. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index e7619f86cd..0b7d8d92b2 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,6 +55,26 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +@pytest.mark.parametrize("filename, definition_id", [ + ("Left.extruder.cfg", "empty"), + ("ExtruderLegacy.stack.cfg", "empty"), + ("OnlyDefinition.extruder.cfg", "empty"), + ("Complete.extruder.cfg", "some_definition") +]) +def test_deserializeDefinition(filename, definition_id, container_registry, extruder_stack): + serialized = readStack(filename) + + #Mock the loading of the instance containers. + extruder_stack.findContainer = findSomeContainers + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + + extruder_stack.deserialize(serialized) + assert extruder_stack.definition.getId() == definition_id + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + @pytest.mark.parametrize("filename, material_id", [ ("Left.extruder.cfg", "some_instance"), ("ExtruderLegacy.stack.cfg", "some_instance"), From ccb9c07909b7da55b4f0dd30942784a7694044af Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:24:35 +0100 Subject: [PATCH 085/816] Align parameters of material deserialising test For readability. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 0b7d8d92b2..51891161f8 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -75,12 +75,12 @@ def test_deserializeDefinition(filename, definition_id, container_registry, extr #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry -@pytest.mark.parametrize("filename, material_id", [ - ("Left.extruder.cfg", "some_instance"), - ("ExtruderLegacy.stack.cfg", "some_instance"), - ("OnlyMaterial.extruder.cfg", "some_instance"), +@pytest.mark.parametrize("filename, material_id", [ + ("Left.extruder.cfg", "some_instance"), + ("ExtruderLegacy.stack.cfg", "some_instance"), + ("OnlyMaterial.extruder.cfg", "some_instance"), ("OnlyDefinition.extruder.cfg", "empty"), - ("Complete.extruder.cfg", "some_material") + ("Complete.extruder.cfg", "some_material") ]) def test_deserializeMaterial(filename, material_id, container_registry, extruder_stack): serialized = readStack(filename) From e3932cb21cda355e8396f2687c991f9890c39195 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:27:46 +0100 Subject: [PATCH 086/816] Document deserialize test cases Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 51891161f8..a3a805d969 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -55,6 +55,7 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +## Tests whether definitions are being read properly from an extruder stack. @pytest.mark.parametrize("filename, definition_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), @@ -75,6 +76,7 @@ def test_deserializeDefinition(filename, definition_id, container_registry, extr #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether materials are being read properly from an extruder stack. @pytest.mark.parametrize("filename, material_id", [ ("Left.extruder.cfg", "some_instance"), ("ExtruderLegacy.stack.cfg", "some_instance"), @@ -96,6 +98,7 @@ def test_deserializeMaterial(filename, material_id, container_registry, extruder #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether qualities are being read properly from an extruder stack. @pytest.mark.parametrize("filename, quality_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), @@ -116,6 +119,8 @@ def test_deserializeQuality(filename, quality_id, container_registry, extruder_s #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether quality changes are being read properly from an extruder +# stack. @pytest.mark.parametrize("filename, quality_changes_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), @@ -136,6 +141,7 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether user changes are being read properly from an extruder stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), @@ -156,6 +162,7 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry, e #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether variants are being read properly from an extruder stack. @pytest.mark.parametrize("filename, variant_id", [ ("Left.extruder.cfg", "empty"), ("ExtruderLegacy.stack.cfg", "empty"), From 69c53dcd73041dc53a97a37a88223e1906dc0046 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:32:33 +0100 Subject: [PATCH 087/816] Add test for constraining container types to certain slots Only the definition slot must hold a definition container. All the rest must hold an instance container. This fails currently because the properties don't even exist. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 39 ++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index a3a805d969..94755eaf6b 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -8,8 +8,9 @@ import unittest.mock #For the mocking and monkeypatching functionality. import UM.Settings.ContainerRegistry #To create empty instance containers. import UM.Settings.ContainerStack #To set the container registry the container stacks use. from UM.Settings.DefinitionContainer import DefinitionContainer #To check against the class of DefinitionContainer. +from UM.Settings.InstanceContainer import InstanceContainer #To check against the class of InstanceContainer. import cura.Settings.ExtruderStack #The module we're testing. -from cura.Settings.Exceptions import InvalidOperationError #To check whether the correct exceptions are raised. +from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. ## Fake container registry that always provides all containers you ask of. @pytest.fixture() @@ -48,6 +49,14 @@ def readStack(filename): serialized = file_handle.read() return serialized +class DefinitionContainerSubClass(DefinitionContainer): + def __init__(self): + super().__init__(container_id = "SubDefinitionContainer") + +class InstanceContainerSubClass(InstanceContainer): + def __init__(self): + super().__init__(container_id = "SubInstanceContainer") + #############################START OF TEST CASES################################ ## Tests whether adding a container is properly forbidden. @@ -55,6 +64,34 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) +## Tests whether the container types are properly enforced on the stack. +# +# When setting a field to have a different type of stack than intended, we +# should get an exception. +@pytest.mark.parametrize("definition_container, instance_container", [ + (DefinitionContainer(container_id = "TestDefinitionContainer"), InstanceContainer(container_id = "TestInstanceContainer")), + (DefinitionContainerSubClass(), InstanceContainerSubClass()) +]) +def test_constrainContainerTypes(definition_container, instance_container, extruder_stack): + with pytest.raises(InvalidContainerError): #Putting a definition container in the user changes is not allowed. + extruder_stack.userChanges = definition_container + extruder_stack.userChanges = instance_container #Putting an instance container in the user changes is allowed. + with pytest.raises(InvalidContainerError): + extruder_stack.qualityChanges = definition_container + extruder_stack.qualityChanges = instance_container + with pytest.raises(InvalidContainerError): + extruder_stack.quality = definition_container + extruder_stack.quality = instance_container + with pytest.raises(InvalidContainerError): + extruder_stack.material = definition_container + extruder_stack.material = instance_container + with pytest.raises(InvalidContainerError): + extruder_stack.variant = definition_container + extruder_stack.variant = instance_container + with pytest.raises(InvalidContainerError): #Putting an instance container in the definition is not allowed. + extruder_stack.definition = instance_container + extruder_stack.definition = definition_container #Putting a definition container in the definition is allowed. + ## Tests whether definitions are being read properly from an extruder stack. @pytest.mark.parametrize("filename, definition_id", [ ("Left.extruder.cfg", "empty"), From 7913ff9bf262c3ffadbc42188427431c530588fc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:35:31 +0100 Subject: [PATCH 088/816] Add test for deserializing with a missing container A container is missing in the registry, so it should raise an exception. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 94755eaf6b..1e54c7251e 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -135,6 +135,19 @@ def test_deserializeMaterial(filename, material_id, container_registry, extruder #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests that when an extruder is loaded with an unknown instance, it raises an +# exception. +def test_deserializeMissingContainer(extruder_stack): + serialized = readStack("Left.extruder.cfg") + with pytest.raises(Exception): + extruder_stack.deserialize(serialized) + try: + extruder_stack.deserialize(serialized) + except Exception as e: + #Must be exactly Exception, not one of its subclasses, since that is what gets raised when a stack has an unknown container. + #That's why we can't use pytest.raises. + assert type(e) == Exception + ## Tests whether qualities are being read properly from an extruder stack. @pytest.mark.parametrize("filename, quality_id", [ ("Left.extruder.cfg", "empty"), From 2936b9bf24f78a842b9aceef1c8088782736a7ff Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:37:23 +0100 Subject: [PATCH 089/816] Fail deserialize test if missing container doesn't raise an exception If it raised an exception, we were checking whether it was the proper exception. But if it wasn't raising an exception we weren't checking anything. That's fixed now (and the header of the function is improved a bit too). Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 54cbbee5fd..ef60e315af 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -283,8 +283,12 @@ def test_deserializeDefinition(filename, definition_id, container_registry, glob #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry -def test_deserializeMissingContainer(container_registry, global_stack): +## Tests that when a global stack is loaded with an unknown instance, it raises +# an exception. +def test_deserializeMissingContainer(global_stack): serialized = readStack("Global.global.cfg") + with pytest.raises(Exception): + global_stack.deserialize(serialized) try: global_stack.deserialize(serialized) except Exception as e: From 78e78ac1474d0c875f1e6eb8e3e051291ede508e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:40:41 +0100 Subject: [PATCH 090/816] Add test for settings behaving like a stack The stack order is very fixed here. Is that bad? Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 1e54c7251e..7ca351e1be 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -233,6 +233,39 @@ def test_deserializeVariant(filename, variant_id, container_registry, extruder_s #Restore. UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether getProperty properly applies the stack-like behaviour on its +# containers. +def test_getPropertyFallThrough(extruder_stack): + #A few instance container mocks to put in the stack. + layer_height_5 = unittest.mock.MagicMock() #Sets layer height to 5. + layer_height_5.getProperty = lambda key, property: 5 if (key == "layer_height" and property == "value") else None + layer_height_5.hasProperty = lambda key: key == "layer_height" + layer_height_10 = unittest.mock.MagicMock() #Sets layer height to 10. + layer_height_10.getProperty = lambda key, property: 10 if (key == "layer_height" and property == "value") else None + layer_height_10.hasProperty = lambda key: key == "layer_height" + no_layer_height = unittest.mock.MagicMock() #No settings at all. + no_layer_height.getProperty = lambda key, property: None + no_layer_height.hasProperty = lambda key: False + + extruder_stack.userChanges = no_layer_height + extruder_stack.qualityChanges = no_layer_height + extruder_stack.quality = no_layer_height + extruder_stack.material = no_layer_height + extruder_stack.variant = no_layer_height + extruder_stack.definition = layer_height_5 #Here it is! + + assert extruder_stack.getProperty("layer_height", "value") == 5 + extruder_stack.variant = layer_height_10 + assert extruder_stack.getProperty("layer_height", "value") == 10 + extruder_stack.material = layer_height_5 + assert extruder_stack.getProperty("layer_height", "value") == 5 + extruder_stack.quality = layer_height_10 + assert extruder_stack.getProperty("layer_height", "value") == 10 + extruder_stack.qualityChanges = layer_height_5 + assert extruder_stack.getProperty("layer_height", "value") == 5 + extruder_stack.userChanges = layer_height_10 + assert extruder_stack.getProperty("layer_height", "value") == 10 + ## Tests whether inserting a container is properly forbidden. def test_insertContainer(extruder_stack): with pytest.raises(InvalidOperationError): From e4952ac8c52c722cf8d56100d62defe4f4a451e8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:44:22 +0100 Subject: [PATCH 091/816] Add tests for setDefinitionById One for when the ID exists, and one for when it doesn't. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 7ca351e1be..e6d53b7b1f 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -274,4 +274,20 @@ def test_insertContainer(extruder_stack): ## Tests whether removing a container is properly forbidden. def test_removeContainer(extruder_stack): with pytest.raises(InvalidOperationError): - extruder_stack.removeContainer(unittest.mock.MagicMock()) \ No newline at end of file + extruder_stack.removeContainer(unittest.mock.MagicMock()) + +## Tests setting definitions by specifying an ID of a definition that exists. +def test_setDefinitionByIdExists(extruder_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + extruder_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting definitions by specifying an ID of a definition that doesn't +# exist. +def test_setDefinitionByIdDoesntExist(extruder_stack): + with pytest.raises(KeyError): + extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. \ No newline at end of file From eb7035db4514909622f37defee0cd8b8c3bc0307 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:46:59 +0100 Subject: [PATCH 092/816] Add tests for setMaterialById One for when the ID exists, and one for when it doesn't. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index e6d53b7b1f..2327e2d5bb 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -290,4 +290,20 @@ def test_setDefinitionByIdExists(extruder_stack, container_registry): # exist. def test_setDefinitionByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): - extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. \ No newline at end of file + extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. + +## Tests setting materials by specifying an ID of a material that exists. +def test_setMaterialByIdExists(extruder_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + extruder_stack.setMaterialById("some_material") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting materials by specifying an ID of a material that doesn't +# exist. +def test_setMaterialByIdDoesntExist(extruder_stack): + with pytest.raises(KeyError): + extruder_stack.setMaterialById("some_material") #Container registry is empty now. \ No newline at end of file From 393ee7838a990fa63c2ac06251ef36dc79e1557d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:48:27 +0100 Subject: [PATCH 093/816] Add tests for setQualityById One for when the ID exists, and one for when it doesn't. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 2327e2d5bb..3a74f36efa 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -306,4 +306,19 @@ def test_setMaterialByIdExists(extruder_stack, container_registry): # exist. def test_setMaterialByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): - extruder_stack.setMaterialById("some_material") #Container registry is empty now. \ No newline at end of file + extruder_stack.setMaterialById("some_material") #Container registry is empty now. + +## Tests setting qualities by specifying an ID of a quality that exists. +def test_setQualityByIdExists(extruder_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + extruder_stack.setQualityById("some_quality") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting qualities by specifying an ID of a quality that doesn't exist. +def test_setQualityByIdDoesntExist(extruder_stack): + with pytest.raises(KeyError): + extruder_stack.setQualityById("some_quality") #Container registry is empty now. \ No newline at end of file From a5d91139ef7424eac05a00ba3ff4d58a9337c981 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:49:14 +0100 Subject: [PATCH 094/816] Add tests for setQualityChangesById One for when the ID exists, and one for when it doesn't. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 3a74f36efa..12c0ae08a2 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -321,4 +321,21 @@ def test_setQualityByIdExists(extruder_stack, container_registry): ## Tests setting qualities by specifying an ID of a quality that doesn't exist. def test_setQualityByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): - extruder_stack.setQualityById("some_quality") #Container registry is empty now. \ No newline at end of file + extruder_stack.setQualityById("some_quality") #Container registry is empty now. + +## Tests setting quality changes by specifying an ID of a quality change that +# exists. +def test_setQualityChangesByIdExists(extruder_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + extruder_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting quality changes by specifying an ID of a quality change that +# doesn't exist. +def test_setQualityChangesByIdDoesntExist(extruder_stack): + with pytest.raises(KeyError): + extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. \ No newline at end of file From fe95755f751e031ae6223026382e5b50079225b7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:50:14 +0100 Subject: [PATCH 095/816] Add tests for setVariantById One for when the ID exists, and one for when it doesn't. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 12c0ae08a2..eeae956328 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -338,4 +338,19 @@ def test_setQualityChangesByIdExists(extruder_stack, container_registry): # doesn't exist. def test_setQualityChangesByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): - extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. \ No newline at end of file + extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. + +## Tests setting variants by specifying an ID of a variant that exists. +def test_setVariantByIdExists(extruder_stack, container_registry): + original_container_registry = UM.Settings.ContainerStack._containerRegistry + UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. + + extruder_stack.setVariantById("some_variant") #The container registry always has a container with the ID. + + #Restore. + UM.Settings.ContainerStack._containerRegistry = original_container_registry + +## Tests setting variants by specifying an ID of a variant that doesn't exist. +def test_setVariantByIdDoesntExist(extruder_stack): + with pytest.raises(KeyError): + extruder_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file From 129f01aa249a0f2184ede32e1d141732cdf86862 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:52:53 +0100 Subject: [PATCH 096/816] Add tests for setting property on user changes of extruder stack Setting a property directly should put it in the user changes. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index eeae956328..141719b0aa 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -308,6 +308,18 @@ def test_setMaterialByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setMaterialById("some_material") #Container registry is empty now. +## Tests setting properties directly on the extruder stack. +@pytest.mark.parametrize("key, property, value, output_value", [ + ("layer_height", "value", "0.1337", 0.1337), + ("foo", "value", "100", 100), + ("support_enabled", "value", "True", True), + ("layer_height", "default_value", 0.1337, 0.1337), + ("layer_height", "is_bright_pink", "of course", "of course") +]) +def test_setPropertyUser(key, property, value, output_value, extruder_stack): + extruder_stack.setProperty(key, value, property) + assert extruder_stack.userChanges.getProperty(key, property) == output_value + ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry From ccd22ef36d03a91b0507f1d7b27695dc8ae5b698 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 24 Mar 2017 17:55:21 +0100 Subject: [PATCH 097/816] Add tests for setting property on other parts of extruder stack It then asks the property back and sees if it was changed. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 141719b0aa..41ab521015 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -320,6 +320,34 @@ def test_setPropertyUser(key, property, value, output_value, extruder_stack): extruder_stack.setProperty(key, value, property) assert extruder_stack.userChanges.getProperty(key, property) == output_value +## Tests setting properties on specific containers on the extruder stack. +@pytest.mark.parametrize("target_container", [ + "user", + "quality_changes", + "quality", + "material", + "variant", + "definition" +]) +def test_setPropertyOtherContainers(target_container, extruder_stack): + #Other parameters that don't need to be varied. + key = "layer_height" + property = "value", + value = "0.1337", + output_value = 0.1337 + + extruder_stack.setProperty(key, value, property, target_container = target_container) + containers = { + "user": extruder_stack.userChanges, + "quality_changes": extruder_stack.qualityChanges, + "quality": extruder_stack.quality, + "material": extruder_stack.material, + "variant": extruder_stack.variant, + "definition_changes": extruder_stack.definition_changes, + "definition": extruder_stack.definition + } + assert containers[target_container].getProperty(key, property) == output_value + ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry From dd8ea6175c409c8f27310305cfd7425b567ec1a3 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 00:03:58 +0100 Subject: [PATCH 098/816] Add properties for user changes etc. to ExtruderStack --- cura/Settings/ExtruderStack.py | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index edcce90693..3241268781 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -1,6 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot + from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack from UM.Settings.ContainerRegistry import ContainerRegistry @@ -9,6 +11,30 @@ class ExtruderStack(ContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) + @pyqtProperty(InstanceContainer) + def userChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.UserChanges] + + @pyqtProperty(InstanceContainer) + def qualityChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.QualityChanges] + + @pyqtProperty(InstanceContainer) + def quality(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Quality] + + @pyqtProperty(InstanceContainer) + def material(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Material] + + @pyqtProperty(InstanceContainer) + def variant(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Variant] + + @pyqtProperty(DefinitionContainer) + def definition(self) -> DefinitionContainer: + return self._containers[_ContainerIndexes.Definition] + extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", comment = "Cura Extruder Stack", @@ -17,3 +43,12 @@ extruder_stack_mime = MimeType( MimeTypeDatabase.addMimeType(extruder_stack_mime) ContainerRegistry.addContainerTypeByName(ExtruderStack, "extruder_stack", extruder_stack_mime.name) + +class _ContainerIndexes: + UserChanges = 0 + QualityChanges = 1 + Quality = 2 + Material = 3 + Variant = 4 + Definition = 5 + From 5196ea695cca39aab53e0e23c707dfd7bb819760 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 23 Mar 2017 00:11:44 +0100 Subject: [PATCH 099/816] Add a notify signal to all container properties in GlobalStack Contributes to CURA-3497 --- cura/Settings/GlobalStack.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index e1c24cf9e2..eb67c12499 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -22,39 +22,43 @@ class GlobalStack(ContainerStack): self._extruders = [] - @pyqtProperty(InstanceContainer) + self.containersChanged.connect(self._onContainersChanged) + + pyqtContainersChanged = pyqtSignal() + + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] def setQualtiyChanges(self, new_quality_changes: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) - @pyqtProperty(InstanceContainer) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def qualityChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.QualityChanges] def setQuality(self, new_quality: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Quality, new_quality) - @pyqtProperty(InstanceContainer) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def quality(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Quality] def setMaterial(self, new_material: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Material, new_material) - @pyqtProperty(InstanceContainer) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def material(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Material] def setVariant(self, new_variant: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Variant, new_variant) - @pyqtProperty(InstanceContainer) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def variant(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Variant] - @pyqtProperty(InstanceContainer) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def definitionChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.DefinitionChanges] @@ -165,6 +169,8 @@ class GlobalStack(ContainerStack): self._containers = new_containers + def _onContainersChanged(self, container): + self.pyqtContainersChanged.emit() ## private: global_stack_mime = MimeType( From 39803cf7dd5d7cd583255d860e9922a0d69ae6cd Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:52:16 +0200 Subject: [PATCH 100/816] Add missing imports to Extruder/GlobalStack --- cura/Settings/ExtruderStack.py | 2 ++ cura/Settings/GlobalStack.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 3241268781..1a437128a9 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -6,6 +6,8 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.DefinitionContainer import DefinitionContainer class ExtruderStack(ContainerStack): def __init__(self, container_id, *args, **kwargs): diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index eb67c12499..a6cbcd2b33 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -1,7 +1,9 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from PyQt5.QtCore import pyqtProperty, pyqtSlot +from typing import Any + +from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from UM.Decorators import override From b6fafb06ed2cb4830b520888d61d5b2045c72ee1 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:52:38 +0200 Subject: [PATCH 101/816] Ensure we initialize the list of containers for GlobalStack --- cura/Settings/GlobalStack.py | 60 ++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index a6cbcd2b33..b0044b7daa 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -22,6 +22,7 @@ class GlobalStack(ContainerStack): self._empty_instance_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + self._containers = [self._empty_instance_container for i in range(len(_ContainerIndexes.IndexTypeMap))] self._extruders = [] self.containersChanged.connect(self._onContainersChanged) @@ -32,9 +33,16 @@ class GlobalStack(ContainerStack): def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] - def setQualtiyChanges(self, new_quality_changes: InstanceContainer) -> None: + def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + def setQualityChangesById(self, new_quality_changes_id: str) -> None: + quality_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_changes_id) + if quality_changes: + self.setQualityChanges(quality_changes[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_changes_id)) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def qualityChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.QualityChanges] @@ -42,6 +50,13 @@ class GlobalStack(ContainerStack): def setQuality(self, new_quality: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Quality, new_quality) + def setQualityById(self, new_quality_id: str) -> None: + quality = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) + if quality: + self.setQuality(quality[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def quality(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Quality] @@ -49,6 +64,13 @@ class GlobalStack(ContainerStack): def setMaterial(self, new_material: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Material, new_material) + def setMaterialById(self, new_material_id: str) -> None: + material = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) + if material: + self.setMaterial(material[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def material(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Material] @@ -56,10 +78,27 @@ class GlobalStack(ContainerStack): def setVariant(self, new_variant: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Variant, new_variant) + def setVariantById(self, new_variant_id: str) -> None: + variant = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) + if variant: + self.setVariant(variant[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def variant(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Variant] + def setDefinitionChanges(self, new_definition_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.DefinitionChanges, new_definition_changes) + + def setDefinitionChangesById(self, new_definition_changes_id: str) -> None: + new_definition_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_definition_changes_id) + if new_definition_changes: + self.setDefinitionChanges(new_definition_changes[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_changes_id)) + @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) def definitionChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.DefinitionChanges] @@ -97,7 +136,7 @@ class GlobalStack(ContainerStack): ## Overridden from ContainerStack @override(ContainerStack) - def getProperty(self, key: str, property_name: str): + def getProperty(self, key: str, property_name: str) -> Any: if property_name == "value": if not self.hasUserValue(key): resolve = super().getProperty(key, "resolve") @@ -106,6 +145,13 @@ class GlobalStack(ContainerStack): return super().getProperty(key, property_name) + def setProperty(self, key: str, property_name: str, new_value: Any, target_container: str = "user") -> None: + container_index = _ContainerIndexes.indexForType(target_container) + if container_index != -1: + self._containers[container_index].setProperty(key, property_name, new_value) + else: + raise IndexError("Invalid target container {type}".format(type = target_container)) + ## Overridden from ContainerStack @override(ContainerStack) def setNextStack(self, next_stack: ContainerStack) -> None: @@ -145,6 +191,7 @@ class GlobalStack(ContainerStack): super().deserialize(contents) new_containers = self._containers.copy() + print("containers before", new_containers) while(len(new_containers) < len(_ContainerIndexes.IndexTypeMap)): new_containers.append(self._empty_instance_container) @@ -169,6 +216,7 @@ class GlobalStack(ContainerStack): if actual_container: new_containers[index] = actual_container + print("containers after", new_containers) self._containers = new_containers def _onContainersChanged(self, container): @@ -204,3 +252,11 @@ class _ContainerIndexes: DefinitionChanges: "definition_changes", Definition: "definition", } + + @classmethod + def indexForType(cls, type_name: str) -> int: + for key, value in cls.IndexTypeMap.items(): + if value == type_name: + return key + + return -1 From 385d8ac5b517fdcb04141e152d849a0faaa957a6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:53:30 +0200 Subject: [PATCH 102/816] Properly mock Container and ContainerRegistry objects in Global stack test --- tests/Settings/TestGlobalStack.py | 46 +++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ef60e315af..bccb02e8cc 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -4,6 +4,8 @@ import os.path #To find the test files. import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. +import copy +import functools import cura.Settings.GlobalStack #The module we're testing. from cura.Settings.Exceptions import TooManyExtrudersError, InvalidContainerError, InvalidOperationError #To test raising these errors. @@ -12,17 +14,49 @@ from UM.Settings.InstanceContainer import InstanceContainer #To test against the import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack +class MockContainer: + def __init__(self, container_id, type = "mock"): + self._id = container_id + self._type = type + + def getId(self): + return self._id + + def getMetaDataEntry(self, entry, default = None): + print(entry, self._type) + if entry == "type": + return self._type + + return default + + propertyChanged = unittest.mock.MagicMock() + ## Fake container registry that always provides all containers you ask of. @pytest.fixture() def container_registry(): registry = unittest.mock.MagicMock() - def findContainers(id = None): - if not id: - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer("test_container")] + + registry.typeMetaData = "registry_mock" + + def findInstanceContainers(registry, **kwargs): + if "id" not in kwargs: + return [MockContainer("test_container", registry.typeMetaData)] else: - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] - registry.findContainers = findContainers - return registry + return [MockContainer(id, registry.typeMetaData)] + registry.findInstanceContainers = functools.partial(findInstanceContainers, registry) + + def findContainers(registry, container_type = None, id = None): + if not id: + return [MockContainer("test_container", registry.typeMetaData)] + else: + return [MockContainer(id, registry.typeMetaData)] + registry.findContainers = functools.partial(findContainers, registry) + + UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry + + yield registry + + UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = None #An empty global stack to test with. @pytest.fixture() From 270cdd08cbbdcb6f063a9fdd0f597a917acbee92 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:54:44 +0200 Subject: [PATCH 103/816] Don't modify ContainerStack._containerRegistry property We do not use it in GlobalStack --- tests/Settings/TestGlobalStack.py | 36 ------------------------------- 1 file changed, 36 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index bccb02e8cc..48402850bc 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -441,14 +441,8 @@ def test_removeContainer(global_stack): ## Tests setting definitions by specifying an ID of a definition that exists. def test_setDefinitionByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. def test_setDefinitionByIdDoesntExist(global_stack): @@ -458,14 +452,8 @@ def test_setDefinitionByIdDoesntExist(global_stack): ## Tests setting definition changes by specifying an ID of a container that # exists. def test_setDefinitionChangesByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setDefinitionChangesById("some_definition_changes") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting definition changes by specifying an ID of a container that # doesn't exist. def test_setDefinitionChangesByIdDoesntExist(global_stack): @@ -474,14 +462,8 @@ def test_setDefinitionChangesByIdDoesntExist(global_stack): ## Tests setting materials by specifying an ID of a material that exists. def test_setMaterialByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setMaterialById("some_material") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting materials by specifying an ID of a material that doesn't # exist. def test_setMaterialByIdDoesntExist(global_stack): @@ -536,14 +518,8 @@ def test_setPropertyOtherContainers(target_container, global_stack): ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setQualityById("some_quality") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting qualities by specifying an ID of a quality that doesn't exist. def test_setQualityByIdDoesntExist(global_stack): with pytest.raises(KeyError): @@ -552,14 +528,8 @@ def test_setQualityByIdDoesntExist(global_stack): ## Tests setting quality changes by specifying an ID of a quality change that # exists. def test_setQualityChangesByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. def test_setQualityChangesByIdDoesntExist(global_stack): @@ -568,14 +538,8 @@ def test_setQualityChangesByIdDoesntExist(global_stack): ## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - global_stack.setVariantById("some_variant") #The container registry always has a container with the ID. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests setting variants by specifying an ID of a variant that doesn't exist. def test_setVariantByIdDoesntExist(global_stack): with pytest.raises(KeyError): From da751fa0ea4c0715706297803d7e8c95977e3df3 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:55:24 +0200 Subject: [PATCH 104/816] We raise InvalidContainerError, not KeyError when a container was not found --- tests/Settings/TestGlobalStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 48402850bc..592f41a91f 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -446,7 +446,7 @@ def test_setDefinitionByIdExists(global_stack, container_registry): ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. def test_setDefinitionByIdDoesntExist(global_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): global_stack.setDefinitionById("some_definition") #Container registry is empty now. ## Tests setting definition changes by specifying an ID of a container that @@ -457,7 +457,7 @@ def test_setDefinitionChangesByIdExists(global_stack, container_registry): ## Tests setting definition changes by specifying an ID of a container that # doesn't exist. def test_setDefinitionChangesByIdDoesntExist(global_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): global_stack.setDefinitionChangesById("some_definition_changes") #Container registry is empty now. ## Tests setting materials by specifying an ID of a material that exists. @@ -467,7 +467,7 @@ def test_setMaterialByIdExists(global_stack, container_registry): ## Tests setting materials by specifying an ID of a material that doesn't # exist. def test_setMaterialByIdDoesntExist(global_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): global_stack.setMaterialById("some_material") #Container registry is empty now. ## Tests whether changing the next stack is properly forbidden. @@ -522,7 +522,7 @@ def test_setQualityByIdExists(global_stack, container_registry): ## Tests setting qualities by specifying an ID of a quality that doesn't exist. def test_setQualityByIdDoesntExist(global_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): global_stack.setQualityById("some_quality") #Container registry is empty now. ## Tests setting quality changes by specifying an ID of a quality change that @@ -533,7 +533,7 @@ def test_setQualityChangesByIdExists(global_stack, container_registry): ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. def test_setQualityChangesByIdDoesntExist(global_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): global_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. ## Tests setting variants by specifying an ID of a variant that exists. From 5892f13349a3ebf4ca83b27206e83470457f45f8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:55:44 +0200 Subject: [PATCH 105/816] Fix naming of definitionChanges property in test --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 592f41a91f..f769384c16 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -511,7 +511,7 @@ def test_setPropertyOtherContainers(target_container, global_stack): "quality": global_stack.quality, "material": global_stack.material, "variant": global_stack.variant, - "definition_changes": global_stack.definition_changes, + "definition_changes": global_stack.definitionChanges, "definition": global_stack.definition } assert containers[target_container].getProperty(key, property) == output_value From 60ee1a3f7553f8524b1dd99fa72a92f2223f8c5a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:56:46 +0200 Subject: [PATCH 106/816] We also raise InvalidContainer when setting variant --- tests/Settings/TestGlobalStack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index f769384c16..ae94089246 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -542,5 +542,5 @@ def test_setVariantByIdExists(global_stack, container_registry): ## Tests setting variants by specifying an ID of a variant that doesn't exist. def test_setVariantByIdDoesntExist(global_stack): - with pytest.raises(KeyError): - global_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file + with pytest.raises(InvalidContainerError): + global_stack.setVariantById("some_variant") #Container registry is empty now. From 8f36e76588ef284e225ad979820ddfa84001e96e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 27 Mar 2017 17:57:07 +0200 Subject: [PATCH 107/816] Make sure to use the right metadata type entry for mock containers --- tests/Settings/TestGlobalStack.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ae94089246..9f786183c8 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -452,6 +452,7 @@ def test_setDefinitionByIdDoesntExist(global_stack): ## Tests setting definition changes by specifying an ID of a container that # exists. def test_setDefinitionChangesByIdExists(global_stack, container_registry): + container_registry.typeMetaData = "definition_changes" global_stack.setDefinitionChangesById("some_definition_changes") #The container registry always has a container with the ID. ## Tests setting definition changes by specifying an ID of a container that @@ -462,6 +463,7 @@ def test_setDefinitionChangesByIdDoesntExist(global_stack): ## Tests setting materials by specifying an ID of a material that exists. def test_setMaterialByIdExists(global_stack, container_registry): + container_registry.typeMetaData = "material" global_stack.setMaterialById("some_material") #The container registry always has a container with the ID. ## Tests setting materials by specifying an ID of a material that doesn't @@ -518,6 +520,7 @@ def test_setPropertyOtherContainers(target_container, global_stack): ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(global_stack, container_registry): + container_registry.typeMetaData = "quality" global_stack.setQualityById("some_quality") #The container registry always has a container with the ID. ## Tests setting qualities by specifying an ID of a quality that doesn't exist. @@ -528,6 +531,7 @@ def test_setQualityByIdDoesntExist(global_stack): ## Tests setting quality changes by specifying an ID of a quality change that # exists. def test_setQualityChangesByIdExists(global_stack, container_registry): + container_registry.typeMetaData = "quality_changes" global_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. ## Tests setting quality changes by specifying an ID of a quality change that @@ -538,6 +542,7 @@ def test_setQualityChangesByIdDoesntExist(global_stack): ## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): + container_registry.typeMetaData = "variant" global_stack.setVariantById("some_variant") #The container registry always has a container with the ID. ## Tests setting variants by specifying an ID of a variant that doesn't exist. From 4005f5082b312ee29f87cca6f90ddfdfdb345143 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:43:11 +0200 Subject: [PATCH 108/816] Allow setting of properties on GlobalStack --- cura/Settings/GlobalStack.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index b0044b7daa..ec3a2c05fd 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -43,7 +43,7 @@ class GlobalStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_changes_id)) - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + @pyqtProperty(InstanceContainer, fset = setQualityChanges, notify = pyqtContainersChanged) def qualityChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.QualityChanges] @@ -57,7 +57,7 @@ class GlobalStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + @pyqtProperty(InstanceContainer, fset = setQuality, notify = pyqtContainersChanged) def quality(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Quality] @@ -71,7 +71,7 @@ class GlobalStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + @pyqtProperty(InstanceContainer, fset = setMaterial, notify = pyqtContainersChanged) def material(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Material] @@ -85,7 +85,7 @@ class GlobalStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + @pyqtProperty(InstanceContainer, fset = setVariant, notify = pyqtContainersChanged) def variant(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Variant] @@ -99,7 +99,7 @@ class GlobalStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_changes_id)) - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + @pyqtProperty(InstanceContainer, fset = setDefinitionChanges, notify = pyqtContainersChanged) def definitionChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.DefinitionChanges] From 4cea1b6d33500ed834de1643550d500a5ecb30b6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:44:29 +0200 Subject: [PATCH 109/816] Fix error case in addExtruder Error out when the new size is going to be more than extruderCount instead of whether it currently is more than extruderCount. --- cura/Settings/GlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index ec3a2c05fd..0b46c53da1 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -113,7 +113,7 @@ class GlobalStack(ContainerStack): def addExtruder(self, extruder): extruder_count = self.getProperty("machine_extruder_count", "value") - if len(self._extruders) > extruder_count: + if len(self._extruders) + 1 > extruder_count: raise Exceptions.TooManyExtrudersError("Tried to add extruder to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count)) self._extruders.append(extruder) From 2f6936c961ada60271d24202a44e5f89aff628b5 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:45:15 +0200 Subject: [PATCH 110/816] Fix type checking in GlobalStack --- cura/Settings/GlobalStack.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 0b46c53da1..fb9719ba11 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -178,9 +178,10 @@ class GlobalStack(ContainerStack): @override(ContainerStack) def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None: expected_type = _ContainerIndexes.IndexTypeMap[index] - if expected_type == "definition" and not isinstance(container, DefinitionContainer): - raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) - if container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: + if expected_type == "definition": + if not isinstance(container, DefinitionContainer): + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) + elif container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type".format(index = index, type = expected_type)) super().replaceContainer(index, container, postpone_emit) From 123c8bae453c6f55fb26d2e635e48de27c239a9f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:46:00 +0200 Subject: [PATCH 111/816] Allow setting userChanges container Since that makes it possible to create an external factory method for creating stacks and makes the properties more consistent. --- cura/Settings/GlobalStack.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index fb9719ba11..f429e16e38 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -29,7 +29,10 @@ class GlobalStack(ContainerStack): pyqtContainersChanged = pyqtSignal() - @pyqtProperty(InstanceContainer, notify = pyqtContainersChanged) + def setUserChanges(self, new_user_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.UserChanges, new_user_changes) + + @pyqtProperty(InstanceContainer, fset = setUserChanges, notify = pyqtContainersChanged) def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] From 75931192f6ee2d8e0f781908505687fc85fbd7d9 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:46:28 +0200 Subject: [PATCH 112/816] Allow setting Definition and setting Definition by ID To match the other properties --- cura/Settings/GlobalStack.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index f429e16e38..d5c49614d6 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -106,7 +106,17 @@ class GlobalStack(ContainerStack): def definitionChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.DefinitionChanges] - @pyqtProperty(DefinitionContainer) + def setDefinition(self, new_definition: DefinitionContainer) -> None: + self.replaceContainer(_ContainerIndexes.Definition, new_definition) + + def setDefinitionById(self, new_definition_id: str) -> None: + new_definition = ContainerRegistry.getInstance().findDefinitionContainers(id = new_definition_id) + if new_definition: + self.setDefinition(new_definition[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_id)) + + @pyqtProperty(DefinitionContainer, fset = setDefinition, notify = pyqtContainersChanged) def definition(self) -> DefinitionContainer: return self._containers[_ContainerIndexes.Definition] From 593c6c0c8f1a04275cee363d6412e3618d47bcd0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:47:10 +0200 Subject: [PATCH 113/816] Set and clear ContainerStack's _containerRegistry property --- tests/Settings/TestGlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 9f786183c8..1d7bb0f65b 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -53,10 +53,12 @@ def container_registry(): registry.findContainers = functools.partial(findContainers, registry) UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry + UM.Settings.ContainerStack._containerRegistry = registry yield registry UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = None + UM.Settings.ContainerStack._containerRegistry = None #An empty global stack to test with. @pytest.fixture() From 3f1f4a172d1dbfd0c2c6a6e2767d1261308aa0f0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:48:55 +0200 Subject: [PATCH 114/816] Fix constrainContainerTypes test We do not allow random containers to be assigned to specific properties, only the containers that specify they are of a certain type. --- tests/Settings/TestGlobalStack.py | 36 +++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 1d7bb0f65b..d8ad0bab53 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -129,24 +129,56 @@ def test_addExtruder(global_stack): (DefinitionContainerSubClass(), InstanceContainerSubClass()) ]) def test_constrainContainerTypes(definition_container, instance_container, global_stack): - with pytest.raises(InvalidContainerError): #Putting a definition container in the user changes is not allowed. + instance_container.addMetaDataEntry("type", "") + + with pytest.raises(InvalidContainerError): # Putting a definition container in the user changes is not allowed. global_stack.userChanges = definition_container - global_stack.userChanges = instance_container #Putting an instance container in the user changes is allowed. + with pytest.raises(InvalidContainerError): + global_stack.userChanges = instance_container # Putting a random instance container in the user changes is not allowed. + + instance_container.setMetaDataEntry("type", "user") # After setting the metadata type entry correctly, we are allowed to set the container + global_stack.userChanges = instance_container + with pytest.raises(InvalidContainerError): global_stack.qualityChanges = definition_container + with pytest.raises(InvalidContainerError): + global_stack.qualityChanges = instance_container + + instance_container.setMetaDataEntry("type", "quality_changes") global_stack.qualityChanges = instance_container + with pytest.raises(InvalidContainerError): global_stack.quality = definition_container + with pytest.raises(InvalidContainerError): + global_stack.quality = instance_container + + instance_container.setMetaDataEntry("type", "quality") global_stack.quality = instance_container + with pytest.raises(InvalidContainerError): global_stack.material = definition_container + with pytest.raises(InvalidContainerError): + global_stack.material = instance_container + + instance_container.setMetaDataEntry("type", "material") global_stack.material = instance_container + with pytest.raises(InvalidContainerError): global_stack.variant = definition_container + with pytest.raises(InvalidContainerError): + global_stack.variant = instance_container + + instance_container.setMetaDataEntry("type", "variant") global_stack.variant = instance_container + with pytest.raises(InvalidContainerError): global_stack.definitionChanges = definition_container + with pytest.raises(InvalidContainerError): + global_stack.definitionChanges = instance_container + + instance_container.setMetaDataEntry("type", "definition_changes") global_stack.definitionChanges = instance_container + with pytest.raises(InvalidContainerError): #Putting an instance container in the definition is not allowed. global_stack.definition = instance_container global_stack.definition = definition_container #Putting a definition container in the definition is allowed. From 2a2df31c5bd4e633d118527f2688762db53e9235 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:50:09 +0200 Subject: [PATCH 115/816] Set the User container to a writable container in testSetProperty Since empty container (the default) will not allow writes --- tests/Settings/TestGlobalStack.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index d8ad0bab53..7de10b2e75 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -520,6 +520,7 @@ def test_setNextStack(global_stack): ("layer_height", "is_bright_pink", "of course", "of course") ]) def test_setPropertyUser(key, property, value, output_value, global_stack): + global_stack.setUserChanges(MockContainer(global_stack.id + "_user", "user")) global_stack.setProperty(key, value, property) assert global_stack.userChanges.getProperty(key, property) == output_value From 7175ac0d203af43a1dd087968d81582173b6253f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:50:37 +0200 Subject: [PATCH 116/816] Do not try to perform a setProperty on a definition That is never going to work --- tests/Settings/TestGlobalStack.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 7de10b2e75..6e15694706 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -532,7 +532,6 @@ def test_setPropertyUser(key, property, value, output_value, global_stack): "material", "variant", "definition_changes", - "definition" ]) def test_setPropertyOtherContainers(target_container, global_stack): #Other parameters that don't need to be varied. From dc841417142eeaf677fcb9bcc5377cf556a62d41 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 17:51:46 +0200 Subject: [PATCH 117/816] Implement set/getProperty for MockContainer Otherwise setProperty/getProperty tests will never work --- tests/Settings/TestGlobalStack.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 6e15694706..e12bbb50fb 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -19,16 +19,32 @@ class MockContainer: self._id = container_id self._type = type + self._property_map = {} + def getId(self): return self._id def getMetaDataEntry(self, entry, default = None): - print(entry, self._type) if entry == "type": return self._type return default + def getProperty(self, key, property_name): + if key not in self._property_map: + return None + + if property_name not in self._property_map[key]: + return None + + return self._property_map[key][property_name] + + def setProperty(self, key, property_name, value): + if key not in self._property_map: + self._property_map[key] = {} + + self._property_map[key][property_name] = value + propertyChanged = unittest.mock.MagicMock() ## Fake container registry that always provides all containers you ask of. From 317576e98305d02b8ffa74157715e7f7cd67064f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:14:16 +0200 Subject: [PATCH 118/816] Set container entry to empty if it was not found in the original container --- cura/Settings/GlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index d5c49614d6..236c6f01bf 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -229,6 +229,8 @@ class GlobalStack(ContainerStack): actual_container = self.findContainer(type = type_name) if actual_container: new_containers[index] = actual_container + else: + new_containers[index] = self._empty_instance_container print("containers after", new_containers) self._containers = new_containers From 87ce6246d8941b0ddc2ca52ad7d397180ce00065 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:16:00 +0200 Subject: [PATCH 119/816] Introduce a "writable global stack" fixture This one has MockContainers set for all containers that allow calling setProperty --- tests/Settings/TestGlobalStack.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index e12bbb50fb..3fc965c2af 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -81,6 +81,17 @@ def container_registry(): def global_stack() -> cura.Settings.GlobalStack.GlobalStack: return cura.Settings.GlobalStack.GlobalStack("TestStack") +@pytest.fixture() +def writable_global_stack(global_stack): + global_stack.userChanges = MockContainer("test_user_changes", "user") + global_stack.qualityChanges = MockContainer("test_quality_changes", "quality_changes") + global_stack.quality = MockContainer("test_quality", "quality") + global_stack.material = MockContainer("test_material", "material") + global_stack.variant = MockContainer("test_variant", "variant") + global_stack.definitionChanges = MockContainer("test_definition_changes", "definition_changes") + global_stack.definition = DefinitionContainerSubClass() + return global_stack + ## Place-in function for findContainer that finds only containers that start # with "some_". def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): From 3620ce4c0a01f3169144604b6ecbc00613d9200d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:17:12 +0200 Subject: [PATCH 120/816] Fix setPropertyUser test with the right container and parameter order of setProperty --- tests/Settings/TestGlobalStack.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 3fc965c2af..e8c0b6f959 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -546,10 +546,9 @@ def test_setNextStack(global_stack): ("layer_height", "default_value", 0.1337, 0.1337), ("layer_height", "is_bright_pink", "of course", "of course") ]) -def test_setPropertyUser(key, property, value, output_value, global_stack): - global_stack.setUserChanges(MockContainer(global_stack.id + "_user", "user")) - global_stack.setProperty(key, value, property) - assert global_stack.userChanges.getProperty(key, property) == output_value +def test_setPropertyUser(key, property, value, output_value, writable_global_stack): + writable_global_stack.setProperty(key, property, value) + assert writable_global_stack.userChanges.getProperty(key, property) == output_value ## Tests setting properties on specific containers on the global stack. @pytest.mark.parametrize("target_container", [ From 3c1cbd5aa96ab44f611a6bedf18c18672c268c13 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:18:29 +0200 Subject: [PATCH 121/816] Do not compare string to actual type As far as we know, Global or Container stack should not take care of string -> value conversion --- tests/Settings/TestGlobalStack.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index e8c0b6f959..cbff39e941 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -540,9 +540,9 @@ def test_setNextStack(global_stack): ## Tests setting properties directly on the global stack. @pytest.mark.parametrize("key, property, value, output_value", [ - ("layer_height", "value", "0.1337", 0.1337), - ("foo", "value", "100", 100), - ("support_enabled", "value", "True", True), + ("layer_height", "value", 0.1337, 0.1337), + ("foo", "value", 100, 100), + ("support_enabled", "value", True, True), ("layer_height", "default_value", 0.1337, 0.1337), ("layer_height", "is_bright_pink", "of course", "of course") ]) From 30fd1ded45c670dfbaae5498b2a181633ab5b4c4 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:19:30 +0200 Subject: [PATCH 122/816] Fix setPropertyOtherContainers test Now uses writable stack and makes sure to compare the right values --- tests/Settings/TestGlobalStack.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index cbff39e941..c7a9f19483 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -559,22 +559,22 @@ def test_setPropertyUser(key, property, value, output_value, writable_global_sta "variant", "definition_changes", ]) -def test_setPropertyOtherContainers(target_container, global_stack): +def test_setPropertyOtherContainers(target_container, writable_global_stack): #Other parameters that don't need to be varied. key = "layer_height" - property = "value", - value = "0.1337", + property = "value" + value = 0.1337 output_value = 0.1337 - global_stack.setProperty(key, value, property, target_container = target_container) + writable_global_stack.setProperty(key, property, value, target_container = target_container) containers = { - "user": global_stack.userChanges, - "quality_changes": global_stack.qualityChanges, - "quality": global_stack.quality, - "material": global_stack.material, - "variant": global_stack.variant, - "definition_changes": global_stack.definitionChanges, - "definition": global_stack.definition + "user": writable_global_stack.userChanges, + "quality_changes": writable_global_stack.qualityChanges, + "quality": writable_global_stack.quality, + "material": writable_global_stack.material, + "variant": writable_global_stack.variant, + "definition_changes": writable_global_stack.definitionChanges, + "definition": writable_global_stack.definition } assert containers[target_container].getProperty(key, property) == output_value From d7984c888b0638cda2a50fbf795a8c6e3246f461 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 28 Mar 2017 18:20:13 +0200 Subject: [PATCH 123/816] Use a proper container mock for test user/quality changes --- tests/Settings/TestGlobalStack.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index c7a9f19483..1ca5c8c956 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -465,9 +465,10 @@ def test_getPropertyWithResolve(global_stack): ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): - user_changes = unittest.mock.MagicMock() + user_changes = MockContainer("test_user_changes", "user") + def hasProperty(key, property): - return key == "layer_height" and property == "value" #Only have the layer_height property set. + return key == "layer_height" and property == "value" # Only have the layer_height property set. user_changes.hasProperty = hasProperty global_stack.userChanges = user_changes @@ -479,9 +480,10 @@ def test_hasUserValueUserChanges(global_stack): ## Tests whether the hasUserValue returns true for settings that are changed in # the quality-changes container. def test_hasUserValueQualityChanges(global_stack): - quality_changes = unittest.mock.MagicMock() + quality_changes = MockContainer("test_quality_changes", "quality_changes") + def hasProperty(key, property): - return key == "layer_height" and property == "value" #Only have the layer_height property set. + return key == "layer_height" and property == "value" # Only have the layer_height property set. quality_changes.hasProperty = hasProperty global_stack.qualityChanges = quality_changes From d4400b86747fccf973b15a03d2b398f084e2985d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 30 Mar 2017 08:57:37 +0200 Subject: [PATCH 124/816] Introduce a CuraContainerStack that has all the code shared between global and extruder Since there is actually quite a lot of it --- cura/Settings/CuraContainerStack.py | 239 ++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 cura/Settings/CuraContainerStack.py diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py new file mode 100644 index 0000000000..6b4ce16ee2 --- /dev/null +++ b/cura/Settings/CuraContainerStack.py @@ -0,0 +1,239 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from typing import Any + +from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal + +from UM.Decorators import override + +from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase +from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.Interfaces import ContainerInterface + +from . import Exceptions + +class CuraContainerStack(ContainerStack): + def __init__(self, container_id: str, *args, **kwargs): + super().__init__(container_id, *args, **kwargs) + + self._empty_instance_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + + self._containers = [self._empty_instance_container for i in range(len(_ContainerIndexes.IndexTypeMap))] + + self.containersChanged.connect(self._onContainersChanged) + + pyqtContainersChanged = pyqtSignal() + + def setUserChanges(self, new_user_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.UserChanges, new_user_changes) + + @pyqtProperty(InstanceContainer, fset = setUserChanges, notify = pyqtContainersChanged) + def userChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.UserChanges] + + def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + + def setQualityChangesById(self, new_quality_changes_id: str) -> None: + quality_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_changes_id) + if quality_changes: + self.setQualityChanges(quality_changes[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_changes_id)) + + @pyqtProperty(InstanceContainer, fset = setQualityChanges, notify = pyqtContainersChanged) + def qualityChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.QualityChanges] + + def setQuality(self, new_quality: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Quality, new_quality) + + def setQualityById(self, new_quality_id: str) -> None: + quality = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) + if quality: + self.setQuality(quality[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) + + @pyqtProperty(InstanceContainer, fset = setQuality, notify = pyqtContainersChanged) + def quality(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Quality] + + def setMaterial(self, new_material: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Material, new_material) + + def setMaterialById(self, new_material_id: str) -> None: + material = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) + if material: + self.setMaterial(material[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) + + @pyqtProperty(InstanceContainer, fset = setMaterial, notify = pyqtContainersChanged) + def material(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Material] + + def setVariant(self, new_variant: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.Variant, new_variant) + + def setVariantById(self, new_variant_id: str) -> None: + variant = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) + if variant: + self.setVariant(variant[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) + + @pyqtProperty(InstanceContainer, fset = setVariant, notify = pyqtContainersChanged) + def variant(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.Variant] + + def setDefinitionChanges(self, new_definition_changes: InstanceContainer) -> None: + self.replaceContainer(_ContainerIndexes.DefinitionChanges, new_definition_changes) + + def setDefinitionChangesById(self, new_definition_changes_id: str) -> None: + new_definition_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_definition_changes_id) + if new_definition_changes: + self.setDefinitionChanges(new_definition_changes[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_changes_id)) + + @pyqtProperty(InstanceContainer, fset = setDefinitionChanges, notify = pyqtContainersChanged) + def definitionChanges(self) -> InstanceContainer: + return self._containers[_ContainerIndexes.DefinitionChanges] + + def setDefinition(self, new_definition: DefinitionContainer) -> None: + self.replaceContainer(_ContainerIndexes.Definition, new_definition) + + def setDefinitionById(self, new_definition_id: str) -> None: + new_definition = ContainerRegistry.getInstance().findDefinitionContainers(id = new_definition_id) + if new_definition: + self.setDefinition(new_definition[0]) + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_id)) + + @pyqtProperty(DefinitionContainer, fset = setDefinition, notify = pyqtContainersChanged) + def definition(self) -> DefinitionContainer: + return self._containers[_ContainerIndexes.Definition] + + ## Check whether the specified setting has a 'user' value. + # + # A user value here is defined as the setting having a value in either + # the UserChanges or QualityChanges container. + # + # \return True if the setting has a user value, False if not. + @pyqtSlot(str, result = bool) + def hasUserValue(self, key: str) -> bool: + if self._containers[_ContainerIndexes.UserChanges].hasProperty(key, "value"): + return True + + if self._containers[_ContainerIndexes.QualityChanges].hasProperty(key, "value"): + return True + + return False + + def setProperty(self, key: str, property_name: str, new_value: Any, target_container: str = "user") -> None: + container_index = _ContainerIndexes.indexForType(target_container) + if container_index != -1: + self._containers[container_index].setProperty(key, property_name, new_value) + else: + raise IndexError("Invalid target container {type}".format(type = target_container)) + + ## Overridden from ContainerStack + # + # Since we have a fixed order of containers in the stack, we want to enforce this. + @override(ContainerStack) + def addContainer(self, container: ContainerInterface) -> None: + raise Exceptions.InvalidOperationError("Cannot add a container to Global stack") + + ## Overridden from ContainerStack + @override(ContainerStack) + def insertContainer(self, index: int, container: ContainerInterface) -> None: + raise Exceptions.InvalidOperationError("Cannot insert a container into Global stack") + + ## Overridden from ContainerStack + @override(ContainerStack) + def removeContainer(self, index: int) -> None: + raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") + + ## Overridden from ContainerStack + @override(ContainerStack) + def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None: + expected_type = _ContainerIndexes.IndexTypeMap[index] + if expected_type == "definition": + if not isinstance(container, DefinitionContainer): + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) + elif container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type".format(index = index, type = expected_type)) + + super().replaceContainer(index, container, postpone_emit) + + ## Overridden from ContainerStack + @override(ContainerStack) + def deserialize(self, contents: str) -> None: + super().deserialize(contents) + + new_containers = self._containers.copy() + while(len(new_containers) < len(_ContainerIndexes.IndexTypeMap)): + new_containers.append(self._empty_instance_container) + + # Validate and ensure the list of containers matches with what we expect + for index, type_name in _ContainerIndexes.IndexTypeMap.items(): + try: + container = new_containers[index] + except IndexError: + container = None + + if type_name == "definition": + if not container or not isinstance(container, DefinitionContainer): + definition = self.findContainer(container_type = DefinitionContainer, category = "*") + if not definition: + raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self._id)) + + new_containers[index] = definition + continue + + if not container or container.getMetaDataEntry("type") != type_name: + actual_container = self.findContainer(type = type_name) + if actual_container: + new_containers[index] = actual_container + else: + new_containers[index] = self._empty_instance_container + + self._containers = new_containers + + def _onContainersChanged(self, container): + self.pyqtContainersChanged.emit() + +## private: +class _ContainerIndexes: + UserChanges = 0 + QualityChanges = 1 + Quality = 2 + Material = 3 + Variant = 4 + DefinitionChanges = 5 + Definition = 6 + + # Simple hash map to map from index to "type" metadata entry + IndexTypeMap = { + UserChanges: "user", + QualityChanges: "quality_changes", + Quality: "quality", + Material: "material", + Variant: "variant", + DefinitionChanges: "definition_changes", + Definition: "definition", + } + + @classmethod + def indexForType(cls, type_name: str) -> int: + for key, value in cls.IndexTypeMap.items(): + if value == type_name: + return key + + return -1 + From 202f19a081e4f2043d0a520ca5f9263a5b7c1f86 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 30 Mar 2017 08:58:05 +0200 Subject: [PATCH 125/816] Make ExtruderStack a subclass of CuraContainerStack --- cura/Settings/ExtruderStack.py | 45 +++++++++------------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 1a437128a9..91b1725c4f 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -3,39 +3,25 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot +from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase -from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.Interfaces import ContainerInterface -class ExtruderStack(ContainerStack): +from . import Exceptions +from .CuraContainerStack import CuraContainerStack + +class ExtruderStack(CuraContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) - @pyqtProperty(InstanceContainer) - def userChanges(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.UserChanges] - - @pyqtProperty(InstanceContainer) - def qualityChanges(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.QualityChanges] - - @pyqtProperty(InstanceContainer) - def quality(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Quality] - - @pyqtProperty(InstanceContainer) - def material(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Material] - - @pyqtProperty(InstanceContainer) - def variant(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Variant] - - @pyqtProperty(DefinitionContainer) - def definition(self) -> DefinitionContainer: - return self._containers[_ContainerIndexes.Definition] + @override(ContainerStack) + def setNextStack(self, stack): + super().setNextStack(stack) + stack.addExtruder(self) extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", @@ -45,12 +31,3 @@ extruder_stack_mime = MimeType( MimeTypeDatabase.addMimeType(extruder_stack_mime) ContainerRegistry.addContainerTypeByName(ExtruderStack, "extruder_stack", extruder_stack_mime.name) - -class _ContainerIndexes: - UserChanges = 0 - QualityChanges = 1 - Quality = 2 - Material = 3 - Variant = 4 - Definition = 5 - From 1f0f8cd6ea844ea73f9ca57bf4f221b7d903da1a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 30 Mar 2017 08:58:21 +0200 Subject: [PATCH 126/816] Make GlobalStack a subclass of CuraContainerStack --- cura/Settings/GlobalStack.py | 220 +---------------------------------- 1 file changed, 2 insertions(+), 218 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 236c6f01bf..b52575e4f7 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -15,111 +15,14 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import ContainerInterface from . import Exceptions +from .CuraContainerStack import CuraContainerStack -class GlobalStack(ContainerStack): +class GlobalStack(CuraContainerStack): def __init__(self, container_id: str, *args, **kwargs): super().__init__(container_id, *args, **kwargs) - self._empty_instance_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() - - self._containers = [self._empty_instance_container for i in range(len(_ContainerIndexes.IndexTypeMap))] self._extruders = [] - self.containersChanged.connect(self._onContainersChanged) - - pyqtContainersChanged = pyqtSignal() - - def setUserChanges(self, new_user_changes: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.UserChanges, new_user_changes) - - @pyqtProperty(InstanceContainer, fset = setUserChanges, notify = pyqtContainersChanged) - def userChanges(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.UserChanges] - - def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) - - def setQualityChangesById(self, new_quality_changes_id: str) -> None: - quality_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_changes_id) - if quality_changes: - self.setQualityChanges(quality_changes[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_changes_id)) - - @pyqtProperty(InstanceContainer, fset = setQualityChanges, notify = pyqtContainersChanged) - def qualityChanges(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.QualityChanges] - - def setQuality(self, new_quality: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Quality, new_quality) - - def setQualityById(self, new_quality_id: str) -> None: - quality = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) - if quality: - self.setQuality(quality[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) - - @pyqtProperty(InstanceContainer, fset = setQuality, notify = pyqtContainersChanged) - def quality(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Quality] - - def setMaterial(self, new_material: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Material, new_material) - - def setMaterialById(self, new_material_id: str) -> None: - material = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) - if material: - self.setMaterial(material[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) - - @pyqtProperty(InstanceContainer, fset = setMaterial, notify = pyqtContainersChanged) - def material(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Material] - - def setVariant(self, new_variant: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Variant, new_variant) - - def setVariantById(self, new_variant_id: str) -> None: - variant = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) - if variant: - self.setVariant(variant[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) - - @pyqtProperty(InstanceContainer, fset = setVariant, notify = pyqtContainersChanged) - def variant(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.Variant] - - def setDefinitionChanges(self, new_definition_changes: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.DefinitionChanges, new_definition_changes) - - def setDefinitionChangesById(self, new_definition_changes_id: str) -> None: - new_definition_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_definition_changes_id) - if new_definition_changes: - self.setDefinitionChanges(new_definition_changes[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_changes_id)) - - @pyqtProperty(InstanceContainer, fset = setDefinitionChanges, notify = pyqtContainersChanged) - def definitionChanges(self) -> InstanceContainer: - return self._containers[_ContainerIndexes.DefinitionChanges] - - def setDefinition(self, new_definition: DefinitionContainer) -> None: - self.replaceContainer(_ContainerIndexes.Definition, new_definition) - - def setDefinitionById(self, new_definition_id: str) -> None: - new_definition = ContainerRegistry.getInstance().findDefinitionContainers(id = new_definition_id) - if new_definition: - self.setDefinition(new_definition[0]) - else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_id)) - - @pyqtProperty(DefinitionContainer, fset = setDefinition, notify = pyqtContainersChanged) - def definition(self) -> DefinitionContainer: - return self._containers[_ContainerIndexes.Definition] - @pyqtProperty("QVariantList") def extruders(self) -> list: return self._extruders @@ -131,22 +34,6 @@ class GlobalStack(ContainerStack): self._extruders.append(extruder) - ## Check whether the specified setting has a 'user' value. - # - # A user value here is defined as the setting having a value in either - # the UserChanges or QualityChanges container. - # - # \return True if the setting has a user value, False if not. - @pyqtSlot(str, result = bool) - def hasUserValue(self, key: str) -> bool: - if self._containers[_ContainerIndexes.UserChanges].hasProperty(key, "value"): - return True - - if self._containers[_ContainerIndexes.QualityChanges].hasProperty(key, "value"): - return True - - return False - ## Overridden from ContainerStack @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: @@ -158,85 +45,11 @@ class GlobalStack(ContainerStack): return super().getProperty(key, property_name) - def setProperty(self, key: str, property_name: str, new_value: Any, target_container: str = "user") -> None: - container_index = _ContainerIndexes.indexForType(target_container) - if container_index != -1: - self._containers[container_index].setProperty(key, property_name, new_value) - else: - raise IndexError("Invalid target container {type}".format(type = target_container)) - ## Overridden from ContainerStack @override(ContainerStack) def setNextStack(self, next_stack: ContainerStack) -> None: raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") - ## Overridden from ContainerStack - # - # Since we have a fixed order of containers in the stack, we want to enforce this. - @override(ContainerStack) - def addContainer(self, container: ContainerInterface) -> None: - raise Exceptions.InvalidOperationError("Cannot add a container to Global stack") - - ## Overridden from ContainerStack - @override(ContainerStack) - def insertContainer(self, index: int, container: ContainerInterface) -> None: - raise Exceptions.InvalidOperationError("Cannot insert a container into Global stack") - - ## Overridden from ContainerStack - @override(ContainerStack) - def removeContainer(self, index: int) -> None: - raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") - - ## Overridden from ContainerStack - @override(ContainerStack) - def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None: - expected_type = _ContainerIndexes.IndexTypeMap[index] - if expected_type == "definition": - if not isinstance(container, DefinitionContainer): - raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) - elif container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: - raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type".format(index = index, type = expected_type)) - - super().replaceContainer(index, container, postpone_emit) - - ## Overridden from ContainerStack - @override(ContainerStack) - def deserialize(self, contents: str) -> None: - super().deserialize(contents) - - new_containers = self._containers.copy() - print("containers before", new_containers) - while(len(new_containers) < len(_ContainerIndexes.IndexTypeMap)): - new_containers.append(self._empty_instance_container) - - # Validate and ensure the list of containers matches with what we expect - for index, type_name in _ContainerIndexes.IndexTypeMap.items(): - try: - container = new_containers[index] - except IndexError: - container = None - - if type_name == "definition": - if not container or not isinstance(container, DefinitionContainer): - definition = self.findContainer(container_type = DefinitionContainer, category = "*") - if not definition: - raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self._id)) - - new_containers[index] = definition - continue - - if not container or container.getMetaDataEntry("type") != type_name: - actual_container = self.findContainer(type = type_name) - if actual_container: - new_containers[index] = actual_container - else: - new_containers[index] = self._empty_instance_container - - print("containers after", new_containers) - self._containers = new_containers - - def _onContainersChanged(self, container): - self.pyqtContainersChanged.emit() ## private: global_stack_mime = MimeType( @@ -247,32 +60,3 @@ global_stack_mime = MimeType( MimeTypeDatabase.addMimeType(global_stack_mime) ContainerRegistry.addContainerTypeByName(GlobalStack, "global_stack", global_stack_mime.name) - - -class _ContainerIndexes: - UserChanges = 0 - QualityChanges = 1 - Quality = 2 - Material = 3 - Variant = 4 - DefinitionChanges = 5 - Definition = 6 - - # Simple hash map to map from index to "type" metadata entry - IndexTypeMap = { - UserChanges: "user", - QualityChanges: "quality_changes", - Quality: "quality", - Material: "material", - Variant: "variant", - DefinitionChanges: "definition_changes", - Definition: "definition", - } - - @classmethod - def indexForType(cls, type_name: str) -> int: - for key, value in cls.IndexTypeMap.items(): - if value == type_name: - return key - - return -1 From e6adca7dd3c1e0b1ab23ad108d5fe183cfe2cc6e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 30 Mar 2017 08:58:46 +0200 Subject: [PATCH 127/816] Fix type metadata of some of the test container stacks --- tests/Settings/stacks/ExtruderLegacy.stack.cfg | 2 +- tests/Settings/stacks/Global.stack.cfg | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/Settings/stacks/ExtruderLegacy.stack.cfg b/tests/Settings/stacks/ExtruderLegacy.stack.cfg index 41c8ac22a2..4a6c419e40 100644 --- a/tests/Settings/stacks/ExtruderLegacy.stack.cfg +++ b/tests/Settings/stacks/ExtruderLegacy.stack.cfg @@ -4,7 +4,7 @@ name = Legacy Extruder Stack id = ExtruderLegacy [metadata] -type = extruder +type = extruder_train [containers] 3 = some_instance diff --git a/tests/Settings/stacks/Global.stack.cfg b/tests/Settings/stacks/Global.stack.cfg index 9034c1d0d0..aa1693d878 100644 --- a/tests/Settings/stacks/Global.stack.cfg +++ b/tests/Settings/stacks/Global.stack.cfg @@ -3,6 +3,9 @@ version = 3 name = Global id = Global +[metadata] +type = machine + [containers] 3 = some_instance 6 = some_definition From 7f07be34448cff40bad61b46509bc1dcc290a659 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Mon, 3 Apr 2017 17:11:57 +0200 Subject: [PATCH 128/816] JSOn rename: Enable Support ==> Generate Support (CURA-2747) The generate support settings has been renamed because support will still be printed even when it is not generated by the engine, but given by a support mesh --- resources/definitions/fdmprinter.def.json | 4 ++-- resources/qml/SidebarSimple.qml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 8db96bb843..185b1836bf 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2792,8 +2792,8 @@ { "support_enable": { - "label": "Enable Support", - "description": "Enable support structures. These structures support parts of the model with severe overhangs.", + "label": "Generate Support", + "description": "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.", "type": "bool", "default_value": false, "settable_per_mesh": true, diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 424c1239af..21abe1b4bb 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -232,7 +232,7 @@ Item anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter width: parent.width * .45 - 3 * UM.Theme.getSize("default_margin").width - text: catalog.i18nc("@label", "Enable Support"); + text: catalog.i18nc("@label", "Generate Support"); font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); } @@ -263,7 +263,7 @@ Item onEntered: { base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportCheckBox.x, 0), - catalog.i18nc("@label", "Enable support structures. These structures support parts of the model with severe overhangs.")); + catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")); } onExited: { From eaca23c50e8327145e80dd8e23d86a030621a36b Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Mon, 3 Apr 2017 17:12:59 +0200 Subject: [PATCH 129/816] feat: support_mesh_drop_down (CURA-2747) --- resources/definitions/fdmprinter.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 185b1836bf..dd9548b091 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4147,6 +4147,18 @@ "settable_per_meshgroup": false, "settable_globally": false }, + "support_mesh_drop_down": + { + "label": "Drop Down Support Mesh", + "description": "Make support everywhere below the support mesh, so that there's no overhang in the support mesh.", + "type": "bool", + "default_value": true, + "enabled": "support_mesh", + "settable_per_mesh": true, + "settable_per_extruder": false, + "settable_per_meshgroup": false, + "settable_globally": false + }, "anti_overhang_mesh": { "label": "Anti Overhang Mesh", From 47a388fd2cc98fe5a444cb3daa9120193f1a498a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:38:49 +0200 Subject: [PATCH 130/816] Introduce a CuraStackBuilder class It contains factory functions for creating new stacks with certain quality/material/variant combinations. --- cura/Settings/CuraStackBuilder.py | 86 +++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 cura/Settings/CuraStackBuilder.py diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py new file mode 100644 index 0000000000..527e860f31 --- /dev/null +++ b/cura/Settings/CuraStackBuilder.py @@ -0,0 +1,86 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.ContainerRegistry import ContainerRegistry + +from .GlobalStack import GlobalStack +from .ExtruderStack import ExtruderStack + +class CuraStackBuilder: + @staticmethod + def createExtruderStack(new_stack_id: str, definition_id: str, **kwargs) -> ExtruderStack: + registry = ContainerRegistry.getInstance() + + stack = ExtruderStack(new_stack_id) + + user_container = InstanceContainer(new_stack_id + "_user") + user_container.addMetaDataEntry("type", "user") + user_container.addMetaDataEntry("machine", new_stack_id) + + stack.setUserChanges(user_container) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + + if "quality" in kwargs: + stack.setQualityById(kwargs["quality"]) + + if "material" in kwargs: + stack.setMaterialById(kwargs["material"]) + + if "variant" in kwargs: + stack.setVariantById(kwargs["variant"]) + + if "definition_changes" in kwargs: + stack.setDefinitionChangesById(kwargs["definition_changes"]) + + if "definition" in kwargs: + stack.setDefinitionById(kwargs["definition"]) + + if "next_stack" in kwargs: + stack.setNextStack(kwargs["next_stack"]) + + # Only add the created containers to the registry after we have set all the other + # properties. This makes the create operation more transactional, since any problems + # setting properties will not result in incomplete containers being added. + registry.addContainer(stack) + registry.addContainer(user_container) + + return stack + + @staticmethod + def createGlobalStack(new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: + registry = ContainerRegistry.getInstance() + + stack = GlobalStack(new_stack_id) + + stack.setDefinition(definition) + + user_container = InstanceContainer(new_stack_id + "_user") + user_container.addMetaDataEntry("type", "user") + user_container.addMetaDataEntry("machine", new_stack_id) + user_container.setDefinition(definition) + + stack.setUserChanges(user_container) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + + if "quality" in kwargs: + stack.setQualityById(kwargs["quality"]) + + if "material" in kwargs: + stack.setMaterialById(kwargs["material"]) + + if "variant" in kwargs: + stack.setVariantById(kwargs["variant"]) + + if "definition_changes" in kwargs: + stack.setDefinitionChangesById(kwargs["definition_changes"]) + + registry.addContainer(stack) + registry.addContainer(user_container) + + return stack From 7eb5441ebc818a862038f36133a7ab3bd845ab7f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:39:57 +0200 Subject: [PATCH 131/816] Add an "activeMachine" property to MachineManager Directly exposes the global container stack to QML. --- cura/Settings/MachineManager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e690fcec1d..8df42ea325 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -495,6 +495,10 @@ class MachineManager(QObject): return "" + @pyqtProperty("QObject", notify = globalContainerChanged) + def activeMachine(self) -> GlobalStack: + return self._global_container_stack + @pyqtProperty(str, notify = activeStackChanged) def activeStackId(self) -> str: if self._active_container_stack: From cbc19b13eb7aec6b5ecafd331ea19e17792c77f1 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:40:34 +0200 Subject: [PATCH 132/816] Deprecate the activeMachineName/Id properties in favour of activeMachine --- cura/Settings/MachineManager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 8df42ea325..52eeb18a3a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -11,6 +11,7 @@ from UM.Application import Application from UM.Preferences import Preferences from UM.Logger import Logger from UM.Message import Message +from UM.Decorators import deprecated from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack @@ -482,6 +483,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = globalContainerChanged) + @deprecated("Use activeMachine.name", "2.6") def activeMachineName(self) -> str: if self._global_container_stack: return self._global_container_stack.getName() @@ -489,6 +491,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = globalContainerChanged) + @deprecated("Use activeMachine.id", "2.6") def activeMachineId(self) -> str: if self._global_container_stack: return self._global_container_stack.getId() From 82333a244b7cec92191bab6706c17708bfb31258 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:40:58 +0200 Subject: [PATCH 133/816] Add some initial code to use the new classes to create new machines --- cura/Settings/MachineManager.py | 57 +++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 52eeb18a3a..f75c9d19a7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -25,6 +25,9 @@ from cura.QualityManager import QualityManager from cura.PrinterOutputDevice import PrinterOutputDevice from cura.Settings.ExtruderManager import ExtruderManager +from .GlobalStack import GlobalStack +from .CuraStackBuilder import CuraStackBuilder + from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -44,10 +47,16 @@ class MachineManager(QObject): self.globalContainerChanged.connect(self.activeQualityChanged) self._stacks_have_errors = None - self._empty_variant_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_variant")[0] - self._empty_material_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_material")[0] - self._empty_quality_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality")[0] + #self._empty_variant_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_variant")[0] + #self._empty_material_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_material")[0] + #self._empty_quality_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality")[0] + #self._empty_quality_changes_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality_changes")[0] + + self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + self._empty_quality_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_quality_changes_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality_changes")[0] + self._onGlobalContainerChanged() ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) @@ -349,30 +358,38 @@ class MachineManager(QObject): if definitions: definition = definitions[0] name = self._createUniqueName("machine", "", name, definition.getName()) - new_global_stack = ContainerStack(name) - new_global_stack.addMetaDataEntry("type", "machine") - container_registry.addContainer(new_global_stack) variant_instance_container = self._updateVariantContainer(definition) material_instance_container = self._updateMaterialContainer(definition, variant_instance_container) quality_instance_container = self._updateQualityContainer(definition, variant_instance_container, material_instance_container) - current_settings_instance_container = InstanceContainer(name + "_current_settings") - current_settings_instance_container.addMetaDataEntry("machine", name) - current_settings_instance_container.addMetaDataEntry("type", "user") - current_settings_instance_container.setDefinition(definitions[0]) - container_registry.addContainer(current_settings_instance_container) + #new_global_stack = GlobalStack(name) + #container_registry.addContainer(new_global_stack) - new_global_stack.addContainer(definition) - if variant_instance_container: - new_global_stack.addContainer(variant_instance_container) - if material_instance_container: - new_global_stack.addContainer(material_instance_container) - if quality_instance_container: - new_global_stack.addContainer(quality_instance_container) + new_global_stack = CuraStackBuilder.createGlobalStack( + new_stack_id = name, + definition = definition, + quality = quality_instance_container.getId(), + material = material_instance_container.getId(), + variant = variant_instance_container.getId(), + ) - new_global_stack.addContainer(self._empty_quality_changes_container) - new_global_stack.addContainer(current_settings_instance_container) + #current_settings_instance_container = InstanceContainer(name + "_current_settings") + #current_settings_instance_container.addMetaDataEntry("machine", name) + #current_settings_instance_container.addMetaDataEntry("type", "user") + #current_settings_instance_container.setDefinition(definitions[0]) + #container_registry.addContainer(current_settings_instance_container) + + #new_global_stack.addContainer(definition) + #if variant_instance_container: + #new_global_stack.addContainer(variant_instance_container) + #if material_instance_container: + #new_global_stack.addContainer(material_instance_container) + #if quality_instance_container: + #new_global_stack.addContainer(quality_instance_container) + + #new_global_stack.addContainer(self._empty_quality_changes_container) + #new_global_stack.addContainer(current_settings_instance_container) ExtruderManager.getInstance().addMachineExtruders(definition, new_global_stack.getId()) From a16b5d73b6465a7feec76985b046f8bf2e175cce Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:41:21 +0200 Subject: [PATCH 134/816] Partial fix for infinite recursion when trying to call getProperty --- cura/Settings/GlobalStack.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index b52575e4f7..763802c18c 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -23,6 +23,8 @@ class GlobalStack(CuraContainerStack): self._extruders = [] + self._resolving_property = None + @pyqtProperty("QVariantList") def extruders(self) -> list: return self._extruders @@ -37,8 +39,9 @@ class GlobalStack(CuraContainerStack): ## Overridden from ContainerStack @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: - if property_name == "value": + if property_name == "value" and not self._resolving_property: if not self.hasUserValue(key): + self._resolving_property = key resolve = super().getProperty(key, "resolve") if resolve: return resolve From d3d2bdfaebe65ff1dc8bb7250368389f6e931006 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 4 Apr 2017 17:41:43 +0200 Subject: [PATCH 135/816] getResolveOrValue has become obsolete now that stack.getProperty can return a resolve --- cura/Settings/ExtruderManager.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index f6c1759078..5348f157d7 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -513,16 +513,16 @@ class ExtruderManager(QObject): global_stack = Application.getInstance().getGlobalContainerStack() resolved_value = global_stack.getProperty(key, "resolve") - if resolved_value is not None: - user_container = global_stack.findContainer({"type": "user"}) - quality_changes_container = global_stack.findContainer({"type": "quality_changes"}) - if user_container.hasProperty(key, "value") or quality_changes_container.hasProperty(key, "value"): - # Normal case - value = global_stack.getProperty(key, "value") - else: - # We have a resolved value and we're using it because of no user and quality_changes value - value = resolved_value - else: - value = global_stack.getRawProperty(key, "value") + #if resolved_value is not None: + #user_container = global_stack.findContainer({"type": "user"}) + #quality_changes_container = global_stack.findContainer({"type": "quality_changes"}) + #if user_container.hasProperty(key, "value") or quality_changes_container.hasProperty(key, "value"): + ## Normal case + #value = global_stack.getProperty(key, "value") + #else: + ## We have a resolved value and we're using it because of no user and quality_changes value + #value = resolved_value + #else: + #value = global_stack.getRawProperty(key, "value") - return value + return resolved_value From 4da2de532b002c98b81df61fb37ace0fa41a18a8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 02:21:03 +0200 Subject: [PATCH 136/816] Fix saving of Global/Extruder stack Since we now have proper types for them, we can simplify the save code --- cura/CuraApplication.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 38e32cf99a..e4441f1a37 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -62,6 +62,8 @@ from cura.Settings.ContainerSettingsModel import ContainerSettingsModel from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler from cura.Settings.QualitySettingsModel import QualitySettingsModel from cura.Settings.ContainerManager import ContainerManager +from cura.Settings.GlobalStack import GlobalStack +from cura.Settings.ExtruderStack import ExtruderStack from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS from UM.FlameProfiler import pyqtSlot @@ -427,16 +429,18 @@ class CuraApplication(QtApplication): mime_type = ContainerRegistry.getMimeTypeForContainer(type(stack)) file_name = urllib.parse.quote_plus(stack.getId()) + "." + mime_type.preferredSuffix - stack_type = stack.getMetaDataEntry("type", None) + path = None - if not stack_type or stack_type == "machine": + if isinstance(stack, GlobalStack): path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) - elif stack_type == "extruder_train": + elif isinstance(stack, ExtruderStack): path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name) - if path: - stack.setPath(path) - with SaveFile(path, "wt") as f: - f.write(data) + else: + path = Resources.getStoragePath(Resources.ContainerStacks, file_name) + + stack.setPath(path) + with SaveFile(path, "wt") as f: + f.write(data) @pyqtSlot(str, result = QUrl) From 1c75a8277990c5292a10e2857f8fb19649b9d66a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 02:21:39 +0200 Subject: [PATCH 137/816] Fix the hacked "getResolveOrValue" to return value always instead of resolve --- 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 5348f157d7..63d2e2861f 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -512,7 +512,7 @@ class ExtruderManager(QObject): def getResolveOrValue(key): global_stack = Application.getInstance().getGlobalContainerStack() - resolved_value = global_stack.getProperty(key, "resolve") + resolved_value = global_stack.getProperty(key, "value") #if resolved_value is not None: #user_container = global_stack.findContainer({"type": "user"}) #quality_changes_container = global_stack.findContainer({"type": "quality_changes"}) From 608e62e081124e638fe63e284a8754641aea427d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 02:22:45 +0200 Subject: [PATCH 138/816] Do not try to get resolve when extruder count == 1 or for nonexistant properties --- cura/Settings/GlobalStack.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 763802c18c..806c37040f 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -39,12 +39,13 @@ class GlobalStack(CuraContainerStack): ## Overridden from ContainerStack @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: - if property_name == "value" and not self._resolving_property: - if not self.hasUserValue(key): + if not self.definition.findDefinitions(key = key): + return None + + if property_name == "value" and self._resolving_property != key: + if not self.hasUserValue(key) and len(self._extruders) > 1: self._resolving_property = key resolve = super().getProperty(key, "resolve") - if resolve: - return resolve return super().getProperty(key, property_name) From e6121039d9dc0800f0170d684e4778d9b50b1a65 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 10 Mar 2017 23:14:11 +0100 Subject: [PATCH 139/816] Add extruders to Custom FDM Printer definition --- resources/definitions/custom.def.json | 11 +++++++++++ resources/extruders/custom_extruder_1.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_2.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_3.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_4.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_5.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_6.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_7.def.json | 17 +++++++++++++++++ resources/extruders/custom_extruder_8.def.json | 17 +++++++++++++++++ 9 files changed, 147 insertions(+) create mode 100644 resources/extruders/custom_extruder_1.def.json create mode 100644 resources/extruders/custom_extruder_2.def.json create mode 100644 resources/extruders/custom_extruder_3.def.json create mode 100644 resources/extruders/custom_extruder_4.def.json create mode 100644 resources/extruders/custom_extruder_5.def.json create mode 100644 resources/extruders/custom_extruder_6.def.json create mode 100644 resources/extruders/custom_extruder_7.def.json create mode 100644 resources/extruders/custom_extruder_8.def.json diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index 7ae1d1bd28..8f15f00a0f 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -10,6 +10,17 @@ "category": "Custom", "file_formats": "text/x-gcode", "has_materials": true, + "machine_extruder_trains": + { + "0": "custom_extruder_1", + "1": "custom_extruder_2", + "2": "custom_extruder_3", + "3": "custom_extruder_4", + "4": "custom_extruder_5", + "5": "custom_extruder_6", + "6": "custom_extruder_7", + "7": "custom_extruder_8" + }, "first_start_actions": ["MachineSettingsAction"] } } diff --git a/resources/extruders/custom_extruder_1.def.json b/resources/extruders/custom_extruder_1.def.json new file mode 100644 index 0000000000..859c6a2f22 --- /dev/null +++ b/resources/extruders/custom_extruder_1.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_1", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_2.def.json b/resources/extruders/custom_extruder_2.def.json new file mode 100644 index 0000000000..eecda5dfcd --- /dev/null +++ b/resources/extruders/custom_extruder_2.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_2", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_3.def.json b/resources/extruders/custom_extruder_3.def.json new file mode 100644 index 0000000000..77909ec05d --- /dev/null +++ b/resources/extruders/custom_extruder_3.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_3", + "version": 2, + "name": "Extruder 3", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "2" + }, + + "overrides": { + "extruder_nr": { + "default_value": 2, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_4.def.json b/resources/extruders/custom_extruder_4.def.json new file mode 100644 index 0000000000..be792c3a8e --- /dev/null +++ b/resources/extruders/custom_extruder_4.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_4", + "version": 2, + "name": "Extruder 4", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "3" + }, + + "overrides": { + "extruder_nr": { + "default_value": 3, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_5.def.json b/resources/extruders/custom_extruder_5.def.json new file mode 100644 index 0000000000..ea64605041 --- /dev/null +++ b/resources/extruders/custom_extruder_5.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_5", + "version": 2, + "name": "Extruder 5", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "4" + }, + + "overrides": { + "extruder_nr": { + "default_value": 4, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_6.def.json b/resources/extruders/custom_extruder_6.def.json new file mode 100644 index 0000000000..fd27fadace --- /dev/null +++ b/resources/extruders/custom_extruder_6.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_6", + "version": 2, + "name": "Extruder 6", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "5" + }, + + "overrides": { + "extruder_nr": { + "default_value": 5, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_7.def.json b/resources/extruders/custom_extruder_7.def.json new file mode 100644 index 0000000000..cf003d1a6b --- /dev/null +++ b/resources/extruders/custom_extruder_7.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_7", + "version": 2, + "name": "Extruder 7", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "6" + }, + + "overrides": { + "extruder_nr": { + "default_value": 6, + "maximum_value": "7" + } + } +} diff --git a/resources/extruders/custom_extruder_8.def.json b/resources/extruders/custom_extruder_8.def.json new file mode 100644 index 0000000000..f418a55186 --- /dev/null +++ b/resources/extruders/custom_extruder_8.def.json @@ -0,0 +1,17 @@ +{ + "id": "custom_extruder_8", + "version": 2, + "name": "Extruder 8", + "inherits": "fdmextruder", + "metadata": { + "machine": "custom", + "position": "7" + }, + + "overrides": { + "extruder_nr": { + "default_value": 7, + "maximum_value": "7" + } + } +} From 0c74b4d1089bf38c107f939678ee3bacc46a8cf0 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 10 Mar 2017 23:16:07 +0100 Subject: [PATCH 140/816] Don't create extruder tabs for "inactive" extruders If a printer definition defines more extruders than machine_extruder_count, these are no longer shown as tabs in the sidebar. --- cura/Settings/ExtrudersModel.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 7f4a77eb5f..5632a83a27 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -136,6 +136,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): items.append(item) changed = True + machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") manager = ExtruderManager.getInstance() for extruder in manager.getMachineExtruders(global_container_stack.getId()): extruder_name = extruder.getName() @@ -145,6 +146,9 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): position = int(position) except ValueError: #Not a proper int. position = -1 + if position >= machine_extruder_count: + continue + default_color = self.defaultColors[position] if position >= 0 and position < len(self.defaultColors) else self.defaultColors[0] color = material.getMetaDataEntry("color_code", default = default_color) if material else default_color item = { #Construct an item with only the relevant information. From e853d87779d4e730dfb16ce4c777ce96f2d886e7 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 10 Mar 2017 23:17:03 +0100 Subject: [PATCH 141/816] Add control to set the number of extruders in Machine Settings --- .../MachineSettingsAction.py | 19 ++++++--- .../MachineSettingsAction.qml | 39 +++++++++++++++++++ 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index c27f8db4a6..1feb748006 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -29,6 +29,7 @@ class MachineSettingsAction(MachineAction): self._container_registry = ContainerRegistry.getInstance() self._container_registry.containerAdded.connect(self._onContainerAdded) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) def _reset(self): global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -67,13 +68,21 @@ class MachineSettingsAction(MachineAction): def _onContainerAdded(self, container): # Add this action as a supported action to all machine definitions if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine": - if container.getProperty("machine_extruder_count", "value") > 1: - # Multiextruder printers are not currently supported - Logger.log("d", "Not attaching MachineSettingsAction to %s; Multi-extrusion printers are not supported", container.getId()) - return - Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) + def _onGlobalContainerChanged(self): + self.globalContainerChanged.emit() + + globalContainerChanged = pyqtSignal() + + @pyqtProperty(int, notify = globalContainerChanged) + def definedExtruderCount(self): + global_container_stack = Application.getInstance().getGlobalContainerStack() + if not global_container_stack: + return 0 + + return len(global_container_stack.getMetaDataEntry("machine_extruder_trains")) + @pyqtSlot() def forceUpdate(self): # Force rebuilding the build volume by reloading the global container stack. diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 26bbccd44a..4dfb7548d6 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -345,6 +345,35 @@ Cura.MachineAction Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Label + { + text: catalog.i18nc("@label", "Number of Extruders") + } + + ComboBox + { + id: extruderCountComboBox + model: ListModel + { + id: extruderCountModel + Component.onCompleted: + { + for(var i = 0; i < manager.definedExtruderCount; i++) + { + extruderCountModel.append({text: String(i + 1), value: i}); + } + } + } + currentIndex: machineExtruderCountProvider.properties.value - 1 + onActivated: + { + machineExtruderCountProvider.setPropertyValue("value", index + 1); + manager.forceUpdate(); + } + } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + + Label { text: catalog.i18nc("@label", "Nozzle size") @@ -532,6 +561,16 @@ Cura.MachineAction storeIndex: manager.containerIndex } + UM.SettingPropertyProvider + { + id: machineExtruderCountProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "machine_extruder_count" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + UM.SettingPropertyProvider { id: gantryHeightProvider From a41bc77e5a9521ca7a624aa334ea39431e6c8207 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 11 Mar 2017 11:10:55 +0100 Subject: [PATCH 142/816] Hide nozzlesize field for multiextrusion printers... and hide extruder count combobox when no extruders are defined --- .../MachineSettingsAction.qml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 4dfb7548d6..0d2165ddb4 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -348,11 +348,13 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "Number of Extruders") + visible: extruderCountComboBox.visible } ComboBox { id: extruderCountComboBox + visible: manager.definedExtruderCount > 1 model: ListModel { id: extruderCountModel @@ -364,34 +366,34 @@ Cura.MachineAction } } } - currentIndex: machineExtruderCountProvider.properties.value - 1 + currentIndex: machineExtruderCountProvider.properties.value - 1 onActivated: { machineExtruderCountProvider.setPropertyValue("value", index + 1); manager.forceUpdate(); } } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height; visible: extruderCountComboBox.visible } Label { text: catalog.i18nc("@label", "Nozzle size") - visible: !Cura.MachineManager.hasVariants + visible: nozzleSizeField.visible } TextField { id: nozzleSizeField text: machineNozzleSizeProvider.properties.value - visible: !Cura.MachineManager.hasVariants + visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1 validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: { machineNozzleSizeProvider.setPropertyValue("value", text) } } Label { text: catalog.i18nc("@label", "mm") - visible: !Cura.MachineManager.hasVariants - } + visible: nozzleSizeField.visible + } } } } From 940a60a4cb773f642e5c333cb8f9c131f246a6cc Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 22 Mar 2017 18:50:31 +0100 Subject: [PATCH 143/816] Fix font rendering on second column --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 0d2165ddb4..cbc7325d5c 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -55,7 +55,7 @@ Cura.MachineAction Column { - width: parent.width / 2 + width: Math.floor(parent.width / 2) spacing: UM.Theme.getSize("default_margin").height Label @@ -243,7 +243,7 @@ Cura.MachineAction Column { - width: parent.width / 2 + width: Math.floor(parent.width / 2) spacing: UM.Theme.getSize("default_margin").height Label @@ -407,7 +407,7 @@ Cura.MachineAction Column { height: parent.height - width: parent.width / 2 + width: Math.floor(parent.width / 2) Label { text: catalog.i18nc("@label", "Start Gcode") @@ -431,7 +431,7 @@ Cura.MachineAction } Column { height: parent.height - width: parent.width / 2 + width: Math.floor(parent.width / 2) Label { text: catalog.i18nc("@label", "End Gcode") From 91bc023d2a9020c90d5234bae349c440a126ab97 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 26 Mar 2017 19:39:36 +0200 Subject: [PATCH 144/816] Add tabs for extruder settings --- .../MachineSettingsAction.qml | 728 +++++++++--------- 1 file changed, 377 insertions(+), 351 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index cbc7325d5c..5bbcafb945 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -12,6 +12,9 @@ import Cura 1.0 as Cura Cura.MachineAction { + id: base + property var extrudersModel: Cura.ExtrudersModel{} + anchors.fill: parent; Item { @@ -38,420 +41,443 @@ Cura.MachineAction text: catalog.i18nc("@label", "Please enter the correct settings for your printer below:") } - Column + TabView { + id: settingsTabs height: parent.height - y - width: parent.width - UM.Theme.getSize("default_margin").width - spacing: UM.Theme.getSize("default_margin").height - + width: parent.width anchors.left: parent.left anchors.top: pageDescription.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height - Row + property real columnWidth: Math.floor((width - 3 * UM.Theme.getSize("default_margin").width) / 2) + + Tab { - width: parent.width - spacing: UM.Theme.getSize("default_margin").height + title: catalog.i18nc("@title:tab", "Printer"); + anchors.margins: UM.Theme.getSize("default_margin").width Column { - width: Math.floor(parent.width / 2) spacing: UM.Theme.getSize("default_margin").height - Label + Row { - text: catalog.i18nc("@label", "Printer Settings") - font.bold: true - } + width: parent.width + spacing: UM.Theme.getSize("default_margin").height - Grid - { - columns: 3 - columnSpacing: UM.Theme.getSize("default_margin").width - - Label + Column { - text: catalog.i18nc("@label", "X (Width)") - } - TextField - { - id: buildAreaWidthField - text: machineWidthProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineWidthProvider.setPropertyValue("value", text); manager.forceUpdate() } - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Label - { - text: catalog.i18nc("@label", "Y (Depth)") - } - TextField - { - id: buildAreaDepthField - text: machineDepthProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineDepthProvider.setPropertyValue("value", text); manager.forceUpdate() } - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Label - { - text: catalog.i18nc("@label", "Z (Height)") - } - TextField - { - id: buildAreaHeightField - text: machineHeightProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineHeightProvider.setPropertyValue("value", text); manager.forceUpdate() } - } - Label - { - text: catalog.i18nc("@label", "mm") - } - } - - Column - { - Row - { - spacing: UM.Theme.getSize("default_margin").width + width: settingsTabs.columnWidth + spacing: UM.Theme.getSize("default_margin").height Label { - text: catalog.i18nc("@label", "Build Plate Shape") + text: catalog.i18nc("@label", "Printer Settings") + font.bold: true } - ComboBox + Grid { - id: shapeComboBox - model: ListModel + columns: 3 + columnSpacing: UM.Theme.getSize("default_margin").width + + Label { - id: shapesModel - Component.onCompleted: + text: catalog.i18nc("@label", "X (Width)") + } + TextField + { + id: buildAreaWidthField + text: machineWidthProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { machineWidthProvider.setPropertyValue("value", text); manager.forceUpdate() } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "Y (Depth)") + } + TextField + { + id: buildAreaDepthField + text: machineDepthProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { machineDepthProvider.setPropertyValue("value", text); manager.forceUpdate() } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "Z (Height)") + } + TextField + { + id: buildAreaHeightField + text: machineHeightProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { machineHeightProvider.setPropertyValue("value", text); manager.forceUpdate() } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + } + + Column + { + Row + { + spacing: UM.Theme.getSize("default_margin").width + + Label { - // Options come in as a string-representation of an OrderedDict - var options = machineShapeProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/); - if(options) + text: catalog.i18nc("@label", "Build Plate Shape") + } + + ComboBox + { + id: shapeComboBox + model: ListModel { - options = options[1].split("), (") - for(var i = 0; i < options.length; i++) + id: shapesModel + Component.onCompleted: { - var option = options[i].substring(1, options[i].length - 1).split("', '") - shapesModel.append({text: option[1], value: option[0]}); + // Options come in as a string-representation of an OrderedDict + var options = machineShapeProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/); + if(options) + { + options = options[1].split("), (") + for(var i = 0; i < options.length; i++) + { + var option = options[i].substring(1, options[i].length - 1).split("', '") + shapesModel.append({text: option[1], value: option[0]}); + } + } + } + } + currentIndex: + { + var currentValue = machineShapeProvider.properties.value; + var index = 0; + for(var i = 0; i < shapesModel.count; i++) + { + if(shapesModel.get(i).value == currentValue) { + index = i; + break; + } + } + return index + } + onActivated: + { + machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value); + manager.forceUpdate(); + } + } + } + CheckBox + { + id: centerIsZeroCheckBox + text: catalog.i18nc("@option:check", "Machine Center is Zero") + checked: String(machineCenterIsZeroProvider.properties.value).toLowerCase() != 'false' + onClicked: + { + machineCenterIsZeroProvider.setPropertyValue("value", checked); + manager.forceUpdate(); + } + } + CheckBox + { + id: heatedBedCheckBox + text: catalog.i18nc("@option:check", "Heated Bed") + checked: String(machineHeatedBedProvider.properties.value).toLowerCase() != 'false' + onClicked: machineHeatedBedProvider.setPropertyValue("value", checked) + } + } + + Row + { + spacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "GCode Flavor") + } + + ComboBox + { + model: ListModel + { + id: flavorModel + Component.onCompleted: + { + // Options come in as a string-representation of an OrderedDict + var options = machineGCodeFlavorProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/); + if(options) + { + options = options[1].split("), (") + for(var i = 0; i < options.length; i++) + { + var option = options[i].substring(1, options[i].length - 1).split("', '") + flavorModel.append({text: option[1], value: option[0]}); + } } } } - } - currentIndex: - { - var currentValue = machineShapeProvider.properties.value; - var index = 0; - for(var i = 0; i < shapesModel.count; i++) + currentIndex: { - if(shapesModel.get(i).value == currentValue) { - index = i; - break; + var currentValue = machineGCodeFlavorProvider.properties.value; + var index = 0; + for(var i = 0; i < flavorModel.count; i++) + { + if(flavorModel.get(i).value == currentValue) { + index = i; + break; + } + } + return index + } + onActivated: + { + machineGCodeFlavorProvider.setPropertyValue("value", flavorModel.get(index).value); + manager.updateHasMaterialsMetadata(); + } + } + } + } + + Column + { + width: settingsTabs.columnWidth + spacing: UM.Theme.getSize("default_margin").height + + Label + { + text: catalog.i18nc("@label", "Printhead Settings") + font.bold: true + } + + Grid + { + columns: 3 + columnSpacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "X min") + } + TextField + { + id: printheadXMinField + text: getHeadPolygonCoord("x", "min") + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: setHeadPolygon() + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "Y min") + } + TextField + { + id: printheadYMinField + text: getHeadPolygonCoord("y", "min") + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: setHeadPolygon() + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "X max") + } + TextField + { + id: printheadXMaxField + text: getHeadPolygonCoord("x", "max") + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: setHeadPolygon() + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "Y max") + } + TextField + { + id: printheadYMaxField + text: getHeadPolygonCoord("y", "max") + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: setHeadPolygon() + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + + Label + { + text: catalog.i18nc("@label", "Gantry height") + } + TextField + { + id: gantryHeightField + text: gantryHeightProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { gantryHeightProvider.setPropertyValue("value", text) } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } + + Label + { + text: catalog.i18nc("@label", "Number of Extruders") + visible: extruderCountComboBox.visible + } + + ComboBox + { + id: extruderCountComboBox + visible: manager.definedExtruderCount > 1 + model: ListModel + { + id: extruderCountModel + Component.onCompleted: + { + for(var i = 0; i < manager.definedExtruderCount; i++) + { + extruderCountModel.append({text: String(i + 1), value: i}); + } } } - return index + currentIndex: machineExtruderCountProvider.properties.value - 1 + onActivated: + { + machineExtruderCountProvider.setPropertyValue("value", index + 1); + manager.forceUpdate(); + } } - onActivated: + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height; visible: extruderCountComboBox.visible } + + + Label { - machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value); - manager.forceUpdate(); + text: catalog.i18nc("@label", "Nozzle size") + visible: nozzleSizeField.visible } + TextField + { + id: nozzleSizeField + text: machineNozzleSizeProvider.properties.value + visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1 + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { machineNozzleSizeProvider.setPropertyValue("value", text) } + } + Label + { + text: catalog.i18nc("@label", "mm") + visible: nozzleSizeField.visible + } } } - CheckBox - { - id: centerIsZeroCheckBox - text: catalog.i18nc("@option:check", "Machine Center is Zero") - checked: String(machineCenterIsZeroProvider.properties.value).toLowerCase() != 'false' - onClicked: - { - machineCenterIsZeroProvider.setPropertyValue("value", checked); - manager.forceUpdate(); - } - } - CheckBox - { - id: heatedBedCheckBox - text: catalog.i18nc("@option:check", "Heated Bed") - checked: String(machineHeatedBedProvider.properties.value).toLowerCase() != 'false' - onClicked: machineHeatedBedProvider.setPropertyValue("value", checked) - } } Row { spacing: UM.Theme.getSize("default_margin").width - - Label + anchors.left: parent.left + anchors.right: parent.right + height: parent.height - y + Column { - text: catalog.i18nc("@label", "GCode Flavor") - } - - ComboBox - { - model: ListModel + height: parent.height + width: settingsTabs.columnWidth + Label { - id: flavorModel - Component.onCompleted: + text: catalog.i18nc("@label", "Start Gcode") + } + TextArea + { + id: machineStartGcodeField + width: parent.width + height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap + text: machineStartGcodeProvider.properties.value + onActiveFocusChanged: { - // Options come in as a string-representation of an OrderedDict - var options = machineGCodeFlavorProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/); - if(options) + if(!activeFocus) { - options = options[1].split("), (") - for(var i = 0; i < options.length; i++) - { - var option = options[i].substring(1, options[i].length - 1).split("', '") - flavorModel.append({text: option[1], value: option[0]}); - } + machineStartGcodeProvider.setPropertyValue("value", machineStartGcodeField.text) } } } - currentIndex: + } + Column { + height: parent.height + width: settingsTabs.columnWidth + Label { - var currentValue = machineGCodeFlavorProvider.properties.value; - var index = 0; - for(var i = 0; i < flavorModel.count; i++) - { - if(flavorModel.get(i).value == currentValue) { - index = i; - break; - } - } - return index + text: catalog.i18nc("@label", "End Gcode") } - onActivated: + TextArea { - machineGCodeFlavorProvider.setPropertyValue("value", flavorModel.get(index).value); - manager.updateHasMaterialsMetadata(); - } - } - } - } - - Column - { - width: Math.floor(parent.width / 2) - spacing: UM.Theme.getSize("default_margin").height - - Label - { - text: catalog.i18nc("@label", "Printhead Settings") - font.bold: true - } - - Grid - { - columns: 3 - columnSpacing: UM.Theme.getSize("default_margin").width - - Label - { - text: catalog.i18nc("@label", "X min") - } - TextField - { - id: printheadXMinField - text: getHeadPolygonCoord("x", "min") - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: setHeadPolygon() - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Label - { - text: catalog.i18nc("@label", "Y min") - } - TextField - { - id: printheadYMinField - text: getHeadPolygonCoord("y", "min") - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: setHeadPolygon() - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Label - { - text: catalog.i18nc("@label", "X max") - } - TextField - { - id: printheadXMaxField - text: getHeadPolygonCoord("x", "max") - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: setHeadPolygon() - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Label - { - text: catalog.i18nc("@label", "Y max") - } - TextField - { - id: printheadYMaxField - text: getHeadPolygonCoord("y", "max") - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: setHeadPolygon() - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - - Label - { - text: catalog.i18nc("@label", "Gantry height") - } - TextField - { - id: gantryHeightField - text: gantryHeightProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { gantryHeightProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") - } - - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } - - Label - { - text: catalog.i18nc("@label", "Number of Extruders") - visible: extruderCountComboBox.visible - } - - ComboBox - { - id: extruderCountComboBox - visible: manager.definedExtruderCount > 1 - model: ListModel - { - id: extruderCountModel - Component.onCompleted: + id: machineEndGcodeField + width: parent.width + height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap + text: machineEndGcodeProvider.properties.value + onActiveFocusChanged: { - for(var i = 0; i < manager.definedExtruderCount; i++) + if(!activeFocus) { - extruderCountModel.append({text: String(i + 1), value: i}); + machineEndGcodeProvider.setPropertyValue("value", machineEndGcodeField.text) } } } - currentIndex: machineExtruderCountProvider.properties.value - 1 - onActivated: - { - machineExtruderCountProvider.setPropertyValue("value", index + 1); - manager.forceUpdate(); - } } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height; visible: extruderCountComboBox.visible } - - - Label - { - text: catalog.i18nc("@label", "Nozzle size") - visible: nozzleSizeField.visible - } - TextField - { - id: nozzleSizeField - text: machineNozzleSizeProvider.properties.value - visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1 - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineNozzleSizeProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") - visible: nozzleSizeField.visible - } } } } - Row + Repeater { - spacing: UM.Theme.getSize("default_margin").width - anchors.left: parent.left - anchors.right: parent.right - height: parent.height - y - Column + model: (machineExtruderCountProvider.properties.value > 1) ? base.extrudersModel : 0 + + Tab { - height: parent.height - width: Math.floor(parent.width / 2) - Label - { - text: catalog.i18nc("@label", "Start Gcode") - } - TextArea - { - id: machineStartGcodeField - width: parent.width - height: parent.height - y - font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap - text: machineStartGcodeProvider.properties.value - onActiveFocusChanged: - { - if(!activeFocus) - { - machineStartGcodeProvider.setPropertyValue("value", machineStartGcodeField.text) - } - } - } - } - Column { - height: parent.height - width: Math.floor(parent.width / 2) - Label - { - text: catalog.i18nc("@label", "End Gcode") - } - TextArea - { - id: machineEndGcodeField - width: parent.width - height: parent.height - y - font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap - text: machineEndGcodeProvider.properties.value - onActiveFocusChanged: - { - if(!activeFocus) - { - machineEndGcodeProvider.setPropertyValue("value", machineEndGcodeField.text) - } - } - } + title: model.name + anchors.margins: UM.Theme.getSize("default_margin").width } } } From af280047d1eebc77fc35c215412e2cd30cc54986 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 11:35:56 +0200 Subject: [PATCH 145/816] Add extruder fields for start/end gcode, offset, nozzle size (non-functional) --- .../MachineSettingsAction.qml | 195 ++++++++++++++++-- 1 file changed, 181 insertions(+), 14 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 5bbcafb945..8744f6fffc 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -31,15 +31,6 @@ Cura.MachineAction wrapMode: Text.WordWrap font.pointSize: 18; } - Label - { - id: pageDescription - anchors.top: pageTitle.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "Please enter the correct settings for your printer below:") - } TabView { @@ -47,7 +38,7 @@ Cura.MachineAction height: parent.height - y width: parent.width anchors.left: parent.left - anchors.top: pageDescription.bottom + anchors.top: pageTitle.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height property real columnWidth: Math.floor((width - 3 * UM.Theme.getSize("default_margin").width) / 2) @@ -81,6 +72,7 @@ Cura.MachineAction { columns: 3 columnSpacing: UM.Theme.getSize("default_margin").width + rowSpacing: UM.Theme.getSize("default_lining").width Label { @@ -269,6 +261,7 @@ Cura.MachineAction { columns: 3 columnSpacing: UM.Theme.getSize("default_margin").width + rowSpacing: UM.Theme.getSize("default_lining").width Label { @@ -405,8 +398,8 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "mm") - visible: nozzleSizeField.visible - } + visible: nozzleSizeField.visible + } } } } @@ -472,12 +465,135 @@ Cura.MachineAction Repeater { - model: (machineExtruderCountProvider.properties.value > 1) ? base.extrudersModel : 0 + model: (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 Tab { - title: model.name + title: base.extrudersModel.getItem(index).name anchors.margins: UM.Theme.getSize("default_margin").width + + Column + { + spacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Printer Settings") + font.bold: true + } + + Grid + { + columns: 3 + columnSpacing: UM.Theme.getSize("default_margin").width + rowSpacing: UM.Theme.getSize("default_lining").width + + Label + { + text: catalog.i18nc("@label", "Nozzle size") + } + TextField + { + id: extruderNozzleSizeField + text: extruderNozzleSizeProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { extruderNozzleSizeProvider.setPropertyValue("value", text) } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + Label + { + text: catalog.i18nc("@label", "Nozzle offset X") + } + TextField + { + id: extruderOffsetXField + text: extruderOffsetXProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { extruderOffsetXProvider.setPropertyValue("value", text) } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + Label + { + text: catalog.i18nc("@label", "Nozzle offset Y") + } + TextField + { + id: extruderOffsetYField + text: extruderOffsetYProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: { extruderOffsetYProvider.setPropertyValue("value", text) } + } + Label + { + text: catalog.i18nc("@label", "mm") + } + + } + + Row + { + spacing: UM.Theme.getSize("default_margin").width + anchors.left: parent.left + anchors.right: parent.right + height: parent.height - y + Column + { + height: parent.height + width: settingsTabs.columnWidth + Label + { + text: catalog.i18nc("@label", "Extruder Start Gcode") + } + TextArea + { + id: extruderStartGcodeField + width: parent.width + height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap + text: extruderStartGcodeProvider.properties.value + onActiveFocusChanged: + { + if(!activeFocus) + { + extruderStartGcodeProvider.setPropertyValue("value", extruderStartGcodeField.text) + } + } + } + } + Column { + height: parent.height + width: settingsTabs.columnWidth + Label + { + text: catalog.i18nc("@label", "Extruder End Gcode") + } + TextArea + { + id: extruderEndGcodeField + width: parent.width + height: parent.height - y + font: UM.Theme.getFont("fixed") + wrapMode: TextEdit.NoWrap + text: extruderEndGcodeProvider.properties.value + onActiveFocusChanged: + { + if(!activeFocus) + { + extruderEndGcodeProvider.setPropertyValue("value", extruderEndGcodeField.text) + } + } + } + } + } + } } } } @@ -640,4 +756,55 @@ Cura.MachineAction storeIndex: manager.containerIndex } + UM.SettingPropertyProvider + { + id: extruderNozzleSizeProvider + + containerStackId: Cura.MachineManager.activeStackId + key: "machine_nozzle_size" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + + UM.SettingPropertyProvider + { + id: extruderOffsetXProvider + + containerStackId: Cura.MachineManager.activeStackId + key: "machine_nozzle_offset_x" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + + UM.SettingPropertyProvider + { + id: extruderOffsetYProvider + + containerStackId: Cura.MachineManager.activeStackId + key: "machine_nozzle_offset_y" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + + UM.SettingPropertyProvider + { + id: extruderStartGcodeProvider + + containerStackId: Cura.MachineManager.activeStackId + key: "machine_extruder_start_code" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + + UM.SettingPropertyProvider + { + id: extruderEndGcodeProvider + + containerStackId: Cura.MachineManager.activeStackId + key: "machine_extruder_end_code" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + + } \ No newline at end of file From 818043854db4c56e799391e86dbc2966b64725b7 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 11:44:09 +0200 Subject: [PATCH 146/816] Set active extruder when switching extruder tabs in Machine Settings We can only get/set profiles for the active extruder. --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 8744f6fffc..c8027d75bf 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -463,6 +463,14 @@ Cura.MachineAction } } + onCurrentIndexChanged: + { + if(currentIndex > 0) + { + ExtruderManager.setActiveExtruderIndex(currentIndex - 1); + } + } + Repeater { model: (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 From 5d6d233eccf399f5a544cf3491b00a5d3f0d5f4a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 1 Apr 2017 15:08:15 +0200 Subject: [PATCH 147/816] Add definition for Peopoly Moai SLA printer --- resources/definitions/peopoly_moai.def.json | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 resources/definitions/peopoly_moai.def.json diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json new file mode 100644 index 0000000000..668b11519b --- /dev/null +++ b/resources/definitions/peopoly_moai.def.json @@ -0,0 +1,49 @@ +{ + "id": "peopoly_moai", + "version": 2, + "name": "Moai", + "inherits": "ultimaker", + "metadata": { + "visible": true, + "author": "Aldo Hoeben", + "manufacturer": "Peopoly", + "category": "Other", + "file_formats": "text/x-gcode", + "has_machine_quality": true, + "has_materials": false + }, + + "overrides": { + "machine_name": { "default_value": "Moai" }, + "machine_width": { + "default_value": 130 + }, + "machine_height": { + "default_value": 180 + }, + "machine_depth": { + "default_value": 130 + }, + "machine_nozzle_size": { + "default_value": 0.067 + }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -20, 10 ], + [ -20, -10 ], + [ 10, 10 ], + [ 10, -10 ] + ] + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G28 ;Home" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" + } + } +} From ae19a101fd3547c26f25ce18f061f10e844b2116 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 1 Apr 2017 15:10:05 +0200 Subject: [PATCH 148/816] Disable a number of features that are not compatible with SLA printing --- resources/definitions/peopoly_moai.def.json | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 668b11519b..bf84eee0a5 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -44,6 +44,42 @@ }, "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" + }, + + "print_sequence": { + "enabled": false + }, + "support_enable": { + "enabled": false + }, + "machine_nozzle_temp_enabled": { + "value": "False" + }, + "material_bed_temperature": { + "enabled": false + }, + "material_diameter": { + "enabled": false + }, + "cool_fan_enabled": { + "enabled": false, + "value": "False" + }, + "retraction_enable": { + "enabled": false, + "value": "False" + }, + "retract_at_layer_change": { + "enabled": false + }, + "cool_min_layer_time_fan_speed_max": { + "enabled": false + }, + "cool_fan_full_at_height": { + "enabled": false + }, + "cool_fan_full_layer": { + "enabled": false } } } From a904c383ea8c6854dce7c8a27883c1636cb92dbf Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 1 Apr 2017 15:29:01 +0200 Subject: [PATCH 149/816] Add Moai-specific "Normal" profile --- resources/definitions/peopoly_moai.def.json | 12 ++++++++-- .../peopoly_moai/peopoly_moai_normal.inst.cfg | 23 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index bf84eee0a5..b636ce26fc 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -46,6 +46,9 @@ "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" }, + "acceleration_enabled": { + "value": "False" + }, "print_sequence": { "enabled": false }, @@ -59,7 +62,8 @@ "enabled": false }, "material_diameter": { - "enabled": false + "enabled": false, + "value": "1.75" }, "cool_fan_enabled": { "enabled": false, @@ -68,7 +72,11 @@ "retraction_enable": { "enabled": false, "value": "False" - }, + }, + "retraction_combing": { + "enabled": false, + "value": "'off'" + }, "retract_at_layer_change": { "enabled": false }, diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg new file mode 100644 index 0000000000..6c52785671 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +name = Normal Quality +definition = peopoly_moai + +[metadata] +type = quality +weight = 0 +quality_type = normal + +[values] +infill_sparse_density = 50 +layer_height_0 = 0.1 +top_bottom_thickness = 0.4 +wall_thickness = 0.4 +speed_layer_0 = 5 +speed_print = 100 +speed_slowdown_layers = 2 +speed_topbottom = 100 +speed_travel = 300 +speed_travel_layer_0 = 300 +speed_wall = 100 +speed_wall_x = 100 From a2a6fb47f9419a35340075a61612d0e773d9b2ab Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 1 Apr 2017 15:37:53 +0200 Subject: [PATCH 150/816] Silence some value warnings --- resources/definitions/peopoly_moai.def.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index b636ce26fc..62c8ec7c99 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -46,6 +46,19 @@ "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" }, + "layer_height": { + "maximum_value_warning": "0.5" + }, + "layer_height_0": { + "maximum_value_warning": "0.5" + }, + "top_bottom_thickness": { + "minimum_value_warning": "0.1" + }, + "infill_sparse_thickness": { + "maximum_value_warning": "0.5" + }, + "acceleration_enabled": { "value": "False" }, From 164d172e2eee25a64451ab6fb11fc184d77a8ecd Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 1 Apr 2017 15:47:42 +0200 Subject: [PATCH 151/816] Code style --- resources/definitions/peopoly_moai.def.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 62c8ec7c99..29a17f4829 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -5,7 +5,7 @@ "inherits": "ultimaker", "metadata": { "visible": true, - "author": "Aldo Hoeben", + "author": "fieldOfView", "manufacturer": "Peopoly", "category": "Other", "file_formats": "text/x-gcode", @@ -47,16 +47,16 @@ }, "layer_height": { - "maximum_value_warning": "0.5" + "maximum_value_warning": "0.5" }, "layer_height_0": { - "maximum_value_warning": "0.5" + "maximum_value_warning": "0.5" }, "top_bottom_thickness": { - "minimum_value_warning": "0.1" + "minimum_value_warning": "0.1" }, "infill_sparse_thickness": { - "maximum_value_warning": "0.5" + "maximum_value_warning": "0.5" }, "acceleration_enabled": { @@ -83,12 +83,12 @@ "value": "False" }, "retraction_enable": { - "enabled": false, + "enabled": false, "value": "False" }, "retraction_combing": { - "enabled": false, - "value": "'off'" + "enabled": false, + "value": "'off'" }, "retract_at_layer_change": { "enabled": false From a8fffd45a0b88a66d0b1ccfca56ebcd1020a86af Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 12:00:49 +0200 Subject: [PATCH 152/816] Add High and Maximum Quality profiles --- .../peopoly_moai/peopoly_moai_high.inst.cfg | 24 +++++++++++++++++++ .../peopoly_moai/peopoly_moai_max.inst.cfg | 24 +++++++++++++++++++ .../peopoly_moai/peopoly_moai_normal.inst.cfg | 3 ++- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg create mode 100644 resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg new file mode 100644 index 0000000000..789e383b19 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = High Quality +definition = peopoly_moai + +[metadata] +type = quality +weight = 1 +quality_type = high + +[values] +infill_sparse_density = 70 +layer_height = 0.05 +layer_height_0 = 0.1 +top_bottom_thickness = 0.4 +wall_thickness = 0.4 +speed_layer_0 = 5 +speed_print = 150 +speed_slowdown_layers = 2 +speed_topbottom = 150 +speed_travel = 300 +speed_travel_layer_0 = 300 +speed_wall = 150 +speed_wall_x = 150 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg new file mode 100644 index 0000000000..f622511715 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Maximum Quality +definition = peopoly_moai + +[metadata] +type = quality +weight = 2 +quality_type = extra_high + +[values] +infill_sparse_density = 70 +layer_height = 0.025 +layer_height_0 = 0.1 +top_bottom_thickness = 0.4 +wall_thickness = 0.4 +speed_layer_0 = 5 +speed_print = 200 +speed_slowdown_layers = 2 +speed_topbottom = 200 +speed_travel = 300 +speed_travel_layer_0 = 300 +speed_wall = 200 +speed_wall_x = 200 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index 6c52785671..890c73d7e6 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -9,7 +9,8 @@ weight = 0 quality_type = normal [values] -infill_sparse_density = 50 +infill_sparse_density = 70 +layer_height = 0.1 layer_height_0 = 0.1 top_bottom_thickness = 0.4 wall_thickness = 0.4 From b4698d9ec28164b2cd2cc6a76dc1d5cf10734095 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 12:54:19 +0200 Subject: [PATCH 153/816] Adjust minimum/maximum warning values --- resources/definitions/peopoly_moai.def.json | 44 +++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 29a17f4829..63d7a4318b 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -1,7 +1,7 @@ { "id": "peopoly_moai", "version": 2, - "name": "Moai", + "name": "Peopoly Moai", "inherits": "ultimaker", "metadata": { "visible": true, @@ -46,11 +46,31 @@ "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" }, + "line_width": { + "minimum_value_warning": "machine_nozzle_size" + }, + "wall_line_width": { + "minimum_value_warning": "machine_nozzle_size" + }, + "wall_line_width_x": { + "minimum_value_warning": "machine_nozzle_size" + }, + "skin_line_width": { + "minimum_value_warning": "machine_nozzle_size" + }, + "infill_line_width": { + "minimum_value_warning": "machine_nozzle_size" + }, + "skirt_brim_line_width": { + "minimum_value_warning": "machine_nozzle_size" + }, "layer_height": { - "maximum_value_warning": "0.5" + "maximum_value_warning": "0.5", + "minimum_value_warning": "0.02" }, "layer_height_0": { - "maximum_value_warning": "0.5" + "maximum_value_warning": "0.5", + "minimum_value_warning": "0.02" }, "top_bottom_thickness": { "minimum_value_warning": "0.1" @@ -58,6 +78,24 @@ "infill_sparse_thickness": { "maximum_value_warning": "0.5" }, + "speed_print": { + "maximum_value_warning": "300" + }, + "speed_infill": { + "maximum_value_warning": "300" + }, + "speed_wall": { + "maximum_value_warning": "300" + }, + "speed_wall_0": { + "maximum_value_warning": "300" + }, + "speed_wall_x": { + "maximum_value_warning": "300" + }, + "speed_topbottom": { + "maximum_value_warning": "300" + }, "acceleration_enabled": { "value": "False" From 7adc904cf1dda62a5a4c2a471befc60c5eae3a2c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 13:17:24 +0200 Subject: [PATCH 154/816] Remove absolute value warnings by moving some values to the machine definition --- resources/definitions/peopoly_moai.def.json | 28 +++++++++++++++---- .../peopoly_moai/peopoly_moai_high.inst.cfg | 8 ------ .../peopoly_moai/peopoly_moai_max.inst.cfg | 8 ------ .../peopoly_moai/peopoly_moai_normal.inst.cfg | 8 ------ 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 63d7a4318b..5cff33a791 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -14,7 +14,9 @@ }, "overrides": { - "machine_name": { "default_value": "Moai" }, + "machine_name": { + "default_value": "Moai" + }, "machine_width": { "default_value": 130 }, @@ -70,7 +72,8 @@ }, "layer_height_0": { "maximum_value_warning": "0.5", - "minimum_value_warning": "0.02" + "minimum_value_warning": "0.02", + "value": "0.1" }, "top_bottom_thickness": { "minimum_value_warning": "0.1" @@ -85,16 +88,31 @@ "maximum_value_warning": "300" }, "speed_wall": { - "maximum_value_warning": "300" + "maximum_value_warning": "300", + "value": "speed_print" }, "speed_wall_0": { "maximum_value_warning": "300" }, "speed_wall_x": { - "maximum_value_warning": "300" + "maximum_value_warning": "300", + "value": "speed_print" }, "speed_topbottom": { - "maximum_value_warning": "300" + "maximum_value_warning": "300", + "value": "speed_print" + }, + "speed_travel": { + "value": "300" + }, + "speed_travel_layer_0": { + "value": "300" + }, + "speed_layer_0": { + "value": "5" + }, + "speed_slowdown_layers": { + "value": "2" }, "acceleration_enabled": { diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 789e383b19..27848d4301 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -11,14 +11,6 @@ quality_type = high [values] infill_sparse_density = 70 layer_height = 0.05 -layer_height_0 = 0.1 top_bottom_thickness = 0.4 wall_thickness = 0.4 -speed_layer_0 = 5 speed_print = 150 -speed_slowdown_layers = 2 -speed_topbottom = 150 -speed_travel = 300 -speed_travel_layer_0 = 300 -speed_wall = 150 -speed_wall_x = 150 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg index f622511715..253070569f 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg @@ -11,14 +11,6 @@ quality_type = extra_high [values] infill_sparse_density = 70 layer_height = 0.025 -layer_height_0 = 0.1 top_bottom_thickness = 0.4 wall_thickness = 0.4 -speed_layer_0 = 5 speed_print = 200 -speed_slowdown_layers = 2 -speed_topbottom = 200 -speed_travel = 300 -speed_travel_layer_0 = 300 -speed_wall = 200 -speed_wall_x = 200 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index 890c73d7e6..c4ff8360fa 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -11,14 +11,6 @@ quality_type = normal [values] infill_sparse_density = 70 layer_height = 0.1 -layer_height_0 = 0.1 top_bottom_thickness = 0.4 wall_thickness = 0.4 -speed_layer_0 = 5 speed_print = 100 -speed_slowdown_layers = 2 -speed_topbottom = 100 -speed_travel = 300 -speed_travel_layer_0 = 300 -speed_wall = 100 -speed_wall_x = 100 From 1965b02fdfa1d3c47778de26ee952e5e6a265e3b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Apr 2017 14:28:42 +0200 Subject: [PATCH 155/816] Fix size problem for open project dialog CURA-3642 --- .../qml/AskOpenAsProjectOrModelsDialog.qml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/resources/qml/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/AskOpenAsProjectOrModelsDialog.qml index e298ccb64f..d85019983e 100644 --- a/resources/qml/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/AskOpenAsProjectOrModelsDialog.qml @@ -6,6 +6,7 @@ import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.1 +import QtQuick.Window 2.1 import UM 1.3 as UM import Cura 1.0 as Cura @@ -17,13 +18,13 @@ UM.Dialog id: base title: catalog.i18nc("@title:window", "Open project file") - width: 420 - height: 140 + width: 420 * Screen.devicePixelRatio + height: 140 * Screen.devicePixelRatio maximumHeight: height maximumWidth: width - minimumHeight: height - minimumWidth: width + minimumHeight: maximumHeight + minimumWidth: maximumWidth modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal; @@ -60,10 +61,8 @@ UM.Dialog Column { anchors.fill: parent - anchors.margins: UM.Theme.getSize("default_margin").width - anchors.left: parent.left - anchors.right: parent.right - spacing: UM.Theme.getSize("default_margin").width + anchors.margins: 20 * Screen.devicePixelRatio + spacing: 10 * Screen.devicePixelRatio Label { @@ -93,7 +92,7 @@ UM.Dialog id: openAsProjectButton text: catalog.i18nc("@action:button", "Open as project"); anchors.right: importModelsButton.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width * Screen.devicePixelRatio isDefault: true onClicked: { From 8506c210996657f7a099e4f51c78a5975136ac84 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 6 Apr 2017 16:30:04 +0200 Subject: [PATCH 156/816] Replace DefinitionContainer with MagicMock in test_addExtruder Because the code checks for the type of DefinitionContainer. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 1ca5c8c956..c501e6aee0 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -132,19 +132,23 @@ def test_addExtruder(global_stack): mock_definition = unittest.mock.MagicMock() mock_definition.getProperty = lambda key, property: 2 if key == "machine_extruder_count" and property == "value" else None - global_stack.definition = mock_definition + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): + global_stack.definition = mock_definition assert len(global_stack.extruders) == 0 first_extruder = unittest.mock.MagicMock() - global_stack.addExtruder(first_extruder) + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): + global_stack.addExtruder(first_extruder) assert len(global_stack.extruders) == 1 assert global_stack.extruders[0] == first_extruder second_extruder = unittest.mock.MagicMock() - global_stack.addExtruder(second_extruder) + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): + global_stack.addExtruder(second_extruder) assert len(global_stack.extruders) == 2 assert global_stack.extruders[1] == second_extruder - with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. - global_stack.addExtruder(unittest.mock.MagicMock()) + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): + with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. + global_stack.addExtruder(unittest.mock.MagicMock()) assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder. ## Tests whether the container types are properly enforced on the stack. From 71e00d14071cfbfce0bc5e8475ccb5aeac11eb7d Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Tue, 4 Apr 2017 13:44:14 +0100 Subject: [PATCH 157/816] The magic_spiralize setting is no longer settable per mesh (or extruder). --- 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 881805d83a..9c1e7bc7b6 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4178,7 +4178,8 @@ "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature used to be called Joris in older versions.", "type": "bool", "default_value": false, - "settable_per_mesh": true + "settable_per_mesh": false, + "settable_per_extruder": false } } }, From 433537a2f007fe321159caada0cfa82d52647e6d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 17:49:22 +0200 Subject: [PATCH 158/816] Add type metadata to Extruder/Global stack For backward compatibility with old code that still checks for "type". --- cura/Settings/ExtruderStack.py | 2 ++ cura/Settings/GlobalStack.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 91b1725c4f..74e2cf8897 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -18,6 +18,8 @@ class ExtruderStack(CuraContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) + self.addMetaDataEntry("type", "extruder_train") # For backward compatibility + @override(ContainerStack) def setNextStack(self, stack): super().setNextStack(stack) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 806c37040f..03758d2599 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -21,6 +21,8 @@ class GlobalStack(CuraContainerStack): def __init__(self, container_id: str, *args, **kwargs): super().__init__(container_id, *args, **kwargs) + self.addMetaDataEntry("type", "machine") # For backward compatibility + self._extruders = [] self._resolving_property = None From 6827849220c9aa5ea4bd9d50de39976235b2bbe6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 17:50:05 +0200 Subject: [PATCH 159/816] Un-deprecate activeMachine{Name,Id} Since it provides too much noise and I do not want to change the code that uses it right now. --- cura/Settings/MachineManager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f75c9d19a7..a7bdca0663 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -500,7 +500,6 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = globalContainerChanged) - @deprecated("Use activeMachine.name", "2.6") def activeMachineName(self) -> str: if self._global_container_stack: return self._global_container_stack.getName() @@ -508,7 +507,6 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = globalContainerChanged) - @deprecated("Use activeMachine.id", "2.6") def activeMachineId(self) -> str: if self._global_container_stack: return self._global_container_stack.getId() From df25fa9345ba968b70c96177501d3e6c87490a68 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 17:50:43 +0200 Subject: [PATCH 160/816] Do not try to handle resolve manually in StartSliceJob Since the container stacks should now take care of it --- plugins/CuraEngineBackend/StartSliceJob.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index c8cbbe8040..f427317ec0 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -230,20 +230,7 @@ class StartSliceJob(Job): keys = stack.getAllKeys() settings = {} for key in keys: - # Use resolvement value if available, or take the value - resolved_value = stack.getProperty(key, "resolve") - if resolved_value is not None: - # There is a resolvement value. Check if we need to use it. - user_container = stack.findContainer({"type": "user"}) - quality_changes_container = stack.findContainer({"type": "quality_changes"}) - if user_container.hasProperty(key,"value") or quality_changes_container.hasProperty(key,"value"): - # Normal case - settings[key] = stack.getProperty(key, "value") - else: - settings[key] = resolved_value - else: - # Normal case - settings[key] = stack.getProperty(key, "value") + settings[key] = stack.getProperty(key, "value") Job.yieldThread() start_gcode = settings["machine_start_gcode"] From e1537d4dea5a8915dd90c26213b57c78be6b6246 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 6 Apr 2017 17:51:38 +0200 Subject: [PATCH 161/816] Fix quality selection menu to highlight the active entry Since we changed the "empty_quality_changes" to a proper empty container. --- resources/qml/Menus/ProfileMenu.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index 9dea8420bb..4a2908277e 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -19,7 +19,7 @@ Menu { text: model.name + " - " + model.layer_height checkable: true - checked: Cura.MachineManager.activeQualityChangesId == "empty_quality_changes" && Cura.MachineManager.activeQualityType == model.metadata.quality_type + checked: Cura.MachineManager.activeQualityChangesId == "" && Cura.MachineManager.activeQualityType == model.metadata.quality_type exclusiveGroup: group onTriggered: Cura.MachineManager.setActiveQuality(model.id) } From 3b9e14eeecd4b87242ab6ae26814b7310de91c26 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Thu, 6 Apr 2017 17:54:19 +0200 Subject: [PATCH 162/816] Revert "The magic_spiralize setting is no longer settable per mesh (or extruder)." --- 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 9c1e7bc7b6..881805d83a 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4178,8 +4178,7 @@ "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature used to be called Joris in older versions.", "type": "bool", "default_value": false, - "settable_per_mesh": false, - "settable_per_extruder": false + "settable_per_mesh": true } } }, From 7bc28a7e489c105956affd10810b46db68119668 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 6 Apr 2017 21:02:33 +0200 Subject: [PATCH 163/816] Make sure a valid stack is activated after changing the number of extruders --- .../MachineSettingsAction.qml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index c8027d75bf..2801f25aed 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -377,6 +377,26 @@ Cura.MachineAction { machineExtruderCountProvider.setPropertyValue("value", index + 1); manager.forceUpdate(); + if(index > 0) + { + // multiextrusion; make sure one of these extruder stacks is active + if(ExtruderManager.activeExtruderIndex == -1) + { + ExtruderManager.setActiveExtruderIndex(0); + } + else if(ExtruderManager.activeExtruderIndex > index) + { + ExtruderManager.setActiveExtruderIndex(index); + } + } + else + { + // single extrusion; make sure the machine stack is active + if(ExtruderManager.activeExtruderIndex != -1) + { + ExtruderManager.setActiveExtruderIndex(-1); + } + } } } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height; visible: extruderCountComboBox.visible } @@ -435,6 +455,7 @@ Cura.MachineAction } } } + Column { height: parent.height width: settingsTabs.columnWidth From 5b37353b087b3ff5b3968d89b0f2c0b737c5c9b9 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 7 Apr 2017 11:55:07 +0200 Subject: [PATCH 164/816] Fix stuck extruder tabs when switching number of extruders --- .../MachineSettingsAction.qml | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 2801f25aed..e8a255c483 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -14,6 +14,23 @@ Cura.MachineAction { id: base property var extrudersModel: Cura.ExtrudersModel{} + property int extruderTabsCount: 0 + + Component.onCompleted: + { + // Populate extruder tabs after a short delay, because otherwise the tabs that are added when + // the dialog is created are stuck. + extruderTabsCountDelay.start(); + } + + Timer + { + id: extruderTabsCountDelay + repeat: false + interval: 1 + + onTriggered: base.extruderTabsCount = (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 + } anchors.fill: parent; Item @@ -377,6 +394,8 @@ Cura.MachineAction { machineExtruderCountProvider.setPropertyValue("value", index + 1); manager.forceUpdate(); + base.extruderTabsCount = (index > 0) ? index + 1 : 0; + if(index > 0) { // multiextrusion; make sure one of these extruder stacks is active @@ -384,10 +403,6 @@ Cura.MachineAction { ExtruderManager.setActiveExtruderIndex(0); } - else if(ExtruderManager.activeExtruderIndex > index) - { - ExtruderManager.setActiveExtruderIndex(index); - } } else { @@ -488,19 +503,22 @@ Cura.MachineAction { if(currentIndex > 0) { - ExtruderManager.setActiveExtruderIndex(currentIndex - 1); + ExtruderManager.setActiveExtruderIndex(settingsTabs.getTab(currentIndex).extruderIndex); } } Repeater { - model: (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 + id: extruderTabsRepeater + model: base.extruderTabsCount Tab { title: base.extrudersModel.getItem(index).name anchors.margins: UM.Theme.getSize("default_margin").width + property int extruderIndex: index + Column { spacing: UM.Theme.getSize("default_margin").width From 2d72d52ee39583334c679af3d9e359a66ec6110c Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 12:59:43 +0200 Subject: [PATCH 165/816] Update cartesio_extruder_1.def.json --- resources/extruders/cartesio_extruder_1.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_1.def.json b/resources/extruders/cartesio_extruder_1.def.json index d8c2e00aed..59bb836c41 100644 --- a/resources/extruders/cartesio_extruder_1.def.json +++ b/resources/extruders/cartesio_extruder_1.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_1\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T1 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_1\n" + "default_value": "\nM104 T1 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_1\n" } } } From 4b1fbebfd1e974c91c5b69315b40c86fd6201809 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 12:59:58 +0200 Subject: [PATCH 166/816] Update cartesio_extruder_2.def.json --- resources/extruders/cartesio_extruder_2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_2.def.json b/resources/extruders/cartesio_extruder_2.def.json index 062b80581c..cac78698ad 100644 --- a/resources/extruders/cartesio_extruder_2.def.json +++ b/resources/extruders/cartesio_extruder_2.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_2\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T2 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_2\n" + "default_value": "\nM104 T2 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_2\n" } } } From 074bae1ed874db9484131d73c10fe1eae0bd6b4f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:00:11 +0200 Subject: [PATCH 167/816] Update cartesio_extruder_3.def.json --- resources/extruders/cartesio_extruder_3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_3.def.json b/resources/extruders/cartesio_extruder_3.def.json index 5582f0f436..bb4f93cb7c 100644 --- a/resources/extruders/cartesio_extruder_3.def.json +++ b/resources/extruders/cartesio_extruder_3.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_3\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T3 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_3\n" + "default_value": "\nM104 T3 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_3\n" } } } From e1fd7a59187303928f3521f3d90ab83eb3ceaad1 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:00:21 +0200 Subject: [PATCH 168/816] Update cartesio_extruder_0.def.json --- resources/extruders/cartesio_extruder_0.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_0.def.json b/resources/extruders/cartesio_extruder_0.def.json index 7dc3aaa8af..bd6b656777 100644 --- a/resources/extruders/cartesio_extruder_0.def.json +++ b/resources/extruders/cartesio_extruder_0.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_0\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" + "default_value": "\nM104 T0 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" } } } From 05808fb0dbe7ed80e807dc8a0f77bf2d7905cd1a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:03:05 +0200 Subject: [PATCH 169/816] Update cartesio_extruder_0.def.json --- resources/extruders/cartesio_extruder_0.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_0.def.json b/resources/extruders/cartesio_extruder_0.def.json index bd6b656777..65db56403c 100644 --- a/resources/extruders/cartesio_extruder_0.def.json +++ b/resources/extruders/cartesio_extruder_0.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_0\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" + "default_value": "\nM104 T0 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" } } } From 9097dd6955020f9f49d464caef89e09623ca1532 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:03:15 +0200 Subject: [PATCH 170/816] Update cartesio_extruder_1.def.json --- resources/extruders/cartesio_extruder_1.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_1.def.json b/resources/extruders/cartesio_extruder_1.def.json index 59bb836c41..a6f353cf73 100644 --- a/resources/extruders/cartesio_extruder_1.def.json +++ b/resources/extruders/cartesio_extruder_1.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_1\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T1 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_1\n" + "default_value": "\nM104 T1 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_1\n" } } } From 892f0b4bfe70daf0ee9edb00a99f24755fb78467 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:03:24 +0200 Subject: [PATCH 171/816] Update cartesio_extruder_2.def.json --- resources/extruders/cartesio_extruder_2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_2.def.json b/resources/extruders/cartesio_extruder_2.def.json index cac78698ad..0a2cc072f9 100644 --- a/resources/extruders/cartesio_extruder_2.def.json +++ b/resources/extruders/cartesio_extruder_2.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_2\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T2 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_2\n" + "default_value": "\nM104 T2 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_2\n" } } } From eb72d15eb67e0628ea279ec1748c7d4743b5c276 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:03:32 +0200 Subject: [PATCH 172/816] Update cartesio_extruder_3.def.json --- resources/extruders/cartesio_extruder_3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_3.def.json b/resources/extruders/cartesio_extruder_3.def.json index bb4f93cb7c..691ef5935b 100644 --- a/resources/extruders/cartesio_extruder_3.def.json +++ b/resources/extruders/cartesio_extruder_3.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_3\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T3 S155\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_3\n" + "default_value": "\nM104 T3 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_3\n" } } } From 39befe1c226cd9c8804c8598f648c0744382664e Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 7 Apr 2017 13:06:14 +0200 Subject: [PATCH 173/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index d0904b9716..c84e7c1bd8 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -42,7 +42,7 @@ "infill_pattern": { "default_value": "grid"}, "prime_tower_enable": { "default_value": true }, "prime_tower_wall_thickness": { "resolve": 0.7 }, - "prime_tower_position_x": { "default_value": 30 }, + "prime_tower_position_x": { "default_value": 50 }, "prime_tower_position_y": { "default_value": 71 }, "machine_start_gcode": { "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S600 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" From 46f3b5bd9713fac84b397c20a8f142a742016216 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 13:13:12 +0200 Subject: [PATCH 174/816] Use yield_fixture for fixtures with teardown Otherwise it'll complain that it can't use yield. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index c501e6aee0..89816ed678 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -48,7 +48,7 @@ class MockContainer: propertyChanged = unittest.mock.MagicMock() ## Fake container registry that always provides all containers you ask of. -@pytest.fixture() +@pytest.yield_fixture() def container_registry(): registry = unittest.mock.MagicMock() From 7ce89f5d80c6f0ff934e83409d2d8fd4539822c5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 14:02:39 +0200 Subject: [PATCH 175/816] Simplify defaults for container IDs in fixtures Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 89816ed678..45e54137e1 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -55,17 +55,14 @@ def container_registry(): registry.typeMetaData = "registry_mock" def findInstanceContainers(registry, **kwargs): - if "id" not in kwargs: - return [MockContainer("test_container", registry.typeMetaData)] - else: - return [MockContainer(id, registry.typeMetaData)] + container_id = kwargs.get("id", default = "test_container") + return [MockContainer(container_id, registry.typeMetaData)] registry.findInstanceContainers = functools.partial(findInstanceContainers, registry) def findContainers(registry, container_type = None, id = None): if not id: - return [MockContainer("test_container", registry.typeMetaData)] - else: - return [MockContainer(id, registry.typeMetaData)] + id = "test_container" + return [MockContainer(id, registry.typeMetaData)] registry.findContainers = functools.partial(findContainers, registry) UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry From e71af663c3f59b194c2be78ffe9ca5752cf2ab23 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 14:41:29 +0200 Subject: [PATCH 176/816] Make getEmptyInstanceContainer return a container with ID 'empty' This is checked in the test. Otherwise it would return magic mocks. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 45e54137e1..3edafc286a 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -65,6 +65,10 @@ def container_registry(): return [MockContainer(id, registry.typeMetaData)] registry.findContainers = functools.partial(findContainers, registry) + def getEmptyInstanceContainer(): + return MockContainer(container_id = "empty") + registry.getEmptyInstanceContainer = getEmptyInstanceContainer + UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry UM.Settings.ContainerStack._containerRegistry = registry From 4dfc86d5bb41fdbc13c47c0b76eeb4d92dae3b35 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 14:59:04 +0200 Subject: [PATCH 177/816] Remove unused import Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 3edafc286a..620f35bded 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -4,7 +4,6 @@ import os.path #To find the test files. import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. -import copy import functools import cura.Settings.GlobalStack #The module we're testing. From f4fcb50a4f082de93c4eaba2b5ffc0d1d25bc326 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 16:41:02 +0200 Subject: [PATCH 178/816] Fix container types of mock containers in fallthrough It needs to create a container of each type or else setting the container will raise alarm. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 65 +++++++++++++++++-------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 620f35bded..80da0c4695 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -7,6 +7,7 @@ import unittest.mock #To monkeypatch some mocks in place of dependencies. import functools import cura.Settings.GlobalStack #The module we're testing. +import cura.Settings.CuraContainerStack #To get the list of container types. from cura.Settings.Exceptions import TooManyExtrudersError, InvalidContainerError, InvalidOperationError #To test raising these errors. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. from UM.Settings.InstanceContainer import InstanceContainer #To test against the class InstanceContainer. @@ -399,37 +400,43 @@ def test_deserializeMissingContainer(global_stack): # containers. def test_getPropertyFallThrough(global_stack): #A few instance container mocks to put in the stack. - layer_height_5 = unittest.mock.MagicMock() #Sets layer height to 5. - layer_height_5.getProperty = lambda key, property: 5 if (key == "layer_height" and property == "value") else None - layer_height_5.hasProperty = lambda key: key == "layer_height" - layer_height_10 = unittest.mock.MagicMock() #Sets layer height to 10. - layer_height_10.getProperty = lambda key, property: 10 if (key == "layer_height" and property == "value") else None - layer_height_10.hasProperty = lambda key: key == "layer_height" - no_layer_height = unittest.mock.MagicMock() #No settings at all. - no_layer_height.getProperty = lambda key, property: None - no_layer_height.hasProperty = lambda key: False + mock_layer_heights = {} #For each container type, a mock container that defines layer height to something unique. + mock_no_settings = {} #For each container type, a mock container that has no settings at all. + for type_id, type_name in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap.items(): + container = unittest.mock.MagicMock() + container.getProperty = lambda key, property, type_id = type_id: type_id if (key == "layer_height" and property == "value") else None #Returns the container type ID as layer height, in order to identify it. + container.hasProperty = lambda key, property: key == "layer_height" + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) + mock_layer_heights[type_id] = container - global_stack.userChanges = no_layer_height - global_stack.qualityChanges = no_layer_height - global_stack.quality = no_layer_height - global_stack.material = no_layer_height - global_stack.variant = no_layer_height - global_stack.definitionChanges = no_layer_height - global_stack.definition = layer_height_5 #Here it is! + container = unittest.mock.MagicMock() + container.getProperty = unittest.mock.MagicMock(return_value = None) #Has no settings at all. + container.hasProperty = unittest.mock.MagicMock(return_value = False) + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) + mock_no_settings[type_id] = container - assert global_stack.getProperty("layer_height", "value") == 5 - global_stack.definitionChanges = layer_height_10 - assert global_stack.getProperty("layer_height", "value") == 10 - global_stack.variant = layer_height_5 - assert global_stack.getProperty("layer_height", "value") == 5 - global_stack.material = layer_height_10 - assert global_stack.getProperty("layer_height", "value") == 10 - global_stack.quality = layer_height_5 - assert global_stack.getProperty("layer_height", "value") == 5 - global_stack.qualityChanges = layer_height_10 - assert global_stack.getProperty("layer_height", "value") == 10 - global_stack.userChanges = layer_height_5 - assert global_stack.getProperty("layer_height", "value") == 5 + global_stack.userChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges] + global_stack.qualityChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges] + global_stack.quality = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] + global_stack.material = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Material] + global_stack.variant = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Variant] + global_stack.definitionChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges] + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] #There's a layer height in here! + + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Definition + global_stack.definitionChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges + global_stack.variant = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Variant] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Variant + global_stack.material = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Material] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Material + global_stack.quality = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Quality + global_stack.qualityChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges + global_stack.userChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges] + assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges def test_getPropertyWithResolve(global_stack): #Define some containers for the stack. From d5df22602473192ee2a9b85d38efb8d1fb271f1a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 16:45:10 +0200 Subject: [PATCH 179/816] Cache the indexes class This improves readability a bit. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 43 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 80da0c4695..841e1fabc5 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -402,7 +402,8 @@ def test_getPropertyFallThrough(global_stack): #A few instance container mocks to put in the stack. mock_layer_heights = {} #For each container type, a mock container that defines layer height to something unique. mock_no_settings = {} #For each container type, a mock container that has no settings at all. - for type_id, type_name in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap.items(): + container_indexes = cura.Settings.CuraContainerStack._ContainerIndexes #Cache. + for type_id, type_name in container_indexes.IndexTypeMap.items(): container = unittest.mock.MagicMock() container.getProperty = lambda key, property, type_id = type_id: type_id if (key == "layer_height" and property == "value") else None #Returns the container type ID as layer height, in order to identify it. container.hasProperty = lambda key, property: key == "layer_height" @@ -415,28 +416,28 @@ def test_getPropertyFallThrough(global_stack): container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) mock_no_settings[type_id] = container - global_stack.userChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges] - global_stack.qualityChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges] - global_stack.quality = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] - global_stack.material = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Material] - global_stack.variant = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.Variant] - global_stack.definitionChanges = mock_no_settings[cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges] + global_stack.userChanges = mock_no_settings[container_indexes.UserChanges] + global_stack.qualityChanges = mock_no_settings[container_indexes.QualityChanges] + global_stack.quality = mock_no_settings[container_indexes.Quality] + global_stack.material = mock_no_settings[container_indexes.Material] + global_stack.variant = mock_no_settings[container_indexes.Variant] + global_stack.definitionChanges = mock_no_settings[container_indexes.DefinitionChanges] with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. - global_stack.definition = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] #There's a layer height in here! + global_stack.definition = mock_layer_heights[container_indexes.Definition] #There's a layer height in here! - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Definition - global_stack.definitionChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges - global_stack.variant = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Variant] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Variant - global_stack.material = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Material] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Material - global_stack.quality = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.Quality - global_stack.qualityChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.QualityChanges - global_stack.userChanges = mock_layer_heights[cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges] - assert global_stack.getProperty("layer_height", "value") == cura.Settings.CuraContainerStack._ContainerIndexes.UserChanges + assert global_stack.getProperty("layer_height", "value") == container_indexes.Definition + global_stack.definitionChanges = mock_layer_heights[container_indexes.DefinitionChanges] + assert global_stack.getProperty("layer_height", "value") == container_indexes.DefinitionChanges + global_stack.variant = mock_layer_heights[container_indexes.Variant] + assert global_stack.getProperty("layer_height", "value") == container_indexes.Variant + global_stack.material = mock_layer_heights[container_indexes.Material] + assert global_stack.getProperty("layer_height", "value") == container_indexes.Material + global_stack.quality = mock_layer_heights[container_indexes.Quality] + assert global_stack.getProperty("layer_height", "value") == container_indexes.Quality + global_stack.qualityChanges = mock_layer_heights[container_indexes.QualityChanges] + assert global_stack.getProperty("layer_height", "value") == container_indexes.QualityChanges + global_stack.userChanges = mock_layer_heights[container_indexes.UserChanges] + assert global_stack.getProperty("layer_height", "value") == container_indexes.UserChanges def test_getPropertyWithResolve(global_stack): #Define some containers for the stack. From 7158ebdaeae2a5bd6558a9c4112eadb06b5fb9b5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 16:54:21 +0200 Subject: [PATCH 180/816] Guard against type checking when replacing definition container Otherwise it finds that this is not a definition container we're replacing the definition with. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 841e1fabc5..d1dd5bb2de 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -450,7 +450,8 @@ def test_getPropertyWithResolve(global_stack): empty = unittest.mock.MagicMock() #Sets no value or resolve. empty.getProperty = unittest.mock.MagicMock(return_value = None) - global_stack.definition = resolve_and_value + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = resolve_and_value assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition. global_stack.userChanges = resolve_and_value assert global_stack.getProperty("material_bed_temperature", "value") == 5 #Value wins in other places. From 16b3c7866772d6635407db4bb56e61bddc50fe35 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 16:58:47 +0200 Subject: [PATCH 181/816] Guard against type checking of DefinitionContainer Otherwise it finds that we're trying to set a MagicMock into the definition slot. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index d1dd5bb2de..69a63d1ca2 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -517,7 +517,8 @@ def test_removeContainer(global_stack): ## Tests setting definitions by specifying an ID of a definition that exists. def test_setDefinitionByIdExists(global_stack, container_registry): - global_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against type checking the DefinitionContainer. + global_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. From d74aa4d24ec8ac7ee16097d5da102f4362ed8dea Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 7 Apr 2017 17:02:00 +0200 Subject: [PATCH 182/816] Don't get with default from dictionary using named parameters That doesn't work for some reason. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 69a63d1ca2..2bac50279a 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -55,7 +55,7 @@ def container_registry(): registry.typeMetaData = "registry_mock" def findInstanceContainers(registry, **kwargs): - container_id = kwargs.get("id", default = "test_container") + container_id = kwargs.get("id", "test_container") return [MockContainer(container_id, registry.typeMetaData)] registry.findInstanceContainers = functools.partial(findInstanceContainers, registry) From 4c6f9486be48872d30a60a5b565552143a23733f Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Sat, 8 Apr 2017 12:47:01 +0200 Subject: [PATCH 183/816] feat: cutting mesh (CURA-966) --- cura/CuraApplication.py | 1 + resources/definitions/fdmprinter.def.json | 11 +++++++++++ resources/qml/Settings/SettingView.qml | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index af23fcb4cf..840d8298cc 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -320,6 +320,7 @@ class CuraApplication(QtApplication): blackmagic print_sequence infill_mesh + cutting_mesh experimental """.replace("\n", ";").replace(" ", "")) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index e0532b3e5b..aa2f96a3e7 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4181,6 +4181,17 @@ "settable_per_meshgroup": false, "settable_globally": false }, + "cutting_mesh": + { + "label": "Cutting Mesh", + "description": "Limit the volume of this mesh to within other meshes. You can use this to make certain areas of one mesh print with different settings and with a whole different extruder.", + "type": "bool", + "default_value": false, + "settable_per_mesh": true, + "settable_per_extruder": false, + "settable_per_meshgroup": false, + "settable_globally": false + }, "mold_enabled": { "label": "Mold", diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 66f1c19a08..5040d8fad5 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -154,7 +154,7 @@ Item id: definitionsModel; containerId: Cura.MachineManager.activeDefinitionId visibilityHandler: UM.SettingPreferenceVisibilityHandler { } - exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false. + exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "cutting_mesh", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false. expanded: CuraApplication.expandedCategories onExpandedChanged: { From 30ede0736a0ef12fcb6477a0767da45bf88c4b23 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Sat, 8 Apr 2017 12:49:32 +0200 Subject: [PATCH 184/816] JSON: move infill_mesh_order to right under infill_mesh (CURA-966) --- resources/definitions/fdmprinter.def.json | 28 +++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index aa2f96a3e7..d8ecdf5fab 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4181,6 +4181,20 @@ "settable_per_meshgroup": false, "settable_globally": false }, + "infill_mesh_order": + { + "label": "Infill Mesh Order", + "description": "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes.", + "default_value": 0, + "value": "1 if infill_mesh else 0", + "minimum_value_warning": "1", + "maximum_value_warning": "50", + "type": "int", + "settable_per_mesh": true, + "settable_per_extruder": false, + "settable_per_meshgroup": false, + "settable_globally": false + }, "cutting_mesh": { "label": "Cutting Mesh", @@ -4226,20 +4240,6 @@ "settable_per_mesh": true, "enabled": "mold_enabled" }, - "infill_mesh_order": - { - "label": "Infill Mesh Order", - "description": "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes.", - "default_value": 0, - "value": "1 if infill_mesh else 0", - "minimum_value_warning": "1", - "maximum_value_warning": "50", - "type": "int", - "settable_per_mesh": true, - "settable_per_extruder": false, - "settable_per_meshgroup": false, - "settable_globally": false - }, "support_mesh": { "label": "Support Mesh", From 064f744bc042f57f5ecf72e3edc1e45dde63322d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 9 Apr 2017 15:47:35 +0200 Subject: [PATCH 185/816] Make sure we're not trying to get/set extruder values on machine stacks --- .../MachineSettingsAction/MachineSettingsAction.qml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index e8a255c483..20ec99edf3 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -807,7 +807,7 @@ Cura.MachineAction { id: extruderNozzleSizeProvider - containerStackId: Cura.MachineManager.activeStackId + containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_size" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -817,7 +817,7 @@ Cura.MachineAction { id: extruderOffsetXProvider - containerStackId: Cura.MachineManager.activeStackId + containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_x" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -827,7 +827,7 @@ Cura.MachineAction { id: extruderOffsetYProvider - containerStackId: Cura.MachineManager.activeStackId + containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_y" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -837,7 +837,7 @@ Cura.MachineAction { id: extruderStartGcodeProvider - containerStackId: Cura.MachineManager.activeStackId + containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_start_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -847,11 +847,9 @@ Cura.MachineAction { id: extruderEndGcodeProvider - containerStackId: Cura.MachineManager.activeStackId + containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_end_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex } - - } \ No newline at end of file From 3d8e94964b87583ffa3e8f1b24d15e6281398892 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 10 Apr 2017 11:16:34 +0200 Subject: [PATCH 186/816] Fixed one_at_a_time and arranger. CURA-3670 --- cura/ConvexHullDecorator.py | 10 +++++----- cura/ShapeArray.py | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) mode change 100644 => 100755 cura/ConvexHullDecorator.py diff --git a/cura/ConvexHullDecorator.py b/cura/ConvexHullDecorator.py old mode 100644 new mode 100755 index da72ffdbe3..404342fb78 --- a/cura/ConvexHullDecorator.py +++ b/cura/ConvexHullDecorator.py @@ -59,7 +59,8 @@ class ConvexHullDecorator(SceneNodeDecorator): hull = self._compute2DConvexHull() if self._global_stack and self._node: - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self._node.getParent().callDecoration("isGroup"): + # 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))) hull = self._add2DAdhesionMargin(hull) return hull @@ -79,7 +80,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return None if self._global_stack: - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self._node.getParent().callDecoration("isGroup"): + 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")): head_with_fans = self._compute2DConvexHeadMin() head_with_fans_with_adhesion_margin = self._add2DAdhesionMargin(head_with_fans) return head_with_fans_with_adhesion_margin @@ -93,8 +94,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return None if self._global_stack: - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self._node.getParent().callDecoration("isGroup"): - + 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")): # Printing one at a time and it's not an object in a group return self._compute2DConvexHull() return None @@ -335,4 +335,4 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Settings that change the convex hull. # # If these settings change, the convex hull should be recalculated. - _influencing_settings = {"xy_offset", "mold_enabled", "mold_width"} \ No newline at end of file + _influencing_settings = {"xy_offset", "mold_enabled", "mold_width"} diff --git a/cura/ShapeArray.py b/cura/ShapeArray.py index 534fa78e4d..95d0201c38 100755 --- a/cura/ShapeArray.py +++ b/cura/ShapeArray.py @@ -43,8 +43,10 @@ class ShapeArray: transform_x = transform._data[0][3] transform_y = transform._data[2][3] hull_verts = node.callDecoration("getConvexHull") + # For one_at_a_time printing you need the convex hull head. + hull_head_verts = node.callDecoration("getConvexHullHead") or hull_verts - offset_verts = hull_verts.getMinkowskiHull(Polygon.approximatedCircle(min_offset)) + offset_verts = hull_head_verts.getMinkowskiHull(Polygon.approximatedCircle(min_offset)) offset_points = copy.deepcopy(offset_verts._points) # x, y offset_points[:, 0] = numpy.add(offset_points[:, 0], -transform_x) offset_points[:, 1] = numpy.add(offset_points[:, 1], -transform_y) From 3263ca4e2ddec5dc555cdb685fd819b3e4291181 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 10 Apr 2017 11:17:44 +0200 Subject: [PATCH 187/816] Revert file permissions. CURA-3670 --- cura/ConvexHullDecorator.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 cura/ConvexHullDecorator.py diff --git a/cura/ConvexHullDecorator.py b/cura/ConvexHullDecorator.py old mode 100755 new mode 100644 From 07d64f2335841a7b571b051de4940a06e88a488b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 11:18:02 +0200 Subject: [PATCH 188/816] Report the type that was found when replacing containers Makes it easier to debug. Contributes to issue CURA-3497. --- 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 6b4ce16ee2..70459aa73a 100644 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -167,7 +167,7 @@ class CuraContainerStack(ContainerStack): if not isinstance(container, DefinitionContainer): raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not a DefinitionContainer".format(index = index)) elif container != self._empty_instance_container and container.getMetaDataEntry("type") != expected_type: - raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type".format(index = index, type = expected_type)) + raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type, but {actual_type} type.".format(index = index, type = expected_type, actual_type = container.getMetaDataEntry("type"))) super().replaceContainer(index, container, postpone_emit) From 2cdb6c5f6f494686e6195fa821a1c3d9b03375d2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 12:54:35 +0200 Subject: [PATCH 189/816] Split test_constrainContainerTypes into separate tests Firstly, it'll no longer break on the first assert if multiple things are wrong. Secondly, it can now set different types for each container and put it in the correct slot then. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 143 ++++++++++++++++++++++------ 1 file changed, 116 insertions(+), 27 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 41ab521015..2e40217ac5 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -49,13 +49,23 @@ def readStack(filename): serialized = file_handle.read() return serialized +## Gets an instance container with a specified container type. +# +# \param container_type The type metadata for the instance container. +# \return An instance container instance. +def getInstanceContainer(container_type) -> InstanceContainer: + container = InstanceContainer(container_id = "InstanceContainer") + container.addMetaDataEntry("type", container_type) + return container + class DefinitionContainerSubClass(DefinitionContainer): def __init__(self): super().__init__(container_id = "SubDefinitionContainer") class InstanceContainerSubClass(InstanceContainer): - def __init__(self): + def __init__(self, container_type): super().__init__(container_id = "SubInstanceContainer") + self.addMetaDataEntry("type", container_type) #############################START OF TEST CASES################################ @@ -64,33 +74,112 @@ def test_addContainer(extruder_stack): with pytest.raises(InvalidOperationError): extruder_stack.addContainer(unittest.mock.MagicMock()) -## Tests whether the container types are properly enforced on the stack. -# -# When setting a field to have a different type of stack than intended, we -# should get an exception. -@pytest.mark.parametrize("definition_container, instance_container", [ - (DefinitionContainer(container_id = "TestDefinitionContainer"), InstanceContainer(container_id = "TestInstanceContainer")), - (DefinitionContainerSubClass(), InstanceContainerSubClass()) +#Tests setting user changes profiles to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") ]) -def test_constrainContainerTypes(definition_container, instance_container, extruder_stack): - with pytest.raises(InvalidContainerError): #Putting a definition container in the user changes is not allowed. - extruder_stack.userChanges = definition_container - extruder_stack.userChanges = instance_container #Putting an instance container in the user changes is allowed. - with pytest.raises(InvalidContainerError): - extruder_stack.qualityChanges = definition_container - extruder_stack.qualityChanges = instance_container - with pytest.raises(InvalidContainerError): - extruder_stack.quality = definition_container - extruder_stack.quality = instance_container - with pytest.raises(InvalidContainerError): - extruder_stack.material = definition_container - extruder_stack.material = instance_container - with pytest.raises(InvalidContainerError): - extruder_stack.variant = definition_container - extruder_stack.variant = instance_container - with pytest.raises(InvalidContainerError): #Putting an instance container in the definition is not allowed. - extruder_stack.definition = instance_container - extruder_stack.definition = definition_container #Putting a definition container in the definition is allowed. +def test_constrainUserChangesInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.userChanges = container + +#Tests setting user changes profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "user"), + InstanceContainerSubClass(container_type = "user") +]) +def test_constrainUserChangesValid(container, extruder_stack): + extruder_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"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainQualityChangesInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.qualityChanges = container + +#Test setting quality changes profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "quality_changes"), + InstanceContainerSubClass(container_type = "quality_changes") +]) +def test_constrainQualityChangesValid(container, extruder_stack): + extruder_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"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainQualityInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.quality = container + +#Test setting quality profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "quality"), + InstanceContainerSubClass(container_type = "quality") +]) +def test_constrainQualityValid(container, extruder_stack): + extruder_stack.quality = container #Should not give an error. + +#Tests setting materials to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "quality"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainMaterialInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.material = container + +#Test setting materials. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "material"), + InstanceContainerSubClass(container_type = "material") +]) +def test_constrainMaterialValid(container, extruder_stack): + extruder_stack.material = container #Should not give an error. + +#Tests setting variants to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainVariantInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.variant = container + +#Test setting variants. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "variant"), + InstanceContainerSubClass(container_type = "variant") +]) +def test_constrainVariantValid(container, extruder_stack): + extruder_stack.variant = container #Should not give an error. + +#Tests setting definitions to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong class"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong class. +]) +def test_constrainVariantInvalid(container, extruder_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + extruder_stack.definition = container + +#Test setting definitions. +@pytest.mark.parametrize("container", [ + DefinitionContainer(container_id = "DefinitionContainer"), + DefinitionContainerSubClass() +]) +def test_constrainDefinitionValid(container, extruder_stack): + extruder_stack.definition = container #Should not give an error. ## Tests whether definitions are being read properly from an extruder stack. @pytest.mark.parametrize("filename, definition_id", [ From abe70c3a924fb8a6db8bccfaab5c7a12692c65dd Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Apr 2017 13:12:14 +0200 Subject: [PATCH 190/816] Fixed broken logging --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 7c58f2bb66..21e23ead93 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -1089,7 +1089,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._authentication_key = data["key"] self._authentication_id = data["id"] - Logger.log("i", "Got a new authentication ID (%s) and KEY (%S). Waiting for authorization.", self._authentication_id, self._getSafeAuthKey()) + Logger.log("i", "Got a new authentication ID (%s) and KEY (%s). Waiting for authorization.", self._authentication_id, self._getSafeAuthKey()) # Check if the authentication is accepted. self._checkAuthentication() From f5785662f258d11874b38a4fd77562e2acdc109c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Apr 2017 13:19:05 +0200 Subject: [PATCH 191/816] Fixed another broken logging --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 21e23ead93..0dd31652ce 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -200,7 +200,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): def _onAuthenticationRequired(self, reply, authenticator): if self._authentication_id is not None and self._authentication_key is not None: - Logger.log("d", "Authentication was required. Setting up authenticator with ID %s and key", self._authentication_id, self._getSafeAuthKey()) + Logger.log("d", "Authentication was required. Setting up authenticator with ID %s and key %s", self._authentication_id, self._getSafeAuthKey()) authenticator.setUser(self._authentication_id) authenticator.setPassword(self._authentication_key) else: From 069235f9e07fd254922fd4fd336fff18eff76e63 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 13:23:11 +0200 Subject: [PATCH 192/816] Split test_constrainContainerTypes into multiple tests This way the first assertion won't cause all of these tests to break if multiple are failing. It also removes the need for any state to be saved between these tests which is bad practice, and it adds a few tests for the unhappy path. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 170 +++++++++++++++++++++--------- 1 file changed, 121 insertions(+), 49 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2bac50279a..6b0e97111c 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -113,13 +113,23 @@ def readStack(filename): serialized = file_handle.read() return serialized +## Gets an instance container with a specified container type. +# +# \param container_type The type metadata for the instance container. +# \return An instance container instance. +def getInstanceContainer(container_type) -> InstanceContainer: + container = InstanceContainer(container_id = "InstanceContainer") + container.addMetaDataEntry("type", container_type) + return container + class DefinitionContainerSubClass(DefinitionContainer): def __init__(self): super().__init__(container_id = "SubDefinitionContainer") class InstanceContainerSubClass(InstanceContainer): - def __init__(self): + def __init__(self, container_type): super().__init__(container_id = "SubInstanceContainer") + self.addMetaDataEntry("type", container_type) #############################START OF TEST CASES################################ @@ -152,68 +162,130 @@ def test_addExtruder(global_stack): global_stack.addExtruder(unittest.mock.MagicMock()) assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder. -## Tests whether the container types are properly enforced on the stack. -# -# When setting a field to have a different type of stack than intended, we -# should get an exception. -@pytest.mark.parametrize("definition_container, instance_container", [ - (DefinitionContainer(container_id = "TestDefinitionContainer"), InstanceContainer(container_id = "TestInstanceContainer")), - (DefinitionContainerSubClass(), InstanceContainerSubClass()) +#Tests setting user changes profiles to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") ]) -def test_constrainContainerTypes(definition_container, instance_container, global_stack): - instance_container.addMetaDataEntry("type", "") +def test_constrainUserChangesInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.userChanges = container - with pytest.raises(InvalidContainerError): # Putting a definition container in the user changes is not allowed. - global_stack.userChanges = definition_container - with pytest.raises(InvalidContainerError): - global_stack.userChanges = instance_container # Putting a random instance container in the user changes is not allowed. +#Tests setting user changes profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "user"), + InstanceContainerSubClass(container_type = "user") +]) +def test_constrainUserChangesValid(container, global_stack): + global_stack.userChanges = container #Should not give an error. - instance_container.setMetaDataEntry("type", "user") # After setting the metadata type entry correctly, we are allowed to set the container - global_stack.userChanges = instance_container +#Tests setting quality changes profiles to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainQualityChangesInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.qualityChanges = container - with pytest.raises(InvalidContainerError): - global_stack.qualityChanges = definition_container - with pytest.raises(InvalidContainerError): - global_stack.qualityChanges = instance_container +#Test setting quality changes profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "quality_changes"), + InstanceContainerSubClass(container_type = "quality_changes") +]) +def test_constrainQualityChangesValid(container, global_stack): + global_stack.qualityChanges = container #Should not give an error. - instance_container.setMetaDataEntry("type", "quality_changes") - global_stack.qualityChanges = instance_container +#Tests setting quality profiles to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainQualityInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.quality = container - with pytest.raises(InvalidContainerError): - global_stack.quality = definition_container - with pytest.raises(InvalidContainerError): - global_stack.quality = instance_container +#Test setting quality profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "quality"), + InstanceContainerSubClass(container_type = "quality") +]) +def test_constrainQualityValid(container, global_stack): + global_stack.quality = container #Should not give an error. - instance_container.setMetaDataEntry("type", "quality") - global_stack.quality = instance_container +#Tests setting materials to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "quality"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainMaterialInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.material = container - with pytest.raises(InvalidContainerError): - global_stack.material = definition_container - with pytest.raises(InvalidContainerError): - global_stack.material = instance_container +#Test setting materials. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "material"), + InstanceContainerSubClass(container_type = "material") +]) +def test_constrainMaterialValid(container, global_stack): + global_stack.material = container #Should not give an error. - instance_container.setMetaDataEntry("type", "material") - global_stack.material = instance_container +#Tests setting variants to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainVariantInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.variant = container - with pytest.raises(InvalidContainerError): - global_stack.variant = definition_container - with pytest.raises(InvalidContainerError): - global_stack.variant = instance_container +#Test setting variants. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "variant"), + InstanceContainerSubClass(container_type = "variant") +]) +def test_constrainVariantValid(container, global_stack): + global_stack.variant = container #Should not give an error. - instance_container.setMetaDataEntry("type", "variant") - global_stack.variant = instance_container +#Tests setting definition changes profiles to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong container type"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong type. + DefinitionContainer(container_id = "wrong class") +]) +def test_constrainDefinitionChangesInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.definitionChanges = container - with pytest.raises(InvalidContainerError): - global_stack.definitionChanges = definition_container - with pytest.raises(InvalidContainerError): - global_stack.definitionChanges = instance_container +#Test setting definition changes profiles. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "definition_changes"), + InstanceContainerSubClass(container_type = "definition_changes") +]) +def test_constrainDefinitionChangesValid(container, global_stack): + global_stack.definitionChanges = container #Should not give an error. - instance_container.setMetaDataEntry("type", "definition_changes") - global_stack.definitionChanges = instance_container +#Tests setting definitions to invalid containers. +@pytest.mark.parametrize("container", [ + getInstanceContainer(container_type = "wrong class"), + getInstanceContainer(container_type = "material"), #Existing, but still wrong class. +]) +def test_constrainVariantInvalid(container, global_stack): + with pytest.raises(InvalidContainerError): #Invalid container, should raise an error. + global_stack.definition = container - with pytest.raises(InvalidContainerError): #Putting an instance container in the definition is not allowed. - global_stack.definition = instance_container - global_stack.definition = definition_container #Putting a definition container in the definition is allowed. +#Test setting definitions. +@pytest.mark.parametrize("container", [ + DefinitionContainer(container_id = "DefinitionContainer"), + DefinitionContainerSubClass() +]) +def test_constrainDefinitionValid(container, global_stack): + global_stack.definition = container #Should not give an error. ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ From d02aa7f6a39881373b9d26c106354ba0cbab9de5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Apr 2017 13:32:37 +0200 Subject: [PATCH 193/816] Fixed order of close & disconnect This would cause the state change caused by close to not be sent to the printer. Fixes CURA-3668 --- .../UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py index f39d921fff..9f450f21ab 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py @@ -164,8 +164,8 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): else: if self._printers[key].isConnected(): Logger.log("d", "Closing connection [%s]..." % key) - self._printers[key].connectionStateChanged.disconnect(self._onPrinterConnectionStateChanged) self._printers[key].close() + self._printers[key].connectionStateChanged.disconnect(self._onPrinterConnectionStateChanged) ## Because the model needs to be created in the same thread as the QMLEngine, we use a signal. def addPrinter(self, name, address, properties): @@ -183,9 +183,9 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): printer = self._printers.pop(name, None) if printer: if printer.isConnected(): + printer.disconnect() printer.connectionStateChanged.disconnect(self._onPrinterConnectionStateChanged) Logger.log("d", "removePrinter, disconnecting [%s]..." % name) - printer.disconnect() self.printerListChanged.emit() ## Handler for when the connection state of one of the detected printers changes From 7bad71882389f168e0cc739d0b47cfd9da9b709f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 13:36:16 +0200 Subject: [PATCH 194/816] Don't update the global container stack unnecessarily --- .../MachineSettingsAction.qml | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 20ec99edf3..86b834c67c 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -100,7 +100,14 @@ Cura.MachineAction id: buildAreaWidthField text: machineWidthProvider.properties.value validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineWidthProvider.setPropertyValue("value", text); manager.forceUpdate() } + onEditingFinished: + { + if (text != machineWidthProvider.properties.value) + { + machineWidthProvider.setPropertyValue("value", text); + manager.forceUpdate(); + } + } } Label { @@ -116,7 +123,13 @@ Cura.MachineAction id: buildAreaDepthField text: machineDepthProvider.properties.value validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineDepthProvider.setPropertyValue("value", text); manager.forceUpdate() } + onEditingFinished: { + if (text != machineDepthProvider.properties.value) + { + machineDepthProvider.setPropertyValue("value", text); + manager.forceUpdate(); + } + } } Label { @@ -132,7 +145,13 @@ Cura.MachineAction id: buildAreaHeightField text: machineHeightProvider.properties.value validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineHeightProvider.setPropertyValue("value", text); manager.forceUpdate() } + onEditingFinished: { + if (text != machineHeightProvider.properties.value) + { + machineHeightProvider.setPropertyValue("value", text); + manager.forceUpdate(); + } + } } Label { @@ -187,8 +206,11 @@ Cura.MachineAction } onActivated: { - machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value); - manager.forceUpdate(); + if(machineShapeProvider.properties.value != shapesModel.get(index).value) + { + machineShapeProvider.setPropertyValue("value", shapesModel.get(index).value); + manager.forceUpdate(); + } } } } @@ -392,6 +414,11 @@ Cura.MachineAction currentIndex: machineExtruderCountProvider.properties.value - 1 onActivated: { + if(machineExtruderCountProvider.properties.value == index + 1) + { + return; + } + machineExtruderCountProvider.setPropertyValue("value", index + 1); manager.forceUpdate(); base.extruderTabsCount = (index > 0) ? index + 1 : 0; @@ -503,7 +530,7 @@ Cura.MachineAction { if(currentIndex > 0) { - ExtruderManager.setActiveExtruderIndex(settingsTabs.getTab(currentIndex).extruderIndex); + ExtruderManager.setActiveExtruderIndex(currentIndex - 1); } } @@ -517,8 +544,6 @@ Cura.MachineAction title: base.extrudersModel.getItem(index).name anchors.margins: UM.Theme.getSize("default_margin").width - property int extruderIndex: index - Column { spacing: UM.Theme.getSize("default_margin").width @@ -668,8 +693,12 @@ Cura.MachineAction polygon.push([-parseFloat(printheadXMinField.text),-parseFloat(printheadYMinField.text)]); polygon.push([ parseFloat(printheadXMaxField.text), parseFloat(printheadYMaxField.text)]); polygon.push([ parseFloat(printheadXMaxField.text),-parseFloat(printheadYMinField.text)]); - machineHeadPolygonProvider.setPropertyValue("value", JSON.stringify(polygon)); - manager.forceUpdate(); + var polygon_string = JSON.stringify(polygon); + if(polygon != machineHeadPolygonProvider.properties.value) + { + machineHeadPolygonProvider.setPropertyValue("value", polygon_string); + manager.forceUpdate(); + } } UM.SettingPropertyProvider @@ -807,7 +836,7 @@ Cura.MachineAction { id: extruderNozzleSizeProvider - containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_size" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -817,7 +846,7 @@ Cura.MachineAction { id: extruderOffsetXProvider - containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_x" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -827,7 +856,7 @@ Cura.MachineAction { id: extruderOffsetYProvider - containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_y" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -837,7 +866,7 @@ Cura.MachineAction { id: extruderStartGcodeProvider - containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_start_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -847,7 +876,7 @@ Cura.MachineAction { id: extruderEndGcodeProvider - containerStackId: Cura.ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_end_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex From bc78bf94ab75ee961551ef8edd1243820e9997e5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Apr 2017 14:06:10 +0200 Subject: [PATCH 195/816] Fixed buttons not visible on my screen CURA-3642 --- resources/qml/AskOpenAsProjectOrModelsDialog.qml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/resources/qml/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/AskOpenAsProjectOrModelsDialog.qml index d85019983e..a3879bb8ac 100644 --- a/resources/qml/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/AskOpenAsProjectOrModelsDialog.qml @@ -18,8 +18,8 @@ UM.Dialog id: base title: catalog.i18nc("@title:window", "Open project file") - width: 420 * Screen.devicePixelRatio - height: 140 * Screen.devicePixelRatio + width: 450 * Screen.devicePixelRatio + height: 150 * Screen.devicePixelRatio maximumHeight: height maximumWidth: width @@ -61,13 +61,16 @@ UM.Dialog Column { anchors.fill: parent - anchors.margins: 20 * Screen.devicePixelRatio + anchors.leftMargin: 20 * Screen.devicePixelRatio + anchors.rightMargin: 20 * Screen.devicePixelRatio + anchors.bottomMargin: 20 * Screen.devicePixelRatio spacing: 10 * Screen.devicePixelRatio Label { - text: catalog.i18nc("@text:window", "This is a Cura project file. Would you like to open it as a project\nor import the models from it?") - anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@text:window", "This is a Cura project file. Would you like to open it as a project or import the models from it?") + anchors.left: parent.left + anchors.right: parent.right font: UM.Theme.getFont("default") wrapMode: Text.WordWrap } @@ -76,7 +79,6 @@ UM.Dialog { id: rememberChoiceCheckBox text: catalog.i18nc("@text:window", "Remember my choice") - anchors.margins: UM.Theme.getSize("default_margin").width checked: UM.Preferences.getValue("cura/choice_on_open_project") != "always_ask" } From f064500ed58d9a3dad9f11f94bdf895c601bc37f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 14:59:11 +0200 Subject: [PATCH 196/816] Don't inherit from Ultimaker printers --- resources/definitions/peopoly_moai.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 5cff33a791..01396f26b3 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -2,7 +2,6 @@ "id": "peopoly_moai", "version": 2, "name": "Peopoly Moai", - "inherits": "ultimaker", "metadata": { "visible": true, "author": "fieldOfView", From c989496a13d0b26700bb3e9d4d7952b3419e78e6 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 10 Apr 2017 16:11:42 +0200 Subject: [PATCH 197/816] Fix load (3mf) groups. Also add convex hull decorator to children of node. CURA-3671 --- cura/CuraApplication.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index af23fcb4cf..037bf124a1 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1278,6 +1278,9 @@ class CuraApplication(QtApplication): # If there is no convex hull for the node, start calculating it and continue. if not node.getDecorator(ConvexHullDecorator): node.addDecorator(ConvexHullDecorator()) + for child in node.getAllChildren(): + if not child.getDecorator(ConvexHullDecorator): + child.addDecorator(ConvexHullDecorator()) if node.callDecoration("isSliceable"): # Find node location From c89669e73e1df69637b1d48f7f4da150f656ebbf Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 16:22:20 +0200 Subject: [PATCH 198/816] Layout & code style: move unit into numeric textfield component --- .../MachineSettingsAction.qml | 186 ++++++++---------- 1 file changed, 79 insertions(+), 107 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 86b834c67c..babb9a6abb 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -87,7 +87,7 @@ Cura.MachineAction Grid { - columns: 3 + columns: 2 columnSpacing: UM.Theme.getSize("default_margin").width rowSpacing: UM.Theme.getSize("default_lining").width @@ -95,67 +95,39 @@ Cura.MachineAction { text: catalog.i18nc("@label", "X (Width)") } - TextField + Loader { id: buildAreaWidthField - text: machineWidthProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: - { - if (text != machineWidthProvider.properties.value) - { - machineWidthProvider.setPropertyValue("value", text); - manager.forceUpdate(); - } - } - } - Label - { - text: catalog.i18nc("@label", "mm") + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: machineWidthProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: true } Label { text: catalog.i18nc("@label", "Y (Depth)") } - TextField + Loader { id: buildAreaDepthField - text: machineDepthProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { - if (text != machineDepthProvider.properties.value) - { - machineDepthProvider.setPropertyValue("value", text); - manager.forceUpdate(); - } - } - } - Label - { - text: catalog.i18nc("@label", "mm") + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: machineDepthProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: true } Label { text: catalog.i18nc("@label", "Z (Height)") } - TextField + Loader { id: buildAreaHeightField - text: machineHeightProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { - if (text != machineHeightProvider.properties.value) - { - machineHeightProvider.setPropertyValue("value", text); - manager.forceUpdate(); - } - } - } - Label - { - text: catalog.i18nc("@label", "mm") + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: machineHeightProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: true } } @@ -298,7 +270,7 @@ Cura.MachineAction Grid { - columns: 3 + columns: 2 columnSpacing: UM.Theme.getSize("default_margin").width rowSpacing: UM.Theme.getSize("default_lining").width @@ -313,10 +285,6 @@ Cura.MachineAction validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: setHeadPolygon() } - Label - { - text: catalog.i18nc("@label", "mm") - } Label { @@ -329,10 +297,6 @@ Cura.MachineAction validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: setHeadPolygon() } - Label - { - text: catalog.i18nc("@label", "mm") - } Label { @@ -345,10 +309,6 @@ Cura.MachineAction validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: setHeadPolygon() } - Label - { - text: catalog.i18nc("@label", "mm") - } Label { @@ -361,12 +321,7 @@ Cura.MachineAction validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: setHeadPolygon() } - Label - { - text: catalog.i18nc("@label", "mm") - } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } @@ -374,19 +329,15 @@ Cura.MachineAction { text: catalog.i18nc("@label", "Gantry height") } - TextField + Loader { id: gantryHeightField - text: gantryHeightProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { gantryHeightProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: gantryHeightProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } @@ -441,7 +392,6 @@ Cura.MachineAction } } } - Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height; visible: extruderCountComboBox.visible } Label @@ -449,18 +399,14 @@ Cura.MachineAction text: catalog.i18nc("@label", "Nozzle size") visible: nozzleSizeField.visible } - TextField + Loader { id: nozzleSizeField - text: machineNozzleSizeProvider.properties.value visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1 - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { machineNozzleSizeProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") - visible: nozzleSizeField.visible + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: machineNozzleSizeProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false } } } @@ -556,57 +502,49 @@ Cura.MachineAction Grid { - columns: 3 + columns: 2 columnSpacing: UM.Theme.getSize("default_margin").width rowSpacing: UM.Theme.getSize("default_lining").width Label { text: catalog.i18nc("@label", "Nozzle size") + visible: extruderNozzleSizeField.visible } - TextField + Loader { id: extruderNozzleSizeField - text: extruderNozzleSizeProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { extruderNozzleSizeProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") + visible: !Cura.MachineManager.hasVariants + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: extruderNozzleSizeProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false } Label { text: catalog.i18nc("@label", "Nozzle offset X") } - TextField + Loader { id: extruderOffsetXField - text: extruderOffsetXProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { extruderOffsetXProvider.setPropertyValue("value", text) } - } - Label - { - text: catalog.i18nc("@label", "mm") + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: extruderOffsetXProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false } Label { text: catalog.i18nc("@label", "Nozzle offset Y") } - TextField + Loader { id: extruderOffsetYField - text: extruderOffsetYProvider.properties.value - validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } - onEditingFinished: { extruderOffsetYProvider.setPropertyValue("value", text) } + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: extruderOffsetYProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false } - Label - { - text: catalog.i18nc("@label", "mm") - } - } Row @@ -701,6 +639,40 @@ Cura.MachineAction } } + Component + { + id: numericTextFieldWithUnit + Item { + height: textField.height + width: textField.width + TextField + { + id: textField + text: propertyProvider.properties.value + validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } + onEditingFinished: + { + if (propertyProvider && text != propertyProvider.properties.value) + { + propertyProvider.setPropertyValue("value", text); + if(forceUpdateOnChange) + { + manager.forceUpdate(); + } + } + } + } + + Label + { + text: unit + anchors.right: textField.right + anchors.rightMargin: y - textField.y + anchors.verticalCenter: textField.verticalCenter + } + } + } + UM.SettingPropertyProvider { id: machineWidthProvider From 64ce8c0bb1a2db3fa1767a48f0c09b96be79e424 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 16:39:46 +0200 Subject: [PATCH 199/816] Add test for whether an empty stack deserialises to proper size It must be padded with empty containers. The test currently fails, and we concluded that we won't fix it as part of this refactor. We'll refactor this later and put it on skip until then to indicate a todo. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 6b0e97111c..98f7906bdd 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -287,6 +287,21 @@ def test_constrainVariantInvalid(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. +@pytest.mark.skip #The test currently fails because the definition container doesn't have a category, which is wrong but we don't have time to refactor that right now. +def test_deserializeCompletesEmptyContainers(global_stack: cura.Settings.GlobalStack): + global_stack._containers = [DefinitionContainer(container_id = "definition")] #Set the internal state of this stack manually. + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + global_stack.deserialize("") + + assert len(global_stack.getContainers()) == len(cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap) #Needs a slot for every type. + for container_type_index in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap: + if container_type_index == cura.Settings.CuraContainerStack._ContainerIndexes.Definition: #We're not checking the definition. + continue + assert global_stack.getContainer(container_type_index).getId() == "empty" #All others need to be empty. + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), From a955c3dfdd8b9e97a0846f12723aec85b927ddf6 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 16:41:05 +0200 Subject: [PATCH 200/816] Add test for removing invalid instance containers from serialisation If deserialize finds a container that has the wrong type it should replace it with an empty container. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 98f7906bdd..f8bbebe107 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -302,7 +302,19 @@ def test_deserializeCompletesEmptyContainers(global_stack: cura.Settings.GlobalS continue assert global_stack.getContainer(container_type_index).getId() == "empty" #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") + global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + global_stack.deserialize("") + + assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty. + ## Tests whether the user changes are being read properly from a global stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, user_changes_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), @@ -327,6 +339,7 @@ def test_deserializeUserChanges(filename, user_changes_id, container_registry, g ## Tests whether the quality changes are being read properly from a global # stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, quality_changes_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), @@ -351,6 +364,7 @@ def test_deserializeQualityChanges(filename, quality_changes_id, container_regis ## Tests whether the quality profile is being read properly from a global # stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, quality_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), @@ -375,6 +389,7 @@ def test_deserializeQuality(filename, quality_id, container_registry, global_sta ## Tests whether the material profile is being read properly from a global # stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, material_id", [ ("Global.global.cfg", "some_instance"), ("Global.stack.cfg", "some_instance"), @@ -400,6 +415,7 @@ def test_deserializeMaterial(filename, material_id, container_registry, global_s ## Tests whether the variant profile is being read properly from a global # stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, variant_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), @@ -424,6 +440,7 @@ def test_deserializeVariant(filename, variant_id, container_registry, global_sta ## Tests whether the definition changes profile is being read properly from a # global stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, definition_changes_id", [ ("Global.global.cfg", "empty"), ("Global.stack.cfg", "empty"), @@ -448,6 +465,7 @@ def test_deserializeDefinitionChanges(filename, definition_changes_id, container UM.Settings.ContainerStack._containerRegistry = original_container_registry ## Tests whether the definition is being read properly from a global stack. +@pytest.mark.skip @pytest.mark.parametrize("filename, definition_id", [ ("Global.global.cfg", "some_definition"), ("Global.stack.cfg", "some_definition"), @@ -472,6 +490,7 @@ def test_deserializeDefinition(filename, definition_id, container_registry, glob ## Tests that when a global stack is loaded with an unknown instance, it raises # an exception. +@pytest.mark.skip def test_deserializeMissingContainer(global_stack): serialized = readStack("Global.global.cfg") with pytest.raises(Exception): @@ -526,6 +545,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 +@pytest.mark.skip def test_getPropertyWithResolve(global_stack): #Define some containers for the stack. resolve = unittest.mock.MagicMock() #Sets just the resolve for bed temperature. From 00412e905f10c289cfe051b531c618652b4ce2b7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 16:43:51 +0200 Subject: [PATCH 201/816] Add test for removing definitions from instance locations When deserialize finds a definition in an instance container spot it should replace it with an empty container. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index f8bbebe107..9665567698 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -313,6 +313,17 @@ 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") + global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + global_stack.deserialize("") + + assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty. + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.skip @pytest.mark.parametrize("filename, user_changes_id", [ From 5e9695773aad92911c16a00950cf593a94b1fa2c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 16:45:42 +0200 Subject: [PATCH 202/816] Add test for instance containers on definition spot When deserialize finds an instance container in the definition spot and no other container to replace it with, it should raise an exception because stacks must have a definition. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 9665567698..38ecb8967a 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -324,6 +324,13 @@ def test_deserializeRemovesWrongContainerClass(global_stack): assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty. +def test_deserializeWrongDefinitionClass(global_stack): + global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = getInstanceContainer(container_type = "definition") #Correct type but wrong class. + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + with pytest.raises(UM.Settings.ContainerStack.InvalidContainerStackError): #Must raise an error that there is no definition container. + global_stack.deserialize("") + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.skip @pytest.mark.parametrize("filename, user_changes_id", [ From f27e7fca88934b316251298750bd22b8fff35cc9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 16:46:47 +0200 Subject: [PATCH 203/816] Document test_deserializeWrongDefinitionClass Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 38ecb8967a..ce86cc4c7b 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -324,6 +324,8 @@ 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. From e8077391171052b1d9a06c2d5c893fcf5352b31f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 17:08:23 +0200 Subject: [PATCH 204/816] Add test for moving containers through deserialising When a container in the stack file is located in the wrong spot, it needs to move the container to the correct spot. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ce86cc4c7b..0830fa4daf 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -333,6 +333,18 @@ 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. + global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + global_stack.deserialize("") + + assert global_stack.quality.getId() == "empty" + assert global_stack.material.getId() != "empty" + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.skip @pytest.mark.parametrize("filename, user_changes_id", [ From f12ffad2c1f47ef9be579252851fc546ecf9805f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 17:12:27 +0200 Subject: [PATCH 205/816] Add test for moving definition containers When a definition container is in the wrong spot in a stack file it needs to be moved to the definition slot. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 0830fa4daf..58aba31b74 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -345,6 +345,17 @@ def test_deserializeMoveInstanceContainer(global_stack): assert global_stack.quality.getId() == "empty" assert global_stack.material.getId() != "empty" +## 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. + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + global_stack.deserialize("") + + assert global_stack.material.getId() == "empty" + assert global_stack.definition.getId() != "empty" + ## Tests whether the user changes are being read properly from a global stack. @pytest.mark.skip @pytest.mark.parametrize("filename, user_changes_id", [ From 71aca6aa4b088234f35466df14509c8c73c43ea4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 17:14:50 +0200 Subject: [PATCH 206/816] Remove old deserialize tests Most of these tests also tested the Uranium code, which it should mock out. The last test, test_deserializeMissingContainer, is caught by the currently existing tests. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 189 ------------------------------ 1 file changed, 189 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 58aba31b74..e58bed0a17 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -356,195 +356,6 @@ def test_deserializeMoveDefinitionContainer(global_stack): assert global_stack.material.getId() == "empty" assert global_stack.definition.getId() != "empty" -## Tests whether the user changes are being read properly from a global stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, user_changes_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), - ("OnlyUser.global.cfg", "some_instance"), #This one does have a user profile. - ("Complete.global.cfg", "some_user_changes") -]) -def test_deserializeUserChanges(filename, user_changes_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.userChanges.getId() == user_changes_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the quality changes are being read properly from a global -# stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, quality_changes_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), - ("OnlyQualityChanges.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_quality_changes") -]) -def test_deserializeQualityChanges(filename, quality_changes_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.qualityChanges.getId() == quality_changes_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the quality profile is being read properly from a global -# stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, quality_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), - ("OnlyQuality.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_quality") -]) -def test_deserializeQuality(filename, quality_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.quality.getId() == quality_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the material profile is being read properly from a global -# stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, material_id", [ - ("Global.global.cfg", "some_instance"), - ("Global.stack.cfg", "some_instance"), - ("MachineLegacy.stack.cfg", "some_instance"), - ("OnlyDefinition.global.cfg", "empty"), - ("OnlyMaterial.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_material") -]) -def test_deserializeMaterial(filename, material_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.material.getId() == material_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the variant profile is being read properly from a global -# stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, variant_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), - ("OnlyVariant.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_variant") -]) -def test_deserializeVariant(filename, variant_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.variant.getId() == variant_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the definition changes profile is being read properly from a -# global stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, definition_changes_id", [ - ("Global.global.cfg", "empty"), - ("Global.stack.cfg", "empty"), - ("MachineLegacy.stack.cfg", "empty"), - ("OnlyDefinitionChanges.global.cfg", "some_instance"), - ("Complete.global.cfg", "some_material") -]) -def test_deserializeDefinitionChanges(filename, definition_changes_id, container_registry, global_stack): - serialized = readStack(filename) - global_stack = cura.Settings.GlobalStack.GlobalStack("TestStack") - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.definitionChanges.getId() == definition_changes_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether the definition is being read properly from a global stack. -@pytest.mark.skip -@pytest.mark.parametrize("filename, definition_id", [ - ("Global.global.cfg", "some_definition"), - ("Global.stack.cfg", "some_definition"), - ("MachineLegacy.stack.cfg", "some_definition"), - ("OnlyDefinition.global.cfg", "some_definition"), - ("Complete.global.cfg", "some_definition") -]) -def test_deserializeDefinition(filename, definition_id, container_registry, global_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - global_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - global_stack.deserialize(serialized) - - assert global_stack.definition.getId() == definition_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests that when a global stack is loaded with an unknown instance, it raises -# an exception. -@pytest.mark.skip -def test_deserializeMissingContainer(global_stack): - serialized = readStack("Global.global.cfg") - with pytest.raises(Exception): - global_stack.deserialize(serialized) - try: - global_stack.deserialize(serialized) - except Exception as e: - #Must be exactly Exception, not one of its subclasses, since that is what gets raised when a stack has an unknown container. - #That's why we can't use pytest.raises. - assert type(e) == Exception - ## Tests whether getProperty properly applies the stack-like behaviour on its # containers. def test_getPropertyFallThrough(global_stack): From dfd8cfb2b8c43f2d65fa3c72df5e0d28f5668f45 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 10 Apr 2017 17:17:13 +0200 Subject: [PATCH 207/816] Skip test_deserializeMoveDefinitionContainer This test is currently failing because of a weird hack we're doing to get around a Uranium bug: We're searching only through definitions that have a category, any category. This is done because Uranium requires a search to have some metadata entry to search on. We'll have to refactor that eventually but for now that is out of scope. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index e58bed0a17..94d7c1d977 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -347,6 +347,7 @@ def test_deserializeMoveInstanceContainer(global_stack): ## Tests whether a definition container in the wrong spot is moved into the # correct spot by deserialising. +@pytest.mark.skip def test_deserializeMoveDefinitionContainer(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Material] = DefinitionContainer(container_id = "some definition") #Not in the correct spot. From 499971d55cbad20bc8805bb24f763b4f7f4f183a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 17:24:02 +0200 Subject: [PATCH 208/816] Fix loading values on 1st extruder tab --- .../MachineSettingsAction/MachineSettingsAction.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index babb9a6abb..fa4d62b5e1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -808,7 +808,7 @@ Cura.MachineAction { id: extruderNozzleSizeProvider - containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_size" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -818,7 +818,7 @@ Cura.MachineAction { id: extruderOffsetXProvider - containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_x" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -828,7 +828,7 @@ Cura.MachineAction { id: extruderOffsetYProvider - containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_nozzle_offset_y" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -838,7 +838,7 @@ Cura.MachineAction { id: extruderStartGcodeProvider - containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_start_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex @@ -848,7 +848,7 @@ Cura.MachineAction { id: extruderEndGcodeProvider - containerStackId: ExtruderManager.activeExtruderIndex > 0 ? Cura.MachineManager.activeStackId : "" + containerStackId: settingsTabs.currentIndex > 0 ? Cura.MachineManager.activeStackId : "" key: "machine_extruder_end_code" watchedProperties: [ "value" ] storeIndex: manager.containerIndex From 73779eef251476d5b2ff12b84eb17e41511e6496 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 10 Apr 2017 17:51:46 +0200 Subject: [PATCH 209/816] Properly set the ContainerRegistry for the missing container test --- tests/Settings/TestGlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 94d7c1d977..b3d814f8c1 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -357,6 +357,8 @@ def test_deserializeMoveDefinitionContainer(global_stack): assert global_stack.material.getId() == "empty" assert global_stack.definition.getId() != "empty" + UM.Settings.ContainerStack._containerRegistry = None + ## Tests whether getProperty properly applies the stack-like behaviour on its # containers. def test_getPropertyFallThrough(global_stack): From 09e5765f220f443d351a5c826566e63565731503 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 10 Apr 2017 17:52:17 +0200 Subject: [PATCH 210/816] Do not try to validate against machine_extruder_count when there is no machine_extruder_count --- cura/Settings/GlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 03758d2599..e9957c22e7 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -33,7 +33,7 @@ class GlobalStack(CuraContainerStack): def addExtruder(self, extruder): extruder_count = self.getProperty("machine_extruder_count", "value") - if len(self._extruders) + 1 > extruder_count: + if extruder_count and len(self._extruders) + 1 > extruder_count: raise Exceptions.TooManyExtrudersError("Tried to add extruder to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count)) self._extruders.append(extruder) From 73e1af49ee02b6862c3c9de77558912ccacb9bd1 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 10 Apr 2017 18:04:41 +0200 Subject: [PATCH 211/816] Track which settings we are trying to "resolve" This prevents infinite recursions when a resolve function tries to get its own value. --- cura/Settings/GlobalStack.py | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index e9957c22e7..62974f8291 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -25,7 +25,10 @@ class GlobalStack(CuraContainerStack): self._extruders = [] - self._resolving_property = None + # This property is used to track which settings we are calculating the "resolve" for + # and if so, to bypass the resolve to prevent an infinite recursion that would occur + # if the resolve function tried to access the same property it is a resolve for. + self._resolving_settings = set() @pyqtProperty("QVariantList") def extruders(self) -> list: @@ -44,10 +47,12 @@ class GlobalStack(CuraContainerStack): if not self.definition.findDefinitions(key = key): return None - if property_name == "value" and self._resolving_property != key: - if not self.hasUserValue(key) and len(self._extruders) > 1: - self._resolving_property = key - resolve = super().getProperty(key, "resolve") + if self._shouldResolve(key, property_name): + self._resolving_settings.add(key) + resolve = super().getProperty(key, "resolve") + self._resolving_settings.remove(key) + if resolve is not None: + return resolve return super().getProperty(key, property_name) @@ -56,6 +61,25 @@ class GlobalStack(CuraContainerStack): def setNextStack(self, next_stack: ContainerStack) -> None: raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") + def _shouldResolve(self, key: str, property_name: str) -> bool: + if property_name is not "value": + # Do not try to resolve anything but the "value" property + return False + + if key in self._resolving_settings: + # To prevent infinite recursion, if getProperty is called with the same key as + # we are already trying to resolve, we should not try to resolve again. Since + # this can happen multiple times when trying to resolve a value, we need to + # track all settings that are being resolved. + return False + + if self.hasUserValue(key): + # When the user has explicitly set a value, we should ignore any resolve and + # just return that value. + return False + + return True + ## private: global_stack_mime = MimeType( From df7f039826349c4592e07fedc5773dda4c2a2452 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 18:16:00 +0200 Subject: [PATCH 212/816] Store extruder settings in definition_changes containers --- .../MachineSettingsAction.py | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 1feb748006..ec8ce7102e 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -13,6 +13,7 @@ from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Logger import Logger from cura.Settings.CuraContainerRegistry import CuraContainerRegistry +from cura.Settings.ExtruderManager import ExtruderManager import UM.i18n catalog = UM.i18n.i18nCatalog("cura") @@ -26,10 +27,12 @@ class MachineSettingsAction(MachineAction): self._qml_url = "MachineSettingsAction.qml" self._container_index = 0 + self._extruder_container_index = 0 self._container_registry = ContainerRegistry.getInstance() self._container_registry.containerAdded.connect(self._onContainerAdded) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) def _reset(self): global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -39,7 +42,7 @@ class MachineSettingsAction(MachineAction): # Make sure there is a definition_changes container to store the machine settings definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"}) if not definition_changes_container: - definition_changes_container = self._createDefinitionChangesContainer(global_container_stack) + definition_changes_container = self._createDefinitionChangesContainer(global_container_stack, global_container_stack.getName() + "_settings") # Notify the UI in which container to store the machine settings data container_index = global_container_stack.getContainerIndex(definition_changes_container) @@ -47,15 +50,32 @@ class MachineSettingsAction(MachineAction): self._container_index = container_index self.containerIndexChanged.emit() - def _createDefinitionChangesContainer(self, global_container_stack, container_index = None): - definition_changes_container = InstanceContainer(global_container_stack.getName() + "_settings") - definition = global_container_stack.getBottom() + def _onActiveExtruderStackChanged(self): + global_container_stack = Application.getInstance().getGlobalContainerStack() + extruder_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() + if not global_container_stack or not extruder_container_stack: + return + + # Make sure there is a definition_changes container to store the machine settings + definition_changes_container = extruder_container_stack.findContainer({"type": "definition_changes"}) + if not definition_changes_container: + definition_changes_container = self._createDefinitionChangesContainer(extruder_container_stack, global_container_stack.getName() + "_" + extruder_container_stack.getId() + "_settings") + + # Notify the UI in which container to store the machine settings data + container_index = extruder_container_stack.getContainerIndex(definition_changes_container) + if container_index != self._extruder_container_index: + self._extruder_container_index = container_index + self.extruderContainerIndexChanged.emit() + + def _createDefinitionChangesContainer(self, container_stack, container_name, container_index = None): + definition_changes_container = InstanceContainer(container_name) + definition = container_stack.getBottom() definition_changes_container.setDefinition(definition) definition_changes_container.addMetaDataEntry("type", "definition_changes") self._container_registry.addContainer(definition_changes_container) # Insert definition_changes between the definition and the variant - global_container_stack.insertContainer(-1, definition_changes_container) + container_stack.insertContainer(-1, definition_changes_container) return definition_changes_container @@ -65,6 +85,13 @@ class MachineSettingsAction(MachineAction): def containerIndex(self): return self._container_index + extruderContainerIndexChanged = pyqtSignal() + + @pyqtProperty(int, notify = extruderContainerIndexChanged) + def extruderContainerIndex(self): + return self._extruder_container_index + + def _onContainerAdded(self, container): # Add this action as a supported action to all machine definitions if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine": From 6dd642469ad98d0eb28e84c3bc1a349d73d4d709 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 20:37:41 +0200 Subject: [PATCH 213/816] Set value before activating another extruder Because all extruder tabs share the same SettingPropertyProvider, we want the property provider value to update before its container stack is changed, or the value carries over to the other containerstack, leaving the value for the initial containerstack unchanged --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index fa4d62b5e1..e7f17f3b26 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -476,6 +476,7 @@ Cura.MachineAction { if(currentIndex > 0) { + contentItem.forceActiveFocus(); ExtruderManager.setActiveExtruderIndex(currentIndex - 1); } } From 31ecb30c037dd05f84d2325af4750653453b6986 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 10 Apr 2017 22:30:43 +0200 Subject: [PATCH 214/816] Allow setting the nozzle size through the extruder definition --- resources/definitions/fdmextruder.def.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index 7c594e3eda..48cf750468 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -29,6 +29,18 @@ "settable_per_meshgroup": false, "settable_globally": false }, + "machine_nozzle_size": + { + "label": "Nozzle Diameter", + "description": "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size.", + "unit": "mm", + "type": "float", + "default_value": 0.4, + "minimum_value": "0.001", + "maximum_value_warning": "10", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "machine_nozzle_offset_x": { "label": "Nozzle X Offset", From b4f6ae8c5f76fa7cd0d1510d1960853396fb4d06 Mon Sep 17 00:00:00 2001 From: Elijah Snyder Date: Mon, 10 Apr 2017 19:01:59 -0500 Subject: [PATCH 215/816] First refactor for section to increase verbosity and move all translated M105s. --- plugins/USBPrinting/USBPrinterOutputDevice.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 580bbf06df..2ca7e4ecc7 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -563,19 +563,19 @@ class USBPrinterOutputDevice(PrinterOutputDevice): line = line[:line.find(";")] line = line.strip() - # Don't send empty lines. But we do have to send something, so send m105 instead. - if line == "": + # Don't send empty lines. But we do have to send something, so send + # m105 instead. + # Don't send the M0 or M1 to the machine, as M0 and M1 are handled as + # an LCD menu pause. + if line == "" or line == "M1" or line == "M1": line = "M105" - try: - if line == "M0" or line == "M1": - line = "M105" # Don't send the M0 or M1 to the machine, as M0 and M1 are handled as an LCD menu pause. if ("G0" in line or "G1" in line) and "Z" in line: z = float(re.search("Z([0-9\.]*)", line).group(1)) if self._current_z != z: self._current_z = z except Exception as e: - Logger.log("e", "Unexpected error with printer connection: %s" % e) + Logger.log("e", "Unexpected error with printer connection, could not parse current Z: %s: %s" % (e, line)) self._setErrorState("Unexpected error: %s" %e) checksum = functools.reduce(lambda x,y: x^y, map(ord, "N%d%s" % (self._gcode_position, line))) @@ -674,4 +674,4 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def cancelPreheatBed(self): Logger.log("i", "Cancelling pre-heating of the bed.") self._setTargetBedTemperature(0) - self.preheatBedRemainingTimeChanged.emit() \ No newline at end of file + self.preheatBedRemainingTimeChanged.emit() From 20f28b3fa2c2b78b13fb08f2627e7e74baf3b01f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 11 Apr 2017 09:17:46 +0200 Subject: [PATCH 216/816] Set dir names in config to allow UM detect old cura dir CURA-3529 --- cura/CuraApplication.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 037bf124a1..eb85f00a12 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -109,6 +109,10 @@ class CuraApplication(QtApplication): Q_ENUMS(ResourceTypes) def __init__(self): + # this list of dir names will be used by UM to detect an old cura directory + for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "user", "variants"]: + Resources.addExpectedDirNameInConfig(dir_name) + Resources.addSearchPath(os.path.join(QtApplication.getInstallPrefix(), "share", "cura", "resources")) if not hasattr(sys, "frozen"): Resources.addSearchPath(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "resources")) From 24211624e618ec37446acfd1e3fcbd3165bc6d95 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 11 Apr 2017 10:34:52 +0200 Subject: [PATCH 217/816] Added inherits fdmprinter for Peopoly Moai. CURA-3665 --- resources/definitions/peopoly_moai.def.json | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 resources/definitions/peopoly_moai.def.json diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json old mode 100644 new mode 100755 index 01396f26b3..9c01ca95e4 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -2,6 +2,7 @@ "id": "peopoly_moai", "version": 2, "name": "Peopoly Moai", + "inherits": "fdmprinter", "metadata": { "visible": true, "author": "fieldOfView", From 4c1199d75cbfed12bb68f1cb787dbfff9181e3ea Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 11 Apr 2017 10:35:25 +0200 Subject: [PATCH 218/816] Revert permissions on file. CURA-3665 --- resources/definitions/peopoly_moai.def.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 resources/definitions/peopoly_moai.def.json diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json old mode 100755 new mode 100644 From 12d1db8f191b275fc2bd90b2ea9d5fd0c6656e1c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 09:39:18 +0200 Subject: [PATCH 219/816] Add test for whether resolve wins in definition I'm splitting the test below up into pieces. It'll be removed eventually, when I've made all of these separate tests. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index b3d814f8c1..ea2169e4e9 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -402,6 +402,17 @@ 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, 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. + resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = resolve_and_value + assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition. + +## Tests whether the resolve property is properly obtained in all cases. @pytest.mark.skip def test_getPropertyWithResolve(global_stack): #Define some containers for the stack. From 0a7bcc4277e4bd4cf515d66a7f79418633fe30f1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 09:43:07 +0200 Subject: [PATCH 220/816] Add test for when there's no resolve in definitions It must not attempt to execute a resolve function then. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ea2169e4e9..ce2c050d6e 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -402,6 +402,15 @@ 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. + value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None + + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = value + 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): From 759da2ab05bd0236cc5b12d2049a48920aaabdab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 10:23:44 +0200 Subject: [PATCH 221/816] Add test for value winning over resolve in instances In instance containers, if there's both a resolve and a value, it should take the value. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ce2c050d6e..2233561c7a 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -421,6 +421,33 @@ 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 + instance_containers = {} + for container_type in container_indices.IndexTypeMap: + instance_containers[container_type] = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. + instance_containers[container_type].getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + instance_containers[container_type].getMetaDataEntry = unittest.mock.MagicMock(return_value = container_indices.IndexTypeMap[container_type]) #Make queries for the type return the desired type. + instance_containers[container_indices.Definition].getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None #Definition only has value. + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = instance_containers[container_indices.Definition] #Stack must have a definition. + + #For all instance container slots, the value reigns over resolve. + global_stack.definitionChanges = instance_containers[container_indices.DefinitionChanges] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.variant = instance_containers[container_indices.Variant] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.material = instance_containers[container_indices.Material] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.quality = instance_containers[container_indices.Quality] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.qualityChanges = instance_containers[container_indices.QualityChanges] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + global_stack.userChanges = instance_containers[container_indices.UserChanges] + assert global_stack.getProperty("material_bed_temperature", "value") == 5 + ## Tests whether the resolve property is properly obtained in all cases. @pytest.mark.skip def test_getPropertyWithResolve(global_stack): From 86b288cc6ebf62918aa994efbe229513fa2d84d0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 10:39:07 +0200 Subject: [PATCH 222/816] Add test for when instances have value and definition has resolve The value of the instances should always get evaluated first. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2233561c7a..b98459ce2f 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -448,6 +448,21 @@ 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. + value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None + value.getMetaDataEntry = unittest.mock.MagicMock(return_value = "quality") + resolve = unittest.mock.MagicMock() #Sets just the resolve. + resolve.getProperty = lambda key, property: 7.5 if (key == "material_bed_temperature" and property == "resolve") else None + + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + global_stack.definition = resolve + global_stack.quality = value + + assert global_stack.getProperty("material_bed_temperature", "value") == 10 + ## Tests whether the resolve property is properly obtained in all cases. @pytest.mark.skip def test_getPropertyWithResolve(global_stack): From 1c2ce5b8b194bdb7b4f332b8eb5c03e6623f38ee Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 10:40:23 +0200 Subject: [PATCH 223/816] Remove old getPropertyWithResolve test It has been replaced by several separate tests right above it. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 38 ------------------------------- 1 file changed, 38 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index b98459ce2f..5369ac5fda 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -463,44 +463,6 @@ def test_getPropertyInstancesBeforeResolve(global_stack): assert global_stack.getProperty("material_bed_temperature", "value") == 10 -## Tests whether the resolve property is properly obtained in all cases. -@pytest.mark.skip -def test_getPropertyWithResolve(global_stack): - #Define some containers for the stack. - resolve = unittest.mock.MagicMock() #Sets just the resolve for bed temperature. - resolve.getProperty = lambda key, property: 15 if (key == "material_bed_temperature" and property == "resolve") else None - resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. - resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. - value = unittest.mock.MagicMock() #Sets just the value for bed temperature. - value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None - empty = unittest.mock.MagicMock() #Sets no value or resolve. - empty.getProperty = unittest.mock.MagicMock(return_value = None) - - with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. - global_stack.definition = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition. - global_stack.userChanges = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 #Value wins in other places. - global_stack.userChanges = value - assert global_stack.getProperty("material_bed_temperature", "value") == 10 #Resolve in the definition doesn't influence the value in the user changes. - global_stack.userChanges = resolve - assert global_stack.getProperty("material_bed_temperature", "value") == 15 #Falls through to definition for lack of values, but then asks the start of the stack for the resolve. - global_stack.userChanges = empty - global_stack.qualityChanges = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 #Value still wins in lower places, except definition. - global_stack.qualityChanges = empty - global_stack.quality = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 - global_stack.quality = empty - global_stack.material = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 - global_stack.material = empty - global_stack.variant = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 - global_stack.variant = empty - global_stack.definitionChanges = resolve_and_value - assert global_stack.getProperty("material_bed_temperature", "value") == 5 - ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): From 70dc9fd95b785c41186e5b9a718963a21d8503ea Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 10:41:51 +0200 Subject: [PATCH 224/816] Document why we skip this test for now Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 5369ac5fda..2583fe08ad 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -347,7 +347,7 @@ def test_deserializeMoveInstanceContainer(global_stack): ## Tests whether a definition container in the wrong spot is moved into the # correct spot by deserialising. -@pytest.mark.skip +@pytest.mark.skip #The test currently fails because the definition container doesn't have a category, which is wrong but we don't have time to refactor that right now. def test_deserializeMoveDefinitionContainer(global_stack): global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Material] = DefinitionContainer(container_id = "some definition") #Not in the correct spot. From f15345a0cbcec60820292651e6f9bcc083bc5a32 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 11 Apr 2017 12:18:33 +0200 Subject: [PATCH 225/816] Restore material on global stack when switching back to single extrusion MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines --- .../MachineSettingsAction/MachineSettingsAction.qml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index e7f17f3b26..2456b62ddc 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -370,6 +370,13 @@ Cura.MachineAction return; } + var extruder_material; + if(index == 0 && Cura.MachineManager.hasMaterials) + { + // setting back to single extrusion + extruder_material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeStackId]; + } + machineExtruderCountProvider.setPropertyValue("value", index + 1); manager.forceUpdate(); base.extruderTabsCount = (index > 0) ? index + 1 : 0; @@ -389,6 +396,12 @@ Cura.MachineAction { ExtruderManager.setActiveExtruderIndex(-1); } + if(extruder_material) + { + // restore material on global stack + // MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines + Cura.MachineManager.setActiveMaterial(extruder_material); + } } } } From 323107ef5c1804941fb6338879a04781c1035207 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 11 Apr 2017 13:51:01 +0200 Subject: [PATCH 226/816] Fix GlobalStack::getProperty It used to only consider user values in the "user" containers, now it also accounts for values in the other instance containers. --- cura/Settings/GlobalStack.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 62974f8291..f0d8a5f574 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -10,6 +10,7 @@ from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.SettingInstance import InstanceState from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import ContainerInterface @@ -73,7 +74,8 @@ class GlobalStack(CuraContainerStack): # track all settings that are being resolved. return False - if self.hasUserValue(key): + setting_state = super().getProperty(key, "state") + if setting_state is not None and setting_state != InstanceState.Default: # When the user has explicitly set a value, we should ignore any resolve and # just return that value. return False From 93e42164a832f395dc582c19d8e9791dfe198ee9 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 11 Apr 2017 13:56:40 +0200 Subject: [PATCH 227/816] Make value unit tests also provide a "state" property Since we now use state to determine whether we should perform resolve or not. --- tests/Settings/TestGlobalStack.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2583fe08ad..432d66a676 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -11,6 +11,7 @@ import cura.Settings.CuraContainerStack #To get the list of container types. from cura.Settings.Exceptions import TooManyExtrudersError, InvalidContainerError, InvalidOperationError #To test raising these errors. from UM.Settings.DefinitionContainer import DefinitionContainer #To test against the class DefinitionContainer. from UM.Settings.InstanceContainer import InstanceContainer #To test against the class InstanceContainer. +from UM.Settings.SettingInstance import InstanceState import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack @@ -415,7 +416,7 @@ def test_getPropertyNoResolveInDefinition(global_stack): # must get the resolve first. def test_getPropertyResolveInDefinition(global_stack): resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. - resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + resolve_and_value.getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature" and property in ("resolve", "value")) else None #7.5 resolve, 5 value. with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. global_stack.definition = resolve_and_value @@ -428,7 +429,7 @@ def test_getPropertyResolveInInstance(global_stack): instance_containers = {} for container_type in container_indices.IndexTypeMap: instance_containers[container_type] = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature. - instance_containers[container_type].getProperty = lambda key, property: (7.5 if property == "resolve" else 5) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. + instance_containers[container_type].getProperty = lambda key, property: (7.5 if property == "resolve" else (InstanceState.User if property == "state" else 5)) if (key == "material_bed_temperature") else None #7.5 resolve, 5 value. instance_containers[container_type].getMetaDataEntry = unittest.mock.MagicMock(return_value = container_indices.IndexTypeMap[container_type]) #Make queries for the type return the desired type. instance_containers[container_indices.Definition].getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None #Definition only has value. with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. @@ -452,7 +453,7 @@ def test_getPropertyResolveInInstance(global_stack): # definitions. def test_getPropertyInstancesBeforeResolve(global_stack): value = unittest.mock.MagicMock() #Sets just the value. - value.getProperty = lambda key, property: 10 if (key == "material_bed_temperature" and property == "value") else None + value.getProperty = lambda key, property: (10 if property == "value" else InstanceState.User) if key == "material_bed_temperature" else None value.getMetaDataEntry = unittest.mock.MagicMock(return_value = "quality") resolve = unittest.mock.MagicMock() #Sets just the resolve. resolve.getProperty = lambda key, property: 7.5 if (key == "material_bed_temperature" and property == "resolve") else None From f56dc3d09e6e605a76750f3c725df21dafd6b7c9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 11 Apr 2017 17:01:16 +0200 Subject: [PATCH 228/816] Fixed copying for Linux CURA-3529 --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index eb85f00a12..369727708d 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -111,7 +111,7 @@ class CuraApplication(QtApplication): def __init__(self): # this list of dir names will be used by UM to detect an old cura directory for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "user", "variants"]: - Resources.addExpectedDirNameInConfig(dir_name) + Resources.addExpectedDirNameInData(dir_name) Resources.addSearchPath(os.path.join(QtApplication.getInstallPrefix(), "share", "cura", "resources")) if not hasattr(sys, "frozen"): From b9dc94e1f650996062fa1d6678dbb28684a7f40a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 11 Apr 2017 17:45:23 +0200 Subject: [PATCH 229/816] Override getProperty in ExtruderStack with some additional checks --- cura/Settings/Exceptions.py | 5 +++++ cura/Settings/ExtruderStack.py | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cura/Settings/Exceptions.py b/cura/Settings/Exceptions.py index 846e740950..a30059b2e7 100644 --- a/cura/Settings/Exceptions.py +++ b/cura/Settings/Exceptions.py @@ -15,3 +15,8 @@ class InvalidContainerError(Exception): ## Raised when trying to add an extruder to a Global stack that already has the maximum number of extruders. class TooManyExtrudersError(Exception): pass + + +## Raised when an extruder has no next stack set. +class NoGlobalStackError(Exception): + pass diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 74e2cf8897..4b50143c27 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -25,10 +25,21 @@ class ExtruderStack(CuraContainerStack): super().setNextStack(stack) stack.addExtruder(self) + @override(ContainerStack) + def getProperty(self, key: str, property_name: str) -> Any: + if not self._next_stack: + raise Exceptions.NoGlobalStackError("Extruder {id} is missing the next stack!".format(id = self.id)) + + if not super().getProperty(key, "settable_per_extruder"): + return self.getNextStack().getProperty(key, property_name) + + return super().getProperty(key, property_name) + + extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", comment = "Cura Extruder Stack", - suffixes = [ "extruder.cfg" ] + suffixes = ["extruder.cfg"] ) MimeTypeDatabase.addMimeType(extruder_stack_mime) From 620b9a2516b7eda70cd96fb693bf95dc5fd4eaea Mon Sep 17 00:00:00 2001 From: CRojasV Date: Tue, 11 Apr 2017 15:18:29 -0500 Subject: [PATCH 230/816] Add files via upload Adding Platforms for our 3d printers --- .../definitions/makeR_pegasus_platform.stl | Bin 0 -> 134284 bytes .../makeR_prusa_tairona_i3_platform.stl | 18790 ++++++++++++++++ 2 files changed, 18790 insertions(+) create mode 100644 resources/definitions/makeR_pegasus_platform.stl create mode 100644 resources/definitions/makeR_prusa_tairona_i3_platform.stl diff --git a/resources/definitions/makeR_pegasus_platform.stl b/resources/definitions/makeR_pegasus_platform.stl new file mode 100644 index 0000000000000000000000000000000000000000..91751eb0e4b332b62faff74eda42a1bf033b4e86 GIT binary patch literal 134284 zcmb@vef)OSnD>98aT_x~B`Oi_QIUr!Pf6vv&hxy!74ncmWyTD3D@_bho?@DfxiqHn zP)cFS)ZBCP8w!&l(e-8!vED;#w1-a*s2>syx_`oE&@aNhnk9LL?%erK)`R`MHG z3deD`4dM}}92`tg>a)rW35bmQo+Z?-%ga@L_6Up?N#)5HT_`nZk% z{lvKuq^F7Q_K)9q?*&efo+kFZ=2oc-ht`*0azOj3M#qyBt=}bW1RX#Ny1uYH7B_r9VEbmaXbl)Yr2f`=pIK z{L3aQ&6c1q67*z*e!B8MYqjB*G*f6qv37zns+Cb+bv(jG^grGDXYYTvjkjLBc})jC zxc#9Uce?6X7JlN-9=mbEamQJ>CEoY?2X8DMdw|6}d&{94-`>*+($j?6#GB9k9|L-t zP@CBE?oN=NCe$YW_I=(zlAb2iCjR*tCrD2dY7@Kf;{@qxLT%#mdpbdSno!LT4bm;4 zo@~p*-7g82Q%lf_wAxLa1tU7=x^>2oP`imUT{Q~jbvLd>v?5)J5@?CNU;m_9`?kE| zNwrp1qH4s|i-cNNXjj5C)QaBy-e+6w|GYt|BpY{pjFV)h;UfD#>dav zZ{s@;nwu}x@Y{d&lcx8FYx`{+a{RK@=#=yIpX|5s!2LE22zqKY9{jRLZanjx0|x{> zwZv=w+x{EhJL-S|K~F95|6a8J#y+pxe?ZVvOWf|!2W-6Z;2}XzE%9&HA26yxPc6~C z=D^W>&{IpWq*xyGREZK$nP;hye&lfv-gx?V*R3=w(TSiH{eJ$gkE-P~P0;F)vmRCJ z!Zbmv58d*pTHmG#TJ3b`riq%!e9-FeU$JT9%b#7dx?mceD|PFNx#$Ovu^6@@wyv70 z5@=f#^#&R})~)lrlTbN*Y5%?K{>F?uN4x|hhQ!4$Ej`0=JCBs0+S+UX;Ib|9Aip>N z)7LDlR{Q10f6&72z5I5{huYe6p7o&tK~F8Aw)UibFCP%})DmiIclhj(pr@8lTRUO@ z4-YixsU_6b7QZ(n=&2>t*2XmGsU_4V#_~Z=l_&u(!6*ZjVD#;(3%~Q5-^}vpoNEc{ zk**qr@>UyuNvJ(WIZYF^QhSWLFip@(?J?@xG(ju1$MKrT9MVcH>dc)!FmkRGv(MH` zEr!=uUQuhRO2AufT#>0a(C9I5wNX+e)Vj`l)s8uC?;P`B|m!4We zBl<0m9}@J`5*pEe`Z}M#VA|=aB{ZTx`RpM#B{cqw`5jtmj2h)MP0;EQw;WdMf)Sl_J_?V! zYU#yYu}0xvIS_Z-0t(g6M$wA2dnXZoc^}PLs!9l2U-cVjLH8nC&wW(eK8#=t&zn3& z>l$iA3<=#$L`!Q4#*i4C-5%@KS!yI$d(60V#OGw9Cen(nt0n&J0sCxhI`+J)byU4i z+z))?+xu+XY3n(5yd@YzLf5DlJ?E?uf-xkNsvREuhL-45f}i=>BkElWt*+Q%zdG)+ zRO!bE#l%=mMBIPSQzZo1csJB(MS7ah2 zW(4VJLL;OdA9lDAq$|-W=ep{@;e|(-70)iqrV=I4o-2*1f~MXyp)u8yHa*$&NKX?Q zQ~m5uoFF|-XiOCvq^Aj<1=2=z&b8-?=SSn9IMY?5P<}@rt%z2njVRXo>(*(-y9te) zqWs;|eha}E5*j&09cu}VkfOel&`2ikWLkp0NYGOyI^}~oRK0rsiT`Y6u93`3-aIzX zaO=UlZ9MRP|7G_wd%r%zTVAo-#?k+JQ{Lm4kTmXf);F*I!YBTGiw?Z-2j9H`)Kdmc99&VCEA?Lp^Vefo?4)9!wDeB*gnU-xU@t>NFf=Gzu-iFdqYhg!BDz29!N zSNp`R_h|bomna&KICZ;?qmR3dU0E)=aJSlXlJ1RNsv$mn+&ya_OnRF5#&hqrapX7N zYG;@9H1YjQ?!EEuoBqNG($mDB-Sf9LzWj;{j3C_-EN2otBQ3$vE9n8zIoGYzFNvf6 z<~|#5I_d3}LbI&|V@Uk^WA@lM|PTDV@O=}jr&ieiZLW!fARzCnQrsJ z7!rH_p9j^_^s`icOYYk?NGsB<#zXhmyVfPPV2%u0f__QRlM(vqlq%k5u>AEjqZyGE zYyFk`DBR=d2}X=22ZRHK&@Y5DDxD&5P(lSAt9Nuv?{ zPpd(idM)vYTeh!v)#^XuZc^>zz=u6xjn1T30kSgc)@YMjG&czjE0cVAXT(dkI|%Rl%SP*j5vofw!dyQ=d@C5j&kbl zM^Z&AwezS8(*&*5mqdM=CTOL*jHuHsq0x5C@2H$(zD#5In5$_C)&}~Wo>gNjBF(3= zLydU)N-NSW!RNB8M0hfyE5GHR_o5rWe!TSnB&MGUtKSVG-S- z^GtC@rU_bU#v;!8G(juPGeya^gl0VADKf1zUlR3gn$XNm)O()v}5A%Z%upb0T6$C>+OI;=Dt5+t~Av``Z1I?wwxqz}+pZd#X6@-b3U2 zyBvOXJmLNI8xOzw%<~VvT5&r5qBRe*~L?cTlpr`1qOE`Q5&%`f#TVH*4V#`_k#A9(ISgW8oS zfmTB)Irf<+ng;cZDE{@=t@Hd)k7vYf{kPRnO8)Z16HJ48mFT4L{KeZB_y5S*mJj-+ zUL{JP)sWTaK6bomP_GiEvD25%SiJMTZyIP&yAlHpSsne_<4l8kl`xHqE_~kN@#mg3 z(4clD1{$(DZ`-p>gL;*y8rQ$rt$41eU5SB)tb(RqB}_vtDr!6Z{>QrxuII24ra`M! zI`k?r(4gOEUwyAy7mO&@`s>!2c4~-@^X9fP7eOof{p8bbo=3YG6495?FFmz{dYR}y z==anMKRA!}Z$wFv{<`&5zoDlTMjdlonTwzX{odz!ec&C|ZiYnk;q*(rAra+4 zzc;-1>zhCKFYiu`k|O-5WOhR#Ctk8Wzeg` z?y$D|?LKEc&S9T>$Cl?j%iprl@%f1avPC;fmMeq$}}sohlOB2NC|+qeAwv0t)$FomNzH{y%$fBu#?oak?~(TeBI zH2R-5=hR~gTY`S6N4h1be$5x3x8;?aJcXoNg0+DJJyoL9x#Eb0H0xL;N}#>glAb2$ zmjqK-H7r#cZzUojx)sU>u!|IuIl(SV?*me6(k?@u~yK+sc5=*oHg2ZjVawS-37QTs^i+7;T< z1g&%>iu@VTIoGZ03J_yl_Pgq}V|?8bj3J@EeS8$oe9(%trzcWHE7H=A8rl+!A))+5 z4Q&a=kkAz;YG_Na3`nr8w1lqCQ4>iF%A?2pIvBN`1U~*xvB{p5cEr0#`f1qgUR(%K zzj6H&|JM30($j>_!lsA5&j`}fgq~A8eZTh_L3*0dbJdp|{~jYqPZPKP+MPEp`-e-6 zAl(vrF8jSt|EXD#;2ANZbFN#b73qsEyz|D<$GBcgFowj-4&HI&m7B&0#*p~zw{~nb zJW-{Vyz6y4)tVt9X13Q~zEfLEYCaSbZ!}Vap4xnD|Ja>s%^*QfE%D$V-?i2Z67wMRLUHo1ziyp=^}O!;r@qScm_oOexd=T! z`{#?#v3oMk4(dtVj@O-^_iDn7(37!~&VR#zpeGrRr;2BRDKw&|%DZaiiQC6Nf5t$A z+Le%0d9N?u3Q^jh@-QDWQm+!72t9qf`y2jjph0aTinab)4VI0b${qdMlk7~pt^aoG zoMROcZ{QC~u*X^rozeH-&BxcwQ`P8{Dyfg2Z}8Qtf%eTJ5LLn3AksK;|?MCY8J-MA+wp>VXDs!=F^!W(74wCgEp)VE5MKzpuq zMx&gWr%DVo=vU8Gquo?upuxICy-Ex;=vPl-qcs~*to7%$B+}0FqZCHjxUI}r&lUaZ z*=^G^6l?u;>-0qpr7-H4+sb@ZgMRh2_jNzSY*ew(=Ru8afMcC2~{yEd*moC{J-MX$i)VP|o9;*bl))|o?VtrB}$+@S9)hRXzEQ9dS^Gr(WIvdy|WwRXwuV!-q{Te($fUb0_jS0 z%DLWkjh=zT;9M1J{k3P8wBGBDvT;-UEd*mo=)K-3|CV433B9Eob*v@yo^I4v68s9P zCFqL;JyoJp&UsE$ui}cVH-2xq_Aw))rBgn5_*z}L<3mqt!s9C;bgn}GNE z`B7`lyMvZAD-RH-Uw+hDyw^v%H}>qTQ{x>c9<>(l_>rC__Py;1pDcKRI$O z))pZ>O+4@Br>@1?BBZB@$Nlb8*J5oE($fUXhO`l#bKN>)NZj~=r>w=wBrU-h66fyt zl$yepU<`>E;2CYc1J^%2DR?8R?mw#u!wWE(4`>Ih-s^YDCT9Iy3r6)Y`ri-4wz3HS^ zUo8uTue=Wluf^SqjyKOBg>@>ARgLh=)V3N-JFTWu#T<4Y`i-?uU+3Q* zkZv_d=xJyWq+5bkdX^ezTE}mDuIm}mIp?#S@pXk}9pk$a%~{5~MlGTF)+i6nI@T{# zKu;5zb&RiFNPBuBRZP2P9pj4{(k-Exl=za31U*d?{Cb465uJ10I;}LH6knogW-`96 zY6-@W(9C3f`P34OA)%Sc_`0ek7(+sHXX6@-A)#5d@q93bgl6uVFRD6ATWL{@A)(p9 zD9tt>j3J>J$fz+b!59*n<&0X{5{x0CnbfHHmFUznXoM8sMDeQx9dEwdF4p?fnrGQk zNle#7T9Ib^ckdFA2FE_9UiOT&_}2CTH$1Igi7FvzoiQZ#xc(Vyu~uA5&}#47Jaesn zkz2x{XGG^*nfHMeX@!HX8infCIUXdz{8gd^%9A+cc9kC2&^)Djv&#uwcr=&2<%f{d@mNzjuKopXM!;+&9Hna7vxt%k;&@hv;8 zNVkMWmhts633@W3E5GGmx6UgkX^lAJ8-64DA0NGj25IWGgvO#{#I%OSqLFiI&{M0S zv1pVB33_S?jVz(5)??*KT**hgJx*d&qm#y?x9+~S>v>!3djrzS zN3&jEvDRO!L7IAQ>%ZN)`iw}GT5Y@?ukiS~YP3>67++VY2aj`T-n-BsK|S?8&Dj-E z{tZ(VDN&!;kfQ%k5vjxr!YPc5NdKgxgvJ+%bO zfCN3Y1k0QRJsHvev~Pcspr=-YR=P8dcSk?=)_bqTN~Kk!Q_sM6HbulcuzWwYC3OE9 z@1D{x^=hh2L-()oW-nWBX70-8Kn&a?|qL zNrT_AvnH}+jnIz~jN$uGIv!5}D`_C9(DICX*DE{^5cd22;5eG+6Zfd`U zQ2!e1o6~AAA~OMLXfzR{R}zB}StT@@h;J%M&{LZ#T9M|M(Q{CKJEcnFkNDD)R-{`( z8T|+qNfHu8PS#B^3Uh=;~s!kx^l*sx<=?{K+sB8=Sb}| zK`V^_;*3law9+Ue&iXV#D~)8LE=&`&;yqO*O2B7|;tpcw0)975u z$0aeZ&iVG!FW-JR-)^bW*dXTdHL{4cen`7_Y6PM0SYpna^fbZwebOzVuTsLVz7mO4 z>G=4nL-a)rdNPg9mAZAtkf2^oRiR3&EnmCD*S#ckyqTdFHX!Jiw2b4g)zB9z@x+95 zSnI$3txS9~MuMrWL?=SulEl|?B=l9v_!n-BA)zl{Lc3~Ms;Dmdbw7Ncy+`z`5lZ1l zKKlV9NKb3%YnSIf`ol($o+k9Q%Z(59m6=IT6ZW;si?22f($j>#b~)k3Ym6X0P3UWv zZ@uOpj37Nt=&Or^cmAjmq+3GY8${hD!E!R9bI!kH4Zo!I-AtsgCHO5OzkJ{~H10h# z=$GF<>T8v#G1COCq!Be{nxK_Z8#QK{pq0KDi5k-q`uZfk)m6@;)$$umBRc2&``S2* zJPZ2rC2CBoK`Z;(rLT#<8o{)aZd1iFpdRy7Q`M<2;rehS_-wKgCE#DaL`@_;s$m3u zaSb}stp*9*O~$o^bW6}m?}*10N5}X37S_2F)+rx+0!qEvx8@m;dpeG}`@>~A-eQmrWN?Lctv5UbpK`Y%A$1Vm&=%-uNpq1{58;wzdR=O*W z{K;7U^;cGv$1_vipT*N~-M5X8OJo%}rxj`U?!W$ZP52@$?Wk{+=vH&CJK?BfzZ#*t z?Wkj) zc-z=}GQ7{=s9)jndjpNO;~P$mcjB92g`4j=J4;ka)jxfC@4Au>$Gcq1#BG%c<>T`2 z9JKbegWtK-(YcIzpxHG=ds@xu=;*Dn0}pBh2BCI0&7 z`>pM|&r7e=Q4&n85uN>(vr8+|=ig;nQ`i!WA#v(U7xgT(1Y=0-as9lW>6Ty&iT6Ku zUQ4qj7(-&Y-MrSAmiXIOZbp60^Y#zV-`v*r&bV@}j(z{;T3@L_Ppt;kNzjvf4~=Wz z_K3A-{`G&mO8=jwcHy@kxAuc~e&|ZK>wi174-&M})Au8vcddCMr83XD`=HP7xAvJ& zz2{0sMJ;(^s)5NR3_RzKc9{WfmNKX?FJL(~8r+XW|*LpmyaoCN!)izJPY2xkMc3XSk{rnn5 zdYZWMdAqH>{QZ87B0Wt!;r6?&-TX1XMv-m_=A5}bcgHX~uzufJAFTztbW^-Q+}V@T}xhr87BZwbbbSZ=pVtz#|ml}mT7 z^_9fCx}9syZwdM$K~F~XKjmC~evf*MA~9MMJCz5mR_U0BZ&UTfFYj5e0HVW+bW5<8 zAwf@-uvBrZ#*r+qk4E%A?O2p!T#lA2VHz5x-g2*tmpV!-jqZv1ruLX@aBT!8ozUy7g77IMW&-$DQT022(Oh6x8onqRiXUoT`Z$rC#@gy=^qX znn=1$l}4$%+<)HzK~F8AQR<7XJ77T2QziO*WO_+!4F8uWx~G<43<(>NJ;GNesYIu9 zrIGOex?ygqq7~_u&`9`*I~+71=&2<%5`O2-j~)>8)DjvA|JKZRwq>g5sUena|^wbg> zb3W(ke#Id{Pc5Mll>FMF+DaY)cpOXw|xSVxouJsHtC=i}WdHPRaO zM?cnTs9wbyDfFvRZRBs7pp{0oaSo>mT4_`pK3?A1tDq6B=NA^KhA zBYIR`OIm_{nL^S=bP|vT)5~*p!{2RRTiR^)U)$|F*FRDD7UN>cT`)4dDC1NRvy9<> z9E)XoDt`6X+3&2IAMnQ5(Q~oX?g;+noQM6}ENSFlH>VY8g@ZQx&MDXMHyYiqzxU|j zIGze6ai$Sg@*7qP$MKfX&Yk}C$zrKpD*b)PU!hZSS9Ey_cU27>8YOGa)!M{MJpoB6xMTP1Y=Y-QD1dD!j&k2Zl2!>FP7Td$G_TJ zEOURg)qLbv%8O<00^QQB1_`wZ|N5|{rwO$Q|H9E*RM69e+Jt{a=`AYgX+mwnztr>= z74$TrHsN1`dW#BrnoyhYZ&AHP1#Lvhlq#*`mfGju z-+);xb^O)cu2;=w{n;(n`cqA8t%BBCPZ4%onTLk2nB^M&MuKZx_o<(jxq&eaS_Pf! zNr5npTn$Ycv5MScnd_>p61f^$OVE?$qxkoH)DpS2 zSxeAUOXS*SEkRE$k?Wkb1U(s{pH5}Yl45z#lM%&Qf8N9ScQ=bA>0B$YFF`Y3)u7*8 zJ?$3}w93`fei1>dTnp_N5wyxx(tZ&^t6Yft)_nb&mY}DWP+Rjgc3Og-T0(7YOoN_ULTzF!AM|8| zema$hN-g?um1dL&JsDA~_2;cNtVpZ&_!>#5CEcn9{i;1iIhk`4SS4ts_84_xnxK{1 zW7M~4f>vseO-&q46|K~we0?9}yina-G5#iLdwt~<)l${jubthz*7EF5Yw*02P-*(w zLaV7_42j&8eU-==h{ZB@DfN2nJCpW=@=^YEbM0pAU-!3Gq%F^t(EWga-QN=Q)DpTM z@UQz@f}UDJ_XGZQe@oC)OXz;UzwU1ddTI&X5BS&pEkRE$p%J~Wu+S3p)DjxEk7>|T zOK7z1D{1(>LC_k{NB)e^Pp1+jK`V_>;~chx#-B02Lo1C@qnxG*T3!0%!)jfqLaT)O&*yuguM&(Qp;YN9Qs z@hfNerIk_@^fZyHTQ8P_RP|V^p%Id=0pQ~+|GFPJFH}otgyicCES99FQ>77-uVt`U zlCDH24PEtpjfD2>vTQ0*0&S`^rV5&R(}c!UzKX+QNqU;ln95g*SS(2!(K*+qN@J?f zAU#d+ERc5Zp+PI2AB}_JOjnIg=Sp|((I#j`y49c+X^ots{9A%CBs6l0I@S^zAw`WN zp^;47$+QH0k)Wqabjmq%s8)2|tF(9GVyThLeh;}d=NWpeo9DjBi)HRHp}D2lBYCxb zWawOHmZQy%tRtyYO#zhbe>buAW4eJc|^M$LH%l)0t4rpscf zuU(?&Bt1>&JC^8!Nlz2{Zsx$#zh`HZ^faM;Mb13u`$mwSCbUb)#yxK`g0vBxbKVA{ zoJsJEv;;@5tR(}&CCb^QUlQ8?<7IdL!AQMg3<>S#@q**V2*!}mULfNHV@PNRj`376 zhJ^Ohh%?=1+E3Y>F(kBeMU-YeyWMIVq!sB_LpxMNU1AI7$e<Pc5N7An2(j)Xu;BiVFq=JsHvec)#o4_AQpARoe%5+nvgTF(lMuyy>L3 zn|9S05VTT{amF>jjG&czj9*UBNf1CyE8S&8oi?H?zvW*y*JwNDcT}1&`=v2_JUuZ&KSr?3>6ddgl@Mgt^Qc#(`Bc`3 z;y*Qfjp)UaR-}#4PbUpN)mHJ-?^Zr-PC>yq4^!( zkHg=S34)#~(MdzSn(xQa67=NWLxU+HtzNWw+E@JhxzdbKJRhVLY4ctQ%?SAp9{z?% z_@$?o(2S7p;L#HF)DoHz@*O-{f}UDJGeW)xM@!ICOX!Y%OoN_`&`+oG;4@R6D|(tH zXr+0kI3v>ptu$j1XMLKWmFAhEWLrWr9`O{JR+=w~`Zi5yekR%qpFvL(nz@OZPkNeQ zN=R3t1j^kuYV~T__^u?YV;>O_Lqg#=-fG->@NOIa7Ng%g`5Uc%PZh^oLM!?CE)ngR zLC5_I`PEcu?Ui_frS(Mod-ugs$NhWvRU+4>SuB6H>z%LmcR3f!T!&?KB%?Kt{_?~V zwrC`yui_&gT0QC5XP#)s+kE8r@{47zA+=cMDp0GbqF?IeKJKdoHF9OER?kw^mEZEO zn`B}{`>t90m9qH08W(63g3iuzWGsu8}ZAv(@mB?cPwt97HI-BiLf=!+Vnqx>r| z(4b$fQx$zoB}{|9s3AJ)aV1PcJz4Zo^qcFHt@d#2`{6h_}QtwFz95$uw4wKMH%KIn@YN};bVxJu|OM%@(=WuvQ4 z9IvS=fo`7buq>8rwYetCsz$C5xmf0!iHl{f_Sh4h1f-E`F)o&RTiw5wT`Y5L8E6>6 zm|Ts<315K*gkUH&Q-cOONs!7bS*%I_*gnl~Jl3Z(0bNWf^N)+1D1g&&kiTqVUGIRE1?BUcu`Z}qr z?SnBSa$Q9bgM846w56(8>#v*Bif2LEzGh~x(HT$(#*k3{e9g>Nf-xl2=SK}S?^T0k zK!RuWG7t6-u}AwJk^P zqeeAIQ?I6~=yda3w{o#0q2tXJN2wYR^h>(fnza*rMn{6$M)XuS&lNDsTi$gq!ilGS zo$`^ZP_|ZlR#-Jkpqn#Qq;oAzv?wF!E7!2p^T9g}XCMbeu3=f;LaS?O{vwTB!*a1C z-R6U-$~7z(OVZOsu3@P!Ut%rIUzDm`&$5hz>ROts?L5~PEMFhh^)uUNw{5CuMLJi* zTul{YNaSjms{~_6%JSBVo z-Ck@XNNL0!i=L7_b?t%geNH02Q3lkj z#6W|7^~^KcjSZ?+tD_r^K?~%o~Z}dyO zX$|_-6W%k<*4jI(S7-XwJ1n86vk-lkX_ORss`w?FQWEco^3BtlDnWDlqK3{wT!~tO zF(j0yxR$g8V@N3H%@wD|%9q86A)!3Q7^P}-$_JmU(@Hsy?>N zBl;ij;X-{?FX(APW#g-V``frpszx>RKCQ3*?Qi1-J*}blX?^u?e;YUGX+m$u`s&~Q zHg3?B=yZ1VhN-XR?Qi48Szy^zq6FG=rT1xrrrtE6_i24ycz+u==xIXl)B4);{x)vV zMs&`#snYwjVMThH;8`GDiK650)<#PuF@3IRrMFmv);qURHl73j)f-zGLqhM|4oa{< zdIKV3NazjP@mivHXrsoF;1^15s_2UZJyoJps(4P+24f_vw{fpKZs#1y^q9}q#%L*5 zSXnG{Rh89VG*^LHEOX_S#gcSQRSCF;?@YN^=Khl{-4gUmLUY!O-+Nv5?VSXqaq<`6 zzUB9i{gTDdigc@?+3fJ8dEW5#=y#}qh_ef!HZ2#%ziizjsd{#Jk`r0|yrixE0HRByM#+{E5w9<@s)R<|4R+?Lm z8Z%AMO0&*UV>~^PD#gT8Z$262S!fBKMV?*Fo=1(DPL<7=_cifXBbav5ZK_xXOcnD~ ziB5fq=A)xOC!zV|=#MK=0&SU-9@Q{{zW9v^Y18QJw`h>i40K$5NV{ziw9-6N==4q&L z{S*IoU`4tmq`v8)?;8+GZFp)4&3Qk4zxNIZdTI&HdB5cN_Y4SnY6;D3U-l1|3Tx%2Rwr zrMd8CTq3Mn%{i?|%UIU>>*lLgao(gIbk{kOpbZKrR5#Zgd(5QJinMzVLbJ;;ze9qaT0(QhG3!Kv zo{Z>1gR|tE7p14FA;@Ovqvxa*>6Xa-=*v6XW&bGOY2L%WgZ=7V5${-dpP+ElQ};sc z8$ufI#1meHn`gq6n165YEpe~L@vh!siQ{J6mEZEOo97-*<=xu4Gt^?4E9I}|BUi*< zEOSNtUzNxe@mtzb)&G>Ycj``73w*F#CdYZ@;@mqSD$o1{@E>^6}znb%0hkUWj z_3al+(ya!GT;IN>r-@waez7ENMCV*L&lS-ZOA^#x)rb}NRcf)e{$iOc<*(+PF(h)O z{8fT6Byy$vRe~`ja;5xLf-xj=rTkSQSEz4uo@?N*61l#8OVCq$cB#%((UTFKbKN{w zc2^0;3iFF)t{vZ}N<{hB612+IbXW61zqulQn!YW0gHX(Kx4)bEy^zHI&f@&-g* z_r9#QQCH1JnHQ)fa<%%Fp4P~f>laJXEs<+0mp51IO8M%kGqs)r|1Ix$!HRUQd%s$O zxt_ZE+Sos8vD9(jS8A2uydmjat9+H9Rj!EN>b3bGkt^bt*~q#w|EdO4#gydw+p7dM zat-~(l6upr$~E+Lu3|0!U!;+1=r5L}r!{g7{l${>G?8oQFP5aIiCpV`u_QfB@Jy37 zqAS1UUpr4tE7C^vKi!;Gs=F~l%C+@Z&n|tjoH^s&YS0%oay9-{ja)U*TN1Ug$w9=?H&f7FWD~)QSWTy#QX~gL}?4o^is=LfN ztuz*m8al1PQ87odMil@0>*lLgai%pw_PvFFQL31dQNlD>YRuDgP1GpW_egDP32DoK zWkUJTDAo5!Z3%j635`;H-`AF)CnGxNd`ul}g0#l)zEdpDRe`!WV@TMD%yx?H32Bsn z-CQGK--opyxAj(}i>+BZp^>of!`c$`)DjvA`#!8KK~F8Ak+AQ>+7k5C5*i8nKCCT4 zPc4x2Ea&uOgnl}ehptQUZ5L@>yW*@*6SUG*ElSpi;@>qi zN{zOrQD(G3j;~w7$DG3gKM1U^lOK8j)y(RNOPc5M_ zXY|M<=&2<%=8RsS1U9~y<9{^I|%H-TtHI;{0yp96?Kk-gpMHOdJ3rJn8$;)>d8Foqg~KG86xiUc)C z_r}Fs1arugn?p4h=`nWq=N_3{0IgAO{{D}LdP$7+igb9)v8s{1C8R}bI#RMXhrRsDnZTHXL_C;D_iMFb-Y14P0&hD zst0SUn}(k1pLzblSF4uLifhH0MkjNnO3$!k4LVwpHbOr}aIHB#&yJPk^?Y#f{;m;> zA)#lJv1-2D+h3 zH6$~qRrjH%)hoaQZg^U~u1piuJN@#b+AEH*P8zggO78RXqb9Bf*Zj$mrBB@7`aTkS zT>p%<-#^}u4^tI6lwMp*rZwnSX+PuW15J0xkyhFkNe%HuEm~Vq+5blOA^#JqAS1U-*5yFo|>MF&`+mSaYRoIdYUF^rCJi}LrxR4QcaB1P7}0JZI3fD zP0&g$D$e>eK`XV|s0-5st$4Roi4xGbJ+GFlXL@`!L=h1~Lg6@W8l5Y734Z_hlh!ms z7JcNg86MxClUBNt#cI>K4vw!+O+u|GR+}d6>4{X4P%Ap{Vb8V{lAb2iCf@yCCrD2d zY7_U~^#s!(Jx!=h{OklLNKX^0?U%gG3DVPqN-fHUbW1RXgxbn37rS0dFouNMN~EwQ z7(+sBCC)-iFouNMN}TDIUh5u}HM20Z}y`y|v7LpSQ*8D+zjPHE2az zvmfKFR#(p0|C;SlSGd@fsA_c4Uq$~xTG!e*hm|M+zYc~kUEAw^MI{`^jp%>6Ijxuy zg@dj{Ck^&XB$%g4lt7!RRl3nA{=Jr{CyPCim=e;aQ3>^Au_qD<4zP)m){Bt5O6z9dSM^faNqD@v2}G@%|fN|W?7p1l#xLwcHE36gFJ&7Q{hwJe*Dz4hK}Z@qZ4^_50+&UJHIk)~d&!S85E zXukBohdm%QdQ3ChJFk81;CI@SF%j{m6Q87*apy?;ov>zsSIxqHHyj7W-0ZMmW9_Gvm$?|6(NegCoJS(7SigW}U;Y=HB8f zA~QQ+))I^%q1oYa4aShr?C>BT zoob1`=#PDuxWkQ(kMHzHU)0ci^7z?h3<=FAM>(}QXAB9=CpWdE$FwfaPWAgi68vJU z)u1mD^wbh;gFIJ*n%Ftl&1prN?LRcSc?oq|v)@PCvzgZEkCAsC&*#oYOjwcbQ?njQ z2fQ(MM3~JKj@h9MgXk2_n6j(U3cWg0)R_*gxC28TM?OS!<5sg-9#=~KYrB2d%Ril~ znRcf1*(h3-6&~x3535ARES97*tW@d$Mb*U}AvRB1SoU#lN}leE(Y?ZhaPGbO#are1=zvjG4_yXSh$5dQm%HNi3GSKldxyY?fhZ^z}*v zVrDba8J3m*c^gb$v)StNmeDI`H*Q6`_g~ALgu;G3cOtIsVzSIvts*7q$u%lvsS3Z! zQ}|6!Uau-)=W1x>=P*3gvukBezdED-Ik(0C@kK{^>1#IAU1Pkfl*gq(V%&$u;zAl%*>CD(&GnJs}@f+sCc^?1rb= z>?dD*)cl8^dCA#|F2y3Td5>Z6fBA^0@LrV%*AGt<%zovQUVG!agVG$76o35(*eWt4LLP zlGOw6xbOVKKle76eiuviYChBKyXAtYMF;Gjl%q?m5dDV;mN{b-j`^7kgRp|knAUH4 z^77WN>yXg>K%MugdaGqVZsqqSkwWut<*kqif5J;Ezk3-FT@aCyRXUy(w`HDIezz5+ zsXMRnGS3*M&{GwuHH|v&lTRA_?k@b&Q%huwzDtd#y|Y<{b#_ZltQt8(*IFf^^FtzI z7E96@UMayYV`ekX6z1_2V#12FQdR0yEpyGP#9350N;AVCI)yW4v0SCc%RH@o#w*HP zvr$ntcCO;i%Vxa7igbpR65R{xo>1ZR<@0dSujFx^D-xR18(NW;-@XKOzHA0EdP~w7 zULkC*FEli_7<7hLO0dz;Txj&|lZ4H^4y}AnHuRLPEOYsds~0sgEc>456v`N%-z6Q_ zE7|GKb*Q1VhgBX&&gNk%54qLG(W%$c zEkP^N8D2eCS_%5PPyN(1Xq92*0%v!YF=d?^&>2Q8Q9inina#95wd;{yAttOyD^*c% z6_VeJ&UvimgBlr@70V-I%3ez=w0lCTtd`J9c?zpMzCu{ehgP#$(n=F+yUy+{*FMJb zkyd`LB7ZGGE7BQOs#Z%dG*n|^f0Sur+{$ad)5-_SLxis?PAjjw1ELd4ja53|glgQ-inLO-+CIMW za((+qD{mj}NipoNsG%@v4=Yt==5D>r_1U?im9Bj;N1Df1iE%5xKE}*#J-a$rHui~` zU(y*?F3_UvS{o_RwLRzzD^>pI?IUB_r`CCVg=n5_rxj`W|LPx|Hh=w3zkG$ld%ylk z8}XLsmRCG!!{0ES%`z+v5*gFd=?NN}O1KjdZ_Uvv!_W|cRC!8*PEWFWz)>g9KYY8l zZ&Nr^wOF3@*e7lH`?RxJhNVFwV_G^r$?u-$J!Ag8r~KG7lF)vDhi&+~yk$IJ!_pv; zF>OlHlQe$x)Pv^Vee@pI29sDU7iS)};qNz>R#?N*AdxX`O45@w{=aK?pa1;wgG__O zr|)vuM!a>M$E87H+-f$<u=foM~i2e24h~f^@$ttE_fc728nU2*({Gsqm=jN zQi`U*n4_+L!bZHIp2wv@V%%yr%j446>w{m|^ujltW*UsS_24Izx7+-^`8+NS66030 zSss_hwa5I+75kj&8jRWVqQ}>KY0wbETzGN^o10Ib$C1(#O?$mB*z)V%(~<(@IOD)Wr3uyNvnJEr<5)W3kNR(jYNz zHJjyeX~@5*66_8+>(JV^(`vEI@CpH6izVp{D^;auSnvCi?)oi<);@|>8I}f!S;j1u zq%$lHwT-?{><-xB(AuBVD#OwMG0T{8?+iM_(kNGh_5S+NJ@IFc?XMr@DpQG;ZivQ; zbcUs&_NP{*6n=2~L;LH;Y(}dL%ZfzCES97*jB~YF^s`HO_6s-ylcIQ3e(CFqNEhNaQBsDXysUA##? zO^jQ4J9k=X?|TN*NWy!Zc=tSyD^(=a%M7hZOQY}MOd|>JIpb~hJT46q>Me&>q@~gK z)TWVyUjgFVgFG$`66*DbR-~oTUvW$$3BQs>3iG%$Na*S{v?48y{>o_@N%$2x&U7A^ z1_@n-hgPJep|(+KylEuiBa5h4d0ZMKG@2M%k(NfOyBhnLMiM@ziti@!xHL#;R5Y|A zEe-h>Re~LfOMiS=ZSxtH28db4(65gGqcvO4FjwxSk%W(TqwmtlGQKxy2pb8973mBs zAN>f~H0X;X?+hy+AZ!%wV|5?zMoQ9?G|F9(X3y6Z=KIF^{{O7Z-1A!i5*gFd=?NNE z9^Ao&RvA`4dJU^38B^wTu_sQ3rBRB({412H(vybx3c`=`D+nV57~wHP+P{J@GyC!R zSNi3*8F^g!@INEEajTN{5ie=d)&6602+B%j<-YT3iZbdqFH4E?F4n>3&ceTpn%7_1XI~=!~ z&GI;`JB2f5u~gW@X_OK2yo>^D z-iKc=<`=-TS%#%SB4cJV(iw(^&HM0sM_OeV8aC3;7*9#e`=lpn^jDm13TLVo%ls<3 zj1rn}s!3!_OQ$FK)tE%1ONEnIEb~k6*(}4#2Z@Yn>GUMO{RqI?ND|t$CBADfbMG}Q z4H6mCrX)Q{qaVqb1_^#spU0&^V%%yr%j44MM`WhK7=G!W$E87H+^W1kQCAR<24`^? z)2u&G32BfRx0=oJxHS3^vgLy@TooaYOM}F?)ohl>dyOk}r>ZbxxK=|R?=>nhZZ(_b zarrGd-&Sh8X)uOsOXTtXTvcM+YBtN`(ooybovOl&;ffb|TpA?CtxBI?SKE-^QWNXE z4`a9vM;@03iE*phERRd0w5U4olPiMIYO$Oo;A^oYonfU)=SjIQa$T-dGMmvV!%7v1 z#)@=?rJ?dxxl1EgPnpeVm0@XsXsk$QSQ?!7$@L3nGg@U>8Xy`g(iw(^T@Bo^8lkd{nHySVSQ;cU#_Ltk z=}8)W-JOe89gRChT4h*PBr?Wpc+lxd8hwizXsF%Ao%b{`ZsqNKeBLJs?^j|5A&)Cn zeP3d!QZF;KBCVYFec}q?J!i~>&{IpOw;WoLmWIYw8ZjxHg!l6?qm###4-)G2hgPI} z4LzGMjU@a^7Aef*y+$Q;^%`1{mPUW&G>s(uiX3M;k4uAuuFgX%($Xj;Sm%9`@R3E- zt32M9c_lQO7+R5*Mn96Vd?evxs+iHq-^J~_wF@XB9AK{{^$2=OjTNu4*Qaq zb%mLB?mwBwp&_Chx0=oJxcp)^sv&Y;%hG%7viFvw|MjMl2Wfyn4E-*at%klMD_@6M zKGIhim)z+cb#0M6E)5dnR-~1W@+H!G`F6>2{*xEHqu=Y3R^i1BdjMw*_?%znJg)7Naqy-f4CYY6fAjBzW{uHpU_&V5m7wOFPn z5M2^yW>_GImf;LQs~dF>Q$%n z?t6aFN~7fo0=^bY(iv8&^eyKn$~T?TQ~mLM8oc~tkC7x~MIvLowg;V_q|tw=XXlDB zYAe5U&9|?T*9@-^h+zs_J$cA7moH!CzxA6MvhRsbp^Wi%M>_Tkke&X#%&DP1Dy;JO zYMGB)dH)!C>0cod3dgz1uxt2rHV9fps?w8LeeqHC`zT!}qSWX&!>dHb_*Ew8^rTeb z%GohS*S@I78D1gmS{qiRGptng8fqUP7E6vYG7JqPGNz?7Rr1TX^tdls?$$e-Wmp;{ zGG;a-ondLb{N<<3fAih{Zu7g`v5Zz3mIes;^_0Y}P3cJ*{m62g!kMbYGWQUk%`z+v z5*gFd=}CV35wd9{u~_E*#j{z4r9mQN+LWXxY4js~E5Rfd%iOtnHp{RyNMuZ#lJq2v z{*J{oNN_*tJT46q<5v1|a=!NWS6)`E_1E94nFeFH%XJ=?28nU2@;&EE7i;VD5BD1V z9i(Y6hI?=4acPhkx0=oJxbjinS=yu-DTNuseZ%v(G)RnF=^O6YPh5UW+qk0Cc++4E zcQDW6(jYNzRo)LN`$R52_mMnTb+(o<+?73#_vfk-<5p#!q3m9n<FdKa)T>ex>-;WbxCeb6mj;P(D~)|(2YZ!Ac~f@%yZ&x%xj#Q>?QhO}pPj|D z(#UCofG<6jNjk$y72eY8v}frp_qy0LXq9253PgFr6Mh#<(ixUU>EY`9u69!Ol_O^} zT4h)oAQ~&u8I}fSYrEX*RqG6dp4K0Turxq4R-`j54YiH_`eB4$0cJB=Wmp;{GR9L9 zv{Dth5`g3JO#&~%Iot{wUMyLdR2U0JO*jqFSY4l~jk}9uP zL8m8a^mTVGT6NU-Mb!*c=(Ti9(28`1rJ=T=x5-yE)b3)ByJ=$F%G-@HxXBo<5U4Y|wx z_ce_SOM^tlv~+rs-!FamnE8|c_(s!6VzJCU=*!#9WzWeMU8gmRq(LHM^n55%)uynl z*m&R}^WAR!t##=ou~_CF^yU4svUBhMx?$dHkjR*pPEYdtu08HE|M$BeVj3j0JMa;A zILQ3wapi-=xYcZy$EERix4CiiAAI>3(_oDDEPm(Ck2Z}wE)5dnR%KSC($YBj{cqm< zx9>c~G#I1ZlYeWbZ@3rBJT46q<5uNKW2L2`woz)lX)s26I`8mK*U012ATe%L-aW6h zH2lx!uo$DArb8o-O9MnVZdJa0t+cFPc85=2amaf;AB@rd*Kw}$xHL$NTg_&9TpH!< zZj16@jCSRYGSB1EATe$=o8@t7lv=Va>J?+OS9sLjJT46q<5sg-9+!sNUujiV=8Vw} z=F#r*xHL$NTg_&9TpCv&d&v4FpR{(~X)kr}GibF~P7?67Sdz}LQuVdvvFm?+`ghe| zb=pNf`axP{Sg8Ur%b3#pfX=Wq?)%eI)(<=DY}3%*_R*iyD#OwMG0T|6l5~cpvDb%A zTR-J7pVZZ$+(+$KuYI)2urxr-GG?(PondJd*H+#NDaNms9`>tfOIM-`f>xyCx?5AF zYptcq_wJ^iYXsdAnJPb5K`Vc`3wVEaH%mij*LP*6UQ5^VFoM2FXISUztS2A4{(*zO zYlLcv@3BlhuQ8$B67)qn!_s)smP6JTH~rRJ`A|FXo$AXSMAh?}AKEQJE7BR3hT30g zhXW0@?HBI#psRHKm?p-pyf1NDX;=Fzt;#f#@Lnx;xz6KC6$$lZLo3qKIPu44Z#(VV zru_WPF%b@ePG(gxjb!bIe)}_}+D8f`nn(g0y2`*exB+T_kRdILXq z!D)$%(S6j;Yj@fGuT)~o3@aaay3~n?`8`@?Sor_}zn+qy(~~qdZ#j8>)~kJ;iA>dE z`ISp|F7E;OTyKV@K_X+?+@>dK+~e-gnEznspKMb&2|bV6W$mW(ea)LiV>q$(R9fn>@j9ZbG#*vG!ZTh=s`#nw)nnT`o?PagM!Zh-@ z&J~GqE7HBj6`_$t={cWq_sj?MOrsLxR-~oz!59DKw#D83TqRN7{kY}swLJ2;@xX{D)~xB?zHPVKN6{+7 z(g0EV#7Na*Njk&Qc-d(uuRm$W3)EkAhuyeaeI7-t3`+yVEMv;ImY_2%4Sgr0H>9O; z*=_IHUjfRumX&DfhG?uvXIL6qgQa|ZZ}&Lz8?&6W%CPc5B4a!yL8m8aXbqOKih!=Q zea_!fj(R@gij#z5NMuZuhtqxz6_!Ss5!N>*rlAsi`TNf{4O(Sb8YD7C*Vm*oER8a= zt#4&C_OY6H^T*z38nnu=tVm?cVyPM)bcUtTKj9r{sNKaAfoWpg%G>$)^Qa`e$B8E! zd0eUD^CUYAfeuJXhm8Y<;l+#dV@#dB>V~xPnz<$G)U-b zFtj4wYv`Q`(@4UvWRb!=-fL7sSFfQJX=$i!lp1duNtBe7>ua3pJT46q<5r}lapsSH zxcT}Y`7_8Qd}I;zDvwKpghmrXE7H;^{rbH0@0O1wd`#uF-Nz;2sUS%jkVT^rKg|BAsDr zl(E%ZV=QUV7f0S1Rz5)3T|@M>q%$my;@ZxWLR$N8hX=pmYW0>1-~Owgyef`+SQ zrSacC{_#!szRK@$7_uw&G28nU2vie1(rP0q*n+9XP@!Wg$ZLq9mQ3+{~ z7`G~IzS7b-^>+_hf7|E$dDMrGyJzh`(yH`bQv`f1mZUSRRK4WJW7bdo!1vT&br)T@ zTkQvFm0_g{#4KYLOVSyZ#!jC-W&P~8oMRdvz29!NKc`iOr2%4=F^eVX3`^tN<$3T& zUvsV9M`?H1xT?`A!_ojT%b3NIbcUr-PLY+jLW+rNAFVPhtDfi-${5!m?O|!?xpx2V zho#D|wbX0rmdI53xe8kOi>tQHa;}&6GBzt!I=gq;dQQ2Xmz9EGm0`t{dC^K_jF)-P z=}Gx0Z&|FD_cBaFwPe$==a~krGAs=e8RK;~==3BFJr6EVdFP_l4vzfBTTO#j8I~1^ zjPX_!bb69T{}g$kp|<_*oBqPaLDR&zmG>o1D^+@bMQ^1joP_skUw*{}rjf^$DiZ3+ zhE}BISMT9yc3a^jymx-nNpCleJT46q>XC<5q~*8N+bi@YlEO*&RpyLqTqBQ5gM_Xu zLo3qq>wiAxO~S91LFaL4fUs-o(2BII`?p0bAG)SG;aB}Q3wgZHhu%mrLRb2s6=`Xx z{Y7~s;iH!*%{<zhCKFYmre zWA&eGY&YNT1AhOJVQFaQLvtodVaAm2L_ud*R(QJ9iFn-)-)9=M%CIy*z_05Cot~u8 zznQsB;Y`(Hd5=@}n}6p^7Zttobf|`!H^-SZ?C%ln-0>iMPI-%8f59qK~3ghNS^wmNAPZ=?qJw^ltT4h)oAZ8h} zSdz}LH1M@kck_||vGD6hd3sj$TDl<`E7BR3hT5N6l~O3beg&A#Xq91Ek;oWNNzmy@ z8hpB>oPXrAAGoU3Yw4DtFVY#7Mqh$XIkYtHijKw{xeJDqUww?oA^J?{QAJ z@fy>}h*_Kq@~ecaqL_r;a9RqVIG$T30=L0R-~oDr%Orr6*keK|-U6p%rOq^dlKNS4sFd$ZPvzna8C;LZhXj6=`YoBQj}pBs2<(R-0jI zfUr?tSdq@KG<2Snduh;@Mw8KZWmp;@Y$P03q%$lHJ%3awN`t;Q^3Jd{K-efe`dZQ% zmIl{=&o_YSkHqVg9r9ooc%GdaH8X8s}S{MAb=So9+nWkQbp<%To zW6GUA=nPAvU#oas;Y^jUfxQ2-4zYaXacPjy>c&GW((+r1!SbLG358#@rgP=TJuHo$ zP{0UUgJV#u*Dqk=BjH5jtTB*>((jbvBuHiXfEYp)T`Y&>AP9_OoFMQvBJiyMCR$TP3G)QDj zxlcq&GAxZR-Ra=@PyWE)-%Ubm035Nl`h~+>BacgigjQ)CT9NKG^p2P1BMDz$Hd2_!dyPtH zwb`K+X=(H$ebY$7SI~_!oyYrgRo9czs<}fe($Xj;sCyjKNWxbFj(U~Hr9ncg{|>E4 zOQY1px}HoDzBaPAk8-VrrEk^R#1+%O*+FXgssvX8l*FDKc`iOr2(R>*B7bsb+&`n+St)Q)|m-i zKRT_LfD8*9#9iJxQZ~ z_k1o|b@b@3y9TW?EGrTjB>FUcertFprLm6zn?g_>&G-PZsqOVX{D;4 zNi~fmyvKR(1+J0Dl`0bIWrkLyrSZ0JUbyXBUwWZwB;h^h@t<*xJT46q>Me&>q@}^x zk0ksGaKzVKBacgignIp<73p51zKxrNU&$hcdA!%CgsxsgE7H;^Io}-TDha=>1^5CtQMMJ+kzxQCPIv3`+xqtrs3vq%$my(lgA<_aEv@I{MORGJ2m3O9ObU=)RfeSj!uF|-tD5wJ&agCiH<79Gef#3tt{w8m z?>{oe_oKLPFN9Y(Cv_!_Vbb6BC`~J;A^Z$OG-+v_GyA;O# zhxR^<5l%~FOnG-0Dao)jcsD^p`!mJ}FpsM|NQ_(gevsq$A4!xNT6V0Ak!&892Jb({ ztw<{$yqid(y!%sj-i#4>9+w7*aVyf&;N3(LzEf!2S>$nPkkIa+Lo3qKQ2W!UOyML- z?I}Bw@7nBB?S4yxEIYbJdC*f!j9ZbG2Ja@4C~dRsUmNu*kN0I> z?^wpINK1qFA4&M0ywN7|xHL#;_uQcsX=(8OLp%3I+a{gi6~cB04h_;7R;qNLrt?*3 z+owAEC|YG$8X#0egr2)eBsgAx@`$-3#VQKW=DBAspc7%?509s{O8YD8tcbX15JxPQ2AKDQ*u8_3K zurx?yjPEoZbb68o?EFIkX}zjlQS0dz>V^pN~6>JT46q>h*_Kq@~ecaZDo#zmi1?^SCrf=;}4J zA}tNxeF6&_lVmIm)8lJJp5)R;Uj4H6nn46R5@gLe~2l&5!POcnPZ zd0ZMK#;r(819ua)Pj&d!F3{0xGb{}dwoi3fQ7^;Nz}BpQo{ZQrH7?K zf>xw6EFO0g_P*#Lw|~BA&?>{y0AcToda67nK}*}i(&(R5+r2@i%HJ2g=$sc@KJ=v8 z!_pv;F>P+slQek$k%Yf5ddsyhH4Qy+_pmfbWQ@Nr8YxLn(%{>lN%;GlS6p+dY3R)X z4@-kY#`yc9k&^Tz4c<+Vu=ga6e}$Dz9+w7*ajX8l45OvNyNM+H4Ur%H)gPHg9+w6Q zy%jRFA}tNBUy_8s>GJm{on{(&TpA?wcFWL;v^2DCf>uLNI0=7a=lBn}Mjn?23B9E= zv?49P{SJAik%Yf_6e-N((jcL?jfPgFrNPxmlJGaE;!NjpX^_xcQ$s7#(%}6^68)QC zeZ9)#(jZ}Pe+{fiOM`b4N%*^Q(I)b^G)U;Zx1kkjX{^348f}|&hF1uCOD{C^{$0=+ zR;q9}VegAZA4RJSO9O|7<`Z+v=f_xDA^Q%h)6G_)cu4ZQtn?~4YZ zQCPIv3@aZX?0wO&qF#ojQF?~veNiWTyc@lbMwT9y1_*m!G_07C3`?W*aCJR>`r^nt z!_oj@?~6uXOFF~SD02cTi%ub}A@aRX|EaY*g>U|+ua&SL_pmg2LIERaMcTu%T3x^7 zjI*~^jj*D2Lm*YY?nlu2QqRNCu;)0Lc3;2bcYgDmmJbmgRzCVv8Idu}ldoSA`Kw<8 z+C5GZ{srJod){Cg`mWH!(&)b*G$La>ACZ#uq+YcGsUd9rlA#r8+4ow0;QQr72YYs%+rKgq{w<0Z#Qrqi#`bqdY3eoQJxbi_lD;^B3NK2z%Z9)0ywAw=S zAEYz9LfDE9p+P#sN>#sVg!(I6za;uWT4h)oAZ-1T=*hI^M9>+QM!))nX=wF}=+FOe zU1t|^TUCYO1tE3i@$W=|bkn7pmOrPX9>2X4%gpMeQ6dQzAw>m|kZ3{M@)$yz3c;bS z@+KnsF{RAVkIt?jq??eUz$?2@>7NX=l;$(W9P548UhA9-9n3kN`Odl5Tx0&NwLbTf zjfN5Ng^h}XPRmB4fA@pYV8d5DD(btJY&49BFLzWtcUm?Yt?1}eSme~$=U%e$>cj?1 zIr#+=r_;7}#9EE|)(9!RDLu9$2={VYwq1`as1?8azwY>Qj2Z4F8?Synf>2I=zoclD zghuZrLC}AWUG}BWa4*?tIH8>Ueo4_P2@U@m3HQMVFU%WP7ulFUQVNNYkoH>G(=={ zKL5PjvsOA9P7smjUQVOYzkd}PB65_u;hxV%JCu%w6O1f#FQ?JSe>vwBk)vhNN=L(p z_{uZ^m8w#(P+Oe-&NZoa`sYJ(@UBX%vk1L zPNTv1IG9~xi^y46^-87F4kws-&AptaT)r#9>=Ii_e%W2tYv=N7EvB7%FeP?g$FT7*dUzC@PMkg?Wa4)Cpug-^K`%mf| zzos;%dP+|Xs30b_l9$t^(1?9()t8gwYR77=bkl&?EPFXkx&6(_=({3#g6{0?4S)Q1 z`)yWhrK91*vX|3n9DDhqy_*kQ9PJR%p740_xf5@_;NFOdN=L(qWiO}E_}@P--hbrv z7e&k8^x$(R{_xb-TDk7ETC1cTVp0>QW#_M}e&spXtD9&?I|UwXBgn9vw6lioNm;9H zIJW=fHCI`~aK`<|yG9bJml{w(Y?i&8P6f^3AnLbrTDB1zY~`%hyL7cFuE$=#9zj&j zljk1q*L)ac(~fopM?yKNSG4OzFWIkt<-~`sKkY>IU8SSZ`qfA*d$sT9jx??HcP(Fi zgWIV3pCtIHaSixXSH@(HX5y8?e%wfH=aWezwwuU2|d|6MBGv3<+N;S z<=33Do;~I7vvQ?j#0FbAd7nF-_RbaDxCXJSyp+B}L`>N1VHMWAu$`TVV9 zr$&ymu*&grGm1*XuOQ<@U31Y%l-~53yO-0lsg;kM%E{3(dt#1Jsl7`uLe9OMrnOyT z9BYg4S%z%W2tqkt?rJSi1 z2I8R?uWseGw~0q$N>2zYH)~R~NjUpTxP9j>>u85;+Tnz9rma;;X!zU9 zB3A1QUOH?0*K_wmLpB;tD2Me~)oNP9@#H72porD_iTlsmo^$9(XvjvxpZ8JDFgPun zcJwo^&~W0~Gtb)I{Ef@v+9(|jCzid2LFs7t(>tE?pS#Z7{^P@!hKAD7aAMi3eGzJ; z(eSqiJm=}>&)A-S@8Qr;IvP$adkurq(dbWR#&6|0w_kO}_RgzPL+NNZvFz2J%NuDl z`V*$1;W-a|`}DCLN=L(qWiNKZibliVH}ITSPC0$N9!f{UiDj?0{upUA{OKLf`Oa;p zjr~gLXgIO#H4I8eqd#j9zm?})^74Uxf3&wjO>aspd+}~g(P*?giof}S#%BA#f$`p! z7w;IIgs`$!Yo}$?a(jDu^XK(}F-EzUY-(l1pq$m(Y1wGl(>t4s4jdTcxqHb*!-%#Y zP_d@_H1llF;Z^F!qqSg2%q~-q3I_*=RVSoa|Rct0Xjf z-`#_zk6!)2`$NOMWaH(8a#By zAnMP(oJOOMIH4gTN3yD+($R2&(QEGIG#Y*63=I)EBG)gibTph`6rOuIjfOwHBO+%O z)vuI}h7-&t=3Y*t(PuKz4iUq^d?$PRYOQoMoLKg98jU_9Lu2Cvv#`2rWusw4%-hP# zY1wGB$goH2(eSdESyuFsjfN31|12-3WuswF?`*s*pLxqh!-!ZlRIGJcHX6Q~c=)~} z+h>3K=sQ>&{OXHGwhtWqNwbGRHX2SShv#HO%ZB&$2gLcu9tjQil8uHDR&Lg$XqAM9 zuO?Kh)%xHyN4C#g`_pKLY&4uu&a|~E361{5)|1#Gcr)zs?LD7-EHq@J;e>Lgv`V7f z-V^t+Mev5(<=anv{AZyd8x1FvGo@7$<@P%&G@SVTS(k5*Ui^4m8>OS+#Ijd=7i^@_ z@YRIpZ0^2n`?{x7L+NNZvFz1uwUI`njRyP;w`hmw{ON^Dx1Tut^Js_C(Qsnft3AUs z(rC2NVEjI{=e*`!mu^=#rH0bcaAMi3{Y~$YMx%`eq(w-_iGQ2*F))OII-+C3`$4CR}-Fd!R>D!`<2qsaAMi3t)oX8jn)&#?=5-G z{(lek`=jj#j074^EPJ&*hml6Z-#7TpgNMd@TVAWR>>a|&TCJUyO|4pF7~gmP%$0}6 z80B8F(J*3A&T8$nY&2{&v3cUOLt{L5FWG1qF({|)ei$tqjW!za?dVv4{O;9D`uNdC zr41;^grX5ZwCu>r)N(FYdeBZuw!v-IEi`UU{DV;!d^9zbj)oIN%ej}+X!J-O8X|H8xbsMAC>;$ai28Fcr_tymPH2e8k*sQ{bTph` z^qPA)jYc0iLqkN4$n{Gr9StWKh38&Qqv5Lw5jnG{ex-CYoM1LF_i`GIK9h-dh#1-z zBrfmw%4)52G@MxWavBX=O>CTC7FKtyY&49BSzmcMEgOv%8OHYwyewvu6@6r*VMNSc z%gbrmXxM6E<7N5GTQ(X-#HyiUt<$p6@YMw85w-qcT~q51*=RVSoIJrOS|y=jtBE-O zs1<~J$wtG7IRD6U^K7DMw5xs7)r4x5rwg_IVC9uI8ovHePHJS!TMV{eVO&AR`a?vX zf7JSe6=d3I^fhM?%E|MOs)eF zwf;~#8cr;Gkp-);RL%Jb1$dSXrsaSy;l*rb5rXNrK8~lyESt! zr_pGm0bj<8-%3R8K-Ky~>1a5?uG8GhX*8I>F^|I*kvnNsL#3nP1iNQ*FQ+NDjRxcQ zmPF)^VExicN5ctr0q0&$qv5Lw5xKKj{YvR*IKgh_+{Fh6GZ*Fm(ytU5hpZ6 z8cr~qn0q;m zMxV(D0_RJe^g0Rf?3hr%V{+Fj0}x9|0sf4SlzXZ`o)V5$7KjYrQ72(eTv-XAt%L73-RM z{z^6)PADhOKZ;gKXxM6E15r;c}Y`(-I}?V(`dBOU~>MEMBjnx&tG{-QzCYqW?oLC(ME&G`A0t2l{;xw zLoaDcuzNQ5avF^`8cfbVsvYd_)i3QOO^Ic%+)u1ueY%&p(`f9Tf7HG0wCo)sc7#iV{p6x$Q>(tSO=Q@x zvt2RDy=0?dM4W$AlyO=%8n&8<^N)&T?j;)yBjWs{Vif!PMaxEmbu%-j25&fNs7UQz zve7Ui&Oa*FIxQOw*8j|yped_P_1#N0UQQ?{&p(P*Noe?Lg5RW`PH->TXgHyqJpU+K zC85!;;1$qZ+j`2vy=3F%gmUuyqiB_chM#88N9zeH_mYi<6Uxc+kD^r)8vPz*eigmF zytwb`37C@;%U*e(FF$`JA|p;c$)j{?fU2wv_nKj&UzwA>1a4Xw48f6 zjYf~{p&=qifO@h@>1a4X)Sr7fjYc1%LPJE3WK~0@qu~Uj*WAl#H2PQ@8X|H;u3uW| zXgI+rJoj=M4PQ-&$eBg;E2X311ha{`m(ytUnM|}pM4n*O^H)ko!wF_Zb1$dSu+>DI ze-yzitnOObXc!T*zVdQC*=V%LFggE7BImmmeVAFMjfN3%{!w0D6WM6kY9h`*sw|&* z%SOY9IRB_v>ot*$M(YFn`TzDSUU&WWo5$Ae@6{Y#W8ZSer>`7_<7OXi8lBi+?Rq(# z_VFO{{oO|HIq~@SZ@jX+uuG4U>)&S2y`07_8gIQ< Date: Tue, 11 Apr 2017 15:22:09 -0500 Subject: [PATCH 231/816] Delete makeR_pegasus_platform.stl Delete file in wrong path --- .../definitions/makeR_pegasus_platform.stl | Bin 134284 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/definitions/makeR_pegasus_platform.stl diff --git a/resources/definitions/makeR_pegasus_platform.stl b/resources/definitions/makeR_pegasus_platform.stl deleted file mode 100644 index 91751eb0e4b332b62faff74eda42a1bf033b4e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134284 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 Date: Tue, 11 Apr 2017 15:22:52 -0500 Subject: [PATCH 232/816] Delete makeR_prusa_tairona_i3_platform.stl Delete file in wrong path --- .../makeR_prusa_tairona_i3_platform.stl | 18790 ---------------- 1 file changed, 18790 deletions(-) delete mode 100644 resources/definitions/makeR_prusa_tairona_i3_platform.stl diff --git a/resources/definitions/makeR_prusa_tairona_i3_platform.stl b/resources/definitions/makeR_prusa_tairona_i3_platform.stl deleted file mode 100644 index 2e4b650637..0000000000 --- a/resources/definitions/makeR_prusa_tairona_i3_platform.stl +++ /dev/null @@ -1,18790 +0,0 @@ -solid OpenSCAD_Model - facet normal -0.737716 0.675111 0 - outer loop - vertex -99.977 112.453 -11 - vertex -99.88 112.559 -5 - vertex -99.88 112.559 -11 - endloop - endfacet - facet normal -0.737716 0.675111 0 - outer loop - vertex -99.88 112.559 -5 - vertex -99.977 112.453 -11 - vertex -99.977 112.453 -5 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -99.977 112.453 -5 - vertex -99.977 112.603 -11 - vertex -99.977 112.603 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -99.977 112.603 -11 - vertex -99.977 112.453 -5 - vertex -99.977 112.453 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -107.121 105.46 -11 - vertex -106.98 109.464 -11 - vertex -106.98 105.46 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -107.121 105.46 -11 - vertex -107.121 109.464 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -107.121 -104.54 -11 - vertex -106.98 -100.536 -11 - vertex -106.98 -104.54 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -106.98 -100.536 -11 - vertex -107.121 -104.54 -11 - vertex -107.121 -100.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -104.078 -107.636 -11 - vertex -107.077 -104.637 -11 - vertex -106.98 -104.54 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -103.981 112.462 -11 - vertex -106.98 109.464 -11 - vertex -104.078 112.559 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -104.078 112.559 -11 - vertex -106.98 109.464 -11 - vertex -107.077 109.561 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 -107.539 -11 - vertex -99.977 -107.539 -11 - vertex -99.977 -107.68 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -100.329 -103.187 -11 - vertex -100.125 -102.94 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -100.574 -103.393 -11 - vertex -100.329 -103.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -100.852 -103.549 -11 - vertex -100.574 -103.393 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -101.156 -103.65 -11 - vertex -100.852 -103.549 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -101.476 -103.685 -11 - vertex -101.156 -103.65 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -101.797 -103.65 -11 - vertex -101.476 -103.685 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 -107.539 -11 - vertex -103.981 -107.539 -11 - vertex -101.797 -103.65 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -101.797 -103.65 -11 - vertex -103.981 -107.539 -11 - vertex -102.1 -103.549 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.1 -103.549 -11 - vertex -103.981 -107.539 -11 - vertex -102.378 -103.393 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.378 -103.393 -11 - vertex -103.981 -107.539 -11 - vertex -102.623 -103.187 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.827 -102.94 -11 - vertex -106.98 -104.54 -11 - vertex -102.983 -102.661 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.623 -103.187 -11 - vertex -106.98 -104.54 -11 - vertex -102.827 -102.94 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 -104.54 -11 - vertex -102.623 -103.187 -11 - vertex -103.981 -107.539 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 -107.539 -11 - vertex -99.977 -107.68 -11 - vertex -103.981 -107.68 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -74.921 87.6 -11 - vertex -99.87 106.638 -11 - vertex -99.836 106.959 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -99.969 106.335 -11 - vertex -99.87 106.638 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -100.125 106.057 -11 - vertex -99.969 106.335 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -100.329 105.812 -11 - vertex -100.125 106.057 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -100.574 105.608 -11 - vertex -100.329 105.812 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -100.852 105.452 -11 - vertex -100.574 105.608 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -101.156 105.353 -11 - vertex -100.852 105.452 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -101.476 105.319 -11 - vertex -101.156 105.353 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -101.797 105.353 -11 - vertex -101.476 105.319 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -107.077 105.363 -11 - vertex -101.797 105.353 -11 - vertex -87.118 85.404 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.797 105.353 -11 - vertex -107.077 105.363 -11 - vertex -102.1 105.452 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.1 105.452 -11 - vertex -107.077 105.363 -11 - vertex -102.378 105.608 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -106.98 105.46 -11 - vertex -102.378 105.608 -11 - vertex -107.077 105.363 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 105.46 -11 - vertex -103.117 106.959 -11 - vertex -103.082 106.638 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -103.117 106.959 -11 - vertex -106.98 105.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -102.623 108.106 -11 - vertex -106.98 109.464 -11 - vertex -103.981 112.462 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.983 106.335 -11 - vertex -106.98 105.46 -11 - vertex -103.082 106.638 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.827 106.057 -11 - vertex -106.98 105.46 -11 - vertex -102.983 106.335 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.378 105.608 -11 - vertex -106.98 105.46 -11 - vertex -102.623 105.812 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.623 105.812 -11 - vertex -106.98 105.46 -11 - vertex -102.827 106.057 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -97.119 55.462 -11 - vertex -93.618 37.462 -11 - vertex -97.119 17.459 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -93.618 37.462 -11 - vertex -97.119 55.462 -11 - vertex -96.978 55.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -97.119 -12.536 -11 - vertex -93.618 -32.538 -11 - vertex -97.119 -50.539 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -93.618 -32.538 -11 - vertex -97.119 -12.536 -11 - vertex -96.978 -12.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.626 -31.636 -11 - vertex -87.118 -20.544 -11 - vertex -90.471 -31.914 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.831 -31.391 -11 - vertex -87.118 -20.544 -11 - vertex -90.626 -31.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.076 -31.187 -11 - vertex -87.118 -20.544 -11 - vertex -90.831 -31.391 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.354 -31.032 -11 - vertex -87.118 -20.544 -11 - vertex -91.076 -31.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.657 -30.933 -11 - vertex -87.118 -20.544 -11 - vertex -91.354 -31.032 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.978 -30.898 -11 - vertex -87.118 -20.544 -11 - vertex -91.657 -30.933 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -92.298 -30.933 -11 - vertex -87.118 -20.544 -11 - vertex -91.978 -30.898 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -92.602 -31.032 -11 - vertex -87.118 -20.544 -11 - vertex -92.298 -30.933 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -87.118 -20.544 -11 - vertex -92.602 -31.032 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -20.544 -11 - vertex -96.978 -12.536 -11 - vertex -87.037 -19.735 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -92.602 -31.032 -11 - vertex -92.88 -31.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -92.88 -31.187 -11 - vertex -93.125 -31.391 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -93.125 -31.391 -11 - vertex -93.329 -31.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -93.329 -31.636 -11 - vertex -93.484 -31.914 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -12.536 -11 - vertex -93.484 -31.914 -11 - vertex -93.583 -32.218 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.583 -32.859 -11 - vertex -97.119 -50.539 -11 - vertex -93.618 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -93.618 -32.538 -11 - vertex -96.978 -12.536 -11 - vertex -93.583 -32.218 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.037 -19.735 -11 - vertex -96.978 -12.536 -11 - vertex -87.118 -2.482 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -96.978 -12.536 -11 - vertex -97.075 -12.439 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.626 38.364 -11 - vertex -87.118 49.465 -11 - vertex -90.471 38.086 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.831 38.609 -11 - vertex -87.118 49.465 -11 - vertex -90.626 38.364 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.076 38.813 -11 - vertex -87.118 49.465 -11 - vertex -90.831 38.609 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.354 38.968 -11 - vertex -87.118 49.465 -11 - vertex -91.076 38.813 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.657 39.067 -11 - vertex -87.118 49.465 -11 - vertex -91.354 38.968 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -91.978 39.102 -11 - vertex -87.118 49.465 -11 - vertex -91.657 39.067 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -92.298 39.067 -11 - vertex -87.118 49.465 -11 - vertex -91.978 39.102 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -92.602 38.968 -11 - vertex -87.118 49.465 -11 - vertex -92.298 39.067 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 49.465 -11 - vertex -96.978 55.462 -11 - vertex -87.037 50.273 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -87.118 49.465 -11 - vertex -92.602 38.968 -11 - vertex -96.978 55.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 55.462 -11 - vertex -92.602 38.968 -11 - vertex -92.88 38.813 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 55.462 -11 - vertex -92.88 38.813 -11 - vertex -93.125 38.609 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 55.462 -11 - vertex -93.125 38.609 -11 - vertex -93.329 38.364 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 55.462 -11 - vertex -93.329 38.364 -11 - vertex -93.484 38.086 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 55.462 -11 - vertex -93.484 38.086 -11 - vertex -93.583 37.782 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.583 37.141 -11 - vertex -97.119 17.459 -11 - vertex -93.618 37.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -93.618 37.462 -11 - vertex -96.978 55.462 -11 - vertex -93.583 37.782 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.037 50.273 -11 - vertex -96.978 55.462 -11 - vertex -87.118 65.516 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -96.978 55.462 -11 - vertex -97.075 55.559 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -74.912 -82.677 -11 - vertex -99.871 -101.715 -11 - vertex -87.118 -80.481 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.97 -101.412 -11 - vertex -87.118 -80.481 -11 - vertex -99.871 -101.715 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.125 -101.134 -11 - vertex -87.118 -80.481 -11 - vertex -99.97 -101.412 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.329 -100.888 -11 - vertex -87.118 -80.481 -11 - vertex -100.125 -101.134 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.574 -100.684 -11 - vertex -87.118 -80.481 -11 - vertex -100.329 -100.888 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.852 -100.529 -11 - vertex -87.118 -80.481 -11 - vertex -100.574 -100.684 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.156 -100.43 -11 - vertex -87.118 -80.481 -11 - vertex -100.852 -100.529 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.476 -100.395 -11 - vertex -87.118 -80.481 -11 - vertex -101.156 -100.43 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.797 -100.43 -11 - vertex -87.118 -80.481 -11 - vertex -101.476 -100.395 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -107.077 -100.439 -11 - vertex -101.797 -100.43 -11 - vertex -102.1 -100.529 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -107.077 -100.439 -11 - vertex -102.1 -100.529 -11 - vertex -102.378 -100.684 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 -100.536 -11 - vertex -102.378 -100.684 -11 - vertex -102.623 -100.888 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 -100.536 -11 - vertex -102.623 -100.888 -11 - vertex -102.828 -101.134 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -102.983 -102.661 -11 - vertex -106.98 -104.54 -11 - vertex -103.082 -102.356 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 -100.536 -11 - vertex -103.082 -102.356 -11 - vertex -106.98 -104.54 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 -104.54 -11 - vertex -103.981 -107.539 -11 - vertex -104.078 -107.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.082 -102.356 -11 - vertex -106.98 -100.536 -11 - vertex -103.117 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.117 -102.035 -11 - vertex -106.98 -100.536 -11 - vertex -103.082 -101.715 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.082 -101.715 -11 - vertex -106.98 -100.536 -11 - vertex -102.983 -101.412 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -102.983 -101.412 -11 - vertex -106.98 -100.536 -11 - vertex -102.828 -101.134 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -102.378 -100.684 -11 - vertex -106.98 -100.536 -11 - vertex -107.077 -100.439 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -101.797 -100.43 -11 - vertex -107.077 -100.439 -11 - vertex -87.118 -80.481 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -86.423 -45.835 -11 - vertex -96.978 -50.539 -11 - vertex -86.802 -45.119 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -86.802 -45.119 -11 - vertex -96.978 -50.539 -11 - vertex -87.037 -44.344 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -87.037 -44.344 -11 - vertex -96.978 -50.539 -11 - vertex -87.118 -43.536 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -90.337 -32.538 -11 - vertex -87.118 -43.536 -11 - vertex -90.372 -32.859 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.372 -32.218 -11 - vertex -87.118 -20.544 -11 - vertex -90.337 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -90.337 -32.538 -11 - vertex -87.118 -20.544 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -90.471 -33.162 -11 - vertex -90.372 -32.859 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -90.626 -33.44 -11 - vertex -90.471 -33.162 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -90.831 -33.685 -11 - vertex -90.626 -33.44 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -91.076 -33.889 -11 - vertex -90.831 -33.685 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -92.602 -34.045 -11 - vertex -87.118 -43.536 -11 - vertex -96.978 -50.539 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -91.354 -34.045 -11 - vertex -91.076 -33.889 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -91.657 -34.144 -11 - vertex -91.354 -34.045 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -91.978 -34.179 -11 - vertex -91.657 -34.144 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -92.298 -34.144 -11 - vertex -91.978 -34.179 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -43.536 -11 - vertex -92.602 -34.045 -11 - vertex -92.298 -34.144 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -92.602 -34.045 -11 - vertex -96.978 -50.539 -11 - vertex -92.88 -33.889 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -97.119 -50.539 -11 - vertex -92.88 -33.889 -11 - vertex -96.978 -50.539 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -92.88 -33.889 -11 - vertex -97.119 -50.539 -11 - vertex -93.125 -33.685 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.125 -33.685 -11 - vertex -97.119 -50.539 -11 - vertex -93.329 -33.44 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.484 -33.162 -11 - vertex -97.119 -50.539 -11 - vertex -93.583 -32.859 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.329 -33.44 -11 - vertex -97.119 -50.539 -11 - vertex -93.484 -33.162 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -96.978 -50.539 -11 - vertex -87.118 -60.593 -11 - vertex -97.075 -50.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.976 7.458 -11 - vertex -77.117 7.458 -11 - vertex -77.082 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.46 -11 - vertex -57.079 27.558 -11 - vertex -56.982 27.602 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -36.883 -22.643 -11 - vertex -36.98 -22.678 -11 - vertex -36.98 -22.537 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.073 -33.889 -11 - vertex -76.917 -44.344 -11 - vertex -76.835 -43.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -77.155 -45.119 -11 - vertex -76.917 -44.344 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -77.538 -45.835 -11 - vertex -77.155 -45.119 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -78.052 -46.464 -11 - vertex -77.538 -45.835 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -78.681 -46.978 -11 - vertex -78.052 -46.464 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -79.397 -47.361 -11 - vertex -78.681 -46.978 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -60.593 -11 - vertex -79.397 -47.361 -11 - vertex -65.078 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -74.912 -82.677 -11 - vertex -87.118 -60.593 -11 - vertex -65.078 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -79.397 -47.361 -11 - vertex -87.118 -60.593 -11 - vertex -80.172 -47.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -80.172 -47.599 -11 - vertex -87.118 -60.593 -11 - vertex -80.98 -47.681 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -80.98 -47.681 -11 - vertex -87.118 -60.593 -11 - vertex -82.982 -47.681 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -82.982 -47.681 -11 - vertex -87.118 -60.593 -11 - vertex -83.79 -47.599 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -83.79 -47.599 -11 - vertex -87.118 -60.593 -11 - vertex -84.565 -47.361 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -84.565 -47.361 -11 - vertex -87.118 -60.593 -11 - vertex -85.281 -46.978 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 -50.539 -11 - vertex -85.281 -46.978 -11 - vertex -87.118 -60.593 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -85.91 -46.464 -11 - vertex -96.978 -50.539 -11 - vertex -86.423 -45.835 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -85.281 -46.978 -11 - vertex -96.978 -50.539 -11 - vertex -85.91 -46.464 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.871 -101.715 -11 - vertex -74.912 -82.677 -11 - vertex -99.836 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -74.912 -82.677 -11 - vertex -99.87 -102.356 -11 - vertex -99.836 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.88 -107.636 -11 - vertex -99.87 -102.356 -11 - vertex -74.912 -82.677 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.88 -107.636 -11 - vertex -99.969 -102.661 -11 - vertex -99.87 -102.356 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.125 -102.94 -11 - vertex -99.88 -107.636 -11 - vertex -99.977 -107.539 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.88 -107.636 -11 - vertex -100.125 -102.94 -11 - vertex -99.969 -102.661 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.828 38.609 -11 - vertex -76.917 50.273 -11 - vertex -65.078 77.361 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.155 51.048 -11 - vertex -65.078 77.361 -11 - vertex -76.917 50.273 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.538 51.764 -11 - vertex -65.078 77.361 -11 - vertex -77.155 51.048 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -78.052 52.393 -11 - vertex -65.078 77.361 -11 - vertex -77.538 51.764 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -78.681 52.907 -11 - vertex -65.078 77.361 -11 - vertex -78.052 52.393 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -79.397 53.29 -11 - vertex -65.078 77.361 -11 - vertex -78.681 52.907 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 77.361 -11 - vertex -79.397 53.29 -11 - vertex -87.118 65.516 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -79.397 53.29 -11 - vertex -80.172 53.528 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -80.172 53.528 -11 - vertex -80.98 53.61 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -80.98 53.61 -11 - vertex -82.982 53.61 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -82.982 53.61 -11 - vertex -83.79 53.528 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -83.79 53.528 -11 - vertex -84.565 53.29 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -84.565 53.29 -11 - vertex -85.281 52.907 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -85.281 52.907 -11 - vertex -85.91 52.393 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -85.91 52.393 -11 - vertex -86.423 51.764 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -86.423 51.764 -11 - vertex -86.802 51.048 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.372 37.782 -11 - vertex -87.118 49.465 -11 - vertex -90.337 37.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 65.516 -11 - vertex -86.802 51.048 -11 - vertex -87.037 50.273 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -65.078 77.361 -11 - vertex -87.118 65.516 -11 - vertex -74.921 87.6 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 85.404 -11 - vertex -74.921 87.6 -11 - vertex -87.118 65.516 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.87 106.638 -11 - vertex -74.921 87.6 -11 - vertex -87.118 85.404 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.871 107.28 -11 - vertex -74.921 87.6 -11 - vertex -99.836 106.959 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.871 107.28 -11 - vertex -99.88 112.559 -11 - vertex -74.921 87.6 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.97 107.583 -11 - vertex -99.88 112.559 -11 - vertex -99.871 107.28 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.125 107.861 -11 - vertex -99.88 112.559 -11 - vertex -99.97 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.88 112.559 -11 - vertex -100.125 107.861 -11 - vertex -99.977 112.453 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.329 108.106 -11 - vertex -99.977 112.453 -11 - vertex -100.125 107.861 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.574 108.31 -11 - vertex -99.977 112.453 -11 - vertex -100.329 108.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -100.852 108.466 -11 - vertex -99.977 112.453 -11 - vertex -100.574 108.31 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.156 108.565 -11 - vertex -99.977 112.453 -11 - vertex -100.852 108.466 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.476 108.599 -11 - vertex -99.977 112.453 -11 - vertex -101.156 108.565 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -101.797 108.565 -11 - vertex -99.977 112.453 -11 - vertex -101.476 108.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 112.462 -11 - vertex -99.977 112.453 -11 - vertex -101.797 108.565 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 112.462 -11 - vertex -101.797 108.565 -11 - vertex -102.1 108.466 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 112.462 -11 - vertex -102.1 108.466 -11 - vertex -102.378 108.31 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -103.981 112.462 -11 - vertex -102.378 108.31 -11 - vertex -102.623 108.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -102.623 108.106 -11 - vertex -102.828 107.861 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -103.082 107.28 -11 - vertex -103.117 106.959 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -102.983 107.583 -11 - vertex -103.082 107.28 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -106.98 109.464 -11 - vertex -102.828 107.861 -11 - vertex -102.983 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -99.977 112.453 -11 - vertex -103.981 112.462 -11 - vertex -99.977 112.603 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -99.977 112.603 -11 - vertex -103.981 112.462 -11 - vertex -103.981 112.603 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -76.985 -2.543 -11 - vertex -77.082 -2.64 -11 - vertex -77.117 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.538 -11 - vertex -25.082 -32.441 -11 - vertex -24.976 -32.397 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.836 7.458 -11 - vertex -16.977 7.458 -11 - vertex -16.88 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.377 -17.64 -11 - vertex 22.922 -2.64 -11 - vertex 4.532 -17.918 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 4.631 22.139 -11 - vertex 4.666 22.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.172 -17.395 -11 - vertex 22.922 -2.64 -11 - vertex 4.377 -17.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 4.532 21.836 -11 - vertex 4.631 22.139 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.927 -17.191 -11 - vertex 22.922 -2.64 -11 - vertex 4.172 -17.395 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 4.377 21.558 -11 - vertex 4.532 21.836 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 22.922 -2.64 -11 - vertex 3.927 -17.191 -11 - vertex 22.878 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 4.172 21.313 -11 - vertex 4.377 21.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.649 -17.035 -11 - vertex 22.878 -2.543 -11 - vertex 3.927 -17.191 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 3.927 21.109 -11 - vertex 4.172 21.313 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.346 -16.936 -11 - vertex 22.878 -2.543 -11 - vertex 3.649 -17.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 3.649 20.953 -11 - vertex 3.927 21.109 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.025 -16.901 -11 - vertex 22.878 -2.543 -11 - vertex 3.346 -16.936 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 3.346 20.854 -11 - vertex 3.649 20.953 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.025 20.819 -11 - vertex 22.878 -2.543 -11 - vertex 3.025 -16.901 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 3.025 20.819 -11 - vertex 3.346 20.854 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.836 -2.543 -11 - vertex 3.025 -16.901 -11 - vertex 2.705 -16.936 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.025 -16.901 -11 - vertex -16.836 -2.543 -11 - vertex 3.025 20.819 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.836 -2.543 -11 - vertex 2.705 -16.936 -11 - vertex 2.401 -17.035 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 3.025 20.819 -11 - vertex -16.836 -2.543 -11 - vertex 2.705 20.854 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.836 -2.543 -11 - vertex 2.401 -17.035 -11 - vertex 2.123 -17.191 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.836 7.458 -11 - vertex 2.705 20.854 -11 - vertex -16.836 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 -2.64 -11 - vertex 2.123 -17.191 -11 - vertex 1.878 -17.395 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 2.705 20.854 -11 - vertex -16.836 7.458 -11 - vertex 2.401 20.953 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 -2.64 -11 - vertex 1.878 -17.395 -11 - vertex 1.674 -17.64 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 2.401 20.953 -11 - vertex -16.836 7.458 -11 - vertex 2.123 21.109 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 -2.64 -11 - vertex 1.674 -17.64 -11 - vertex 1.519 -17.918 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 2.123 21.109 -11 - vertex -16.836 7.458 -11 - vertex 1.878 21.313 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 -2.64 -11 - vertex 1.519 -17.918 -11 - vertex 1.42 -18.221 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 7.564 -11 - vertex 1.878 21.313 -11 - vertex -16.836 7.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.88 -2.64 -11 - vertex 1.42 -18.221 -11 - vertex 1.385 -18.542 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.878 21.313 -11 - vertex -16.88 7.564 -11 - vertex 1.674 21.558 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -16.836 -2.543 -11 - vertex -16.88 -2.64 -11 - vertex -16.977 -2.543 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -64.981 77.458 -11 - vertex -65.078 77.361 -11 - vertex -64.981 77.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.028 7.458 -11 - vertex 22.878 7.458 -11 - vertex 22.922 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 43.022 27.46 -11 - vertex 42.925 27.558 -11 - vertex 43.022 27.602 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 45.514 -11 - vertex 43.119 49.359 -11 - vertex 73.166 65.402 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 53.023 27.602 -11 - vertex 53.12 27.558 -11 - vertex 53.023 27.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 43.119 49.359 -11 - vertex 53.12 27.558 -11 - vertex 53.023 27.602 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 73.166 65.402 -11 - vertex 43.119 49.359 -11 - vertex 71.12 77.361 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 41.125 47.357 -11 - vertex 53.023 27.602 -11 - vertex 43.022 27.602 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.124 37.365 -11 - vertex 43.022 27.602 -11 - vertex 42.925 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 53.023 27.602 -11 - vertex 41.125 47.357 -11 - vertex 43.119 49.359 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 43.022 27.602 -11 - vertex 31.124 37.365 -11 - vertex 41.125 47.357 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 42.925 27.558 -11 - vertex 31.018 37.321 -11 - vertex 31.124 37.365 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.922 7.564 -11 - vertex 31.018 37.321 -11 - vertex 42.925 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.666 22.46 -11 - vertex 22.922 7.564 -11 - vertex 22.878 7.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.878 -2.543 -11 - vertex 4.666 22.46 -11 - vertex 22.878 7.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.922 7.564 -11 - vertex 4.666 22.46 -11 - vertex 31.018 37.321 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.631 22.78 -11 - vertex 31.018 37.321 -11 - vertex 4.666 22.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.532 23.084 -11 - vertex 31.018 37.321 -11 - vertex 4.631 22.78 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.377 23.362 -11 - vertex 31.018 37.321 -11 - vertex 4.532 23.084 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.172 23.607 -11 - vertex 31.018 37.321 -11 - vertex 4.377 23.362 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.927 23.811 -11 - vertex 31.018 37.321 -11 - vertex 4.172 23.607 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.649 23.966 -11 - vertex 31.018 37.321 -11 - vertex 3.927 23.811 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.346 24.066 -11 - vertex 31.018 37.321 -11 - vertex 3.649 23.966 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.025 24.1 -11 - vertex 31.018 37.321 -11 - vertex 3.346 24.066 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 37.321 -11 - vertex 3.025 24.1 -11 - vertex 2.705 24.066 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 37.321 -11 - vertex 2.705 24.066 -11 - vertex 2.401 23.966 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.519 21.836 -11 - vertex -16.88 7.564 -11 - vertex 1.42 22.139 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.42 22.139 -11 - vertex -16.88 7.564 -11 - vertex 1.385 22.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 37.321 -11 - vertex 1.385 22.46 -11 - vertex -16.88 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.385 22.46 -11 - vertex -24.976 37.321 -11 - vertex 1.42 22.78 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.42 22.78 -11 - vertex -24.976 37.321 -11 - vertex 1.519 23.084 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.519 23.084 -11 - vertex -24.976 37.321 -11 - vertex 1.674 23.362 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.025 24.1 -11 - vertex -24.976 37.321 -11 - vertex 31.018 37.321 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 2.123 23.811 -11 - vertex -24.976 37.321 -11 - vertex 2.401 23.966 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.878 23.607 -11 - vertex -24.976 37.321 -11 - vertex 2.123 23.811 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.674 23.362 -11 - vertex -24.976 37.321 -11 - vertex 1.878 23.607 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 37.321 -11 - vertex -25.082 37.365 -11 - vertex -24.976 37.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.883 27.558 -11 - vertex -24.976 37.321 -11 - vertex -16.88 7.564 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -24.976 37.321 -11 - vertex -36.883 27.558 -11 - vertex -25.082 37.365 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.98 27.602 -11 - vertex -36.883 27.558 -11 - vertex -36.98 27.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.98 27.602 -11 - vertex -25.082 37.365 -11 - vertex -36.883 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.602 -11 - vertex -25.082 37.365 -11 - vertex -36.98 27.602 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.624 38.364 -11 - vertex -25.082 37.365 -11 - vertex -56.982 27.602 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.369 37.141 -11 - vertex -56.982 27.602 -11 - vertex -57.079 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.602 -11 - vertex -70.335 37.462 -11 - vertex -70.369 37.782 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.602 -11 - vertex -70.369 37.141 -11 - vertex -70.335 37.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -70.468 36.838 -11 - vertex -70.369 37.141 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -70.624 36.56 -11 - vertex -70.468 36.838 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -70.828 36.315 -11 - vertex -70.624 36.56 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -71.073 36.111 -11 - vertex -70.828 36.315 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -71.351 35.955 -11 - vertex -71.073 36.111 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 26.464 -11 - vertex -71.351 35.955 -11 - vertex -57.079 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.351 35.955 -11 - vertex -76.835 26.464 -11 - vertex -71.655 35.856 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.655 35.856 -11 - vertex -76.835 26.464 -11 - vertex -71.975 35.821 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -71.975 35.821 -11 - vertex -76.835 26.464 -11 - vertex -72.296 35.856 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -73.616 37.462 -11 - vertex -76.835 49.465 -11 - vertex -73.581 37.782 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.581 37.141 -11 - vertex -76.835 26.464 -11 - vertex -73.616 37.462 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.482 36.838 -11 - vertex -76.835 26.464 -11 - vertex -73.581 37.141 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.326 36.56 -11 - vertex -76.835 26.464 -11 - vertex -73.482 36.838 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.122 36.315 -11 - vertex -76.835 26.464 -11 - vertex -73.326 36.56 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.877 36.111 -11 - vertex -76.835 26.464 -11 - vertex -73.122 36.315 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.599 35.955 -11 - vertex -76.835 26.464 -11 - vertex -72.877 36.111 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.296 35.856 -11 - vertex -76.835 26.464 -11 - vertex -72.599 35.955 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -76.917 25.656 -11 - vertex -76.835 26.464 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.538 24.165 -11 - vertex -57.079 27.558 -11 - vertex -77.082 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 7.405 -11 - vertex -77.082 7.564 -11 - vertex -77.117 7.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -77.155 24.881 -11 - vertex -76.917 25.656 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -78.681 -17.094 -11 - vertex -77.082 -2.64 -11 - vertex -78.052 -17.607 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -79.397 -16.715 -11 - vertex -77.082 -2.64 -11 - vertex -78.681 -17.094 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 27.558 -11 - vertex -77.538 24.165 -11 - vertex -77.155 24.881 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -80.172 -16.479 -11 - vertex -77.082 -2.64 -11 - vertex -79.397 -16.715 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -78.052 23.536 -11 - vertex -77.538 24.165 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -80.98 -16.399 -11 - vertex -77.082 -2.64 -11 - vertex -80.172 -16.479 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -87.118 7.405 -11 - vertex -82.982 22.328 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.117 -2.543 -11 - vertex -87.118 -2.482 -11 - vertex -77.117 7.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -78.681 23.023 -11 - vertex -78.052 23.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -82.982 -16.399 -11 - vertex -77.082 -2.64 -11 - vertex -80.98 -16.399 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -79.397 22.644 -11 - vertex -78.681 23.023 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -77.082 -2.64 -11 - vertex -82.982 -16.399 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -80.172 22.408 -11 - vertex -79.397 22.644 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 -2.64 -11 - vertex -87.118 -2.482 -11 - vertex -77.117 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.117 7.458 -11 - vertex -87.118 -2.482 -11 - vertex -87.118 7.405 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -82.982 -16.399 -11 - vertex -83.79 -16.479 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -80.98 22.328 -11 - vertex -80.172 22.408 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -83.79 -16.479 -11 - vertex -84.565 -16.715 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.082 7.564 -11 - vertex -82.982 22.328 -11 - vertex -80.98 22.328 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -84.565 -16.715 -11 - vertex -85.281 -17.094 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -82.982 22.328 -11 - vertex -87.118 7.405 -11 - vertex -83.79 22.408 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -85.281 -17.094 -11 - vertex -85.91 -17.607 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -83.79 22.408 -11 - vertex -87.118 7.405 -11 - vertex -84.565 22.644 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -85.91 -17.607 -11 - vertex -86.423 -18.237 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -84.565 22.644 -11 - vertex -87.118 7.405 -11 - vertex -85.281 23.023 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -86.423 -18.237 -11 - vertex -86.802 -18.956 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -96.978 17.459 -11 - vertex -85.281 23.023 -11 - vertex -87.118 7.405 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -2.482 -11 - vertex -86.802 -18.956 -11 - vertex -87.037 -19.735 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -85.281 23.023 -11 - vertex -96.978 17.459 -11 - vertex -85.91 23.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.471 -31.914 -11 - vertex -87.118 -20.544 -11 - vertex -90.372 -32.218 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -85.91 23.536 -11 - vertex -96.978 17.459 -11 - vertex -86.423 24.165 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -86.423 24.165 -11 - vertex -96.978 17.459 -11 - vertex -86.802 24.881 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -86.802 24.881 -11 - vertex -96.978 17.459 -11 - vertex -87.037 25.656 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -87.037 25.656 -11 - vertex -96.978 17.459 -11 - vertex -87.118 26.464 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -90.337 37.462 -11 - vertex -87.118 26.464 -11 - vertex -90.372 37.141 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -90.471 38.086 -11 - vertex -87.118 49.465 -11 - vertex -90.372 37.782 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -90.337 37.462 -11 - vertex -87.118 49.465 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -90.471 36.838 -11 - vertex -90.372 37.141 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -90.626 36.56 -11 - vertex -90.471 36.838 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -90.831 36.315 -11 - vertex -90.626 36.56 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -91.076 36.111 -11 - vertex -90.831 36.315 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -92.602 35.955 -11 - vertex -87.118 26.464 -11 - vertex -96.978 17.459 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -91.354 35.955 -11 - vertex -91.076 36.111 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -91.657 35.856 -11 - vertex -91.354 35.955 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -91.978 35.821 -11 - vertex -91.657 35.856 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -92.298 35.856 -11 - vertex -91.978 35.821 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 26.464 -11 - vertex -92.602 35.955 -11 - vertex -92.298 35.856 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -97.119 17.459 -11 - vertex -92.602 35.955 -11 - vertex -96.978 17.459 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -92.602 35.955 -11 - vertex -97.119 17.459 -11 - vertex -92.88 36.111 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -92.88 36.111 -11 - vertex -97.119 17.459 -11 - vertex -93.125 36.315 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.125 36.315 -11 - vertex -97.119 17.459 -11 - vertex -93.329 36.56 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.484 36.838 -11 - vertex -97.119 17.459 -11 - vertex -93.583 37.141 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -93.329 36.56 -11 - vertex -97.119 17.459 -11 - vertex -93.484 36.838 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -96.978 17.459 -11 - vertex -87.118 7.405 -11 - vertex -97.075 17.362 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 -107.539 -11 - vertex 110.023 -107.539 -11 - vertex 110.023 -107.68 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 109.124 -102.356 -11 - vertex 109.159 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 109.025 -102.661 -11 - vertex 109.124 -102.356 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 108.869 -102.94 -11 - vertex 109.025 -102.661 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 108.665 -103.187 -11 - vertex 108.869 -102.94 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 108.42 -103.393 -11 - vertex 108.665 -103.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 108.142 -103.549 -11 - vertex 108.42 -103.393 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 107.839 -103.65 -11 - vertex 108.142 -103.549 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 106.019 -107.539 -11 - vertex 107.839 -103.65 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 107.839 -103.65 -11 - vertex 106.019 -107.539 -11 - vertex 107.518 -103.685 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 107.518 -103.685 -11 - vertex 106.019 -107.539 -11 - vertex 107.197 -103.65 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 107.197 -103.65 -11 - vertex 106.019 -107.539 -11 - vertex 106.894 -103.549 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.894 -103.549 -11 - vertex 106.019 -107.539 -11 - vertex 106.616 -103.393 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.616 -103.393 -11 - vertex 106.019 -107.539 -11 - vertex 106.371 -103.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 -107.539 -11 - vertex 110.023 -107.68 -11 - vertex 106.019 -107.68 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.371 -103.187 -11 - vertex 106.019 -107.539 -11 - vertex 106.167 -102.94 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.922 -107.636 -11 - vertex 106.167 -102.94 -11 - vertex 106.019 -107.539 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.167 -102.94 -11 - vertex 105.922 -107.636 -11 - vertex 106.011 -102.661 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.922 -107.636 -11 - vertex 105.912 -102.356 -11 - vertex 106.011 -102.661 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 80.954 -82.677 -11 - vertex 105.912 -102.356 -11 - vertex 105.922 -107.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.912 -102.356 -11 - vertex 80.954 -82.677 -11 - vertex 105.878 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.878 -102.035 -11 - vertex 80.954 -82.677 -11 - vertex 93.125 -80.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 71.12 -72.437 -11 - vertex 93.125 -80.437 -11 - vertex 80.954 -82.677 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.124 -32.441 -11 - vertex 73.166 -40.599 -11 - vertex 73.166 -60.487 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -40.599 -11 - vertex 73.122 -2.64 -11 - vertex 73.166 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.124 -32.441 -11 - vertex 73.166 -60.487 -11 - vertex 71.12 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -80.437 -11 - vertex 71.12 -72.437 -11 - vertex 73.166 -60.487 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 80.954 -82.677 -11 - vertex 71.023 -72.684 -11 - vertex 71.12 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 80.954 -82.677 -11 - vertex -64.981 -72.684 -11 - vertex 71.023 -72.684 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -64.981 -72.684 -11 - vertex -65.078 -72.437 -11 - vertex -64.981 -72.534 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 -22.678 -11 - vertex -70.369 -32.859 -11 - vertex -70.335 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.082 -32.441 -11 - vertex -70.468 -33.162 -11 - vertex -70.369 -32.859 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.082 -32.441 -11 - vertex -70.624 -33.44 -11 - vertex -70.468 -33.162 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 -72.437 -11 - vertex -70.828 -33.685 -11 - vertex -70.624 -33.44 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.917 -44.344 -11 - vertex -70.828 -33.685 -11 - vertex -65.078 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.917 -44.344 -11 - vertex -71.073 -33.889 -11 - vertex -70.828 -33.685 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.073 -33.889 -11 - vertex -76.835 -43.536 -11 - vertex -71.351 -34.045 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.351 -34.045 -11 - vertex -76.835 -43.536 -11 - vertex -71.655 -34.144 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.655 -34.144 -11 - vertex -76.835 -43.536 -11 - vertex -71.975 -34.179 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -71.975 -34.179 -11 - vertex -76.835 -43.536 -11 - vertex -72.296 -34.144 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.296 -34.144 -11 - vertex -76.835 -43.536 -11 - vertex -72.599 -34.045 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.599 -34.045 -11 - vertex -76.835 -43.536 -11 - vertex -72.877 -33.889 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -72.877 -33.889 -11 - vertex -76.835 -43.536 -11 - vertex -73.122 -33.685 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.122 -33.685 -11 - vertex -76.835 -43.536 -11 - vertex -73.326 -33.44 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.326 -33.44 -11 - vertex -76.835 -43.536 -11 - vertex -73.482 -33.162 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.482 -33.162 -11 - vertex -76.835 -43.536 -11 - vertex -73.581 -32.859 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -87.118 -60.593 -11 - vertex -74.912 -82.677 -11 - vertex -87.118 -80.481 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -64.981 -72.684 -11 - vertex -74.912 -82.677 -11 - vertex -65.078 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -74.912 -82.677 -11 - vertex -64.981 -72.684 -11 - vertex 80.954 -82.677 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 -107.539 -11 - vertex 113.021 -104.54 -11 - vertex 110.12 -107.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.12 -107.636 -11 - vertex 113.021 -104.54 -11 - vertex 113.118 -104.637 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 -104.54 -11 - vertex 113.163 -100.536 -11 - vertex 113.163 -104.54 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.163 -100.536 -11 - vertex 113.021 -104.54 -11 - vertex 113.021 -100.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 109.159 -102.035 -11 - vertex 113.021 -104.54 -11 - vertex 110.023 -107.539 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 -104.54 -11 - vertex 109.159 -102.035 -11 - vertex 113.021 -100.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 109.124 -101.715 -11 - vertex 113.021 -100.536 -11 - vertex 109.159 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 109.025 -101.412 -11 - vertex 113.021 -100.536 -11 - vertex 109.124 -101.715 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.869 -101.134 -11 - vertex 113.021 -100.536 -11 - vertex 109.025 -101.412 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.665 -100.888 -11 - vertex 113.021 -100.536 -11 - vertex 108.869 -101.134 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.42 -100.684 -11 - vertex 113.021 -100.536 -11 - vertex 108.665 -100.888 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.021 -100.536 -11 - vertex 108.42 -100.684 -11 - vertex 113.118 -100.439 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.142 -100.529 -11 - vertex 113.118 -100.439 -11 - vertex 108.42 -100.684 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 107.839 -100.43 -11 - vertex 113.118 -100.439 -11 - vertex 108.142 -100.529 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -80.437 -11 - vertex 107.839 -100.43 -11 - vertex 107.518 -100.395 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 107.839 -100.43 -11 - vertex 93.125 -80.437 -11 - vertex 113.118 -100.439 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 107.197 -100.43 -11 - vertex 93.125 -80.437 -11 - vertex 107.518 -100.395 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.894 -100.529 -11 - vertex 93.125 -80.437 -11 - vertex 107.197 -100.43 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.616 -100.684 -11 - vertex 93.125 -80.437 -11 - vertex 106.894 -100.529 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.371 -100.888 -11 - vertex 93.125 -80.437 -11 - vertex 106.616 -100.684 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.167 -101.134 -11 - vertex 93.125 -80.437 -11 - vertex 106.371 -100.888 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.011 -101.412 -11 - vertex 93.125 -80.437 -11 - vertex 106.167 -101.134 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.912 -101.715 -11 - vertex 93.125 -80.437 -11 - vertex 106.011 -101.412 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -80.437 -11 - vertex 105.912 -101.715 -11 - vertex 105.878 -102.035 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.922 112.559 -11 - vertex 106.167 107.861 -11 - vertex 106.011 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.167 107.861 -11 - vertex 105.922 112.559 -11 - vertex 106.019 112.462 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 105.912 107.28 -11 - vertex 105.922 112.559 -11 - vertex 106.011 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.921 89.558 -11 - vertex 105.912 107.28 -11 - vertex 105.878 106.959 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 105.912 107.28 -11 - vertex 82.921 89.558 -11 - vertex 105.922 112.559 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 109.124 107.28 -11 - vertex 113.021 109.464 -11 - vertex 113.021 105.46 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 109.464 -11 - vertex 110.023 112.453 -11 - vertex 110.12 112.559 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 109.464 -11 - vertex 109.124 107.28 -11 - vertex 109.025 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 109.124 107.28 -11 - vertex 113.021 105.46 -11 - vertex 109.159 106.959 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.42 105.608 -11 - vertex 113.021 105.46 -11 - vertex 113.118 105.363 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 109.124 106.638 -11 - vertex 109.159 106.959 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 109.025 106.335 -11 - vertex 109.124 106.638 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 108.869 106.057 -11 - vertex 109.025 106.335 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 108.665 105.812 -11 - vertex 108.869 106.057 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 108.42 105.608 -11 - vertex 108.665 105.812 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.118 105.363 -11 - vertex 108.142 105.452 -11 - vertex 108.42 105.608 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.118 105.363 -11 - vertex 107.839 105.353 -11 - vertex 108.142 105.452 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.118 105.363 -11 - vertex 107.518 105.319 -11 - vertex 107.839 105.353 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 105.912 106.638 -11 - vertex 82.921 89.558 -11 - vertex 105.878 106.959 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.011 106.335 -11 - vertex 82.921 89.558 -11 - vertex 105.912 106.638 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.167 106.057 -11 - vertex 82.921 89.558 -11 - vertex 106.011 106.335 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.371 105.812 -11 - vertex 82.921 89.558 -11 - vertex 106.167 106.057 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.616 105.608 -11 - vertex 82.921 89.558 -11 - vertex 106.371 105.812 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 106.894 105.452 -11 - vertex 82.921 89.558 -11 - vertex 106.616 105.608 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 107.197 105.353 -11 - vertex 82.921 89.558 -11 - vertex 106.894 105.452 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 107.518 105.319 -11 - vertex 82.921 89.558 -11 - vertex 107.197 105.353 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.118 105.363 -11 - vertex 82.921 89.558 -11 - vertex 107.518 105.319 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 65.402 -11 - vertex 82.921 89.558 -11 - vertex 113.118 105.363 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.921 89.558 -11 - vertex 73.166 65.402 -11 - vertex 80.963 87.6 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 43.119 49.359 -11 - vertex 73.166 45.514 -11 - vertex 53.12 27.558 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 71.12 77.361 -11 - vertex 80.963 87.6 -11 - vertex 73.166 65.402 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 71.023 77.599 -11 - vertex 71.12 77.361 -11 - vertex 71.023 77.458 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 71.12 77.361 -11 - vertex 71.023 77.599 -11 - vertex 80.963 87.6 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -64.981 77.599 -11 - vertex 80.963 87.6 -11 - vertex 71.023 77.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.602 -11 - vertex -70.369 37.782 -11 - vertex -70.468 38.086 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 27.602 -11 - vertex -70.468 38.086 -11 - vertex -70.624 38.364 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.082 37.365 -11 - vertex -70.624 38.364 -11 - vertex -65.078 77.361 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.828 38.609 -11 - vertex -65.078 77.361 -11 - vertex -70.624 38.364 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -70.828 38.609 -11 - vertex -71.073 38.813 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -71.073 38.813 -11 - vertex -71.351 38.968 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -71.351 38.968 -11 - vertex -71.655 39.067 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -71.655 39.067 -11 - vertex -71.975 39.102 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -71.975 39.102 -11 - vertex -72.296 39.067 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -72.296 39.067 -11 - vertex -72.599 38.968 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -72.599 38.968 -11 - vertex -72.877 38.813 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -72.877 38.813 -11 - vertex -73.122 38.609 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -73.122 38.609 -11 - vertex -73.326 38.364 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -73.326 38.364 -11 - vertex -73.482 38.086 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -73.482 38.086 -11 - vertex -73.581 37.782 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -64.981 77.599 -11 - vertex -74.921 87.6 -11 - vertex 80.963 87.6 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -65.078 77.361 -11 - vertex -74.921 87.6 -11 - vertex -64.981 77.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.917 50.273 -11 - vertex -70.828 38.609 -11 - vertex -76.835 49.465 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 49.465 -11 - vertex -73.616 37.462 -11 - vertex -76.835 26.464 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 113.021 105.46 -11 - vertex 113.163 109.464 -11 - vertex 113.163 105.46 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.163 109.464 -11 - vertex 113.021 105.46 -11 - vertex 113.021 109.464 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.118 109.561 -11 - vertex 113.021 109.464 -11 - vertex 110.12 112.559 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.869 107.861 -11 - vertex 113.021 109.464 -11 - vertex 109.025 107.583 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.665 108.106 -11 - vertex 113.021 109.464 -11 - vertex 108.869 107.861 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 113.021 109.464 -11 - vertex 108.665 108.106 -11 - vertex 110.023 112.453 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.42 108.31 -11 - vertex 110.023 112.453 -11 - vertex 108.665 108.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 108.142 108.466 -11 - vertex 110.023 112.453 -11 - vertex 108.42 108.31 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 107.839 108.565 -11 - vertex 110.023 112.453 -11 - vertex 108.142 108.466 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 110.023 112.453 -11 - vertex 107.839 108.565 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 107.839 108.565 -11 - vertex 107.518 108.599 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 107.518 108.599 -11 - vertex 107.197 108.565 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 107.197 108.565 -11 - vertex 106.894 108.466 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 106.894 108.466 -11 - vertex 106.616 108.31 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 106.616 108.31 -11 - vertex 106.371 108.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 106.019 112.462 -11 - vertex 106.371 108.106 -11 - vertex 106.167 107.861 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 110.023 112.453 -11 - vertex 106.019 112.462 -11 - vertex 110.023 112.603 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 110.023 112.603 -11 - vertex 106.019 112.462 -11 - vertex 106.019 112.603 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 73.166 -2.543 -11 - vertex 73.122 -2.64 -11 - vertex 73.025 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -40.599 -11 - vertex 53.12 -22.643 -11 - vertex 73.122 -2.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -40.599 -11 - vertex 53.023 -22.678 -11 - vertex 53.12 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -40.599 -11 - vertex 31.124 -32.441 -11 - vertex 53.023 -22.678 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 43.022 -22.678 -11 - vertex 42.925 -22.643 -11 - vertex 43.022 -22.537 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 53.023 -22.678 -11 - vertex 31.124 -32.441 -11 - vertex 43.022 -22.678 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 43.022 -22.678 -11 - vertex 31.124 -32.441 -11 - vertex 42.925 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 31.124 -32.441 -11 - vertex 31.018 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 42.925 -22.643 -11 - vertex 31.124 -32.441 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 22.922 -2.64 -11 - vertex 42.925 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.666 -18.542 -11 - vertex 22.922 -2.64 -11 - vertex 31.018 -32.397 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.532 -17.918 -11 - vertex 22.922 -2.64 -11 - vertex 4.631 -18.221 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.631 -18.221 -11 - vertex 22.922 -2.64 -11 - vertex 4.666 -18.542 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 4.631 -18.862 -11 - vertex 4.666 -18.542 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 4.532 -19.166 -11 - vertex 4.631 -18.862 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 4.377 -19.444 -11 - vertex 4.532 -19.166 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 4.172 -19.689 -11 - vertex 4.377 -19.444 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 3.927 -19.893 -11 - vertex 4.172 -19.689 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 3.649 -20.048 -11 - vertex 3.927 -19.893 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 3.346 -20.147 -11 - vertex 3.649 -20.048 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.018 -32.397 -11 - vertex 3.025 -20.182 -11 - vertex 3.346 -20.147 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 3.025 -20.182 -11 - vertex 31.018 -32.397 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 3.025 -20.182 -11 - vertex -24.976 -32.397 -11 - vertex 2.705 -20.147 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.674 21.558 -11 - vertex -16.88 7.564 -11 - vertex 1.519 21.836 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 1.385 -18.542 -11 - vertex 1.42 -18.862 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 1.42 -18.862 -11 - vertex 1.519 -19.166 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 1.519 -19.166 -11 - vertex 1.674 -19.444 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 1.674 -19.444 -11 - vertex 1.878 -19.689 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 2.123 -17.191 -11 - vertex -16.88 -2.64 -11 - vertex -16.836 -2.543 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 2.705 -20.147 -11 - vertex -24.976 -32.397 -11 - vertex 2.401 -20.048 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 2.123 -19.893 -11 - vertex 2.401 -20.048 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex 1.878 -19.689 -11 - vertex 2.123 -19.893 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.385 -18.542 -11 - vertex -24.976 -32.397 -11 - vertex -16.88 -2.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.883 -22.643 -11 - vertex -24.976 -32.397 -11 - vertex -25.082 -32.441 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.976 -32.397 -11 - vertex -36.883 -22.643 -11 - vertex -16.88 -2.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.082 -32.441 -11 - vertex -36.98 -22.678 -11 - vertex -36.883 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.082 -32.441 -11 - vertex -56.982 -22.678 -11 - vertex -36.98 -22.678 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -56.982 -22.678 -11 - vertex -57.079 -22.643 -11 - vertex -56.982 -22.546 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.624 -33.44 -11 - vertex -25.082 -32.441 -11 - vertex -65.078 -72.437 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.369 -32.859 -11 - vertex -56.982 -22.678 -11 - vertex -25.082 -32.441 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -56.982 -22.678 -11 - vertex -70.335 -32.538 -11 - vertex -57.079 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.369 -32.218 -11 - vertex -57.079 -22.643 -11 - vertex -70.335 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.468 -31.914 -11 - vertex -57.079 -22.643 -11 - vertex -70.369 -32.218 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.624 -31.636 -11 - vertex -57.079 -22.643 -11 - vertex -70.468 -31.914 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -70.828 -31.391 -11 - vertex -57.079 -22.643 -11 - vertex -70.624 -31.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.073 -31.187 -11 - vertex -57.079 -22.643 -11 - vertex -70.828 -31.391 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.351 -31.032 -11 - vertex -57.079 -22.643 -11 - vertex -71.073 -31.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -71.351 -31.032 -11 - vertex -71.655 -30.933 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -71.655 -30.933 -11 - vertex -71.975 -30.898 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -71.975 -30.898 -11 - vertex -72.296 -30.933 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -72.296 -30.933 -11 - vertex -72.599 -31.032 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -73.581 -32.859 -11 - vertex -76.835 -43.536 -11 - vertex -73.616 -32.538 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -73.616 -32.538 -11 - vertex -76.835 -43.536 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -73.616 -32.538 -11 - vertex -76.835 -20.544 -11 - vertex -73.581 -32.218 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -73.482 -31.914 -11 - vertex -73.581 -32.218 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -73.326 -31.636 -11 - vertex -73.482 -31.914 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -73.122 -31.391 -11 - vertex -73.326 -31.636 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -72.877 -31.187 -11 - vertex -73.122 -31.391 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.835 -20.544 -11 - vertex -72.599 -31.032 -11 - vertex -72.877 -31.187 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -71.351 -31.032 -11 - vertex -76.835 -20.544 -11 - vertex -57.079 -22.643 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -76.917 -19.735 -11 - vertex -57.079 -22.643 -11 - vertex -76.835 -20.544 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.155 -18.956 -11 - vertex -57.079 -22.643 -11 - vertex -76.917 -19.735 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -77.538 -18.237 -11 - vertex -57.079 -22.643 -11 - vertex -77.155 -18.956 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -78.052 -17.607 -11 - vertex -77.082 -2.64 -11 - vertex -77.538 -18.237 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -57.079 -22.643 -11 - vertex -77.538 -18.237 -11 - vertex -77.082 -2.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 71.12 -72.437 -11 - vertex 71.023 -72.684 -11 - vertex 71.023 -72.543 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 53.12 -22.643 -11 - vertex 53.023 -22.678 -11 - vertex 53.023 -22.537 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 31.124 37.365 -11 - vertex 31.018 37.321 -11 - vertex 31.018 37.462 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 23.019 -2.543 -11 - vertex 22.922 -2.64 -11 - vertex 22.878 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 99.625 2.778 -11 - vertex 103.161 15.457 -11 - vertex 99.66 2.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 99.625 2.137 -11 - vertex 99.66 2.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 99.526 1.834 -11 - vertex 99.625 2.137 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 99.371 1.556 -11 - vertex 99.526 1.834 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 99.166 1.311 -11 - vertex 99.371 1.556 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 98.921 1.106 -11 - vertex 99.166 1.311 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 98.643 0.950999 -11 - vertex 98.921 1.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 98.34 0.851999 -11 - vertex 98.643 0.950999 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 98.02 0.816999 -11 - vertex 98.34 0.851999 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 -9.678 -11 - vertex 98.02 0.816999 -11 - vertex 103.02 -10.542 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 98.02 0.816999 -11 - vertex 93.16 -9.678 -11 - vertex 97.699 0.851999 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 97.699 0.851999 -11 - vertex 93.16 -9.678 -11 - vertex 97.396 0.950999 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 97.396 0.950999 -11 - vertex 93.16 -9.678 -11 - vertex 97.118 1.106 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 97.118 1.106 -11 - vertex 93.16 -9.678 -11 - vertex 96.873 1.311 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 96.873 1.311 -11 - vertex 93.16 -9.678 -11 - vertex 96.669 1.556 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 96.414 2.137 -11 - vertex 93.16 -9.678 -11 - vertex 96.379 2.457 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 96.513 1.834 -11 - vertex 93.16 -9.678 -11 - vertex 96.414 2.137 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 96.669 1.556 -11 - vertex 93.16 -9.678 -11 - vertex 96.513 1.834 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 92.465 -11.978 -11 - vertex 103.02 -10.542 -11 - vertex 103.117 -10.64 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 92.465 -11.978 -11 - vertex 103.117 -10.64 -11 - vertex 93.125 -20.641 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 93.079 -10.486 -11 - vertex 93.16 -9.678 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 92.844 -11.261 -11 - vertex 93.079 -10.486 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 -10.542 -11 - vertex 92.465 -11.978 -11 - vertex 92.844 -11.261 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 91.952 -12.606 -11 - vertex 92.465 -11.978 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 91.323 -13.119 -11 - vertex 91.952 -12.606 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 90.607 -13.498 -11 - vertex 91.323 -13.119 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 89.831 -13.734 -11 - vertex 90.607 -13.498 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 89.024 -13.815 -11 - vertex 89.831 -13.734 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 87.022 -13.815 -11 - vertex 89.024 -13.815 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 86.214 -13.734 -11 - vertex 87.022 -13.815 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.125 -20.641 -11 - vertex 85.438 -13.498 -11 - vertex 86.214 -13.734 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -40.599 -11 - vertex 85.438 -13.498 -11 - vertex 93.125 -20.641 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 85.438 -13.498 -11 - vertex 73.166 -40.599 -11 - vertex 84.722 -13.119 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 79.666 2.457 -11 - vertex 82.877 13.323 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -2.543 -11 - vertex 82.877 -9.678 -11 - vertex 82.959 -10.486 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 79.632 2.137 -11 - vertex 79.666 2.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 79.533 1.833 -11 - vertex 79.632 2.137 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 79.377 1.555 -11 - vertex 79.533 1.833 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 79.173 1.31 -11 - vertex 79.377 1.555 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -2.543 -11 - vertex 82.959 -10.486 -11 - vertex 83.197 -11.261 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 78.928 1.106 -11 - vertex 79.173 1.31 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 78.65 0.950999 -11 - vertex 78.928 1.106 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 78.347 0.851999 -11 - vertex 78.65 0.950999 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 78.026 0.816999 -11 - vertex 82.877 -9.678 -11 - vertex 73.166 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 82.877 -9.678 -11 - vertex 78.026 0.816999 -11 - vertex 78.347 0.851999 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 78.026 0.816999 -11 - vertex 73.166 -2.543 -11 - vertex 77.705 0.851999 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 77.705 0.851999 -11 - vertex 73.166 -2.543 -11 - vertex 77.401 0.950999 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 77.401 0.950999 -11 - vertex 73.166 -2.543 -11 - vertex 77.121 1.106 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 77.121 1.106 -11 - vertex 73.166 -2.543 -11 - vertex 76.874 1.31 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 76.874 1.31 -11 - vertex 73.166 -2.543 -11 - vertex 76.669 1.555 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 76.512 1.833 -11 - vertex 73.166 -2.543 -11 - vertex 76.412 2.137 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 76.669 1.555 -11 - vertex 73.166 -2.543 -11 - vertex 76.512 1.833 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 83.58 -11.978 -11 - vertex 73.166 -2.543 -11 - vertex 83.197 -11.261 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 -2.543 -11 - vertex 83.58 -11.978 -11 - vertex 73.166 -40.599 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 84.094 -12.606 -11 - vertex 73.166 -40.599 -11 - vertex 83.58 -11.978 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 84.722 -13.119 -11 - vertex 73.166 -40.599 -11 - vertex 84.094 -12.606 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.921 1.106 -11 - vertex 103.161 -10.542 -11 - vertex 103.02 -10.542 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.161 -10.542 -11 - vertex 99.66 2.457 -11 - vertex 103.161 15.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 99.526 3.081 -11 - vertex 103.161 15.457 -11 - vertex 99.625 2.778 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 99.371 3.359 -11 - vertex 103.161 15.457 -11 - vertex 99.526 3.081 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 99.166 3.604 -11 - vertex 103.161 15.457 -11 - vertex 99.371 3.359 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.921 3.808 -11 - vertex 103.161 15.457 -11 - vertex 99.166 3.604 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 103.161 15.457 -11 - vertex 98.921 3.808 -11 - vertex 103.02 15.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.643 3.964 -11 - vertex 103.02 15.457 -11 - vertex 98.921 3.808 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.34 4.063 -11 - vertex 103.02 15.457 -11 - vertex 98.643 3.964 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.02 4.098 -11 - vertex 103.02 15.457 -11 - vertex 98.34 4.063 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 98.02 4.098 -11 - vertex 97.699 4.063 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 97.699 4.063 -11 - vertex 97.396 3.964 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 97.396 3.964 -11 - vertex 97.118 3.808 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 97.118 3.808 -11 - vertex 96.873 3.604 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 96.873 3.604 -11 - vertex 96.669 3.359 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 96.669 3.359 -11 - vertex 96.513 3.081 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 96.379 2.457 -11 - vertex 93.16 -9.678 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 96.379 2.457 -11 - vertex 93.16 13.323 -11 - vertex 96.414 2.778 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.16 13.323 -11 - vertex 96.513 3.081 -11 - vertex 96.414 2.778 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 98.02 4.098 -11 - vertex 93.16 13.323 -11 - vertex 103.02 15.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 93.079 14.131 -11 - vertex 103.02 15.457 -11 - vertex 93.16 13.323 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 92.844 14.906 -11 - vertex 103.02 15.457 -11 - vertex 93.079 14.131 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 92.465 15.622 -11 - vertex 103.02 15.457 -11 - vertex 92.844 14.906 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.02 15.457 -11 - vertex 92.465 15.622 -11 - vertex 103.117 15.563 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 103.117 15.563 -11 - vertex 92.465 15.622 -11 - vertex 93.125 25.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 91.952 16.251 -11 - vertex 93.125 25.564 -11 - vertex 92.465 15.622 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 91.323 16.765 -11 - vertex 93.125 25.564 -11 - vertex 91.952 16.251 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 90.607 17.147 -11 - vertex 93.125 25.564 -11 - vertex 91.323 16.765 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 89.831 17.386 -11 - vertex 93.125 25.564 -11 - vertex 90.607 17.147 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 89.024 17.468 -11 - vertex 93.125 25.564 -11 - vertex 89.831 17.386 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 87.022 17.468 -11 - vertex 93.125 25.564 -11 - vertex 89.024 17.468 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 86.214 17.386 -11 - vertex 93.125 25.564 -11 - vertex 87.022 17.468 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 85.438 17.147 -11 - vertex 93.125 25.564 -11 - vertex 86.214 17.386 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 45.514 -11 - vertex 85.438 17.147 -11 - vertex 84.722 16.765 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 45.514 -11 - vertex 84.722 16.765 -11 - vertex 84.094 16.251 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 79.632 2.778 -11 - vertex 82.877 13.323 -11 - vertex 79.666 2.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 79.533 3.083 -11 - vertex 82.877 13.323 -11 - vertex 79.632 2.778 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 79.377 3.362 -11 - vertex 82.877 13.323 -11 - vertex 79.533 3.083 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 79.173 3.609 -11 - vertex 82.877 13.323 -11 - vertex 79.377 3.362 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 78.928 3.814 -11 - vertex 82.877 13.323 -11 - vertex 79.173 3.609 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 78.65 3.971 -11 - vertex 82.877 13.323 -11 - vertex 78.928 3.814 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 78.347 4.071 -11 - vertex 82.877 13.323 -11 - vertex 78.65 3.971 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 78.026 4.107 -11 - vertex 82.877 13.323 -11 - vertex 78.347 4.071 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.122 7.564 -11 - vertex 82.877 13.323 -11 - vertex 78.026 4.107 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 82.877 13.323 -11 - vertex 73.122 7.564 -11 - vertex 82.959 14.131 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 78.026 4.107 -11 - vertex 77.705 4.071 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 77.705 4.071 -11 - vertex 77.401 3.971 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 77.401 3.971 -11 - vertex 77.121 3.814 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 82.959 14.131 -11 - vertex 73.122 7.564 -11 - vertex 83.197 14.906 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 77.121 3.814 -11 - vertex 76.874 3.609 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 76.874 3.609 -11 - vertex 76.669 3.362 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 76.412 2.137 -11 - vertex 73.166 -2.543 -11 - vertex 76.377 2.457 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 73.166 7.458 -11 - vertex 76.377 2.457 -11 - vertex 73.166 -2.543 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 76.377 2.457 -11 - vertex 73.166 7.458 -11 - vertex 76.412 2.778 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 76.412 2.778 -11 - vertex 73.166 7.458 -11 - vertex 76.512 3.083 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 76.512 3.083 -11 - vertex 73.166 7.458 -11 - vertex 76.669 3.362 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 78.026 4.107 -11 - vertex 73.166 7.458 -11 - vertex 73.122 7.564 -11 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 83.197 14.906 -11 - vertex 73.122 7.564 -11 - vertex 83.58 15.622 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 53.12 27.558 -11 - vertex 83.58 15.622 -11 - vertex 73.122 7.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 53.12 27.558 -11 - vertex 84.094 16.251 -11 - vertex 83.58 15.622 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 85.438 17.147 -11 - vertex 73.166 45.514 -11 - vertex 93.125 25.564 -11 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 84.094 16.251 -11 - vertex 53.12 27.558 -11 - vertex 73.166 45.514 -11 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 73.122 7.564 -11 - vertex 73.166 7.458 -11 - vertex 73.016 7.458 -11 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -74.921 87.6 -5 - vertex -99.88 112.559 -11 - vertex -99.88 112.559 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -99.88 112.559 -11 - vertex -74.921 87.6 -5 - vertex -74.921 87.6 -11 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -107.121 -100.536 -5 - vertex -106.98 -104.54 -5 - vertex -106.98 -100.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -107.121 -100.536 -5 - vertex -107.121 -104.54 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -107.121 109.464 -5 - vertex -106.98 105.46 -5 - vertex -106.98 109.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 105.46 -5 - vertex -107.121 109.464 -5 - vertex -107.121 105.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -104.078 112.559 -5 - vertex -107.077 109.561 -5 - vertex -106.98 109.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 -107.539 -5 - vertex -106.98 -104.54 -5 - vertex -104.078 -107.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -104.078 -107.636 -5 - vertex -106.98 -104.54 -5 - vertex -107.077 -104.637 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -103.981 112.462 -5 - vertex -99.977 112.453 -5 - vertex -99.977 112.603 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -100.329 108.106 -5 - vertex -100.125 107.861 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -100.574 108.31 -5 - vertex -100.329 108.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -100.852 108.466 -5 - vertex -100.574 108.31 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -101.156 108.565 -5 - vertex -100.852 108.466 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -101.476 108.599 -5 - vertex -101.156 108.565 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -101.797 108.565 -5 - vertex -101.476 108.599 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 112.453 -5 - vertex -103.981 112.462 -5 - vertex -101.797 108.565 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -101.797 108.565 -5 - vertex -103.981 112.462 -5 - vertex -102.1 108.466 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.1 108.466 -5 - vertex -103.981 112.462 -5 - vertex -102.378 108.31 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.378 108.31 -5 - vertex -103.981 112.462 -5 - vertex -102.623 108.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.828 107.861 -5 - vertex -106.98 109.464 -5 - vertex -102.983 107.583 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.623 108.106 -5 - vertex -106.98 109.464 -5 - vertex -102.828 107.861 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -106.98 109.464 -5 - vertex -102.623 108.106 -5 - vertex -103.981 112.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 112.462 -5 - vertex -99.977 112.603 -5 - vertex -103.981 112.603 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -74.912 -82.677 -5 - vertex -99.871 -101.715 -5 - vertex -99.836 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -99.97 -101.412 -5 - vertex -99.871 -101.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -100.125 -101.134 -5 - vertex -99.97 -101.412 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -100.329 -100.888 -5 - vertex -100.125 -101.134 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -100.574 -100.684 -5 - vertex -100.329 -100.888 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -100.852 -100.529 -5 - vertex -100.574 -100.684 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -101.156 -100.43 -5 - vertex -100.852 -100.529 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -101.476 -100.395 -5 - vertex -101.156 -100.43 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -101.797 -100.43 -5 - vertex -101.476 -100.395 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -107.077 -100.439 -5 - vertex -101.797 -100.43 -5 - vertex -87.118 -80.481 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -101.797 -100.43 -5 - vertex -107.077 -100.439 -5 - vertex -102.1 -100.529 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.1 -100.529 -5 - vertex -107.077 -100.439 -5 - vertex -102.378 -100.684 -5 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -106.98 -100.536 -5 - vertex -102.378 -100.684 -5 - vertex -107.077 -100.439 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -100.536 -5 - vertex -103.117 -102.035 -5 - vertex -103.082 -101.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -103.117 -102.035 -5 - vertex -106.98 -100.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.623 -103.187 -5 - vertex -106.98 -104.54 -5 - vertex -103.981 -107.539 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.983 -101.412 -5 - vertex -106.98 -100.536 -5 - vertex -103.082 -101.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.828 -101.134 -5 - vertex -106.98 -100.536 -5 - vertex -102.983 -101.412 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.378 -100.684 -5 - vertex -106.98 -100.536 -5 - vertex -102.623 -100.888 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.623 -100.888 -5 - vertex -106.98 -100.536 -5 - vertex -102.828 -101.134 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -97.119 -50.539 -5 - vertex -93.618 -32.538 -5 - vertex -97.119 -12.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.618 -32.538 -5 - vertex -97.119 -50.539 -5 - vertex -96.978 -50.539 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -97.119 17.459 -5 - vertex -93.618 37.462 -5 - vertex -97.119 55.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.618 37.462 -5 - vertex -97.119 17.459 -5 - vertex -96.978 17.459 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.626 36.56 -5 - vertex -87.118 26.464 -5 - vertex -90.471 36.838 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.831 36.315 -5 - vertex -87.118 26.464 -5 - vertex -90.626 36.56 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.076 36.111 -5 - vertex -87.118 26.464 -5 - vertex -90.831 36.315 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.354 35.955 -5 - vertex -87.118 26.464 -5 - vertex -91.076 36.111 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.657 35.856 -5 - vertex -87.118 26.464 -5 - vertex -91.354 35.955 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.978 35.821 -5 - vertex -87.118 26.464 -5 - vertex -91.657 35.856 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.298 35.856 -5 - vertex -87.118 26.464 -5 - vertex -91.978 35.821 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.602 35.955 -5 - vertex -87.118 26.464 -5 - vertex -92.298 35.856 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -87.118 26.464 -5 - vertex -92.602 35.955 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 26.464 -5 - vertex -96.978 17.459 -5 - vertex -87.037 25.656 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -92.602 35.955 -5 - vertex -92.88 36.111 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -92.88 36.111 -5 - vertex -93.125 36.315 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -93.125 36.315 -5 - vertex -93.329 36.56 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -93.329 36.56 -5 - vertex -93.484 36.838 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 17.459 -5 - vertex -93.484 36.838 -5 - vertex -93.583 37.141 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.583 37.782 -5 - vertex -97.119 55.462 -5 - vertex -93.618 37.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.618 37.462 -5 - vertex -96.978 17.459 -5 - vertex -93.583 37.141 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.037 25.656 -5 - vertex -96.978 17.459 -5 - vertex -87.118 7.405 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -96.978 17.459 -5 - vertex -97.075 17.362 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.626 -33.44 -5 - vertex -87.118 -43.536 -5 - vertex -90.471 -33.162 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.831 -33.685 -5 - vertex -87.118 -43.536 -5 - vertex -90.626 -33.44 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.076 -33.889 -5 - vertex -87.118 -43.536 -5 - vertex -90.831 -33.685 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.354 -34.045 -5 - vertex -87.118 -43.536 -5 - vertex -91.076 -33.889 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.657 -34.144 -5 - vertex -87.118 -43.536 -5 - vertex -91.354 -34.045 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -91.978 -34.179 -5 - vertex -87.118 -43.536 -5 - vertex -91.657 -34.144 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.298 -34.144 -5 - vertex -87.118 -43.536 -5 - vertex -91.978 -34.179 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.602 -34.045 -5 - vertex -87.118 -43.536 -5 - vertex -92.298 -34.144 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -87.118 -43.536 -5 - vertex -92.602 -34.045 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -43.536 -5 - vertex -96.978 -50.539 -5 - vertex -87.037 -44.344 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -92.602 -34.045 -5 - vertex -92.88 -33.889 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -92.88 -33.889 -5 - vertex -93.125 -33.685 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -93.125 -33.685 -5 - vertex -93.329 -33.44 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -93.329 -33.44 -5 - vertex -93.484 -33.162 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -96.978 -50.539 -5 - vertex -93.484 -33.162 -5 - vertex -93.583 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.583 -32.218 -5 - vertex -97.119 -12.536 -5 - vertex -93.618 -32.538 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.618 -32.538 -5 - vertex -96.978 -50.539 -5 - vertex -93.583 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.037 -44.344 -5 - vertex -96.978 -50.539 -5 - vertex -87.118 -60.593 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -96.978 -50.539 -5 - vertex -97.075 -50.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -74.921 87.6 -5 - vertex -99.87 106.638 -5 - vertex -87.118 85.404 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -99.969 106.335 -5 - vertex -87.118 85.404 -5 - vertex -99.87 106.638 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.125 106.057 -5 - vertex -87.118 85.404 -5 - vertex -99.969 106.335 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.329 105.812 -5 - vertex -87.118 85.404 -5 - vertex -100.125 106.057 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.574 105.608 -5 - vertex -87.118 85.404 -5 - vertex -100.329 105.812 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.852 105.452 -5 - vertex -87.118 85.404 -5 - vertex -100.574 105.608 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -101.156 105.353 -5 - vertex -87.118 85.404 -5 - vertex -100.852 105.452 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -101.476 105.319 -5 - vertex -87.118 85.404 -5 - vertex -101.156 105.353 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -101.797 105.353 -5 - vertex -87.118 85.404 -5 - vertex -101.476 105.319 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -107.077 105.363 -5 - vertex -101.797 105.353 -5 - vertex -102.1 105.452 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -107.077 105.363 -5 - vertex -102.1 105.452 -5 - vertex -102.378 105.608 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 105.46 -5 - vertex -102.378 105.608 -5 - vertex -102.623 105.812 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 105.46 -5 - vertex -102.623 105.812 -5 - vertex -102.827 106.057 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.983 107.583 -5 - vertex -106.98 109.464 -5 - vertex -103.082 107.28 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 105.46 -5 - vertex -103.082 107.28 -5 - vertex -106.98 109.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 109.464 -5 - vertex -103.981 112.462 -5 - vertex -104.078 112.559 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.082 107.28 -5 - vertex -106.98 105.46 -5 - vertex -103.117 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.117 106.959 -5 - vertex -106.98 105.46 -5 - vertex -103.082 106.638 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.082 106.638 -5 - vertex -106.98 105.46 -5 - vertex -102.983 106.335 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.983 106.335 -5 - vertex -106.98 105.46 -5 - vertex -102.827 106.057 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -102.378 105.608 -5 - vertex -106.98 105.46 -5 - vertex -107.077 105.363 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -101.797 105.353 -5 - vertex -107.077 105.363 -5 - vertex -87.118 85.404 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -86.423 51.764 -5 - vertex -96.978 55.462 -5 - vertex -86.802 51.048 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -86.802 51.048 -5 - vertex -96.978 55.462 -5 - vertex -87.037 50.273 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.037 50.273 -5 - vertex -96.978 55.462 -5 - vertex -87.118 49.465 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -90.337 37.462 -5 - vertex -87.118 49.465 -5 - vertex -90.372 37.782 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.372 37.141 -5 - vertex -87.118 26.464 -5 - vertex -90.337 37.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -90.337 37.462 -5 - vertex -87.118 26.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -90.471 38.086 -5 - vertex -90.372 37.782 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -90.626 38.364 -5 - vertex -90.471 38.086 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -90.831 38.609 -5 - vertex -90.626 38.364 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -91.076 38.813 -5 - vertex -90.831 38.609 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -92.602 38.968 -5 - vertex -87.118 49.465 -5 - vertex -96.978 55.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -91.354 38.968 -5 - vertex -91.076 38.813 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -91.657 39.067 -5 - vertex -91.354 38.968 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -91.978 39.102 -5 - vertex -91.657 39.067 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -92.298 39.067 -5 - vertex -91.978 39.102 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 49.465 -5 - vertex -92.602 38.968 -5 - vertex -92.298 39.067 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.602 38.968 -5 - vertex -96.978 55.462 -5 - vertex -92.88 38.813 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -97.119 55.462 -5 - vertex -92.88 38.813 -5 - vertex -96.978 55.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.88 38.813 -5 - vertex -97.119 55.462 -5 - vertex -93.125 38.609 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.125 38.609 -5 - vertex -97.119 55.462 -5 - vertex -93.329 38.364 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.484 38.086 -5 - vertex -97.119 55.462 -5 - vertex -93.583 37.782 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.329 38.364 -5 - vertex -97.119 55.462 -5 - vertex -93.484 38.086 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -96.978 55.462 -5 - vertex -87.118 65.516 -5 - vertex -97.075 55.559 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.985 -2.543 -5 - vertex -77.117 -2.543 -5 - vertex -77.082 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 -22.546 -5 - vertex -57.079 -22.643 -5 - vertex -56.982 -22.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.883 27.558 -5 - vertex -36.98 27.602 -5 - vertex -36.98 27.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -70.828 38.609 -5 - vertex -76.917 50.273 -5 - vertex -76.835 49.465 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -77.155 51.048 -5 - vertex -76.917 50.273 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -77.538 51.764 -5 - vertex -77.155 51.048 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -78.052 52.393 -5 - vertex -77.538 51.764 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -78.681 52.907 -5 - vertex -78.052 52.393 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -79.397 53.29 -5 - vertex -78.681 52.907 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -87.118 65.516 -5 - vertex -79.397 53.29 -5 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -74.921 87.6 -5 - vertex -87.118 65.516 -5 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -79.397 53.29 -5 - vertex -87.118 65.516 -5 - vertex -80.172 53.528 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -80.172 53.528 -5 - vertex -87.118 65.516 -5 - vertex -80.98 53.61 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -80.98 53.61 -5 - vertex -87.118 65.516 -5 - vertex -82.982 53.61 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -82.982 53.61 -5 - vertex -87.118 65.516 -5 - vertex -83.79 53.528 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -83.79 53.528 -5 - vertex -87.118 65.516 -5 - vertex -84.565 53.29 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -84.565 53.29 -5 - vertex -87.118 65.516 -5 - vertex -85.281 52.907 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -96.978 55.462 -5 - vertex -85.281 52.907 -5 - vertex -87.118 65.516 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -85.91 52.393 -5 - vertex -96.978 55.462 -5 - vertex -86.423 51.764 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -85.281 52.907 -5 - vertex -96.978 55.462 -5 - vertex -85.91 52.393 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -99.87 106.638 -5 - vertex -74.921 87.6 -5 - vertex -99.836 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -74.921 87.6 -5 - vertex -99.871 107.28 -5 - vertex -99.836 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.88 112.559 -5 - vertex -99.871 107.28 -5 - vertex -74.921 87.6 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.88 112.559 -5 - vertex -99.97 107.583 -5 - vertex -99.871 107.28 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -100.125 107.861 -5 - vertex -99.88 112.559 -5 - vertex -99.977 112.453 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.88 112.559 -5 - vertex -100.125 107.861 -5 - vertex -99.97 107.583 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -70.828 -33.685 -5 - vertex -76.917 -44.344 -5 - vertex -65.078 -72.437 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -77.155 -45.119 -5 - vertex -65.078 -72.437 -5 - vertex -76.917 -44.344 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -77.538 -45.835 -5 - vertex -65.078 -72.437 -5 - vertex -77.155 -45.119 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -78.052 -46.464 -5 - vertex -65.078 -72.437 -5 - vertex -77.538 -45.835 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -78.681 -46.978 -5 - vertex -65.078 -72.437 -5 - vertex -78.052 -46.464 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -79.397 -47.361 -5 - vertex -65.078 -72.437 -5 - vertex -78.681 -46.978 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 -72.437 -5 - vertex -79.397 -47.361 -5 - vertex -87.118 -60.593 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -79.397 -47.361 -5 - vertex -80.172 -47.599 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -80.172 -47.599 -5 - vertex -80.98 -47.681 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -80.98 -47.681 -5 - vertex -82.982 -47.681 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -82.982 -47.681 -5 - vertex -83.79 -47.599 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -83.79 -47.599 -5 - vertex -84.565 -47.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -84.565 -47.361 -5 - vertex -85.281 -46.978 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -85.281 -46.978 -5 - vertex -85.91 -46.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -85.91 -46.464 -5 - vertex -86.423 -45.835 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -86.423 -45.835 -5 - vertex -86.802 -45.119 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.372 -32.859 -5 - vertex -87.118 -43.536 -5 - vertex -90.337 -32.538 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -60.593 -5 - vertex -86.802 -45.119 -5 - vertex -87.037 -44.344 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 -72.437 -5 - vertex -87.118 -60.593 -5 - vertex -74.912 -82.677 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -87.118 -80.481 -5 - vertex -74.912 -82.677 -5 - vertex -87.118 -60.593 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.871 -101.715 -5 - vertex -74.912 -82.677 -5 - vertex -87.118 -80.481 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.87 -102.356 -5 - vertex -74.912 -82.677 -5 - vertex -99.836 -102.035 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -99.87 -102.356 -5 - vertex -99.88 -107.636 -5 - vertex -74.912 -82.677 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -99.969 -102.661 -5 - vertex -99.88 -107.636 -5 - vertex -99.87 -102.356 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.125 -102.94 -5 - vertex -99.88 -107.636 -5 - vertex -99.969 -102.661 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.88 -107.636 -5 - vertex -100.125 -102.94 -5 - vertex -99.977 -107.539 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.329 -103.187 -5 - vertex -99.977 -107.539 -5 - vertex -100.125 -102.94 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.574 -103.393 -5 - vertex -99.977 -107.539 -5 - vertex -100.329 -103.187 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -100.852 -103.549 -5 - vertex -99.977 -107.539 -5 - vertex -100.574 -103.393 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -101.156 -103.65 -5 - vertex -99.977 -107.539 -5 - vertex -100.852 -103.549 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -101.476 -103.685 -5 - vertex -99.977 -107.539 -5 - vertex -101.156 -103.65 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -101.797 -103.65 -5 - vertex -99.977 -107.539 -5 - vertex -101.476 -103.685 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 -107.539 -5 - vertex -99.977 -107.539 -5 - vertex -101.797 -103.65 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 -107.539 -5 - vertex -101.797 -103.65 -5 - vertex -102.1 -103.549 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 -107.539 -5 - vertex -102.1 -103.549 -5 - vertex -102.378 -103.393 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -103.981 -107.539 -5 - vertex -102.378 -103.393 -5 - vertex -102.623 -103.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -102.623 -103.187 -5 - vertex -102.827 -102.94 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -103.082 -102.356 -5 - vertex -103.117 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -102.983 -102.661 -5 - vertex -103.082 -102.356 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -106.98 -104.54 -5 - vertex -102.827 -102.94 -5 - vertex -102.983 -102.661 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 -107.539 -5 - vertex -103.981 -107.539 -5 - vertex -99.977 -107.68 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -99.977 -107.68 -5 - vertex -103.981 -107.539 -5 - vertex -103.981 -107.68 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.976 7.458 -5 - vertex -77.082 7.564 -5 - vertex -77.117 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -64.981 -72.534 -5 - vertex -65.078 -72.437 -5 - vertex -64.981 -72.684 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.462 -5 - vertex -25.082 37.365 -5 - vertex -24.976 37.321 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 -2.543 -5 - vertex -16.977 -2.543 -5 - vertex -16.88 -2.64 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.172 21.313 -5 - vertex 22.922 7.564 -5 - vertex 4.377 21.558 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 4.631 -18.221 -5 - vertex 4.666 -18.542 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.922 7.564 -5 - vertex 4.172 21.313 -5 - vertex 22.878 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 4.532 -17.918 -5 - vertex 4.631 -18.221 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.927 21.109 -5 - vertex 22.878 7.458 -5 - vertex 4.172 21.313 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 4.377 -17.64 -5 - vertex 4.532 -17.918 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.649 20.953 -5 - vertex 22.878 7.458 -5 - vertex 3.927 21.109 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 4.172 -17.395 -5 - vertex 4.377 -17.64 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.346 20.854 -5 - vertex 22.878 7.458 -5 - vertex 3.649 20.953 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 3.927 -17.191 -5 - vertex 4.172 -17.395 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 7.458 -5 - vertex 3.346 20.854 -5 - vertex 22.878 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 3.649 -17.035 -5 - vertex 3.927 -17.191 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.025 20.819 -5 - vertex 22.878 -2.543 -5 - vertex 3.346 20.854 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 3.346 -16.936 -5 - vertex 3.649 -17.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.025 -16.901 -5 - vertex 22.878 -2.543 -5 - vertex 3.025 20.819 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.878 -2.543 -5 - vertex 3.025 -16.901 -5 - vertex 3.346 -16.936 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 -2.543 -5 - vertex 3.025 20.819 -5 - vertex 2.705 20.854 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.025 20.819 -5 - vertex -16.836 -2.543 -5 - vertex 3.025 -16.901 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 7.458 -5 - vertex 2.705 20.854 -5 - vertex 2.401 20.953 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.025 -16.901 -5 - vertex -16.836 -2.543 -5 - vertex 2.705 -16.936 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 7.458 -5 - vertex 2.401 20.953 -5 - vertex 2.123 21.109 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.705 -16.936 -5 - vertex -16.836 -2.543 -5 - vertex 2.401 -17.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 7.458 -5 - vertex 2.123 21.109 -5 - vertex 1.878 21.313 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.401 -17.035 -5 - vertex -16.836 -2.543 -5 - vertex 2.123 -17.191 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.88 7.564 -5 - vertex 1.878 21.313 -5 - vertex 1.674 21.558 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -16.88 -2.64 -5 - vertex 2.123 -17.191 -5 - vertex -16.836 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.88 7.564 -5 - vertex 1.674 21.558 -5 - vertex 1.519 21.836 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.123 -17.191 -5 - vertex -16.88 -2.64 -5 - vertex 1.878 -17.395 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.88 7.564 -5 - vertex 1.519 21.836 -5 - vertex 1.42 22.139 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.878 -17.395 -5 - vertex -16.88 -2.64 -5 - vertex 1.674 -17.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.88 7.564 -5 - vertex 1.42 22.139 -5 - vertex 1.385 22.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.674 -17.64 -5 - vertex -16.88 -2.64 -5 - vertex 1.519 -17.918 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.836 7.458 -5 - vertex -16.88 7.564 -5 - vertex -16.977 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.019 -2.543 -5 - vertex 22.878 -2.543 -5 - vertex 22.922 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 43.022 -22.537 -5 - vertex 42.925 -22.643 -5 - vertex 43.022 -22.678 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 31.124 -32.441 -5 - vertex 73.166 -40.599 -5 - vertex 53.023 -22.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 53.023 -22.678 -5 - vertex 53.12 -22.643 -5 - vertex 53.023 -22.537 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -40.599 -5 - vertex 31.124 -32.441 -5 - vertex 73.166 -60.487 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.124 -32.441 -5 - vertex 53.023 -22.678 -5 - vertex 43.022 -22.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.124 -32.441 -5 - vertex 43.022 -22.678 -5 - vertex 42.925 -22.643 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -60.487 -5 - vertex 31.124 -32.441 -5 - vertex 71.12 -72.437 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 42.925 -22.643 -5 - vertex 31.018 -32.397 -5 - vertex 31.124 -32.441 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.922 -2.64 -5 - vertex 31.018 -32.397 -5 - vertex 42.925 -22.643 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.666 -18.542 -5 - vertex 22.922 -2.64 -5 - vertex 22.878 -2.543 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.377 21.558 -5 - vertex 22.922 7.564 -5 - vertex 4.532 21.836 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.922 -2.64 -5 - vertex 4.666 -18.542 -5 - vertex 31.018 -32.397 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.631 -18.862 -5 - vertex 31.018 -32.397 -5 - vertex 4.666 -18.542 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.532 -19.166 -5 - vertex 31.018 -32.397 -5 - vertex 4.631 -18.862 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.377 -19.444 -5 - vertex 31.018 -32.397 -5 - vertex 4.532 -19.166 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.172 -19.689 -5 - vertex 31.018 -32.397 -5 - vertex 4.377 -19.444 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.927 -19.893 -5 - vertex 31.018 -32.397 -5 - vertex 4.172 -19.689 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.649 -20.048 -5 - vertex 31.018 -32.397 -5 - vertex 3.927 -19.893 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.346 -20.147 -5 - vertex 31.018 -32.397 -5 - vertex 3.649 -20.048 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.025 -20.182 -5 - vertex 31.018 -32.397 -5 - vertex 3.346 -20.147 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 -32.397 -5 - vertex 3.025 -20.182 -5 - vertex 2.705 -20.147 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 -32.397 -5 - vertex 2.705 -20.147 -5 - vertex 2.401 -20.048 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.519 -17.918 -5 - vertex -16.88 -2.64 -5 - vertex 1.42 -18.221 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.42 -18.221 -5 - vertex -16.88 -2.64 -5 - vertex 1.385 -18.542 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 -32.397 -5 - vertex 1.385 -18.542 -5 - vertex -16.88 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.385 -18.542 -5 - vertex -24.976 -32.397 -5 - vertex 1.42 -18.862 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.42 -18.862 -5 - vertex -24.976 -32.397 -5 - vertex 1.519 -19.166 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.519 -19.166 -5 - vertex -24.976 -32.397 -5 - vertex 1.674 -19.444 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.025 -20.182 -5 - vertex -24.976 -32.397 -5 - vertex 31.018 -32.397 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.123 -19.893 -5 - vertex -24.976 -32.397 -5 - vertex 2.401 -20.048 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.878 -19.689 -5 - vertex -24.976 -32.397 -5 - vertex 2.123 -19.893 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.674 -19.444 -5 - vertex -24.976 -32.397 -5 - vertex 1.878 -19.689 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 -32.397 -5 - vertex -25.082 -32.441 -5 - vertex -24.976 -32.538 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -36.883 -22.643 -5 - vertex -24.976 -32.397 -5 - vertex -16.88 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 -32.397 -5 - vertex -36.883 -22.643 -5 - vertex -25.082 -32.441 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.98 -22.678 -5 - vertex -36.883 -22.643 -5 - vertex -36.98 -22.537 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -36.98 -22.678 -5 - vertex -25.082 -32.441 -5 - vertex -36.883 -22.643 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -56.982 -22.678 -5 - vertex -25.082 -32.441 -5 - vertex -36.98 -22.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -70.624 -33.44 -5 - vertex -25.082 -32.441 -5 - vertex -56.982 -22.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -70.335 -32.538 -5 - vertex -56.982 -22.678 -5 - vertex -57.079 -22.643 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 -22.678 -5 - vertex -70.335 -32.538 -5 - vertex -70.369 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -70.369 -32.218 -5 - vertex -70.335 -32.538 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -70.468 -31.914 -5 - vertex -70.369 -32.218 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -70.624 -31.636 -5 - vertex -70.468 -31.914 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -70.828 -31.391 -5 - vertex -70.624 -31.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -71.073 -31.187 -5 - vertex -70.828 -31.391 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -71.351 -31.032 -5 - vertex -71.073 -31.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -20.544 -5 - vertex -71.351 -31.032 -5 - vertex -57.079 -22.643 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.351 -31.032 -5 - vertex -76.835 -20.544 -5 - vertex -71.655 -30.933 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.655 -30.933 -5 - vertex -76.835 -20.544 -5 - vertex -71.975 -30.898 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.975 -30.898 -5 - vertex -76.835 -20.544 -5 - vertex -72.296 -30.933 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.616 -32.538 -5 - vertex -76.835 -43.536 -5 - vertex -73.581 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.581 -32.218 -5 - vertex -76.835 -20.544 -5 - vertex -73.616 -32.538 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.482 -31.914 -5 - vertex -76.835 -20.544 -5 - vertex -73.581 -32.218 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.326 -31.636 -5 - vertex -76.835 -20.544 -5 - vertex -73.482 -31.914 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.122 -31.391 -5 - vertex -76.835 -20.544 -5 - vertex -73.326 -31.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.877 -31.187 -5 - vertex -76.835 -20.544 -5 - vertex -73.122 -31.391 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.599 -31.032 -5 - vertex -76.835 -20.544 -5 - vertex -72.877 -31.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.296 -30.933 -5 - vertex -76.835 -20.544 -5 - vertex -72.599 -31.032 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -76.917 -19.735 -5 - vertex -76.835 -20.544 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -77.538 -18.237 -5 - vertex -57.079 -22.643 -5 - vertex -77.082 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -2.482 -5 - vertex -77.082 -2.64 -5 - vertex -77.117 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -77.155 -18.956 -5 - vertex -76.917 -19.735 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -78.681 23.023 -5 - vertex -77.082 7.564 -5 - vertex -78.052 23.536 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -79.397 22.644 -5 - vertex -77.082 7.564 -5 - vertex -78.681 23.023 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 -22.643 -5 - vertex -77.538 -18.237 -5 - vertex -77.155 -18.956 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -80.172 22.408 -5 - vertex -77.082 7.564 -5 - vertex -79.397 22.644 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -78.052 -17.607 -5 - vertex -77.538 -18.237 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -80.98 22.328 -5 - vertex -77.082 7.564 -5 - vertex -80.172 22.408 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -87.118 -2.482 -5 - vertex -77.117 -2.543 -5 - vertex -87.118 7.405 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.117 7.458 -5 - vertex -87.118 7.405 -5 - vertex -77.117 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -87.118 -2.482 -5 - vertex -82.982 -16.399 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -82.982 22.328 -5 - vertex -77.082 7.564 -5 - vertex -80.98 22.328 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -78.681 -17.094 -5 - vertex -78.052 -17.607 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -77.082 7.564 -5 - vertex -82.982 22.328 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -79.397 -16.715 -5 - vertex -78.681 -17.094 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 7.564 -5 - vertex -87.118 7.405 -5 - vertex -77.117 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -80.172 -16.479 -5 - vertex -79.397 -16.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -82.982 22.328 -5 - vertex -83.79 22.408 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -80.98 -16.399 -5 - vertex -80.172 -16.479 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -83.79 22.408 -5 - vertex -84.565 22.644 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.082 -2.64 -5 - vertex -82.982 -16.399 -5 - vertex -80.98 -16.399 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -84.565 22.644 -5 - vertex -85.281 23.023 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -82.982 -16.399 -5 - vertex -87.118 -2.482 -5 - vertex -83.79 -16.479 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -85.281 23.023 -5 - vertex -85.91 23.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -83.79 -16.479 -5 - vertex -87.118 -2.482 -5 - vertex -84.565 -16.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -85.91 23.536 -5 - vertex -86.423 24.165 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -84.565 -16.715 -5 - vertex -87.118 -2.482 -5 - vertex -85.281 -17.094 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -86.423 24.165 -5 - vertex -86.802 24.881 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -96.978 -12.536 -5 - vertex -85.281 -17.094 -5 - vertex -87.118 -2.482 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 7.405 -5 - vertex -86.802 24.881 -5 - vertex -87.037 25.656 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -85.281 -17.094 -5 - vertex -96.978 -12.536 -5 - vertex -85.91 -17.607 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.471 36.838 -5 - vertex -87.118 26.464 -5 - vertex -90.372 37.141 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -85.91 -17.607 -5 - vertex -96.978 -12.536 -5 - vertex -86.423 -18.237 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -86.423 -18.237 -5 - vertex -96.978 -12.536 -5 - vertex -86.802 -18.956 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -86.802 -18.956 -5 - vertex -96.978 -12.536 -5 - vertex -87.037 -19.735 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.037 -19.735 -5 - vertex -96.978 -12.536 -5 - vertex -87.118 -20.544 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -90.337 -32.538 -5 - vertex -87.118 -20.544 -5 - vertex -90.372 -32.218 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -90.471 -33.162 -5 - vertex -87.118 -43.536 -5 - vertex -90.372 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -90.337 -32.538 -5 - vertex -87.118 -43.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -90.471 -31.914 -5 - vertex -90.372 -32.218 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -90.626 -31.636 -5 - vertex -90.471 -31.914 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -90.831 -31.391 -5 - vertex -90.626 -31.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -91.076 -31.187 -5 - vertex -90.831 -31.391 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -92.602 -31.032 -5 - vertex -87.118 -20.544 -5 - vertex -96.978 -12.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -91.354 -31.032 -5 - vertex -91.076 -31.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -91.657 -30.933 -5 - vertex -91.354 -31.032 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -91.978 -30.898 -5 - vertex -91.657 -30.933 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -92.298 -30.933 -5 - vertex -91.978 -30.898 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 -20.544 -5 - vertex -92.602 -31.032 -5 - vertex -92.298 -30.933 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -97.119 -12.536 -5 - vertex -92.602 -31.032 -5 - vertex -96.978 -12.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.602 -31.032 -5 - vertex -97.119 -12.536 -5 - vertex -92.88 -31.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -92.88 -31.187 -5 - vertex -97.119 -12.536 -5 - vertex -93.125 -31.391 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.125 -31.391 -5 - vertex -97.119 -12.536 -5 - vertex -93.329 -31.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.484 -31.914 -5 - vertex -97.119 -12.536 -5 - vertex -93.583 -32.218 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -93.329 -31.636 -5 - vertex -97.119 -12.536 -5 - vertex -93.484 -31.914 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -96.978 -12.536 -5 - vertex -87.118 -2.482 -5 - vertex -97.075 -12.439 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 7.458 -5 - vertex 73.122 7.564 -5 - vertex 73.016 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 83.58 15.622 -5 - vertex 53.12 27.558 -5 - vertex 73.122 7.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 65.402 -5 - vertex 43.119 49.359 -5 - vertex 53.12 27.558 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 53.12 27.558 -5 - vertex 43.119 49.359 -5 - vertex 53.023 27.602 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 41.125 47.357 -5 - vertex 53.023 27.602 -5 - vertex 43.119 49.359 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 43.022 27.602 -5 - vertex 42.925 27.558 -5 - vertex 43.022 27.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 53.023 27.602 -5 - vertex 41.125 47.357 -5 - vertex 43.022 27.602 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 31.124 37.365 -5 - vertex 43.022 27.602 -5 - vertex 41.125 47.357 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 43.022 27.602 -5 - vertex 31.124 37.365 -5 - vertex 42.925 27.558 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 31.124 37.365 -5 - vertex 31.018 37.462 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 42.925 27.558 -5 - vertex 31.124 37.365 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 22.922 7.564 -5 - vertex 42.925 27.558 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.666 22.46 -5 - vertex 22.922 7.564 -5 - vertex 31.018 37.321 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.532 21.836 -5 - vertex 22.922 7.564 -5 - vertex 4.631 22.139 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.631 22.139 -5 - vertex 22.922 7.564 -5 - vertex 4.666 22.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 4.631 22.78 -5 - vertex 4.666 22.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 4.532 23.084 -5 - vertex 4.631 22.78 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 4.377 23.362 -5 - vertex 4.532 23.084 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 4.172 23.607 -5 - vertex 4.377 23.362 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 3.927 23.811 -5 - vertex 4.172 23.607 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 3.649 23.966 -5 - vertex 3.927 23.811 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 3.346 24.066 -5 - vertex 3.649 23.966 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.018 37.321 -5 - vertex 3.025 24.1 -5 - vertex 3.346 24.066 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 3.025 24.1 -5 - vertex 31.018 37.321 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.025 24.1 -5 - vertex -24.976 37.321 -5 - vertex 2.705 24.066 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.705 20.854 -5 - vertex -16.836 7.458 -5 - vertex -16.836 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 1.385 22.46 -5 - vertex 1.42 22.78 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 1.42 22.78 -5 - vertex 1.519 23.084 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 1.519 23.084 -5 - vertex 1.674 23.362 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 1.674 23.362 -5 - vertex 1.878 23.607 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.878 21.313 -5 - vertex -16.88 7.564 -5 - vertex -16.836 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.705 24.066 -5 - vertex -24.976 37.321 -5 - vertex 2.401 23.966 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 2.123 23.811 -5 - vertex 2.401 23.966 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex 1.878 23.607 -5 - vertex 2.123 23.811 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.385 22.46 -5 - vertex -24.976 37.321 -5 - vertex -16.88 7.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.883 27.558 -5 - vertex -24.976 37.321 -5 - vertex -25.082 37.365 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.976 37.321 -5 - vertex -36.883 27.558 -5 - vertex -16.88 7.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.082 37.365 -5 - vertex -36.98 27.602 -5 - vertex -36.883 27.558 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.082 37.365 -5 - vertex -56.982 27.602 -5 - vertex -36.98 27.602 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 27.602 -5 - vertex -57.079 27.558 -5 - vertex -56.982 27.46 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.624 38.364 -5 - vertex -25.082 37.365 -5 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.082 37.365 -5 - vertex -70.624 38.364 -5 - vertex -56.982 27.602 -5 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -70.468 38.086 -5 - vertex -56.982 27.602 -5 - vertex -70.624 38.364 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 27.602 -5 - vertex -70.369 37.141 -5 - vertex -57.079 27.558 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.468 36.838 -5 - vertex -57.079 27.558 -5 - vertex -70.369 37.141 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.624 36.56 -5 - vertex -57.079 27.558 -5 - vertex -70.468 36.838 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.828 36.315 -5 - vertex -57.079 27.558 -5 - vertex -70.624 36.56 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -71.073 36.111 -5 - vertex -57.079 27.558 -5 - vertex -70.828 36.315 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -71.351 35.955 -5 - vertex -57.079 27.558 -5 - vertex -71.073 36.111 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -71.351 35.955 -5 - vertex -71.655 35.856 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -71.655 35.856 -5 - vertex -71.975 35.821 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -71.975 35.821 -5 - vertex -72.296 35.856 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -72.296 35.856 -5 - vertex -72.599 35.955 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.581 37.782 -5 - vertex -76.835 49.465 -5 - vertex -73.616 37.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -73.616 37.462 -5 - vertex -76.835 49.465 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.616 37.462 -5 - vertex -76.835 26.464 -5 - vertex -73.581 37.141 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -73.482 36.838 -5 - vertex -73.581 37.141 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -73.326 36.56 -5 - vertex -73.482 36.838 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -73.122 36.315 -5 - vertex -73.326 36.56 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -72.877 36.111 -5 - vertex -73.122 36.315 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 26.464 -5 - vertex -72.599 35.955 -5 - vertex -72.877 36.111 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.351 35.955 -5 - vertex -76.835 26.464 -5 - vertex -57.079 27.558 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.917 25.656 -5 - vertex -57.079 27.558 -5 - vertex -76.835 26.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.155 24.881 -5 - vertex -57.079 27.558 -5 - vertex -76.917 25.656 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -77.538 24.165 -5 - vertex -57.079 27.558 -5 - vertex -77.155 24.881 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -78.052 23.536 -5 - vertex -77.082 7.564 -5 - vertex -77.538 24.165 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -57.079 27.558 -5 - vertex -77.538 24.165 -5 - vertex -77.082 7.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 71.12 77.361 -5 - vertex 71.023 77.599 -5 - vertex 71.023 77.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 53.12 27.558 -5 - vertex 53.023 27.602 -5 - vertex 53.023 27.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.124 -32.441 -5 - vertex 31.018 -32.397 -5 - vertex 31.018 -32.538 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.028 7.458 -5 - vertex 22.922 7.564 -5 - vertex 22.878 7.458 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 99.625 2.137 -5 - vertex 103.161 -10.542 -5 - vertex 99.66 2.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 99.625 2.778 -5 - vertex 99.66 2.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 99.526 3.081 -5 - vertex 99.625 2.778 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 99.371 3.359 -5 - vertex 99.526 3.081 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 99.166 3.604 -5 - vertex 99.371 3.359 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 98.921 3.808 -5 - vertex 99.166 3.604 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 98.643 3.964 -5 - vertex 98.921 3.808 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 98.34 4.063 -5 - vertex 98.643 3.964 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 98.02 4.098 -5 - vertex 98.34 4.063 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 93.16 13.323 -5 - vertex 98.02 4.098 -5 - vertex 103.02 15.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 98.02 4.098 -5 - vertex 93.16 13.323 -5 - vertex 97.699 4.063 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 97.699 4.063 -5 - vertex 93.16 13.323 -5 - vertex 97.396 3.964 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 97.396 3.964 -5 - vertex 93.16 13.323 -5 - vertex 97.118 3.808 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 97.118 3.808 -5 - vertex 93.16 13.323 -5 - vertex 96.873 3.604 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 96.873 3.604 -5 - vertex 93.16 13.323 -5 - vertex 96.669 3.359 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 96.414 2.778 -5 - vertex 93.16 13.323 -5 - vertex 96.379 2.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 96.513 3.081 -5 - vertex 93.16 13.323 -5 - vertex 96.414 2.778 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 96.669 3.359 -5 - vertex 93.16 13.323 -5 - vertex 96.513 3.081 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 92.465 15.622 -5 - vertex 103.02 15.457 -5 - vertex 103.117 15.563 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 92.465 15.622 -5 - vertex 103.117 15.563 -5 - vertex 93.125 25.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 93.079 14.131 -5 - vertex 93.16 13.323 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 92.844 14.906 -5 - vertex 93.079 14.131 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 15.457 -5 - vertex 92.465 15.622 -5 - vertex 92.844 14.906 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 91.952 16.251 -5 - vertex 92.465 15.622 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 91.323 16.765 -5 - vertex 91.952 16.251 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 90.607 17.147 -5 - vertex 91.323 16.765 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 89.831 17.386 -5 - vertex 90.607 17.147 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 89.024 17.468 -5 - vertex 89.831 17.386 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 87.022 17.468 -5 - vertex 89.024 17.468 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 86.214 17.386 -5 - vertex 87.022 17.468 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 25.564 -5 - vertex 85.438 17.147 -5 - vertex 86.214 17.386 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 45.514 -5 - vertex 85.438 17.147 -5 - vertex 93.125 25.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 85.438 17.147 -5 - vertex 73.166 45.514 -5 - vertex 84.722 16.765 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 79.666 2.457 -5 - vertex 82.877 -9.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.122 7.564 -5 - vertex 82.877 13.323 -5 - vertex 82.959 14.131 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 79.632 2.778 -5 - vertex 79.666 2.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 79.533 3.083 -5 - vertex 79.632 2.778 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.122 7.564 -5 - vertex 82.959 14.131 -5 - vertex 83.197 14.906 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 79.377 3.362 -5 - vertex 79.533 3.083 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 79.173 3.609 -5 - vertex 79.377 3.362 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 78.928 3.814 -5 - vertex 79.173 3.609 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 78.65 3.971 -5 - vertex 78.928 3.814 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 78.347 4.071 -5 - vertex 78.65 3.971 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 78.026 4.107 -5 - vertex 78.347 4.071 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 13.323 -5 - vertex 73.122 7.564 -5 - vertex 78.026 4.107 -5 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 73.166 7.458 -5 - vertex 78.026 4.107 -5 - vertex 73.122 7.564 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 78.026 4.107 -5 - vertex 73.166 7.458 -5 - vertex 77.705 4.071 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.122 7.564 -5 - vertex 83.197 14.906 -5 - vertex 83.58 15.622 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 77.705 4.071 -5 - vertex 73.166 7.458 -5 - vertex 77.401 3.971 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 77.121 3.814 -5 - vertex 73.166 7.458 -5 - vertex 76.874 3.609 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.669 3.362 -5 - vertex 73.166 7.458 -5 - vertex 76.512 3.083 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.874 3.609 -5 - vertex 73.166 7.458 -5 - vertex 76.669 3.362 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 77.401 3.971 -5 - vertex 73.166 7.458 -5 - vertex 77.121 3.814 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 84.094 16.251 -5 - vertex 53.12 27.558 -5 - vertex 83.58 15.622 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 53.12 27.558 -5 - vertex 84.094 16.251 -5 - vertex 73.166 45.514 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 84.722 16.765 -5 - vertex 73.166 45.514 -5 - vertex 84.094 16.251 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 98.921 3.808 -5 - vertex 103.161 15.457 -5 - vertex 103.02 15.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 15.457 -5 - vertex 99.66 2.457 -5 - vertex 103.161 -10.542 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 99.526 1.834 -5 - vertex 103.161 -10.542 -5 - vertex 99.625 2.137 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 99.371 1.556 -5 - vertex 103.161 -10.542 -5 - vertex 99.526 1.834 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 99.166 1.311 -5 - vertex 103.161 -10.542 -5 - vertex 99.371 1.556 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 98.921 1.106 -5 - vertex 103.161 -10.542 -5 - vertex 99.166 1.311 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.161 -10.542 -5 - vertex 98.921 1.106 -5 - vertex 103.02 -10.542 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 98.643 0.950999 -5 - vertex 103.02 -10.542 -5 - vertex 98.921 1.106 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 98.34 0.851999 -5 - vertex 103.02 -10.542 -5 - vertex 98.643 0.950999 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 98.02 0.816999 -5 - vertex 103.02 -10.542 -5 - vertex 98.34 0.851999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 98.02 0.816999 -5 - vertex 97.699 0.851999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 97.699 0.851999 -5 - vertex 97.396 0.950999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 97.396 0.950999 -5 - vertex 97.118 1.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 97.118 1.106 -5 - vertex 96.873 1.311 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 96.873 1.311 -5 - vertex 96.669 1.556 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 96.669 1.556 -5 - vertex 96.513 1.834 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 96.379 2.457 -5 - vertex 93.16 13.323 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 96.379 2.457 -5 - vertex 93.16 -9.678 -5 - vertex 96.414 2.137 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.16 -9.678 -5 - vertex 96.513 1.834 -5 - vertex 96.414 2.137 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 98.02 0.816999 -5 - vertex 93.16 -9.678 -5 - vertex 103.02 -10.542 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 93.079 -10.486 -5 - vertex 103.02 -10.542 -5 - vertex 93.16 -9.678 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 92.844 -11.261 -5 - vertex 103.02 -10.542 -5 - vertex 93.079 -10.486 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 92.465 -11.978 -5 - vertex 103.02 -10.542 -5 - vertex 92.844 -11.261 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.02 -10.542 -5 - vertex 92.465 -11.978 -5 - vertex 103.117 -10.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 103.117 -10.64 -5 - vertex 92.465 -11.978 -5 - vertex 93.125 -20.641 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 91.952 -12.606 -5 - vertex 93.125 -20.641 -5 - vertex 92.465 -11.978 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 91.323 -13.119 -5 - vertex 93.125 -20.641 -5 - vertex 91.952 -12.606 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 90.607 -13.498 -5 - vertex 93.125 -20.641 -5 - vertex 91.323 -13.119 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 89.831 -13.734 -5 - vertex 93.125 -20.641 -5 - vertex 90.607 -13.498 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 89.024 -13.815 -5 - vertex 93.125 -20.641 -5 - vertex 89.831 -13.734 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 87.022 -13.815 -5 - vertex 93.125 -20.641 -5 - vertex 89.024 -13.815 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 86.214 -13.734 -5 - vertex 93.125 -20.641 -5 - vertex 87.022 -13.815 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 85.438 -13.498 -5 - vertex 93.125 -20.641 -5 - vertex 86.214 -13.734 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -40.599 -5 - vertex 85.438 -13.498 -5 - vertex 84.722 -13.119 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -40.599 -5 - vertex 84.722 -13.119 -5 - vertex 84.094 -12.606 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 79.632 2.137 -5 - vertex 82.877 -9.678 -5 - vertex 79.666 2.457 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 79.533 1.833 -5 - vertex 82.877 -9.678 -5 - vertex 79.632 2.137 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 79.377 1.555 -5 - vertex 82.877 -9.678 -5 - vertex 79.533 1.833 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 79.173 1.31 -5 - vertex 82.877 -9.678 -5 - vertex 79.377 1.555 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 78.928 1.106 -5 - vertex 82.877 -9.678 -5 - vertex 79.173 1.31 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 78.65 0.950999 -5 - vertex 82.877 -9.678 -5 - vertex 78.928 1.106 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 78.347 0.851999 -5 - vertex 82.877 -9.678 -5 - vertex 78.65 0.950999 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 78.026 0.816999 -5 - vertex 82.877 -9.678 -5 - vertex 78.347 0.851999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 -9.678 -5 - vertex 73.122 -2.64 -5 - vertex 82.959 -10.486 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.877 -9.678 -5 - vertex 78.026 0.816999 -5 - vertex 73.122 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 78.026 0.816999 -5 - vertex 77.705 0.851999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 77.705 0.851999 -5 - vertex 77.401 0.950999 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 77.401 0.950999 -5 - vertex 77.121 1.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 77.121 1.106 -5 - vertex 76.874 1.31 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 76.874 1.31 -5 - vertex 76.669 1.555 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 76.669 1.555 -5 - vertex 76.512 1.833 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.512 3.083 -5 - vertex 73.166 7.458 -5 - vertex 76.412 2.778 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 -2.543 -5 - vertex 76.377 2.457 -5 - vertex 73.166 7.458 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.377 2.457 -5 - vertex 73.166 -2.543 -5 - vertex 76.412 2.137 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.412 2.137 -5 - vertex 73.166 -2.543 -5 - vertex 76.512 1.833 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 78.026 0.816999 -5 - vertex 73.166 -2.543 -5 - vertex 73.122 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.959 -10.486 -5 - vertex 73.122 -2.64 -5 - vertex 83.197 -11.261 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 53.12 -22.643 -5 - vertex 83.197 -11.261 -5 - vertex 73.122 -2.64 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 85.438 -13.498 -5 - vertex 73.166 -40.599 -5 - vertex 93.125 -20.641 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 83.197 -11.261 -5 - vertex 53.12 -22.643 -5 - vertex 83.58 -11.978 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 83.58 -11.978 -5 - vertex 73.166 -40.599 -5 - vertex 84.094 -12.606 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 83.58 -11.978 -5 - vertex 53.12 -22.643 -5 - vertex 73.166 -40.599 -5 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 73.122 -2.64 -5 - vertex 73.166 -2.543 -5 - vertex 73.025 -2.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.922 -107.636 -5 - vertex 106.167 -102.94 -5 - vertex 106.011 -102.661 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.167 -102.94 -5 - vertex 105.922 -107.636 -5 - vertex 106.019 -107.539 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.912 -102.356 -5 - vertex 105.922 -107.636 -5 - vertex 106.011 -102.661 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 80.954 -82.677 -5 - vertex 105.912 -102.356 -5 - vertex 105.878 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.912 -101.715 -5 - vertex 80.954 -82.677 -5 - vertex 105.878 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.912 -102.356 -5 - vertex 80.954 -82.677 -5 - vertex 105.922 -107.636 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 71.12 -72.437 -5 - vertex 93.125 -80.437 -5 - vertex 73.166 -60.487 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 53.023 -22.678 -5 - vertex 73.166 -40.599 -5 - vertex 53.12 -22.643 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 -80.437 -5 - vertex 71.12 -72.437 -5 - vertex 80.954 -82.677 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 71.023 -72.684 -5 - vertex 71.12 -72.437 -5 - vertex 71.023 -72.543 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 71.12 -72.437 -5 - vertex 71.023 -72.684 -5 - vertex 80.954 -82.677 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -64.981 -72.684 -5 - vertex 80.954 -82.677 -5 - vertex 71.023 -72.684 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 -22.678 -5 - vertex -70.369 -32.859 -5 - vertex -70.468 -33.162 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -56.982 -22.678 -5 - vertex -70.468 -33.162 -5 - vertex -70.624 -33.44 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.082 -32.441 -5 - vertex -70.624 -33.44 -5 - vertex -65.078 -72.437 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.828 -33.685 -5 - vertex -65.078 -72.437 -5 - vertex -70.624 -33.44 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.917 -44.344 -5 - vertex -71.073 -33.889 -5 - vertex -76.835 -43.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -71.073 -33.889 -5 - vertex -71.351 -34.045 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -71.351 -34.045 -5 - vertex -71.655 -34.144 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -71.655 -34.144 -5 - vertex -71.975 -34.179 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -71.975 -34.179 -5 - vertex -72.296 -34.144 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -72.296 -34.144 -5 - vertex -72.599 -34.045 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -72.599 -34.045 -5 - vertex -72.877 -33.889 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -72.877 -33.889 -5 - vertex -73.122 -33.685 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -73.122 -33.685 -5 - vertex -73.326 -33.44 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -73.326 -33.44 -5 - vertex -73.482 -33.162 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -73.482 -33.162 -5 - vertex -73.581 -32.859 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -64.981 -72.684 -5 - vertex -74.912 -82.677 -5 - vertex 80.954 -82.677 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 -72.437 -5 - vertex -74.912 -82.677 -5 - vertex -64.981 -72.684 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -71.073 -33.889 -5 - vertex -76.917 -44.344 -5 - vertex -70.828 -33.685 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -76.835 -43.536 -5 - vertex -73.616 -32.538 -5 - vertex -76.835 -20.544 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 109.124 -102.356 -5 - vertex 113.021 -104.54 -5 - vertex 113.021 -100.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -104.54 -5 - vertex 110.023 -107.539 -5 - vertex 110.12 -107.636 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -104.54 -5 - vertex 109.124 -102.356 -5 - vertex 109.025 -102.661 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 109.124 -102.356 -5 - vertex 113.021 -100.536 -5 - vertex 109.159 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 108.42 -100.684 -5 - vertex 113.021 -100.536 -5 - vertex 113.118 -100.439 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 109.124 -101.715 -5 - vertex 109.159 -102.035 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 109.025 -101.412 -5 - vertex 109.124 -101.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 108.869 -101.134 -5 - vertex 109.025 -101.412 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 108.665 -100.888 -5 - vertex 108.869 -101.134 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 108.42 -100.684 -5 - vertex 108.665 -100.888 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.118 -100.439 -5 - vertex 108.142 -100.529 -5 - vertex 108.42 -100.684 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.118 -100.439 -5 - vertex 107.839 -100.43 -5 - vertex 108.142 -100.529 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 93.125 -80.437 -5 - vertex 107.839 -100.43 -5 - vertex 113.118 -100.439 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 80.954 -82.677 -5 - vertex 105.912 -101.715 -5 - vertex 93.125 -80.437 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.011 -101.412 -5 - vertex 93.125 -80.437 -5 - vertex 105.912 -101.715 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.167 -101.134 -5 - vertex 93.125 -80.437 -5 - vertex 106.011 -101.412 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.371 -100.888 -5 - vertex 93.125 -80.437 -5 - vertex 106.167 -101.134 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.616 -100.684 -5 - vertex 93.125 -80.437 -5 - vertex 106.371 -100.888 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.894 -100.529 -5 - vertex 93.125 -80.437 -5 - vertex 106.616 -100.684 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.197 -100.43 -5 - vertex 93.125 -80.437 -5 - vertex 106.894 -100.529 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.518 -100.395 -5 - vertex 93.125 -80.437 -5 - vertex 107.197 -100.43 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.839 -100.43 -5 - vertex 93.125 -80.437 -5 - vertex 107.518 -100.395 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 113.021 -100.536 -5 - vertex 113.163 -104.54 -5 - vertex 113.163 -100.536 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.163 -104.54 -5 - vertex 113.021 -100.536 -5 - vertex 113.021 -104.54 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.118 -104.637 -5 - vertex 113.021 -104.54 -5 - vertex 110.12 -107.636 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.869 -102.94 -5 - vertex 113.021 -104.54 -5 - vertex 109.025 -102.661 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.665 -103.187 -5 - vertex 113.021 -104.54 -5 - vertex 108.869 -102.94 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 -104.54 -5 - vertex 108.665 -103.187 -5 - vertex 110.023 -107.539 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.42 -103.393 -5 - vertex 110.023 -107.539 -5 - vertex 108.665 -103.187 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.142 -103.549 -5 - vertex 110.023 -107.539 -5 - vertex 108.42 -103.393 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 107.839 -103.65 -5 - vertex 110.023 -107.539 -5 - vertex 108.142 -103.549 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 110.023 -107.539 -5 - vertex 107.839 -103.65 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 107.839 -103.65 -5 - vertex 107.518 -103.685 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 107.518 -103.685 -5 - vertex 107.197 -103.65 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 107.197 -103.65 -5 - vertex 106.894 -103.549 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 106.894 -103.549 -5 - vertex 106.616 -103.393 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 106.616 -103.393 -5 - vertex 106.371 -103.187 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 -107.539 -5 - vertex 106.371 -103.187 -5 - vertex 106.167 -102.94 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 -107.539 -5 - vertex 106.019 -107.539 -5 - vertex 110.023 -107.68 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 -107.68 -5 - vertex 106.019 -107.539 -5 - vertex 106.019 -107.68 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 106.019 112.462 -5 - vertex 110.023 112.453 -5 - vertex 110.023 112.603 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 109.124 107.28 -5 - vertex 109.159 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 109.025 107.583 -5 - vertex 109.124 107.28 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 108.869 107.861 -5 - vertex 109.025 107.583 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 108.665 108.106 -5 - vertex 108.869 107.861 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 108.42 108.31 -5 - vertex 108.665 108.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 108.142 108.466 -5 - vertex 108.42 108.31 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 107.839 108.565 -5 - vertex 108.142 108.466 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 106.019 112.462 -5 - vertex 107.839 108.565 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.839 108.565 -5 - vertex 106.019 112.462 -5 - vertex 107.518 108.599 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.518 108.599 -5 - vertex 106.019 112.462 -5 - vertex 107.197 108.565 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.197 108.565 -5 - vertex 106.019 112.462 -5 - vertex 106.894 108.466 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.894 108.466 -5 - vertex 106.019 112.462 -5 - vertex 106.616 108.31 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.616 108.31 -5 - vertex 106.019 112.462 -5 - vertex 106.371 108.106 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.019 112.462 -5 - vertex 110.023 112.603 -5 - vertex 106.019 112.603 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.371 108.106 -5 - vertex 106.019 112.462 -5 - vertex 106.167 107.861 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.922 112.559 -5 - vertex 106.167 107.861 -5 - vertex 106.019 112.462 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 106.167 107.861 -5 - vertex 105.922 112.559 -5 - vertex 106.011 107.583 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.922 112.559 -5 - vertex 105.912 107.28 -5 - vertex 106.011 107.583 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 105.912 107.28 -5 - vertex 105.922 112.559 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 105.912 107.28 -5 - vertex 82.921 89.558 -5 - vertex 105.878 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.118 109.561 -5 - vertex 110.023 112.453 -5 - vertex 113.021 109.464 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 110.023 112.453 -5 - vertex 113.118 109.561 -5 - vertex 110.12 112.559 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 113.021 109.464 -5 - vertex 113.163 105.46 -5 - vertex 113.163 109.464 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.163 105.46 -5 - vertex 113.021 109.464 -5 - vertex 113.021 105.46 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 109.159 106.959 -5 - vertex 113.021 109.464 -5 - vertex 110.023 112.453 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 109.464 -5 - vertex 109.159 106.959 -5 - vertex 113.021 105.46 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 109.124 106.638 -5 - vertex 113.021 105.46 -5 - vertex 109.159 106.959 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 109.025 106.335 -5 - vertex 113.021 105.46 -5 - vertex 109.124 106.638 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.869 106.057 -5 - vertex 113.021 105.46 -5 - vertex 109.025 106.335 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.665 105.812 -5 - vertex 113.021 105.46 -5 - vertex 108.869 106.057 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.42 105.608 -5 - vertex 113.021 105.46 -5 - vertex 108.665 105.812 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 113.021 105.46 -5 - vertex 108.42 105.608 -5 - vertex 113.118 105.363 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 108.142 105.452 -5 - vertex 113.118 105.363 -5 - vertex 108.42 105.608 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.839 105.353 -5 - vertex 113.118 105.363 -5 - vertex 108.142 105.452 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 107.518 105.319 -5 - vertex 113.118 105.363 -5 - vertex 107.839 105.353 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 105.912 106.638 -5 - vertex 105.878 106.959 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 106.011 106.335 -5 - vertex 105.912 106.638 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 106.167 106.057 -5 - vertex 106.011 106.335 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 106.371 105.812 -5 - vertex 106.167 106.057 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 106.616 105.608 -5 - vertex 106.371 105.812 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 106.894 105.452 -5 - vertex 106.616 105.608 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 107.197 105.353 -5 - vertex 106.894 105.452 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 107.518 105.319 -5 - vertex 107.197 105.353 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 113.118 105.363 -5 - vertex 107.518 105.319 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 65.402 -5 - vertex 82.921 89.558 -5 - vertex 80.963 87.6 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 82.921 89.558 -5 - vertex 73.166 65.402 -5 - vertex 113.118 105.363 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 43.119 49.359 -5 - vertex 73.166 65.402 -5 - vertex 71.12 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 76.412 2.778 -5 - vertex 73.166 7.458 -5 - vertex 76.377 2.457 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 73.166 65.402 -5 - vertex 53.12 27.558 -5 - vertex 73.166 45.514 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 80.963 87.6 -5 - vertex 71.12 77.361 -5 - vertex 73.166 65.402 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 80.963 87.6 -5 - vertex 71.023 77.599 -5 - vertex 71.12 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 80.963 87.6 -5 - vertex -64.981 77.599 -5 - vertex 71.023 77.599 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -64.981 77.599 -5 - vertex -65.078 77.361 -5 - vertex -64.981 77.458 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -70.369 37.141 -5 - vertex -56.982 27.602 -5 - vertex -70.335 37.462 -5 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -70.335 37.462 -5 - vertex -56.982 27.602 -5 - vertex -70.369 37.782 -5 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -70.369 37.782 -5 - vertex -56.982 27.602 -5 - vertex -70.468 38.086 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -65.078 77.361 -5 - vertex -70.828 38.609 -5 - vertex -70.624 38.364 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -76.917 50.273 -5 - vertex -70.828 38.609 -5 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -70.828 38.609 -5 - vertex -76.835 49.465 -5 - vertex -71.073 38.813 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.073 38.813 -5 - vertex -76.835 49.465 -5 - vertex -71.351 38.968 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.351 38.968 -5 - vertex -76.835 49.465 -5 - vertex -71.655 39.067 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.655 39.067 -5 - vertex -76.835 49.465 -5 - vertex -71.975 39.102 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -71.975 39.102 -5 - vertex -76.835 49.465 -5 - vertex -72.296 39.067 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.296 39.067 -5 - vertex -76.835 49.465 -5 - vertex -72.599 38.968 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -87.118 65.516 -5 - vertex -74.921 87.6 -5 - vertex -87.118 85.404 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.599 38.968 -5 - vertex -76.835 49.465 -5 - vertex -72.877 38.813 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -72.877 38.813 -5 - vertex -76.835 49.465 -5 - vertex -73.122 38.609 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.122 38.609 -5 - vertex -76.835 49.465 -5 - vertex -73.326 38.364 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.482 38.086 -5 - vertex -76.835 49.465 -5 - vertex -73.581 37.782 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -73.326 38.364 -5 - vertex -76.835 49.465 -5 - vertex -73.482 38.086 -5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -64.981 77.599 -5 - vertex -74.921 87.6 -5 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -74.921 87.6 -5 - vertex -64.981 77.599 -5 - vertex 80.963 87.6 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -99.977 112.603 -11 - vertex -103.981 112.603 -5 - vertex -99.977 112.603 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -103.981 112.603 -5 - vertex -99.977 112.603 -11 - vertex -103.981 112.603 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -107.121 -104.54 -11 - vertex -107.121 -100.536 -5 - vertex -107.121 -100.536 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -107.121 -100.536 -5 - vertex -107.121 -104.54 -11 - vertex -107.121 -104.54 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -107.121 -104.54 -11 - vertex -106.98 -104.54 -5 - vertex -107.121 -104.54 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -106.98 -104.54 -5 - vertex -107.121 -104.54 -11 - vertex -106.98 -104.54 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -107.077 -104.637 -11 - vertex -106.98 -104.54 -5 - vertex -106.98 -104.54 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -106.98 -104.54 -5 - vertex -107.077 -104.637 -11 - vertex -107.077 -104.637 -5 - endloop - endfacet - facet normal -0.707108 -0.707106 0 - outer loop - vertex -104.078 -107.636 -11 - vertex -107.077 -104.637 -5 - vertex -107.077 -104.637 -11 - endloop - endfacet - facet normal -0.707108 -0.707106 0 - outer loop - vertex -107.077 -104.637 -5 - vertex -104.078 -107.636 -11 - vertex -104.078 -107.636 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -104.078 -107.636 -5 - vertex -103.981 -107.539 -11 - vertex -103.981 -107.539 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -103.981 -107.539 -11 - vertex -104.078 -107.636 -5 - vertex -104.078 -107.636 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -103.981 -107.68 -11 - vertex -103.981 -107.539 -5 - vertex -103.981 -107.539 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -103.981 -107.539 -5 - vertex -103.981 -107.68 -11 - vertex -103.981 -107.68 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -103.981 -107.68 -11 - vertex -99.977 -107.68 -5 - vertex -103.981 -107.68 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -99.977 -107.68 -5 - vertex -103.981 -107.68 -11 - vertex -99.977 -107.68 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -99.977 -107.68 -5 - vertex -99.977 -107.539 -11 - vertex -99.977 -107.539 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -99.977 -107.539 -11 - vertex -99.977 -107.68 -5 - vertex -99.977 -107.68 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -99.88 -107.636 -11 - vertex -99.977 -107.539 -5 - vertex -99.977 -107.539 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -99.977 -107.539 -5 - vertex -99.88 -107.636 -11 - vertex -99.88 -107.636 -5 - endloop - endfacet - facet normal 0.706979 -0.707234 0 - outer loop - vertex -99.88 -107.636 -11 - vertex -74.912 -82.677 -5 - vertex -99.88 -107.636 -5 - endloop - endfacet - facet normal 0.706979 -0.707234 0 - outer loop - vertex -74.912 -82.677 -5 - vertex -99.88 -107.636 -11 - vertex -74.912 -82.677 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -74.912 -82.677 -11 - vertex 80.954 -82.677 -5 - vertex -74.912 -82.677 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 80.954 -82.677 -5 - vertex -74.912 -82.677 -11 - vertex 80.954 -82.677 -11 - endloop - endfacet - facet normal -0.706979 -0.707234 0 - outer loop - vertex 80.954 -82.677 -11 - vertex 105.922 -107.636 -5 - vertex 80.954 -82.677 -5 - endloop - endfacet - facet normal -0.706979 -0.707234 -0 - outer loop - vertex 105.922 -107.636 -5 - vertex 80.954 -82.677 -11 - vertex 105.922 -107.636 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 105.922 -107.636 -5 - vertex 106.019 -107.539 -11 - vertex 106.019 -107.539 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 106.019 -107.539 -11 - vertex 105.922 -107.636 -5 - vertex 105.922 -107.636 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 106.019 -107.68 -11 - vertex 106.019 -107.539 -5 - vertex 106.019 -107.539 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 106.019 -107.539 -5 - vertex 106.019 -107.68 -11 - vertex 106.019 -107.68 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 106.019 -107.68 -11 - vertex 110.023 -107.68 -5 - vertex 106.019 -107.68 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 110.023 -107.68 -5 - vertex 106.019 -107.68 -11 - vertex 110.023 -107.68 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 110.023 -107.68 -5 - vertex 110.023 -107.539 -11 - vertex 110.023 -107.539 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 110.023 -107.539 -11 - vertex 110.023 -107.68 -5 - vertex 110.023 -107.68 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 110.12 -107.636 -11 - vertex 110.023 -107.539 -5 - vertex 110.023 -107.539 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 110.023 -107.539 -5 - vertex 110.12 -107.636 -11 - vertex 110.12 -107.636 -5 - endloop - endfacet - facet normal 0.707226 -0.706988 0 - outer loop - vertex 110.12 -107.636 -5 - vertex 113.118 -104.637 -11 - vertex 113.118 -104.637 -5 - endloop - endfacet - facet normal 0.707226 -0.706988 0 - outer loop - vertex 113.118 -104.637 -11 - vertex 110.12 -107.636 -5 - vertex 110.12 -107.636 -11 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 113.118 -104.637 -5 - vertex 113.021 -104.54 -11 - vertex 113.021 -104.54 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 113.021 -104.54 -11 - vertex 113.118 -104.637 -5 - vertex 113.118 -104.637 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 113.021 -104.54 -11 - vertex 113.163 -104.54 -5 - vertex 113.021 -104.54 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 113.163 -104.54 -5 - vertex 113.021 -104.54 -11 - vertex 113.163 -104.54 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 113.163 -104.54 -5 - vertex 113.163 -100.536 -11 - vertex 113.163 -100.536 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 113.163 -100.536 -11 - vertex 113.163 -104.54 -5 - vertex 113.163 -104.54 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 113.163 -100.536 -11 - vertex 113.021 -100.536 -5 - vertex 113.163 -100.536 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 113.021 -100.536 -5 - vertex 113.163 -100.536 -11 - vertex 113.021 -100.536 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 113.021 -100.536 -5 - vertex 113.118 -100.439 -11 - vertex 113.118 -100.439 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 113.118 -100.439 -11 - vertex 113.021 -100.536 -5 - vertex 113.021 -100.536 -11 - endloop - endfacet - facet normal 0.707266 0.706948 0 - outer loop - vertex 113.118 -100.439 -5 - vertex 93.125 -80.437 -11 - vertex 93.125 -80.437 -5 - endloop - endfacet - facet normal 0.707266 0.706948 0 - outer loop - vertex 93.125 -80.437 -11 - vertex 113.118 -100.439 -5 - vertex 113.118 -100.439 -11 - endloop - endfacet - facet normal 0.706947 0.707266 -0 - outer loop - vertex 93.125 -80.437 -11 - vertex 73.166 -60.487 -5 - vertex 93.125 -80.437 -5 - endloop - endfacet - facet normal 0.706947 0.707266 0 - outer loop - vertex 73.166 -60.487 -5 - vertex 93.125 -80.437 -11 - vertex 73.166 -60.487 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 73.166 -60.487 -5 - vertex 73.166 -40.599 -11 - vertex 73.166 -40.599 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 73.166 -40.599 -11 - vertex 73.166 -60.487 -5 - vertex 73.166 -60.487 -11 - endloop - endfacet - facet normal 0.707089 -0.707124 0 - outer loop - vertex 73.166 -40.599 -11 - vertex 93.125 -20.641 -5 - vertex 73.166 -40.599 -5 - endloop - endfacet - facet normal 0.707089 -0.707124 0 - outer loop - vertex 93.125 -20.641 -5 - vertex 73.166 -40.599 -11 - vertex 93.125 -20.641 -11 - endloop - endfacet - facet normal 0.707425 -0.706788 0 - outer loop - vertex 93.125 -20.641 -5 - vertex 103.117 -10.64 -11 - vertex 103.117 -10.64 -5 - endloop - endfacet - facet normal 0.707425 -0.706788 0 - outer loop - vertex 103.117 -10.64 -11 - vertex 93.125 -20.641 -5 - vertex 93.125 -20.641 -11 - endloop - endfacet - facet normal 0.710722 0.703473 0 - outer loop - vertex 103.117 -10.64 -5 - vertex 103.02 -10.542 -11 - vertex 103.02 -10.542 -5 - endloop - endfacet - facet normal 0.710722 0.703473 0 - outer loop - vertex 103.02 -10.542 -11 - vertex 103.117 -10.64 -5 - vertex 103.117 -10.64 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 103.02 -10.542 -11 - vertex 103.161 -10.542 -5 - vertex 103.02 -10.542 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 103.161 -10.542 -5 - vertex 103.02 -10.542 -11 - vertex 103.161 -10.542 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 103.161 -10.542 -5 - vertex 103.161 15.457 -11 - vertex 103.161 15.457 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 103.161 15.457 -11 - vertex 103.161 -10.542 -5 - vertex 103.161 -10.542 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 103.161 15.457 -11 - vertex 103.02 15.457 -5 - vertex 103.161 15.457 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 103.02 15.457 -5 - vertex 103.161 15.457 -11 - vertex 103.02 15.457 -11 - endloop - endfacet - facet normal 0.737731 -0.675095 0 - outer loop - vertex 103.02 15.457 -5 - vertex 103.117 15.563 -11 - vertex 103.117 15.563 -5 - endloop - endfacet - facet normal 0.737731 -0.675095 0 - outer loop - vertex 103.117 15.563 -11 - vertex 103.02 15.457 -5 - vertex 103.02 15.457 -11 - endloop - endfacet - facet normal 0.707425 0.706788 0 - outer loop - vertex 103.117 15.563 -5 - vertex 93.125 25.564 -11 - vertex 93.125 25.564 -5 - endloop - endfacet - facet normal 0.707425 0.706788 0 - outer loop - vertex 93.125 25.564 -11 - vertex 103.117 15.563 -5 - vertex 103.117 15.563 -11 - endloop - endfacet - facet normal 0.706947 0.707266 -0 - outer loop - vertex 93.125 25.564 -11 - vertex 73.166 45.514 -5 - vertex 93.125 25.564 -5 - endloop - endfacet - facet normal 0.706947 0.707266 0 - outer loop - vertex 73.166 45.514 -5 - vertex 93.125 25.564 -11 - vertex 73.166 45.514 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 73.166 45.514 -5 - vertex 73.166 65.402 -11 - vertex 73.166 65.402 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 73.166 65.402 -11 - vertex 73.166 45.514 -5 - vertex 73.166 45.514 -11 - endloop - endfacet - facet normal 0.707186 -0.707027 0 - outer loop - vertex 73.166 65.402 -5 - vertex 113.118 105.363 -11 - vertex 113.118 105.363 -5 - endloop - endfacet - facet normal 0.707186 -0.707027 0 - outer loop - vertex 113.118 105.363 -11 - vertex 73.166 65.402 -5 - vertex 73.166 65.402 -11 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 113.118 105.363 -5 - vertex 113.021 105.46 -11 - vertex 113.021 105.46 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 113.021 105.46 -11 - vertex 113.118 105.363 -5 - vertex 113.118 105.363 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 113.021 105.46 -11 - vertex 113.163 105.46 -5 - vertex 113.021 105.46 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 113.163 105.46 -5 - vertex 113.021 105.46 -11 - vertex 113.163 105.46 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 113.163 105.46 -5 - vertex 113.163 109.464 -11 - vertex 113.163 109.464 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 113.163 109.464 -11 - vertex 113.163 105.46 -5 - vertex 113.163 105.46 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 113.163 109.464 -11 - vertex 113.021 109.464 -5 - vertex 113.163 109.464 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 113.021 109.464 -5 - vertex 113.163 109.464 -11 - vertex 113.021 109.464 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 113.021 109.464 -5 - vertex 113.118 109.561 -11 - vertex 113.118 109.561 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex 113.118 109.561 -11 - vertex 113.021 109.464 -5 - vertex 113.021 109.464 -11 - endloop - endfacet - facet normal 0.707108 0.707106 0 - outer loop - vertex 113.118 109.561 -5 - vertex 110.12 112.559 -11 - vertex 110.12 112.559 -5 - endloop - endfacet - facet normal 0.707108 0.707106 0 - outer loop - vertex 110.12 112.559 -11 - vertex 113.118 109.561 -5 - vertex 113.118 109.561 -11 - endloop - endfacet - facet normal -0.737716 0.675111 0 - outer loop - vertex 110.023 112.453 -11 - vertex 110.12 112.559 -5 - vertex 110.12 112.559 -11 - endloop - endfacet - facet normal -0.737716 0.675111 0 - outer loop - vertex 110.12 112.559 -5 - vertex 110.023 112.453 -11 - vertex 110.023 112.453 -5 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 110.023 112.453 -5 - vertex 110.023 112.603 -11 - vertex 110.023 112.603 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 110.023 112.603 -11 - vertex 110.023 112.453 -5 - vertex 110.023 112.453 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 110.023 112.603 -11 - vertex 106.019 112.603 -5 - vertex 110.023 112.603 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 106.019 112.603 -5 - vertex 110.023 112.603 -11 - vertex 106.019 112.603 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 106.019 112.462 -11 - vertex 106.019 112.603 -5 - vertex 106.019 112.603 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 106.019 112.603 -5 - vertex 106.019 112.462 -11 - vertex 106.019 112.462 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 106.019 112.462 -5 - vertex 105.922 112.559 -11 - vertex 105.922 112.559 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 105.922 112.559 -11 - vertex 106.019 112.462 -5 - vertex 106.019 112.462 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex 82.921 89.558 -11 - vertex 105.922 112.559 -5 - vertex 105.922 112.559 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex 105.922 112.559 -5 - vertex 82.921 89.558 -11 - vertex 82.921 89.558 -5 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex 80.963 87.6 -11 - vertex 82.921 89.558 -5 - vertex 82.921 89.558 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex 82.921 89.558 -5 - vertex 80.963 87.6 -11 - vertex 80.963 87.6 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 80.963 87.6 -11 - vertex -74.921 87.6 -5 - vertex 80.963 87.6 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -74.921 87.6 -5 - vertex 80.963 87.6 -11 - vertex -74.921 87.6 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -103.981 112.462 -11 - vertex -103.981 112.603 -5 - vertex -103.981 112.603 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -103.981 112.603 -5 - vertex -103.981 112.462 -11 - vertex -103.981 112.462 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -103.981 112.462 -5 - vertex -104.078 112.559 -11 - vertex -104.078 112.559 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -104.078 112.559 -11 - vertex -103.981 112.462 -5 - vertex -103.981 112.462 -11 - endloop - endfacet - facet normal -0.70699 0.707224 0 - outer loop - vertex -104.078 112.559 -11 - vertex -107.077 109.561 -5 - vertex -104.078 112.559 -5 - endloop - endfacet - facet normal -0.70699 0.707224 0 - outer loop - vertex -107.077 109.561 -5 - vertex -104.078 112.559 -11 - vertex -107.077 109.561 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -106.98 109.464 -11 - vertex -107.077 109.561 -5 - vertex -107.077 109.561 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -107.077 109.561 -5 - vertex -106.98 109.464 -11 - vertex -106.98 109.464 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -106.98 109.464 -11 - vertex -107.121 109.464 -5 - vertex -106.98 109.464 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -107.121 109.464 -5 - vertex -106.98 109.464 -11 - vertex -107.121 109.464 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -107.121 105.46 -11 - vertex -107.121 109.464 -5 - vertex -107.121 109.464 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -107.121 109.464 -5 - vertex -107.121 105.46 -11 - vertex -107.121 105.46 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -107.121 105.46 -11 - vertex -106.98 105.46 -5 - vertex -107.121 105.46 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -106.98 105.46 -5 - vertex -107.121 105.46 -11 - vertex -106.98 105.46 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -107.077 105.363 -11 - vertex -106.98 105.46 -5 - vertex -106.98 105.46 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -106.98 105.46 -5 - vertex -107.077 105.363 -11 - vertex -107.077 105.363 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -87.118 85.404 -11 - vertex -107.077 105.363 -5 - vertex -107.077 105.363 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -107.077 105.363 -5 - vertex -87.118 85.404 -11 - vertex -87.118 85.404 -5 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -87.118 65.516 -11 - vertex -87.118 85.404 -5 - vertex -87.118 85.404 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -87.118 85.404 -5 - vertex -87.118 65.516 -11 - vertex -87.118 65.516 -5 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -97.075 55.559 -11 - vertex -87.118 65.516 -5 - vertex -87.118 65.516 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -87.118 65.516 -5 - vertex -97.075 55.559 -11 - vertex -97.075 55.559 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -96.978 55.462 -11 - vertex -97.075 55.559 -5 - vertex -97.075 55.559 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -97.075 55.559 -5 - vertex -96.978 55.462 -11 - vertex -96.978 55.462 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -96.978 55.462 -11 - vertex -97.119 55.462 -5 - vertex -96.978 55.462 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -97.119 55.462 -5 - vertex -96.978 55.462 -11 - vertex -97.119 55.462 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -97.119 17.459 -11 - vertex -97.119 55.462 -5 - vertex -97.119 55.462 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -97.119 55.462 -5 - vertex -97.119 17.459 -11 - vertex -97.119 17.459 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -97.119 17.459 -11 - vertex -96.978 17.459 -5 - vertex -97.119 17.459 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -96.978 17.459 -5 - vertex -97.119 17.459 -11 - vertex -96.978 17.459 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -97.075 17.362 -11 - vertex -96.978 17.459 -5 - vertex -96.978 17.459 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -96.978 17.459 -5 - vertex -97.075 17.362 -11 - vertex -97.075 17.362 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -97.075 17.362 -11 - vertex -87.118 7.405 -5 - vertex -97.075 17.362 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 -0 - outer loop - vertex -87.118 7.405 -5 - vertex -97.075 17.362 -11 - vertex -87.118 7.405 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -87.118 -2.482 -11 - vertex -87.118 7.405 -5 - vertex -87.118 7.405 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -87.118 7.405 -5 - vertex -87.118 -2.482 -11 - vertex -87.118 -2.482 -5 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -87.118 -2.482 -11 - vertex -97.075 -12.439 -5 - vertex -87.118 -2.482 -5 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -97.075 -12.439 -5 - vertex -87.118 -2.482 -11 - vertex -97.075 -12.439 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -96.978 -12.536 -11 - vertex -97.075 -12.439 -5 - vertex -97.075 -12.439 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -97.075 -12.439 -5 - vertex -96.978 -12.536 -11 - vertex -96.978 -12.536 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -96.978 -12.536 -11 - vertex -97.119 -12.536 -5 - vertex -96.978 -12.536 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -97.119 -12.536 -5 - vertex -96.978 -12.536 -11 - vertex -97.119 -12.536 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -97.119 -50.539 -11 - vertex -97.119 -12.536 -5 - vertex -97.119 -12.536 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -97.119 -12.536 -5 - vertex -97.119 -50.539 -11 - vertex -97.119 -50.539 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -97.119 -50.539 -11 - vertex -96.978 -50.539 -5 - vertex -97.119 -50.539 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -96.978 -50.539 -5 - vertex -97.119 -50.539 -11 - vertex -96.978 -50.539 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -97.075 -50.636 -11 - vertex -96.978 -50.539 -5 - vertex -96.978 -50.539 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -96.978 -50.539 -5 - vertex -97.075 -50.636 -11 - vertex -97.075 -50.636 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -97.075 -50.636 -11 - vertex -87.118 -60.593 -5 - vertex -97.075 -50.636 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 -0 - outer loop - vertex -87.118 -60.593 -5 - vertex -97.075 -50.636 -11 - vertex -87.118 -60.593 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -87.118 -80.481 -11 - vertex -87.118 -60.593 -5 - vertex -87.118 -60.593 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -87.118 -60.593 -5 - vertex -87.118 -80.481 -11 - vertex -87.118 -80.481 -5 - endloop - endfacet - facet normal -0.707089 0.707125 0 - outer loop - vertex -87.118 -80.481 -11 - vertex -107.077 -100.439 -5 - vertex -87.118 -80.481 -5 - endloop - endfacet - facet normal -0.707089 0.707125 0 - outer loop - vertex -107.077 -100.439 -5 - vertex -87.118 -80.481 -11 - vertex -107.077 -100.439 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -106.98 -100.536 -11 - vertex -107.077 -100.439 -5 - vertex -107.077 -100.439 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -107.077 -100.439 -5 - vertex -106.98 -100.536 -11 - vertex -106.98 -100.536 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -106.98 -100.536 -11 - vertex -107.121 -100.536 -5 - vertex -106.98 -100.536 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -107.121 -100.536 -5 - vertex -106.98 -100.536 -11 - vertex -107.121 -100.536 -11 - endloop - endfacet - facet normal 0.99411 -0.10838 0 - outer loop - vertex -103.117 106.959 -5 - vertex -103.082 107.28 -11 - vertex -103.082 107.28 -5 - endloop - endfacet - facet normal 0.99411 -0.10838 0 - outer loop - vertex -103.082 107.28 -11 - vertex -103.117 106.959 -5 - vertex -103.117 106.959 -11 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -103.082 106.638 -5 - vertex -103.117 106.959 -11 - vertex -103.117 106.959 -5 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -103.117 106.959 -11 - vertex -103.082 106.638 -5 - vertex -103.082 106.638 -11 - endloop - endfacet - facet normal 0.95055 -0.310571 0 - outer loop - vertex -103.082 107.28 -5 - vertex -102.983 107.583 -11 - vertex -102.983 107.583 -5 - endloop - endfacet - facet normal 0.95055 -0.310571 0 - outer loop - vertex -102.983 107.583 -11 - vertex -103.082 107.28 -5 - vertex -103.082 107.28 -11 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -102.983 107.583 -5 - vertex -102.828 107.861 -11 - vertex -102.828 107.861 -5 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -102.828 107.861 -11 - vertex -102.983 107.583 -5 - vertex -102.983 107.583 -11 - endloop - endfacet - facet normal 0.766938 -0.641722 0 - outer loop - vertex -102.828 107.861 -5 - vertex -102.623 108.106 -11 - vertex -102.623 108.106 -5 - endloop - endfacet - facet normal 0.766938 -0.641722 0 - outer loop - vertex -102.623 108.106 -11 - vertex -102.828 107.861 -5 - vertex -102.828 107.861 -11 - endloop - endfacet - facet normal 0.639862 -0.76849 0 - outer loop - vertex -102.623 108.106 -11 - vertex -102.378 108.31 -5 - vertex -102.623 108.106 -5 - endloop - endfacet - facet normal 0.639862 -0.76849 0 - outer loop - vertex -102.378 108.31 -5 - vertex -102.623 108.106 -11 - vertex -102.378 108.31 -11 - endloop - endfacet - facet normal 0.489382 -0.87207 0 - outer loop - vertex -102.378 108.31 -11 - vertex -102.1 108.466 -5 - vertex -102.378 108.31 -5 - endloop - endfacet - facet normal 0.489382 -0.87207 0 - outer loop - vertex -102.1 108.466 -5 - vertex -102.378 108.31 -11 - vertex -102.1 108.466 -11 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex -102.1 108.466 -11 - vertex -101.797 108.565 -5 - vertex -102.1 108.466 -5 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex -101.797 108.565 -5 - vertex -102.1 108.466 -11 - vertex -101.797 108.565 -11 - endloop - endfacet - facet normal 0.10532 -0.994438 0 - outer loop - vertex -101.797 108.565 -11 - vertex -101.476 108.599 -5 - vertex -101.797 108.565 -5 - endloop - endfacet - facet normal 0.10532 -0.994438 0 - outer loop - vertex -101.476 108.599 -5 - vertex -101.797 108.565 -11 - vertex -101.476 108.599 -11 - endloop - endfacet - facet normal -0.105645 -0.994404 0 - outer loop - vertex -101.476 108.599 -11 - vertex -101.156 108.565 -5 - vertex -101.476 108.599 -5 - endloop - endfacet - facet normal -0.105645 -0.994404 -0 - outer loop - vertex -101.156 108.565 -5 - vertex -101.476 108.599 -11 - vertex -101.156 108.565 -11 - endloop - endfacet - facet normal -0.309648 -0.950851 0 - outer loop - vertex -101.156 108.565 -11 - vertex -100.852 108.466 -5 - vertex -101.156 108.565 -5 - endloop - endfacet - facet normal -0.309648 -0.950851 -0 - outer loop - vertex -100.852 108.466 -5 - vertex -101.156 108.565 -11 - vertex -100.852 108.466 -11 - endloop - endfacet - facet normal -0.489382 -0.87207 0 - outer loop - vertex -100.852 108.466 -11 - vertex -100.574 108.31 -5 - vertex -100.852 108.466 -5 - endloop - endfacet - facet normal -0.489382 -0.87207 -0 - outer loop - vertex -100.574 108.31 -5 - vertex -100.852 108.466 -11 - vertex -100.574 108.31 -11 - endloop - endfacet - facet normal -0.639874 -0.76848 0 - outer loop - vertex -100.574 108.31 -11 - vertex -100.329 108.106 -5 - vertex -100.574 108.31 -5 - endloop - endfacet - facet normal -0.639874 -0.76848 -0 - outer loop - vertex -100.329 108.106 -5 - vertex -100.574 108.31 -11 - vertex -100.329 108.106 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex -100.125 107.861 -11 - vertex -100.329 108.106 -5 - vertex -100.329 108.106 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex -100.329 108.106 -5 - vertex -100.125 107.861 -11 - vertex -100.125 107.861 -5 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -99.97 107.583 -11 - vertex -100.125 107.861 -5 - vertex -100.125 107.861 -11 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -100.125 107.861 -5 - vertex -99.97 107.583 -11 - vertex -99.97 107.583 -5 - endloop - endfacet - facet normal -0.95055 -0.310571 0 - outer loop - vertex -99.871 107.28 -11 - vertex -99.97 107.583 -5 - vertex -99.97 107.583 -11 - endloop - endfacet - facet normal -0.95055 -0.310571 0 - outer loop - vertex -99.97 107.583 -5 - vertex -99.871 107.28 -11 - vertex -99.871 107.28 -5 - endloop - endfacet - facet normal -0.994107 -0.108403 0 - outer loop - vertex -99.836 106.959 -11 - vertex -99.871 107.28 -5 - vertex -99.871 107.28 -11 - endloop - endfacet - facet normal -0.994107 -0.108403 0 - outer loop - vertex -99.871 107.28 -5 - vertex -99.836 106.959 -11 - vertex -99.836 106.959 -5 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -99.87 106.638 -11 - vertex -99.836 106.959 -5 - vertex -99.836 106.959 -11 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -99.836 106.959 -5 - vertex -99.87 106.638 -11 - vertex -99.87 106.638 -5 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -99.969 106.335 -11 - vertex -99.87 106.638 -5 - vertex -99.87 106.638 -11 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -99.87 106.638 -5 - vertex -99.969 106.335 -11 - vertex -99.969 106.335 -5 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -100.125 106.057 -11 - vertex -99.969 106.335 -5 - vertex -99.969 106.335 -11 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -99.969 106.335 -5 - vertex -100.125 106.057 -11 - vertex -100.125 106.057 -5 - endloop - endfacet - facet normal -0.768478 0.639876 0 - outer loop - vertex -100.329 105.812 -11 - vertex -100.125 106.057 -5 - vertex -100.125 106.057 -11 - endloop - endfacet - facet normal -0.768478 0.639876 0 - outer loop - vertex -100.125 106.057 -5 - vertex -100.329 105.812 -11 - vertex -100.329 105.812 -5 - endloop - endfacet - facet normal -0.639874 0.76848 0 - outer loop - vertex -100.329 105.812 -11 - vertex -100.574 105.608 -5 - vertex -100.329 105.812 -5 - endloop - endfacet - facet normal -0.639874 0.76848 0 - outer loop - vertex -100.574 105.608 -5 - vertex -100.329 105.812 -11 - vertex -100.574 105.608 -11 - endloop - endfacet - facet normal -0.489382 0.87207 0 - outer loop - vertex -100.574 105.608 -11 - vertex -100.852 105.452 -5 - vertex -100.574 105.608 -5 - endloop - endfacet - facet normal -0.489382 0.87207 0 - outer loop - vertex -100.852 105.452 -5 - vertex -100.574 105.608 -11 - vertex -100.852 105.452 -11 - endloop - endfacet - facet normal -0.309648 0.950851 0 - outer loop - vertex -100.852 105.452 -11 - vertex -101.156 105.353 -5 - vertex -100.852 105.452 -5 - endloop - endfacet - facet normal -0.309648 0.950851 0 - outer loop - vertex -101.156 105.353 -5 - vertex -100.852 105.452 -11 - vertex -101.156 105.353 -11 - endloop - endfacet - facet normal -0.105645 0.994404 0 - outer loop - vertex -101.156 105.353 -11 - vertex -101.476 105.319 -5 - vertex -101.156 105.353 -5 - endloop - endfacet - facet normal -0.105645 0.994404 0 - outer loop - vertex -101.476 105.319 -5 - vertex -101.156 105.353 -11 - vertex -101.476 105.319 -11 - endloop - endfacet - facet normal 0.10532 0.994438 -0 - outer loop - vertex -101.476 105.319 -11 - vertex -101.797 105.353 -5 - vertex -101.476 105.319 -5 - endloop - endfacet - facet normal 0.10532 0.994438 0 - outer loop - vertex -101.797 105.353 -5 - vertex -101.476 105.319 -11 - vertex -101.797 105.353 -11 - endloop - endfacet - facet normal 0.310571 0.95055 -0 - outer loop - vertex -101.797 105.353 -11 - vertex -102.1 105.452 -5 - vertex -101.797 105.353 -5 - endloop - endfacet - facet normal 0.310571 0.95055 0 - outer loop - vertex -102.1 105.452 -5 - vertex -101.797 105.353 -11 - vertex -102.1 105.452 -11 - endloop - endfacet - facet normal 0.489382 0.87207 -0 - outer loop - vertex -102.1 105.452 -11 - vertex -102.378 105.608 -5 - vertex -102.1 105.452 -5 - endloop - endfacet - facet normal 0.489382 0.87207 0 - outer loop - vertex -102.378 105.608 -5 - vertex -102.1 105.452 -11 - vertex -102.378 105.608 -11 - endloop - endfacet - facet normal 0.639862 0.76849 -0 - outer loop - vertex -102.378 105.608 -11 - vertex -102.623 105.812 -5 - vertex -102.378 105.608 -5 - endloop - endfacet - facet normal 0.639862 0.76849 0 - outer loop - vertex -102.623 105.812 -5 - vertex -102.378 105.608 -11 - vertex -102.623 105.812 -11 - endloop - endfacet - facet normal 0.76849 0.639862 0 - outer loop - vertex -102.623 105.812 -5 - vertex -102.827 106.057 -11 - vertex -102.827 106.057 -5 - endloop - endfacet - facet normal 0.76849 0.639862 0 - outer loop - vertex -102.827 106.057 -11 - vertex -102.623 105.812 -5 - vertex -102.623 105.812 -11 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -102.827 106.057 -5 - vertex -102.983 106.335 -11 - vertex -102.983 106.335 -5 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -102.983 106.335 -11 - vertex -102.827 106.057 -5 - vertex -102.827 106.057 -11 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -102.983 106.335 -5 - vertex -103.082 106.638 -11 - vertex -103.082 106.638 -5 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -103.082 106.638 -11 - vertex -102.983 106.335 -5 - vertex -102.983 106.335 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -65.078 77.361 -5 - vertex -64.981 77.458 -11 - vertex -64.981 77.458 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -64.981 77.458 -11 - vertex -65.078 77.361 -5 - vertex -65.078 77.361 -11 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -25.082 37.365 -5 - vertex -65.078 77.361 -11 - vertex -65.078 77.361 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -65.078 77.361 -11 - vertex -25.082 37.365 -5 - vertex -25.082 37.365 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -64.981 77.458 -5 - vertex -64.981 77.599 -11 - vertex -64.981 77.599 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -64.981 77.599 -11 - vertex -64.981 77.458 -5 - vertex -64.981 77.458 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -64.981 77.599 -11 - vertex 71.023 77.599 -5 - vertex -64.981 77.599 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 71.023 77.599 -5 - vertex -64.981 77.599 -11 - vertex 71.023 77.599 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 71.023 77.458 -11 - vertex 71.023 77.599 -5 - vertex 71.023 77.599 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 71.023 77.599 -5 - vertex 71.023 77.458 -11 - vertex 71.023 77.458 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 71.12 77.361 -11 - vertex 71.023 77.458 -5 - vertex 71.023 77.458 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 71.023 77.458 -5 - vertex 71.12 77.361 -11 - vertex 71.12 77.361 -5 - endloop - endfacet - facet normal -0.707119 0.707094 0 - outer loop - vertex 43.119 49.359 -11 - vertex 71.12 77.361 -5 - vertex 71.12 77.361 -11 - endloop - endfacet - facet normal -0.707119 0.707094 0 - outer loop - vertex 71.12 77.361 -5 - vertex 43.119 49.359 -11 - vertex 43.119 49.359 -5 - endloop - endfacet - facet normal -0.708522 0.705689 0 - outer loop - vertex 41.125 47.357 -11 - vertex 43.119 49.359 -5 - vertex 43.119 49.359 -11 - endloop - endfacet - facet normal -0.708522 0.705689 0 - outer loop - vertex 43.119 49.359 -5 - vertex 41.125 47.357 -11 - vertex 41.125 47.357 -5 - endloop - endfacet - facet normal -0.706788 0.707425 0 - outer loop - vertex 41.125 47.357 -11 - vertex 31.124 37.365 -5 - vertex 41.125 47.357 -5 - endloop - endfacet - facet normal -0.706788 0.707425 0 - outer loop - vertex 31.124 37.365 -5 - vertex 41.125 47.357 -11 - vertex 31.124 37.365 -11 - endloop - endfacet - facet normal 0.675091 0.737734 -0 - outer loop - vertex 31.124 37.365 -11 - vertex 31.018 37.462 -5 - vertex 31.124 37.365 -5 - endloop - endfacet - facet normal 0.675091 0.737734 0 - outer loop - vertex 31.018 37.462 -5 - vertex 31.124 37.365 -11 - vertex 31.018 37.462 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 31.018 37.321 -11 - vertex 31.018 37.462 -5 - vertex 31.018 37.462 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 31.018 37.462 -5 - vertex 31.018 37.321 -11 - vertex 31.018 37.321 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 31.018 37.321 -11 - vertex -24.976 37.321 -5 - vertex 31.018 37.321 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -24.976 37.321 -5 - vertex 31.018 37.321 -11 - vertex -24.976 37.321 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -24.976 37.321 -5 - vertex -24.976 37.462 -11 - vertex -24.976 37.462 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -24.976 37.462 -11 - vertex -24.976 37.321 -5 - vertex -24.976 37.321 -11 - endloop - endfacet - facet normal -0.675091 0.737734 0 - outer loop - vertex -24.976 37.462 -11 - vertex -25.082 37.365 -5 - vertex -24.976 37.462 -5 - endloop - endfacet - facet normal -0.675091 0.737734 0 - outer loop - vertex -25.082 37.365 -5 - vertex -24.976 37.462 -11 - vertex -25.082 37.365 -11 - endloop - endfacet - facet normal 0.994436 -0.105343 0 - outer loop - vertex 105.878 106.959 -5 - vertex 105.912 107.28 -11 - vertex 105.912 107.28 -5 - endloop - endfacet - facet normal 0.994436 -0.105343 0 - outer loop - vertex 105.912 107.28 -11 - vertex 105.878 106.959 -5 - vertex 105.878 106.959 -11 - endloop - endfacet - facet normal 0.994436 0.105343 0 - outer loop - vertex 105.912 106.638 -5 - vertex 105.878 106.959 -11 - vertex 105.878 106.959 -5 - endloop - endfacet - facet normal 0.994436 0.105343 0 - outer loop - vertex 105.878 106.959 -11 - vertex 105.912 106.638 -5 - vertex 105.912 106.638 -11 - endloop - endfacet - facet normal 0.95055 -0.310571 0 - outer loop - vertex 105.912 107.28 -5 - vertex 106.011 107.583 -11 - vertex 106.011 107.583 -5 - endloop - endfacet - facet normal 0.95055 -0.310571 0 - outer loop - vertex 106.011 107.583 -11 - vertex 105.912 107.28 -5 - vertex 105.912 107.28 -11 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 106.011 107.583 -5 - vertex 106.167 107.861 -11 - vertex 106.167 107.861 -5 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 106.167 107.861 -11 - vertex 106.011 107.583 -5 - vertex 106.011 107.583 -11 - endloop - endfacet - facet normal 0.768478 -0.639876 0 - outer loop - vertex 106.167 107.861 -5 - vertex 106.371 108.106 -11 - vertex 106.371 108.106 -5 - endloop - endfacet - facet normal 0.768478 -0.639876 0 - outer loop - vertex 106.371 108.106 -11 - vertex 106.167 107.861 -5 - vertex 106.167 107.861 -11 - endloop - endfacet - facet normal 0.639874 -0.76848 0 - outer loop - vertex 106.371 108.106 -11 - vertex 106.616 108.31 -5 - vertex 106.371 108.106 -5 - endloop - endfacet - facet normal 0.639874 -0.76848 0 - outer loop - vertex 106.616 108.31 -5 - vertex 106.371 108.106 -11 - vertex 106.616 108.31 -11 - endloop - endfacet - facet normal 0.489382 -0.87207 0 - outer loop - vertex 106.616 108.31 -11 - vertex 106.894 108.466 -5 - vertex 106.616 108.31 -5 - endloop - endfacet - facet normal 0.489382 -0.87207 0 - outer loop - vertex 106.894 108.466 -5 - vertex 106.616 108.31 -11 - vertex 106.894 108.466 -11 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex 106.894 108.466 -11 - vertex 107.197 108.565 -5 - vertex 106.894 108.466 -5 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex 107.197 108.565 -5 - vertex 106.894 108.466 -11 - vertex 107.197 108.565 -11 - endloop - endfacet - facet normal 0.10532 -0.994438 0 - outer loop - vertex 107.197 108.565 -11 - vertex 107.518 108.599 -5 - vertex 107.197 108.565 -5 - endloop - endfacet - facet normal 0.10532 -0.994438 0 - outer loop - vertex 107.518 108.599 -5 - vertex 107.197 108.565 -11 - vertex 107.518 108.599 -11 - endloop - endfacet - facet normal -0.10532 -0.994438 0 - outer loop - vertex 107.518 108.599 -11 - vertex 107.839 108.565 -5 - vertex 107.518 108.599 -5 - endloop - endfacet - facet normal -0.10532 -0.994438 -0 - outer loop - vertex 107.839 108.565 -5 - vertex 107.518 108.599 -11 - vertex 107.839 108.565 -11 - endloop - endfacet - facet normal -0.310571 -0.95055 0 - outer loop - vertex 107.839 108.565 -11 - vertex 108.142 108.466 -5 - vertex 107.839 108.565 -5 - endloop - endfacet - facet normal -0.310571 -0.95055 -0 - outer loop - vertex 108.142 108.466 -5 - vertex 107.839 108.565 -11 - vertex 108.142 108.466 -11 - endloop - endfacet - facet normal -0.489382 -0.87207 0 - outer loop - vertex 108.142 108.466 -11 - vertex 108.42 108.31 -5 - vertex 108.142 108.466 -5 - endloop - endfacet - facet normal -0.489382 -0.87207 -0 - outer loop - vertex 108.42 108.31 -5 - vertex 108.142 108.466 -11 - vertex 108.42 108.31 -11 - endloop - endfacet - facet normal -0.639862 -0.76849 0 - outer loop - vertex 108.42 108.31 -11 - vertex 108.665 108.106 -5 - vertex 108.42 108.31 -5 - endloop - endfacet - facet normal -0.639862 -0.76849 -0 - outer loop - vertex 108.665 108.106 -5 - vertex 108.42 108.31 -11 - vertex 108.665 108.106 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex 108.869 107.861 -11 - vertex 108.665 108.106 -5 - vertex 108.665 108.106 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex 108.665 108.106 -5 - vertex 108.869 107.861 -11 - vertex 108.869 107.861 -5 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex 109.025 107.583 -11 - vertex 108.869 107.861 -5 - vertex 108.869 107.861 -11 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex 108.869 107.861 -5 - vertex 109.025 107.583 -11 - vertex 109.025 107.583 -5 - endloop - endfacet - facet normal -0.95055 -0.310571 0 - outer loop - vertex 109.124 107.28 -11 - vertex 109.025 107.583 -5 - vertex 109.025 107.583 -11 - endloop - endfacet - facet normal -0.95055 -0.310571 0 - outer loop - vertex 109.025 107.583 -5 - vertex 109.124 107.28 -11 - vertex 109.124 107.28 -5 - endloop - endfacet - facet normal -0.99411 -0.10838 0 - outer loop - vertex 109.159 106.959 -11 - vertex 109.124 107.28 -5 - vertex 109.124 107.28 -11 - endloop - endfacet - facet normal -0.99411 -0.10838 0 - outer loop - vertex 109.124 107.28 -5 - vertex 109.159 106.959 -11 - vertex 109.159 106.959 -5 - endloop - endfacet - facet normal -0.99411 0.10838 0 - outer loop - vertex 109.124 106.638 -11 - vertex 109.159 106.959 -5 - vertex 109.159 106.959 -11 - endloop - endfacet - facet normal -0.99411 0.10838 0 - outer loop - vertex 109.159 106.959 -5 - vertex 109.124 106.638 -11 - vertex 109.124 106.638 -5 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex 109.025 106.335 -11 - vertex 109.124 106.638 -5 - vertex 109.124 106.638 -11 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex 109.124 106.638 -5 - vertex 109.025 106.335 -11 - vertex 109.025 106.335 -5 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex 108.869 106.057 -11 - vertex 109.025 106.335 -5 - vertex 109.025 106.335 -11 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex 109.025 106.335 -5 - vertex 108.869 106.057 -11 - vertex 108.869 106.057 -5 - endloop - endfacet - facet normal -0.768478 0.639876 0 - outer loop - vertex 108.665 105.812 -11 - vertex 108.869 106.057 -5 - vertex 108.869 106.057 -11 - endloop - endfacet - facet normal -0.768478 0.639876 0 - outer loop - vertex 108.869 106.057 -5 - vertex 108.665 105.812 -11 - vertex 108.665 105.812 -5 - endloop - endfacet - facet normal -0.639862 0.76849 0 - outer loop - vertex 108.665 105.812 -11 - vertex 108.42 105.608 -5 - vertex 108.665 105.812 -5 - endloop - endfacet - facet normal -0.639862 0.76849 0 - outer loop - vertex 108.42 105.608 -5 - vertex 108.665 105.812 -11 - vertex 108.42 105.608 -11 - endloop - endfacet - facet normal -0.489382 0.87207 0 - outer loop - vertex 108.42 105.608 -11 - vertex 108.142 105.452 -5 - vertex 108.42 105.608 -5 - endloop - endfacet - facet normal -0.489382 0.87207 0 - outer loop - vertex 108.142 105.452 -5 - vertex 108.42 105.608 -11 - vertex 108.142 105.452 -11 - endloop - endfacet - facet normal -0.310571 0.95055 0 - outer loop - vertex 108.142 105.452 -11 - vertex 107.839 105.353 -5 - vertex 108.142 105.452 -5 - endloop - endfacet - facet normal -0.310571 0.95055 0 - outer loop - vertex 107.839 105.353 -5 - vertex 108.142 105.452 -11 - vertex 107.839 105.353 -11 - endloop - endfacet - facet normal -0.10532 0.994438 0 - outer loop - vertex 107.839 105.353 -11 - vertex 107.518 105.319 -5 - vertex 107.839 105.353 -5 - endloop - endfacet - facet normal -0.10532 0.994438 0 - outer loop - vertex 107.518 105.319 -5 - vertex 107.839 105.353 -11 - vertex 107.518 105.319 -11 - endloop - endfacet - facet normal 0.10532 0.994438 -0 - outer loop - vertex 107.518 105.319 -11 - vertex 107.197 105.353 -5 - vertex 107.518 105.319 -5 - endloop - endfacet - facet normal 0.10532 0.994438 0 - outer loop - vertex 107.197 105.353 -5 - vertex 107.518 105.319 -11 - vertex 107.197 105.353 -11 - endloop - endfacet - facet normal 0.310571 0.95055 -0 - outer loop - vertex 107.197 105.353 -11 - vertex 106.894 105.452 -5 - vertex 107.197 105.353 -5 - endloop - endfacet - facet normal 0.310571 0.95055 0 - outer loop - vertex 106.894 105.452 -5 - vertex 107.197 105.353 -11 - vertex 106.894 105.452 -11 - endloop - endfacet - facet normal 0.489382 0.87207 -0 - outer loop - vertex 106.894 105.452 -11 - vertex 106.616 105.608 -5 - vertex 106.894 105.452 -5 - endloop - endfacet - facet normal 0.489382 0.87207 0 - outer loop - vertex 106.616 105.608 -5 - vertex 106.894 105.452 -11 - vertex 106.616 105.608 -11 - endloop - endfacet - facet normal 0.639874 0.76848 -0 - outer loop - vertex 106.616 105.608 -11 - vertex 106.371 105.812 -5 - vertex 106.616 105.608 -5 - endloop - endfacet - facet normal 0.639874 0.76848 0 - outer loop - vertex 106.371 105.812 -5 - vertex 106.616 105.608 -11 - vertex 106.371 105.812 -11 - endloop - endfacet - facet normal 0.768478 0.639876 0 - outer loop - vertex 106.371 105.812 -5 - vertex 106.167 106.057 -11 - vertex 106.167 106.057 -5 - endloop - endfacet - facet normal 0.768478 0.639876 0 - outer loop - vertex 106.167 106.057 -11 - vertex 106.371 105.812 -5 - vertex 106.371 105.812 -11 - endloop - endfacet - facet normal 0.87208 0.489363 0 - outer loop - vertex 106.167 106.057 -5 - vertex 106.011 106.335 -11 - vertex 106.011 106.335 -5 - endloop - endfacet - facet normal 0.87208 0.489363 0 - outer loop - vertex 106.011 106.335 -11 - vertex 106.167 106.057 -5 - vertex 106.167 106.057 -11 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex 106.011 106.335 -5 - vertex 105.912 106.638 -11 - vertex 105.912 106.638 -5 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex 105.912 106.638 -11 - vertex 106.011 106.335 -5 - vertex 106.011 106.335 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 22.878 -2.543 -5 - vertex 22.878 7.458 -11 - vertex 22.878 7.458 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 22.878 7.458 -11 - vertex 22.878 -2.543 -5 - vertex 22.878 -2.543 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 23.019 -2.543 -11 - vertex 22.878 -2.543 -5 - vertex 23.019 -2.543 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 22.878 -2.543 -5 - vertex 23.019 -2.543 -11 - vertex 22.878 -2.543 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 22.878 7.458 -11 - vertex 23.028 7.458 -5 - vertex 22.878 7.458 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 23.028 7.458 -5 - vertex 22.878 7.458 -11 - vertex 23.028 7.458 -11 - endloop - endfacet - facet normal 0.70711 0.707104 0 - outer loop - vertex 23.028 7.458 -5 - vertex 22.922 7.564 -11 - vertex 22.922 7.564 -5 - endloop - endfacet - facet normal 0.70711 0.707104 0 - outer loop - vertex 22.922 7.564 -11 - vertex 23.028 7.458 -5 - vertex 23.028 7.458 -11 - endloop - endfacet - facet normal 0.706948 -0.707266 0 - outer loop - vertex 22.922 7.564 -11 - vertex 42.925 27.558 -5 - vertex 22.922 7.564 -5 - endloop - endfacet - facet normal 0.706948 -0.707266 0 - outer loop - vertex 42.925 27.558 -5 - vertex 22.922 7.564 -11 - vertex 42.925 27.558 -11 - endloop - endfacet - facet normal -0.710722 -0.703473 0 - outer loop - vertex 43.022 27.46 -11 - vertex 42.925 27.558 -5 - vertex 42.925 27.558 -11 - endloop - endfacet - facet normal -0.710722 -0.703473 0 - outer loop - vertex 42.925 27.558 -5 - vertex 43.022 27.46 -11 - vertex 43.022 27.46 -5 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 43.022 27.46 -5 - vertex 43.022 27.602 -11 - vertex 43.022 27.602 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 43.022 27.602 -11 - vertex 43.022 27.46 -5 - vertex 43.022 27.46 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 43.022 27.602 -11 - vertex 53.023 27.602 -5 - vertex 43.022 27.602 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 53.023 27.602 -5 - vertex 43.022 27.602 -11 - vertex 53.023 27.602 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 53.023 27.46 -11 - vertex 53.023 27.602 -5 - vertex 53.023 27.602 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 53.023 27.602 -5 - vertex 53.023 27.46 -11 - vertex 53.023 27.46 -5 - endloop - endfacet - facet normal 0.710722 -0.703473 0 - outer loop - vertex 53.023 27.46 -5 - vertex 53.12 27.558 -11 - vertex 53.12 27.558 -5 - endloop - endfacet - facet normal 0.710722 -0.703473 0 - outer loop - vertex 53.12 27.558 -11 - vertex 53.023 27.46 -5 - vertex 53.023 27.46 -11 - endloop - endfacet - facet normal -0.706965 -0.707248 0 - outer loop - vertex 53.12 27.558 -11 - vertex 73.122 7.564 -5 - vertex 53.12 27.558 -5 - endloop - endfacet - facet normal -0.706965 -0.707248 -0 - outer loop - vertex 73.122 7.564 -5 - vertex 53.12 27.558 -11 - vertex 73.122 7.564 -11 - endloop - endfacet - facet normal -0.707097 0.707116 0 - outer loop - vertex 73.122 7.564 -11 - vertex 73.016 7.458 -5 - vertex 73.122 7.564 -5 - endloop - endfacet - facet normal -0.707097 0.707116 0 - outer loop - vertex 73.016 7.458 -5 - vertex 73.122 7.564 -11 - vertex 73.016 7.458 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 73.016 7.458 -11 - vertex 73.166 7.458 -5 - vertex 73.016 7.458 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 73.166 7.458 -5 - vertex 73.016 7.458 -11 - vertex 73.166 7.458 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 73.166 -2.543 -11 - vertex 73.166 7.458 -5 - vertex 73.166 7.458 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 73.166 7.458 -5 - vertex 73.166 -2.543 -11 - vertex 73.166 -2.543 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 73.166 -2.543 -11 - vertex 73.025 -2.543 -5 - vertex 73.166 -2.543 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 73.025 -2.543 -5 - vertex 73.166 -2.543 -11 - vertex 73.025 -2.543 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 73.122 -2.64 -11 - vertex 73.025 -2.543 -5 - vertex 73.025 -2.543 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 73.025 -2.543 -5 - vertex 73.122 -2.64 -11 - vertex 73.122 -2.64 -5 - endloop - endfacet - facet normal -0.707124 0.707089 0 - outer loop - vertex 53.12 -22.643 -11 - vertex 73.122 -2.64 -5 - vertex 73.122 -2.64 -11 - endloop - endfacet - facet normal -0.707124 0.707089 0 - outer loop - vertex 73.122 -2.64 -5 - vertex 53.12 -22.643 -11 - vertex 53.12 -22.643 -5 - endloop - endfacet - facet normal 0.737734 0.675091 0 - outer loop - vertex 53.12 -22.643 -5 - vertex 53.023 -22.537 -11 - vertex 53.023 -22.537 -5 - endloop - endfacet - facet normal 0.737734 0.675091 0 - outer loop - vertex 53.023 -22.537 -11 - vertex 53.12 -22.643 -5 - vertex 53.12 -22.643 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 53.023 -22.678 -11 - vertex 53.023 -22.537 -5 - vertex 53.023 -22.537 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 53.023 -22.537 -5 - vertex 53.023 -22.678 -11 - vertex 53.023 -22.678 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 53.023 -22.678 -11 - vertex 43.022 -22.678 -5 - vertex 53.023 -22.678 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 43.022 -22.678 -5 - vertex 53.023 -22.678 -11 - vertex 43.022 -22.678 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 43.022 -22.678 -5 - vertex 43.022 -22.537 -11 - vertex 43.022 -22.537 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 43.022 -22.537 -11 - vertex 43.022 -22.678 -5 - vertex 43.022 -22.678 -11 - endloop - endfacet - facet normal -0.737734 0.675091 0 - outer loop - vertex 42.925 -22.643 -11 - vertex 43.022 -22.537 -5 - vertex 43.022 -22.537 -11 - endloop - endfacet - facet normal -0.737734 0.675091 0 - outer loop - vertex 43.022 -22.537 -5 - vertex 42.925 -22.643 -11 - vertex 42.925 -22.643 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 42.925 -22.643 -5 - vertex 22.922 -2.64 -11 - vertex 22.922 -2.64 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex 22.922 -2.64 -11 - vertex 42.925 -22.643 -5 - vertex 42.925 -22.643 -11 - endloop - endfacet - facet normal 0.707114 -0.7071 0 - outer loop - vertex 22.922 -2.64 -5 - vertex 23.019 -2.543 -11 - vertex 23.019 -2.543 -5 - endloop - endfacet - facet normal 0.707114 -0.7071 0 - outer loop - vertex 23.019 -2.543 -11 - vertex 22.922 -2.64 -5 - vertex 22.922 -2.64 -11 - endloop - endfacet - facet normal 0.994107 -0.108403 0 - outer loop - vertex 96.379 2.457 -5 - vertex 96.414 2.778 -11 - vertex 96.414 2.778 -5 - endloop - endfacet - facet normal 0.994107 -0.108403 0 - outer loop - vertex 96.414 2.778 -11 - vertex 96.379 2.457 -5 - vertex 96.379 2.457 -11 - endloop - endfacet - facet normal 0.99407 0.108738 0 - outer loop - vertex 96.414 2.137 -5 - vertex 96.379 2.457 -11 - vertex 96.379 2.457 -5 - endloop - endfacet - facet normal 0.99407 0.108738 0 - outer loop - vertex 96.379 2.457 -11 - vertex 96.414 2.137 -5 - vertex 96.414 2.137 -11 - endloop - endfacet - facet normal 0.95055 -0.310573 0 - outer loop - vertex 96.414 2.778 -5 - vertex 96.513 3.081 -11 - vertex 96.513 3.081 -5 - endloop - endfacet - facet normal 0.95055 -0.310573 0 - outer loop - vertex 96.513 3.081 -11 - vertex 96.414 2.778 -5 - vertex 96.414 2.778 -11 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 96.513 3.081 -5 - vertex 96.669 3.359 -11 - vertex 96.669 3.359 -5 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 96.669 3.359 -11 - vertex 96.513 3.081 -5 - vertex 96.513 3.081 -11 - endloop - endfacet - facet normal 0.768475 -0.63988 0 - outer loop - vertex 96.669 3.359 -5 - vertex 96.873 3.604 -11 - vertex 96.873 3.604 -5 - endloop - endfacet - facet normal 0.768475 -0.63988 0 - outer loop - vertex 96.873 3.604 -11 - vertex 96.669 3.359 -5 - vertex 96.669 3.359 -11 - endloop - endfacet - facet normal 0.639884 -0.768471 0 - outer loop - vertex 96.873 3.604 -11 - vertex 97.118 3.808 -5 - vertex 96.873 3.604 -5 - endloop - endfacet - facet normal 0.639884 -0.768471 0 - outer loop - vertex 97.118 3.808 -5 - vertex 96.873 3.604 -11 - vertex 97.118 3.808 -11 - endloop - endfacet - facet normal 0.489368 -0.872077 0 - outer loop - vertex 97.118 3.808 -11 - vertex 97.396 3.964 -5 - vertex 97.118 3.808 -5 - endloop - endfacet - facet normal 0.489368 -0.872077 0 - outer loop - vertex 97.396 3.964 -5 - vertex 97.118 3.808 -11 - vertex 97.396 3.964 -11 - endloop - endfacet - facet normal 0.310574 -0.950549 0 - outer loop - vertex 97.396 3.964 -11 - vertex 97.699 4.063 -5 - vertex 97.396 3.964 -5 - endloop - endfacet - facet normal 0.310574 -0.950549 0 - outer loop - vertex 97.699 4.063 -5 - vertex 97.396 3.964 -11 - vertex 97.699 4.063 -11 - endloop - endfacet - facet normal 0.108392 -0.994108 0 - outer loop - vertex 97.699 4.063 -11 - vertex 98.02 4.098 -5 - vertex 97.699 4.063 -5 - endloop - endfacet - facet normal 0.108392 -0.994108 0 - outer loop - vertex 98.02 4.098 -5 - vertex 97.699 4.063 -11 - vertex 98.02 4.098 -11 - endloop - endfacet - facet normal -0.108726 -0.994072 0 - outer loop - vertex 98.02 4.098 -11 - vertex 98.34 4.063 -5 - vertex 98.02 4.098 -5 - endloop - endfacet - facet normal -0.108726 -0.994072 -0 - outer loop - vertex 98.34 4.063 -5 - vertex 98.02 4.098 -11 - vertex 98.34 4.063 -11 - endloop - endfacet - facet normal -0.310574 -0.950549 0 - outer loop - vertex 98.34 4.063 -11 - vertex 98.643 3.964 -5 - vertex 98.34 4.063 -5 - endloop - endfacet - facet normal -0.310574 -0.950549 -0 - outer loop - vertex 98.643 3.964 -5 - vertex 98.34 4.063 -11 - vertex 98.643 3.964 -11 - endloop - endfacet - facet normal -0.489368 -0.872077 0 - outer loop - vertex 98.643 3.964 -11 - vertex 98.921 3.808 -5 - vertex 98.643 3.964 -5 - endloop - endfacet - facet normal -0.489368 -0.872077 -0 - outer loop - vertex 98.921 3.808 -5 - vertex 98.643 3.964 -11 - vertex 98.921 3.808 -11 - endloop - endfacet - facet normal -0.639872 -0.768481 0 - outer loop - vertex 98.921 3.808 -11 - vertex 99.166 3.604 -5 - vertex 98.921 3.808 -5 - endloop - endfacet - facet normal -0.639872 -0.768481 -0 - outer loop - vertex 99.166 3.604 -5 - vertex 98.921 3.808 -11 - vertex 99.166 3.604 -11 - endloop - endfacet - facet normal -0.766934 -0.641726 0 - outer loop - vertex 99.371 3.359 -11 - vertex 99.166 3.604 -5 - vertex 99.166 3.604 -11 - endloop - endfacet - facet normal -0.766934 -0.641726 0 - outer loop - vertex 99.166 3.604 -5 - vertex 99.371 3.359 -11 - vertex 99.371 3.359 -5 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex 99.526 3.081 -11 - vertex 99.371 3.359 -5 - vertex 99.371 3.359 -11 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex 99.371 3.359 -5 - vertex 99.526 3.081 -11 - vertex 99.526 3.081 -5 - endloop - endfacet - facet normal -0.95055 -0.310573 0 - outer loop - vertex 99.625 2.778 -11 - vertex 99.526 3.081 -5 - vertex 99.526 3.081 -11 - endloop - endfacet - facet normal -0.95055 -0.310573 0 - outer loop - vertex 99.526 3.081 -5 - vertex 99.625 2.778 -11 - vertex 99.625 2.778 -5 - endloop - endfacet - facet normal -0.994107 -0.108403 0 - outer loop - vertex 99.66 2.457 -11 - vertex 99.625 2.778 -5 - vertex 99.625 2.778 -11 - endloop - endfacet - facet normal -0.994107 -0.108403 0 - outer loop - vertex 99.625 2.778 -5 - vertex 99.66 2.457 -11 - vertex 99.66 2.457 -5 - endloop - endfacet - facet normal -0.99407 0.108738 0 - outer loop - vertex 99.625 2.137 -11 - vertex 99.66 2.457 -5 - vertex 99.66 2.457 -11 - endloop - endfacet - facet normal -0.99407 0.108738 0 - outer loop - vertex 99.66 2.457 -5 - vertex 99.625 2.137 -11 - vertex 99.625 2.137 -5 - endloop - endfacet - facet normal -0.95055 0.310573 0 - outer loop - vertex 99.526 1.834 -11 - vertex 99.625 2.137 -5 - vertex 99.625 2.137 -11 - endloop - endfacet - facet normal -0.95055 0.310573 0 - outer loop - vertex 99.625 2.137 -5 - vertex 99.526 1.834 -11 - vertex 99.526 1.834 -5 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex 99.371 1.556 -11 - vertex 99.526 1.834 -5 - vertex 99.526 1.834 -11 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex 99.526 1.834 -5 - vertex 99.371 1.556 -11 - vertex 99.371 1.556 -5 - endloop - endfacet - facet normal -0.766934 0.641726 0 - outer loop - vertex 99.166 1.311 -11 - vertex 99.371 1.556 -5 - vertex 99.371 1.556 -11 - endloop - endfacet - facet normal -0.766934 0.641726 0 - outer loop - vertex 99.371 1.556 -5 - vertex 99.166 1.311 -11 - vertex 99.166 1.311 -5 - endloop - endfacet - facet normal -0.641718 0.76694 0 - outer loop - vertex 99.166 1.311 -11 - vertex 98.921 1.106 -5 - vertex 99.166 1.311 -5 - endloop - endfacet - facet normal -0.641718 0.76694 0 - outer loop - vertex 98.921 1.106 -5 - vertex 99.166 1.311 -11 - vertex 98.921 1.106 -11 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 98.921 1.106 -11 - vertex 98.643 0.950999 -5 - vertex 98.921 1.106 -5 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 98.643 0.950999 -5 - vertex 98.921 1.106 -11 - vertex 98.643 0.950999 -11 - endloop - endfacet - facet normal -0.310574 0.950549 0 - outer loop - vertex 98.643 0.950999 -11 - vertex 98.34 0.851999 -5 - vertex 98.643 0.950999 -5 - endloop - endfacet - facet normal -0.310574 0.950549 0 - outer loop - vertex 98.34 0.851999 -5 - vertex 98.643 0.950999 -11 - vertex 98.34 0.851999 -11 - endloop - endfacet - facet normal -0.108726 0.994072 0 - outer loop - vertex 98.34 0.851999 -11 - vertex 98.02 0.816999 -5 - vertex 98.34 0.851999 -5 - endloop - endfacet - facet normal -0.108726 0.994072 0 - outer loop - vertex 98.02 0.816999 -5 - vertex 98.34 0.851999 -11 - vertex 98.02 0.816999 -11 - endloop - endfacet - facet normal 0.108392 0.994108 -0 - outer loop - vertex 98.02 0.816999 -11 - vertex 97.699 0.851999 -5 - vertex 98.02 0.816999 -5 - endloop - endfacet - facet normal 0.108392 0.994108 0 - outer loop - vertex 97.699 0.851999 -5 - vertex 98.02 0.816999 -11 - vertex 97.699 0.851999 -11 - endloop - endfacet - facet normal 0.310574 0.950549 -0 - outer loop - vertex 97.699 0.851999 -11 - vertex 97.396 0.950999 -5 - vertex 97.699 0.851999 -5 - endloop - endfacet - facet normal 0.310574 0.950549 0 - outer loop - vertex 97.396 0.950999 -5 - vertex 97.699 0.851999 -11 - vertex 97.396 0.950999 -11 - endloop - endfacet - facet normal 0.486978 0.873414 -0 - outer loop - vertex 97.396 0.950999 -11 - vertex 97.118 1.106 -5 - vertex 97.396 0.950999 -5 - endloop - endfacet - facet normal 0.486978 0.873414 0 - outer loop - vertex 97.118 1.106 -5 - vertex 97.396 0.950999 -11 - vertex 97.118 1.106 -11 - endloop - endfacet - facet normal 0.64173 0.766931 -0 - outer loop - vertex 97.118 1.106 -11 - vertex 96.873 1.311 -5 - vertex 97.118 1.106 -5 - endloop - endfacet - facet normal 0.64173 0.766931 0 - outer loop - vertex 96.873 1.311 -5 - vertex 97.118 1.106 -11 - vertex 96.873 1.311 -11 - endloop - endfacet - facet normal 0.768475 0.63988 0 - outer loop - vertex 96.873 1.311 -5 - vertex 96.669 1.556 -11 - vertex 96.669 1.556 -5 - endloop - endfacet - facet normal 0.768475 0.63988 0 - outer loop - vertex 96.669 1.556 -11 - vertex 96.873 1.311 -5 - vertex 96.873 1.311 -11 - endloop - endfacet - facet normal 0.87208 0.489363 0 - outer loop - vertex 96.669 1.556 -5 - vertex 96.513 1.834 -11 - vertex 96.513 1.834 -5 - endloop - endfacet - facet normal 0.87208 0.489363 0 - outer loop - vertex 96.513 1.834 -11 - vertex 96.669 1.556 -5 - vertex 96.669 1.556 -11 - endloop - endfacet - facet normal 0.95055 0.310573 0 - outer loop - vertex 96.513 1.834 -5 - vertex 96.414 2.137 -11 - vertex 96.414 2.137 -5 - endloop - endfacet - facet normal 0.95055 0.310573 0 - outer loop - vertex 96.414 2.137 -11 - vertex 96.513 1.834 -5 - vertex 96.513 1.834 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 82.877 -9.678 -5 - vertex 82.877 13.323 -11 - vertex 82.877 13.323 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 82.877 13.323 -11 - vertex 82.877 -9.678 -5 - vertex 82.877 -9.678 -11 - endloop - endfacet - facet normal 0.99489 0.100967 0 - outer loop - vertex 82.959 -10.486 -5 - vertex 82.877 -9.678 -11 - vertex 82.877 -9.678 -5 - endloop - endfacet - facet normal 0.99489 0.100967 0 - outer loop - vertex 82.877 -9.678 -11 - vertex 82.959 -10.486 -5 - vertex 82.959 -10.486 -11 - endloop - endfacet - facet normal 0.99489 -0.100967 0 - outer loop - vertex 82.877 13.323 -5 - vertex 82.959 14.131 -11 - vertex 82.959 14.131 -5 - endloop - endfacet - facet normal 0.99489 -0.100967 0 - outer loop - vertex 82.959 14.131 -11 - vertex 82.877 13.323 -5 - vertex 82.877 13.323 -11 - endloop - endfacet - facet normal 0.955939 -0.293565 0 - outer loop - vertex 82.959 14.131 -5 - vertex 83.197 14.906 -11 - vertex 83.197 14.906 -5 - endloop - endfacet - facet normal 0.955939 -0.293565 0 - outer loop - vertex 83.197 14.906 -11 - vertex 82.959 14.131 -5 - vertex 82.959 14.131 -11 - endloop - endfacet - facet normal 0.881771 -0.471677 0 - outer loop - vertex 83.197 14.906 -5 - vertex 83.58 15.622 -11 - vertex 83.58 15.622 -5 - endloop - endfacet - facet normal 0.881771 -0.471677 0 - outer loop - vertex 83.58 15.622 -11 - vertex 83.197 14.906 -5 - vertex 83.197 14.906 -11 - endloop - endfacet - facet normal 0.774341 -0.632769 0 - outer loop - vertex 83.58 15.622 -5 - vertex 84.094 16.251 -11 - vertex 84.094 16.251 -5 - endloop - endfacet - facet normal 0.774341 -0.632769 0 - outer loop - vertex 84.094 16.251 -11 - vertex 83.58 15.622 -5 - vertex 83.58 15.622 -11 - endloop - endfacet - facet normal 0.633373 -0.773847 0 - outer loop - vertex 84.094 16.251 -11 - vertex 84.722 16.765 -5 - vertex 84.094 16.251 -5 - endloop - endfacet - facet normal 0.633373 -0.773847 0 - outer loop - vertex 84.722 16.765 -5 - vertex 84.094 16.251 -11 - vertex 84.722 16.765 -11 - endloop - endfacet - facet normal 0.470714 -0.882286 0 - outer loop - vertex 84.722 16.765 -11 - vertex 85.438 17.147 -5 - vertex 84.722 16.765 -5 - endloop - endfacet - facet normal 0.470714 -0.882286 0 - outer loop - vertex 85.438 17.147 -5 - vertex 84.722 16.765 -11 - vertex 85.438 17.147 -11 - endloop - endfacet - facet normal 0.294348 -0.955698 0 - outer loop - vertex 85.438 17.147 -11 - vertex 86.214 17.386 -5 - vertex 85.438 17.147 -5 - endloop - endfacet - facet normal 0.294348 -0.955698 0 - outer loop - vertex 86.214 17.386 -5 - vertex 85.438 17.147 -11 - vertex 86.214 17.386 -11 - endloop - endfacet - facet normal 0.100964 -0.99489 0 - outer loop - vertex 86.214 17.386 -11 - vertex 87.022 17.468 -5 - vertex 86.214 17.386 -5 - endloop - endfacet - facet normal 0.100964 -0.99489 0 - outer loop - vertex 87.022 17.468 -5 - vertex 86.214 17.386 -11 - vertex 87.022 17.468 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 87.022 17.468 -11 - vertex 89.024 17.468 -5 - vertex 87.022 17.468 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 89.024 17.468 -5 - vertex 87.022 17.468 -11 - vertex 89.024 17.468 -11 - endloop - endfacet - facet normal -0.101089 -0.994877 0 - outer loop - vertex 89.024 17.468 -11 - vertex 89.831 17.386 -5 - vertex 89.024 17.468 -5 - endloop - endfacet - facet normal -0.101089 -0.994877 -0 - outer loop - vertex 89.831 17.386 -5 - vertex 89.024 17.468 -11 - vertex 89.831 17.386 -11 - endloop - endfacet - facet normal -0.294345 -0.955699 0 - outer loop - vertex 89.831 17.386 -11 - vertex 90.607 17.147 -5 - vertex 89.831 17.386 -5 - endloop - endfacet - facet normal -0.294345 -0.955699 -0 - outer loop - vertex 90.607 17.147 -5 - vertex 89.831 17.386 -11 - vertex 90.607 17.147 -11 - endloop - endfacet - facet normal -0.470718 -0.882284 0 - outer loop - vertex 90.607 17.147 -11 - vertex 91.323 16.765 -5 - vertex 90.607 17.147 -5 - endloop - endfacet - facet normal -0.470718 -0.882284 -0 - outer loop - vertex 91.323 16.765 -5 - vertex 90.607 17.147 -11 - vertex 91.323 16.765 -11 - endloop - endfacet - facet normal -0.63277 -0.77434 0 - outer loop - vertex 91.323 16.765 -11 - vertex 91.952 16.251 -5 - vertex 91.323 16.765 -5 - endloop - endfacet - facet normal -0.63277 -0.77434 -0 - outer loop - vertex 91.952 16.251 -5 - vertex 91.323 16.765 -11 - vertex 91.952 16.251 -11 - endloop - endfacet - facet normal -0.774944 -0.63203 0 - outer loop - vertex 92.465 15.622 -11 - vertex 91.952 16.251 -5 - vertex 91.952 16.251 -11 - endloop - endfacet - facet normal -0.774944 -0.63203 0 - outer loop - vertex 91.952 16.251 -5 - vertex 92.465 15.622 -11 - vertex 92.465 15.622 -5 - endloop - endfacet - facet normal -0.883815 -0.467836 0 - outer loop - vertex 92.844 14.906 -11 - vertex 92.465 15.622 -5 - vertex 92.465 15.622 -11 - endloop - endfacet - facet normal -0.883815 -0.467836 0 - outer loop - vertex 92.465 15.622 -5 - vertex 92.844 14.906 -11 - vertex 92.844 14.906 -5 - endloop - endfacet - facet normal -0.956972 -0.29018 0 - outer loop - vertex 93.079 14.131 -11 - vertex 92.844 14.906 -5 - vertex 92.844 14.906 -11 - endloop - endfacet - facet normal -0.956972 -0.29018 0 - outer loop - vertex 92.844 14.906 -5 - vertex 93.079 14.131 -11 - vertex 93.079 14.131 -5 - endloop - endfacet - facet normal -0.995013 -0.0997492 0 - outer loop - vertex 93.16 13.323 -11 - vertex 93.079 14.131 -5 - vertex 93.079 14.131 -11 - endloop - endfacet - facet normal -0.995013 -0.0997492 0 - outer loop - vertex 93.079 14.131 -5 - vertex 93.16 13.323 -11 - vertex 93.16 13.323 -5 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 93.16 -9.678 -11 - vertex 93.16 13.323 -5 - vertex 93.16 13.323 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 93.16 13.323 -5 - vertex 93.16 -9.678 -11 - vertex 93.16 -9.678 -5 - endloop - endfacet - facet normal -0.995013 0.0997492 0 - outer loop - vertex 93.079 -10.486 -11 - vertex 93.16 -9.678 -5 - vertex 93.16 -9.678 -11 - endloop - endfacet - facet normal -0.995013 0.0997492 0 - outer loop - vertex 93.16 -9.678 -5 - vertex 93.079 -10.486 -11 - vertex 93.079 -10.486 -5 - endloop - endfacet - facet normal -0.956972 0.290179 0 - outer loop - vertex 92.844 -11.261 -11 - vertex 93.079 -10.486 -5 - vertex 93.079 -10.486 -11 - endloop - endfacet - facet normal -0.956972 0.290179 0 - outer loop - vertex 93.079 -10.486 -5 - vertex 92.844 -11.261 -11 - vertex 92.844 -11.261 -5 - endloop - endfacet - facet normal -0.884085 0.467326 0 - outer loop - vertex 92.465 -11.978 -11 - vertex 92.844 -11.261 -5 - vertex 92.844 -11.261 -11 - endloop - endfacet - facet normal -0.884085 0.467326 0 - outer loop - vertex 92.844 -11.261 -5 - vertex 92.465 -11.978 -11 - vertex 92.465 -11.978 -5 - endloop - endfacet - facet normal -0.774451 0.632633 0 - outer loop - vertex 91.952 -12.606 -11 - vertex 92.465 -11.978 -5 - vertex 92.465 -11.978 -11 - endloop - endfacet - facet normal -0.774451 0.632633 0 - outer loop - vertex 92.465 -11.978 -5 - vertex 91.952 -12.606 -11 - vertex 91.952 -12.606 -5 - endloop - endfacet - facet normal -0.63203 0.774944 0 - outer loop - vertex 91.952 -12.606 -11 - vertex 91.323 -13.119 -5 - vertex 91.952 -12.606 -5 - endloop - endfacet - facet normal -0.63203 0.774944 0 - outer loop - vertex 91.323 -13.119 -5 - vertex 91.952 -12.606 -11 - vertex 91.323 -13.119 -11 - endloop - endfacet - facet normal -0.467833 0.883817 0 - outer loop - vertex 91.323 -13.119 -11 - vertex 90.607 -13.498 -5 - vertex 91.323 -13.119 -5 - endloop - endfacet - facet normal -0.467833 0.883817 0 - outer loop - vertex 90.607 -13.498 -5 - vertex 91.323 -13.119 -11 - vertex 90.607 -13.498 -11 - endloop - endfacet - facet normal -0.290965 0.956734 0 - outer loop - vertex 90.607 -13.498 -11 - vertex 89.831 -13.734 -5 - vertex 90.607 -13.498 -5 - endloop - endfacet - facet normal -0.290965 0.956734 0 - outer loop - vertex 89.831 -13.734 -5 - vertex 90.607 -13.498 -11 - vertex 89.831 -13.734 -11 - endloop - endfacet - facet normal -0.0998704 0.995 0 - outer loop - vertex 89.831 -13.734 -11 - vertex 89.024 -13.815 -5 - vertex 89.831 -13.734 -5 - endloop - endfacet - facet normal -0.0998704 0.995 0 - outer loop - vertex 89.024 -13.815 -5 - vertex 89.831 -13.734 -11 - vertex 89.024 -13.815 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 89.024 -13.815 -11 - vertex 87.022 -13.815 -5 - vertex 89.024 -13.815 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 87.022 -13.815 -5 - vertex 89.024 -13.815 -11 - vertex 87.022 -13.815 -11 - endloop - endfacet - facet normal 0.0997472 0.995013 -0 - outer loop - vertex 87.022 -13.815 -11 - vertex 86.214 -13.734 -5 - vertex 87.022 -13.815 -5 - endloop - endfacet - facet normal 0.0997472 0.995013 0 - outer loop - vertex 86.214 -13.734 -5 - vertex 87.022 -13.815 -11 - vertex 86.214 -13.734 -11 - endloop - endfacet - facet normal 0.290968 0.956733 -0 - outer loop - vertex 86.214 -13.734 -11 - vertex 85.438 -13.498 -5 - vertex 86.214 -13.734 -5 - endloop - endfacet - facet normal 0.290968 0.956733 0 - outer loop - vertex 85.438 -13.498 -5 - vertex 86.214 -13.734 -11 - vertex 85.438 -13.498 -11 - endloop - endfacet - facet normal 0.467829 0.883819 -0 - outer loop - vertex 85.438 -13.498 -11 - vertex 84.722 -13.119 -5 - vertex 85.438 -13.498 -5 - endloop - endfacet - facet normal 0.467829 0.883819 0 - outer loop - vertex 84.722 -13.119 -5 - vertex 85.438 -13.498 -11 - vertex 84.722 -13.119 -11 - endloop - endfacet - facet normal 0.632634 0.774451 -0 - outer loop - vertex 84.722 -13.119 -11 - vertex 84.094 -12.606 -5 - vertex 84.722 -13.119 -5 - endloop - endfacet - facet normal 0.632634 0.774451 0 - outer loop - vertex 84.094 -12.606 -5 - vertex 84.722 -13.119 -11 - vertex 84.094 -12.606 -11 - endloop - endfacet - facet normal 0.773848 0.633372 0 - outer loop - vertex 84.094 -12.606 -5 - vertex 83.58 -11.978 -11 - vertex 83.58 -11.978 -5 - endloop - endfacet - facet normal 0.773848 0.633372 0 - outer loop - vertex 83.58 -11.978 -11 - vertex 84.094 -12.606 -5 - vertex 84.094 -12.606 -11 - endloop - endfacet - facet normal 0.882045 0.471166 0 - outer loop - vertex 83.58 -11.978 -5 - vertex 83.197 -11.261 -11 - vertex 83.197 -11.261 -5 - endloop - endfacet - facet normal 0.882045 0.471166 0 - outer loop - vertex 83.197 -11.261 -11 - vertex 83.58 -11.978 -5 - vertex 83.58 -11.978 -11 - endloop - endfacet - facet normal 0.955939 0.293564 0 - outer loop - vertex 83.197 -11.261 -5 - vertex 82.959 -10.486 -11 - vertex 82.959 -10.486 -5 - endloop - endfacet - facet normal 0.955939 0.293564 0 - outer loop - vertex 82.959 -10.486 -11 - vertex 83.197 -11.261 -5 - vertex 83.197 -11.261 -11 - endloop - endfacet - facet normal 0.994107 -0.108403 0 - outer loop - vertex 76.377 2.457 -5 - vertex 76.412 2.778 -11 - vertex 76.412 2.778 -5 - endloop - endfacet - facet normal 0.994107 -0.108403 0 - outer loop - vertex 76.412 2.778 -11 - vertex 76.377 2.457 -5 - vertex 76.377 2.457 -11 - endloop - endfacet - facet normal 0.99407 0.108738 0 - outer loop - vertex 76.412 2.137 -5 - vertex 76.377 2.457 -11 - vertex 76.377 2.457 -5 - endloop - endfacet - facet normal 0.99407 0.108738 0 - outer loop - vertex 76.377 2.457 -11 - vertex 76.412 2.137 -5 - vertex 76.412 2.137 -11 - endloop - endfacet - facet normal 0.950231 -0.311547 0 - outer loop - vertex 76.412 2.778 -5 - vertex 76.512 3.083 -11 - vertex 76.512 3.083 -5 - endloop - endfacet - facet normal 0.950231 -0.311547 0 - outer loop - vertex 76.512 3.083 -11 - vertex 76.412 2.778 -5 - vertex 76.412 2.778 -11 - endloop - endfacet - facet normal 0.871495 -0.490404 0 - outer loop - vertex 76.512 3.083 -5 - vertex 76.669 3.362 -11 - vertex 76.669 3.362 -5 - endloop - endfacet - facet normal 0.871495 -0.490404 0 - outer loop - vertex 76.669 3.362 -11 - vertex 76.512 3.083 -5 - vertex 76.512 3.083 -11 - endloop - endfacet - facet normal 0.769493 -0.638655 0 - outer loop - vertex 76.669 3.362 -5 - vertex 76.874 3.609 -11 - vertex 76.874 3.609 -5 - endloop - endfacet - facet normal 0.769493 -0.638655 0 - outer loop - vertex 76.874 3.609 -11 - vertex 76.669 3.362 -5 - vertex 76.669 3.362 -11 - endloop - endfacet - facet normal 0.638648 -0.769499 0 - outer loop - vertex 76.874 3.609 -11 - vertex 77.121 3.814 -5 - vertex 76.874 3.609 -5 - endloop - endfacet - facet normal 0.638648 -0.769499 0 - outer loop - vertex 77.121 3.814 -5 - vertex 76.874 3.609 -11 - vertex 77.121 3.814 -11 - endloop - endfacet - facet normal 0.48908 -0.872239 0 - outer loop - vertex 77.121 3.814 -11 - vertex 77.401 3.971 -5 - vertex 77.121 3.814 -5 - endloop - endfacet - facet normal 0.48908 -0.872239 0 - outer loop - vertex 77.401 3.971 -5 - vertex 77.121 3.814 -11 - vertex 77.401 3.971 -11 - endloop - endfacet - facet normal 0.312473 -0.949927 0 - outer loop - vertex 77.401 3.971 -11 - vertex 77.705 4.071 -5 - vertex 77.401 3.971 -5 - endloop - endfacet - facet normal 0.312473 -0.949927 0 - outer loop - vertex 77.705 4.071 -5 - vertex 77.401 3.971 -11 - vertex 77.705 4.071 -11 - endloop - endfacet - facet normal 0.111452 -0.99377 0 - outer loop - vertex 77.705 4.071 -11 - vertex 78.026 4.107 -5 - vertex 77.705 4.071 -5 - endloop - endfacet - facet normal 0.111452 -0.99377 0 - outer loop - vertex 78.026 4.107 -5 - vertex 77.705 4.071 -11 - vertex 78.026 4.107 -11 - endloop - endfacet - facet normal -0.111452 -0.99377 0 - outer loop - vertex 78.026 4.107 -11 - vertex 78.347 4.071 -5 - vertex 78.026 4.107 -5 - endloop - endfacet - facet normal -0.111452 -0.99377 -0 - outer loop - vertex 78.347 4.071 -5 - vertex 78.026 4.107 -11 - vertex 78.347 4.071 -11 - endloop - endfacet - facet normal -0.313403 -0.94962 0 - outer loop - vertex 78.347 4.071 -11 - vertex 78.65 3.971 -5 - vertex 78.347 4.071 -5 - endloop - endfacet - facet normal -0.313403 -0.94962 -0 - outer loop - vertex 78.65 3.971 -5 - vertex 78.347 4.071 -11 - vertex 78.65 3.971 -11 - endloop - endfacet - facet normal -0.491749 -0.870737 0 - outer loop - vertex 78.65 3.971 -11 - vertex 78.928 3.814 -5 - vertex 78.65 3.971 -5 - endloop - endfacet - facet normal -0.491749 -0.870737 -0 - outer loop - vertex 78.928 3.814 -5 - vertex 78.65 3.971 -11 - vertex 78.928 3.814 -11 - endloop - endfacet - facet normal -0.64173 -0.766931 0 - outer loop - vertex 78.928 3.814 -11 - vertex 79.173 3.609 -5 - vertex 78.928 3.814 -5 - endloop - endfacet - facet normal -0.64173 -0.766931 -0 - outer loop - vertex 79.173 3.609 -5 - vertex 78.928 3.814 -11 - vertex 79.173 3.609 -11 - endloop - endfacet - facet normal -0.771024 -0.636806 0 - outer loop - vertex 79.377 3.362 -11 - vertex 79.173 3.609 -5 - vertex 79.173 3.609 -11 - endloop - endfacet - facet normal -0.771024 -0.636806 0 - outer loop - vertex 79.173 3.609 -5 - vertex 79.377 3.362 -11 - vertex 79.377 3.362 -5 - endloop - endfacet - facet normal -0.872828 -0.488027 0 - outer loop - vertex 79.533 3.083 -11 - vertex 79.377 3.362 -5 - vertex 79.377 3.362 -11 - endloop - endfacet - facet normal -0.872828 -0.488027 0 - outer loop - vertex 79.377 3.362 -5 - vertex 79.533 3.083 -11 - vertex 79.533 3.083 -5 - endloop - endfacet - facet normal -0.951142 -0.308753 0 - outer loop - vertex 79.632 2.778 -11 - vertex 79.533 3.083 -5 - vertex 79.533 3.083 -11 - endloop - endfacet - facet normal -0.951142 -0.308753 0 - outer loop - vertex 79.533 3.083 -5 - vertex 79.632 2.778 -11 - vertex 79.632 2.778 -5 - endloop - endfacet - facet normal -0.994438 -0.105319 0 - outer loop - vertex 79.666 2.457 -11 - vertex 79.632 2.778 -5 - vertex 79.632 2.778 -11 - endloop - endfacet - facet normal -0.994438 -0.105319 0 - outer loop - vertex 79.632 2.778 -5 - vertex 79.666 2.457 -11 - vertex 79.666 2.457 -5 - endloop - endfacet - facet normal -0.994404 0.105645 0 - outer loop - vertex 79.632 2.137 -11 - vertex 79.666 2.457 -5 - vertex 79.666 2.457 -11 - endloop - endfacet - facet normal -0.994404 0.105645 0 - outer loop - vertex 79.666 2.457 -5 - vertex 79.632 2.137 -11 - vertex 79.632 2.137 -5 - endloop - endfacet - facet normal -0.950844 0.309671 0 - outer loop - vertex 79.533 1.833 -11 - vertex 79.632 2.137 -5 - vertex 79.632 2.137 -11 - endloop - endfacet - facet normal -0.950844 0.309671 0 - outer loop - vertex 79.632 2.137 -5 - vertex 79.533 1.833 -11 - vertex 79.533 1.833 -5 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex 79.377 1.555 -11 - vertex 79.533 1.833 -5 - vertex 79.533 1.833 -11 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex 79.533 1.833 -5 - vertex 79.377 1.555 -11 - vertex 79.377 1.555 -5 - endloop - endfacet - facet normal -0.768475 0.63988 0 - outer loop - vertex 79.173 1.31 -11 - vertex 79.377 1.555 -5 - vertex 79.377 1.555 -11 - endloop - endfacet - facet normal -0.768475 0.63988 0 - outer loop - vertex 79.377 1.555 -5 - vertex 79.173 1.31 -11 - vertex 79.173 1.31 -5 - endloop - endfacet - facet normal -0.639882 0.768473 0 - outer loop - vertex 79.173 1.31 -11 - vertex 78.928 1.106 -5 - vertex 79.173 1.31 -5 - endloop - endfacet - facet normal -0.639882 0.768473 0 - outer loop - vertex 78.928 1.106 -5 - vertex 79.173 1.31 -11 - vertex 78.928 1.106 -11 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 78.928 1.106 -11 - vertex 78.65 0.950999 -5 - vertex 78.928 1.106 -5 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 78.65 0.950999 -5 - vertex 78.928 1.106 -11 - vertex 78.65 0.950999 -11 - endloop - endfacet - facet normal -0.310574 0.950549 0 - outer loop - vertex 78.65 0.950999 -11 - vertex 78.347 0.851999 -5 - vertex 78.65 0.950999 -5 - endloop - endfacet - facet normal -0.310574 0.950549 0 - outer loop - vertex 78.347 0.851999 -5 - vertex 78.65 0.950999 -11 - vertex 78.347 0.851999 -11 - endloop - endfacet - facet normal -0.108392 0.994108 0 - outer loop - vertex 78.347 0.851999 -11 - vertex 78.026 0.816999 -5 - vertex 78.347 0.851999 -5 - endloop - endfacet - facet normal -0.108392 0.994108 0 - outer loop - vertex 78.026 0.816999 -5 - vertex 78.347 0.851999 -11 - vertex 78.026 0.816999 -11 - endloop - endfacet - facet normal 0.108392 0.994108 -0 - outer loop - vertex 78.026 0.816999 -11 - vertex 77.705 0.851999 -5 - vertex 78.026 0.816999 -5 - endloop - endfacet - facet normal 0.108392 0.994108 0 - outer loop - vertex 77.705 0.851999 -5 - vertex 78.026 0.816999 -11 - vertex 77.705 0.851999 -11 - endloop - endfacet - facet normal 0.309651 0.95085 -0 - outer loop - vertex 77.705 0.851999 -11 - vertex 77.401 0.950999 -5 - vertex 77.705 0.851999 -5 - endloop - endfacet - facet normal 0.309651 0.95085 0 - outer loop - vertex 77.401 0.950999 -5 - vertex 77.705 0.851999 -11 - vertex 77.401 0.950999 -11 - endloop - endfacet - facet normal 0.484319 0.874891 -0 - outer loop - vertex 77.401 0.950999 -11 - vertex 77.121 1.106 -5 - vertex 77.401 0.950999 -5 - endloop - endfacet - facet normal 0.484319 0.874891 0 - outer loop - vertex 77.121 1.106 -5 - vertex 77.401 0.950999 -11 - vertex 77.121 1.106 -11 - endloop - endfacet - facet normal 0.636797 0.771031 -0 - outer loop - vertex 77.121 1.106 -11 - vertex 76.874 1.31 -5 - vertex 77.121 1.106 -5 - endloop - endfacet - facet normal 0.636797 0.771031 0 - outer loop - vertex 76.874 1.31 -5 - vertex 77.121 1.106 -11 - vertex 76.874 1.31 -11 - endloop - endfacet - facet normal 0.766934 0.641726 0 - outer loop - vertex 76.874 1.31 -5 - vertex 76.669 1.555 -11 - vertex 76.669 1.555 -5 - endloop - endfacet - facet normal 0.766934 0.641726 0 - outer loop - vertex 76.669 1.555 -11 - vertex 76.874 1.31 -5 - vertex 76.874 1.31 -11 - endloop - endfacet - facet normal 0.870741 0.491742 0 - outer loop - vertex 76.669 1.555 -5 - vertex 76.512 1.833 -11 - vertex 76.512 1.833 -5 - endloop - endfacet - facet normal 0.870741 0.491742 0 - outer loop - vertex 76.512 1.833 -11 - vertex 76.669 1.555 -5 - vertex 76.669 1.555 -11 - endloop - endfacet - facet normal 0.949927 0.312471 0 - outer loop - vertex 76.512 1.833 -5 - vertex 76.412 2.137 -11 - vertex 76.412 2.137 -5 - endloop - endfacet - facet normal 0.949927 0.312471 0 - outer loop - vertex 76.412 2.137 -11 - vertex 76.512 1.833 -5 - vertex 76.512 1.833 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -87.118 -43.536 -5 - vertex -87.118 -20.544 -11 - vertex -87.118 -20.544 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -87.118 -20.544 -11 - vertex -87.118 -43.536 -5 - vertex -87.118 -43.536 -11 - endloop - endfacet - facet normal 0.995014 0.0997395 0 - outer loop - vertex -87.037 -44.344 -5 - vertex -87.118 -43.536 -11 - vertex -87.118 -43.536 -5 - endloop - endfacet - facet normal 0.995014 0.0997395 0 - outer loop - vertex -87.118 -43.536 -11 - vertex -87.037 -44.344 -5 - vertex -87.037 -44.344 -11 - endloop - endfacet - facet normal 0.995026 -0.099618 0 - outer loop - vertex -87.118 -20.544 -5 - vertex -87.037 -19.735 -11 - vertex -87.037 -19.735 -5 - endloop - endfacet - facet normal 0.995026 -0.099618 0 - outer loop - vertex -87.037 -19.735 -11 - vertex -87.118 -20.544 -5 - vertex -87.118 -20.544 -11 - endloop - endfacet - facet normal 0.957385 -0.288814 0 - outer loop - vertex -87.037 -19.735 -5 - vertex -86.802 -18.956 -11 - vertex -86.802 -18.956 -5 - endloop - endfacet - facet normal 0.957385 -0.288814 0 - outer loop - vertex -86.802 -18.956 -11 - vertex -87.037 -19.735 -5 - vertex -87.037 -19.735 -11 - endloop - endfacet - facet normal 0.884622 -0.466309 0 - outer loop - vertex -86.802 -18.956 -5 - vertex -86.423 -18.237 -11 - vertex -86.423 -18.237 -5 - endloop - endfacet - facet normal 0.884622 -0.466309 0 - outer loop - vertex -86.423 -18.237 -11 - vertex -86.802 -18.956 -5 - vertex -86.802 -18.956 -11 - endloop - endfacet - facet normal 0.775441 -0.63142 0 - outer loop - vertex -86.423 -18.237 -5 - vertex -85.91 -17.607 -11 - vertex -85.91 -17.607 -5 - endloop - endfacet - facet normal 0.775441 -0.63142 0 - outer loop - vertex -85.91 -17.607 -11 - vertex -86.423 -18.237 -5 - vertex -86.423 -18.237 -11 - endloop - endfacet - facet normal 0.632025 -0.774948 0 - outer loop - vertex -85.91 -17.607 -11 - vertex -85.281 -17.094 -5 - vertex -85.91 -17.607 -5 - endloop - endfacet - facet normal 0.632025 -0.774948 0 - outer loop - vertex -85.281 -17.094 -5 - vertex -85.91 -17.607 -11 - vertex -85.281 -17.094 -11 - endloop - endfacet - facet normal 0.467833 -0.883817 0 - outer loop - vertex -85.281 -17.094 -11 - vertex -84.565 -16.715 -5 - vertex -85.281 -17.094 -5 - endloop - endfacet - facet normal 0.467833 -0.883817 0 - outer loop - vertex -84.565 -16.715 -5 - vertex -85.281 -17.094 -11 - vertex -84.565 -16.715 -11 - endloop - endfacet - facet normal 0.291309 -0.956629 0 - outer loop - vertex -84.565 -16.715 -11 - vertex -83.79 -16.479 -5 - vertex -84.565 -16.715 -5 - endloop - endfacet - facet normal 0.291309 -0.956629 0 - outer loop - vertex -83.79 -16.479 -5 - vertex -84.565 -16.715 -11 - vertex -83.79 -16.479 -11 - endloop - endfacet - facet normal 0.0985305 -0.995134 0 - outer loop - vertex -83.79 -16.479 -11 - vertex -82.982 -16.399 -5 - vertex -83.79 -16.479 -5 - endloop - endfacet - facet normal 0.0985305 -0.995134 0 - outer loop - vertex -82.982 -16.399 -5 - vertex -83.79 -16.479 -11 - vertex -82.982 -16.399 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -82.982 -16.399 -11 - vertex -80.98 -16.399 -5 - vertex -82.982 -16.399 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -80.98 -16.399 -5 - vertex -82.982 -16.399 -11 - vertex -80.98 -16.399 -11 - endloop - endfacet - facet normal -0.0985305 -0.995134 0 - outer loop - vertex -80.98 -16.399 -11 - vertex -80.172 -16.479 -5 - vertex -80.98 -16.399 -5 - endloop - endfacet - facet normal -0.0985305 -0.995134 -0 - outer loop - vertex -80.172 -16.479 -5 - vertex -80.98 -16.399 -11 - vertex -80.172 -16.479 -11 - endloop - endfacet - facet normal -0.291311 -0.956628 0 - outer loop - vertex -80.172 -16.479 -11 - vertex -79.397 -16.715 -5 - vertex -80.172 -16.479 -5 - endloop - endfacet - facet normal -0.291311 -0.956628 -0 - outer loop - vertex -79.397 -16.715 -5 - vertex -80.172 -16.479 -11 - vertex -79.397 -16.715 -11 - endloop - endfacet - facet normal -0.467829 -0.883819 0 - outer loop - vertex -79.397 -16.715 -11 - vertex -78.681 -17.094 -5 - vertex -79.397 -16.715 -5 - endloop - endfacet - facet normal -0.467829 -0.883819 -0 - outer loop - vertex -78.681 -17.094 -5 - vertex -79.397 -16.715 -11 - vertex -78.681 -17.094 -11 - endloop - endfacet - facet normal -0.63203 -0.774944 0 - outer loop - vertex -78.681 -17.094 -11 - vertex -78.052 -17.607 -5 - vertex -78.681 -17.094 -5 - endloop - endfacet - facet normal -0.63203 -0.774944 -0 - outer loop - vertex -78.052 -17.607 -5 - vertex -78.681 -17.094 -11 - vertex -78.052 -17.607 -11 - endloop - endfacet - facet normal -0.774834 -0.632165 0 - outer loop - vertex -77.538 -18.237 -11 - vertex -78.052 -17.607 -5 - vertex -78.052 -17.607 -11 - endloop - endfacet - facet normal -0.774834 -0.632165 0 - outer loop - vertex -78.052 -17.607 -5 - vertex -77.538 -18.237 -11 - vertex -77.538 -18.237 -5 - endloop - endfacet - facet normal -0.882589 -0.470145 0 - outer loop - vertex -77.155 -18.956 -11 - vertex -77.538 -18.237 -5 - vertex -77.538 -18.237 -11 - endloop - endfacet - facet normal -0.882589 -0.470145 0 - outer loop - vertex -77.538 -18.237 -5 - vertex -77.155 -18.956 -11 - vertex -77.155 -18.956 -5 - endloop - endfacet - facet normal -0.956362 -0.292186 0 - outer loop - vertex -76.917 -19.735 -11 - vertex -77.155 -18.956 -5 - vertex -77.155 -18.956 -11 - endloop - endfacet - facet normal -0.956362 -0.292186 0 - outer loop - vertex -77.155 -18.956 -5 - vertex -76.917 -19.735 -11 - vertex -76.917 -19.735 -5 - endloop - endfacet - facet normal -0.994902 -0.100844 0 - outer loop - vertex -76.835 -20.544 -11 - vertex -76.917 -19.735 -5 - vertex -76.917 -19.735 -11 - endloop - endfacet - facet normal -0.994902 -0.100844 0 - outer loop - vertex -76.917 -19.735 -5 - vertex -76.835 -20.544 -11 - vertex -76.835 -20.544 -5 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -76.835 -43.536 -11 - vertex -76.835 -20.544 -5 - vertex -76.835 -20.544 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -76.835 -20.544 -5 - vertex -76.835 -43.536 -11 - vertex -76.835 -43.536 -5 - endloop - endfacet - facet normal -0.99489 0.100967 0 - outer loop - vertex -76.917 -44.344 -11 - vertex -76.835 -43.536 -5 - vertex -76.835 -43.536 -11 - endloop - endfacet - facet normal -0.99489 0.100967 0 - outer loop - vertex -76.835 -43.536 -5 - vertex -76.917 -44.344 -11 - vertex -76.917 -44.344 -5 - endloop - endfacet - facet normal -0.955939 0.293565 0 - outer loop - vertex -77.155 -45.119 -11 - vertex -76.917 -44.344 -5 - vertex -76.917 -44.344 -11 - endloop - endfacet - facet normal -0.955939 0.293565 0 - outer loop - vertex -76.917 -44.344 -5 - vertex -77.155 -45.119 -11 - vertex -77.155 -45.119 -5 - endloop - endfacet - facet normal -0.881771 0.471678 0 - outer loop - vertex -77.538 -45.835 -11 - vertex -77.155 -45.119 -5 - vertex -77.155 -45.119 -11 - endloop - endfacet - facet normal -0.881771 0.471678 0 - outer loop - vertex -77.155 -45.119 -5 - vertex -77.538 -45.835 -11 - vertex -77.538 -45.835 -5 - endloop - endfacet - facet normal -0.774342 0.632767 0 - outer loop - vertex -78.052 -46.464 -11 - vertex -77.538 -45.835 -5 - vertex -77.538 -45.835 -11 - endloop - endfacet - facet normal -0.774342 0.632767 0 - outer loop - vertex -77.538 -45.835 -5 - vertex -78.052 -46.464 -11 - vertex -78.052 -46.464 -5 - endloop - endfacet - facet normal -0.63277 0.77434 0 - outer loop - vertex -78.052 -46.464 -11 - vertex -78.681 -46.978 -5 - vertex -78.052 -46.464 -5 - endloop - endfacet - facet normal -0.63277 0.77434 0 - outer loop - vertex -78.681 -46.978 -5 - vertex -78.052 -46.464 -11 - vertex -78.681 -46.978 -11 - endloop - endfacet - facet normal -0.471672 0.881774 0 - outer loop - vertex -78.681 -46.978 -11 - vertex -79.397 -47.361 -5 - vertex -78.681 -46.978 -5 - endloop - endfacet - facet normal -0.471672 0.881774 0 - outer loop - vertex -79.397 -47.361 -5 - vertex -78.681 -46.978 -11 - vertex -79.397 -47.361 -11 - endloop - endfacet - facet normal -0.293567 0.955939 0 - outer loop - vertex -79.397 -47.361 -11 - vertex -80.172 -47.599 -5 - vertex -79.397 -47.361 -5 - endloop - endfacet - facet normal -0.293567 0.955939 0 - outer loop - vertex -80.172 -47.599 -5 - vertex -79.397 -47.361 -11 - vertex -80.172 -47.599 -11 - endloop - endfacet - facet normal -0.100968 0.99489 0 - outer loop - vertex -80.172 -47.599 -11 - vertex -80.98 -47.681 -5 - vertex -80.172 -47.599 -5 - endloop - endfacet - facet normal -0.100968 0.99489 0 - outer loop - vertex -80.98 -47.681 -5 - vertex -80.172 -47.599 -11 - vertex -80.98 -47.681 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -80.98 -47.681 -11 - vertex -82.982 -47.681 -5 - vertex -80.98 -47.681 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -82.982 -47.681 -5 - vertex -80.98 -47.681 -11 - vertex -82.982 -47.681 -11 - endloop - endfacet - facet normal 0.100968 0.99489 -0 - outer loop - vertex -82.982 -47.681 -11 - vertex -83.79 -47.599 -5 - vertex -82.982 -47.681 -5 - endloop - endfacet - facet normal 0.100968 0.99489 0 - outer loop - vertex -83.79 -47.599 -5 - vertex -82.982 -47.681 -11 - vertex -83.79 -47.599 -11 - endloop - endfacet - facet normal 0.293564 0.955939 -0 - outer loop - vertex -83.79 -47.599 -11 - vertex -84.565 -47.361 -5 - vertex -83.79 -47.599 -5 - endloop - endfacet - facet normal 0.293564 0.955939 0 - outer loop - vertex -84.565 -47.361 -5 - vertex -83.79 -47.599 -11 - vertex -84.565 -47.361 -11 - endloop - endfacet - facet normal 0.471676 0.881772 -0 - outer loop - vertex -84.565 -47.361 -11 - vertex -85.281 -46.978 -5 - vertex -84.565 -47.361 -5 - endloop - endfacet - facet normal 0.471676 0.881772 0 - outer loop - vertex -85.281 -46.978 -5 - vertex -84.565 -47.361 -11 - vertex -85.281 -46.978 -11 - endloop - endfacet - facet normal 0.632765 0.774344 -0 - outer loop - vertex -85.281 -46.978 -11 - vertex -85.91 -46.464 -5 - vertex -85.281 -46.978 -5 - endloop - endfacet - facet normal 0.632765 0.774344 0 - outer loop - vertex -85.91 -46.464 -5 - vertex -85.281 -46.978 -11 - vertex -85.91 -46.464 -11 - endloop - endfacet - facet normal 0.77495 0.632023 0 - outer loop - vertex -85.91 -46.464 -5 - vertex -86.423 -45.835 -11 - vertex -86.423 -45.835 -5 - endloop - endfacet - facet normal 0.77495 0.632023 0 - outer loop - vertex -86.423 -45.835 -11 - vertex -85.91 -46.464 -5 - vertex -85.91 -46.464 -11 - endloop - endfacet - facet normal 0.883815 0.467836 0 - outer loop - vertex -86.423 -45.835 -5 - vertex -86.802 -45.119 -11 - vertex -86.802 -45.119 -5 - endloop - endfacet - facet normal 0.883815 0.467836 0 - outer loop - vertex -86.802 -45.119 -11 - vertex -86.423 -45.835 -5 - vertex -86.423 -45.835 -11 - endloop - endfacet - facet normal 0.956972 0.29018 0 - outer loop - vertex -86.802 -45.119 -5 - vertex -87.037 -44.344 -11 - vertex -87.037 -44.344 -5 - endloop - endfacet - facet normal 0.956972 0.29018 0 - outer loop - vertex -87.037 -44.344 -11 - vertex -86.802 -45.119 -5 - vertex -86.802 -45.119 -11 - endloop - endfacet - facet normal 0.994108 -0.108392 0 - outer loop - vertex 1.385 -18.542 -5 - vertex 1.42 -18.221 -11 - vertex 1.42 -18.221 -5 - endloop - endfacet - facet normal 0.994108 -0.108392 0 - outer loop - vertex 1.42 -18.221 -11 - vertex 1.385 -18.542 -5 - vertex 1.385 -18.542 -11 - endloop - endfacet - facet normal 0.994072 0.108726 0 - outer loop - vertex 1.42 -18.862 -5 - vertex 1.385 -18.542 -11 - vertex 1.385 -18.542 -5 - endloop - endfacet - facet normal 0.994072 0.108726 0 - outer loop - vertex 1.385 -18.542 -11 - vertex 1.42 -18.862 -5 - vertex 1.42 -18.862 -11 - endloop - endfacet - facet normal 0.950549 -0.310574 0 - outer loop - vertex 1.42 -18.221 -5 - vertex 1.519 -17.918 -11 - vertex 1.519 -17.918 -5 - endloop - endfacet - facet normal 0.950549 -0.310574 0 - outer loop - vertex 1.519 -17.918 -11 - vertex 1.42 -18.221 -5 - vertex 1.42 -18.221 -11 - endloop - endfacet - facet normal 0.873414 -0.486978 0 - outer loop - vertex 1.519 -17.918 -5 - vertex 1.674 -17.64 -11 - vertex 1.674 -17.64 -5 - endloop - endfacet - facet normal 0.873414 -0.486978 0 - outer loop - vertex 1.674 -17.64 -11 - vertex 1.519 -17.918 -5 - vertex 1.519 -17.918 -11 - endloop - endfacet - facet normal 0.768478 -0.639877 0 - outer loop - vertex 1.674 -17.64 -5 - vertex 1.878 -17.395 -11 - vertex 1.878 -17.395 -5 - endloop - endfacet - facet normal 0.768478 -0.639877 0 - outer loop - vertex 1.878 -17.395 -11 - vertex 1.674 -17.64 -5 - vertex 1.674 -17.64 -11 - endloop - endfacet - facet normal 0.639877 -0.768477 0 - outer loop - vertex 1.878 -17.395 -11 - vertex 2.123 -17.191 -5 - vertex 1.878 -17.395 -5 - endloop - endfacet - facet normal 0.639877 -0.768477 0 - outer loop - vertex 2.123 -17.191 -5 - vertex 1.878 -17.395 -11 - vertex 2.123 -17.191 -11 - endloop - endfacet - facet normal 0.489368 -0.872077 0 - outer loop - vertex 2.123 -17.191 -11 - vertex 2.401 -17.035 -5 - vertex 2.123 -17.191 -5 - endloop - endfacet - facet normal 0.489368 -0.872077 0 - outer loop - vertex 2.401 -17.035 -5 - vertex 2.123 -17.191 -11 - vertex 2.401 -17.035 -11 - endloop - endfacet - facet normal 0.309648 -0.950851 0 - outer loop - vertex 2.401 -17.035 -11 - vertex 2.705 -16.936 -5 - vertex 2.401 -17.035 -5 - endloop - endfacet - facet normal 0.309648 -0.950851 0 - outer loop - vertex 2.705 -16.936 -5 - vertex 2.401 -17.035 -11 - vertex 2.705 -16.936 -11 - endloop - endfacet - facet normal 0.108732 -0.994071 0 - outer loop - vertex 2.705 -16.936 -11 - vertex 3.025 -16.901 -5 - vertex 2.705 -16.936 -5 - endloop - endfacet - facet normal 0.108732 -0.994071 0 - outer loop - vertex 3.025 -16.901 -5 - vertex 2.705 -16.936 -11 - vertex 3.025 -16.901 -11 - endloop - endfacet - facet normal -0.108397 -0.994108 0 - outer loop - vertex 3.025 -16.901 -11 - vertex 3.346 -16.936 -5 - vertex 3.025 -16.901 -5 - endloop - endfacet - facet normal -0.108397 -0.994108 -0 - outer loop - vertex 3.346 -16.936 -5 - vertex 3.025 -16.901 -11 - vertex 3.346 -16.936 -11 - endloop - endfacet - facet normal -0.310573 -0.95055 0 - outer loop - vertex 3.346 -16.936 -11 - vertex 3.649 -17.035 -5 - vertex 3.346 -16.936 -5 - endloop - endfacet - facet normal -0.310573 -0.95055 -0 - outer loop - vertex 3.649 -17.035 -5 - vertex 3.346 -16.936 -11 - vertex 3.649 -17.035 -11 - endloop - endfacet - facet normal -0.489368 -0.872077 0 - outer loop - vertex 3.649 -17.035 -11 - vertex 3.927 -17.191 -5 - vertex 3.649 -17.035 -5 - endloop - endfacet - facet normal -0.489368 -0.872077 -0 - outer loop - vertex 3.927 -17.191 -5 - vertex 3.649 -17.035 -11 - vertex 3.927 -17.191 -11 - endloop - endfacet - facet normal -0.639875 -0.768479 0 - outer loop - vertex 3.927 -17.191 -11 - vertex 4.172 -17.395 -5 - vertex 3.927 -17.191 -5 - endloop - endfacet - facet normal -0.639875 -0.768479 -0 - outer loop - vertex 4.172 -17.395 -5 - vertex 3.927 -17.191 -11 - vertex 4.172 -17.395 -11 - endloop - endfacet - facet normal -0.766936 -0.641724 0 - outer loop - vertex 4.377 -17.64 -11 - vertex 4.172 -17.395 -5 - vertex 4.172 -17.395 -11 - endloop - endfacet - facet normal -0.766936 -0.641724 0 - outer loop - vertex 4.172 -17.395 -5 - vertex 4.377 -17.64 -11 - vertex 4.377 -17.64 -5 - endloop - endfacet - facet normal -0.873416 -0.486976 0 - outer loop - vertex 4.532 -17.918 -11 - vertex 4.377 -17.64 -5 - vertex 4.377 -17.64 -11 - endloop - endfacet - facet normal -0.873416 -0.486976 0 - outer loop - vertex 4.377 -17.64 -5 - vertex 4.532 -17.918 -11 - vertex 4.532 -17.918 -5 - endloop - endfacet - facet normal -0.950549 -0.310574 0 - outer loop - vertex 4.631 -18.221 -11 - vertex 4.532 -17.918 -5 - vertex 4.532 -17.918 -11 - endloop - endfacet - facet normal -0.950549 -0.310574 0 - outer loop - vertex 4.532 -17.918 -5 - vertex 4.631 -18.221 -11 - vertex 4.631 -18.221 -5 - endloop - endfacet - facet normal -0.994108 -0.108392 0 - outer loop - vertex 4.666 -18.542 -11 - vertex 4.631 -18.221 -5 - vertex 4.631 -18.221 -11 - endloop - endfacet - facet normal -0.994108 -0.108392 0 - outer loop - vertex 4.631 -18.221 -5 - vertex 4.666 -18.542 -11 - vertex 4.666 -18.542 -5 - endloop - endfacet - facet normal -0.994072 0.108726 0 - outer loop - vertex 4.631 -18.862 -11 - vertex 4.666 -18.542 -5 - vertex 4.666 -18.542 -11 - endloop - endfacet - facet normal -0.994072 0.108726 0 - outer loop - vertex 4.666 -18.542 -5 - vertex 4.631 -18.862 -11 - vertex 4.631 -18.862 -5 - endloop - endfacet - facet normal -0.95085 0.309651 0 - outer loop - vertex 4.532 -19.166 -11 - vertex 4.631 -18.862 -5 - vertex 4.631 -18.862 -11 - endloop - endfacet - facet normal -0.95085 0.309651 0 - outer loop - vertex 4.631 -18.862 -5 - vertex 4.532 -19.166 -11 - vertex 4.532 -19.166 -5 - endloop - endfacet - facet normal -0.873416 0.486976 0 - outer loop - vertex 4.377 -19.444 -11 - vertex 4.532 -19.166 -5 - vertex 4.532 -19.166 -11 - endloop - endfacet - facet normal -0.873416 0.486976 0 - outer loop - vertex 4.532 -19.166 -5 - vertex 4.377 -19.444 -11 - vertex 4.377 -19.444 -5 - endloop - endfacet - facet normal -0.766936 0.641724 0 - outer loop - vertex 4.172 -19.689 -11 - vertex 4.377 -19.444 -5 - vertex 4.377 -19.444 -11 - endloop - endfacet - facet normal -0.766936 0.641724 0 - outer loop - vertex 4.377 -19.444 -5 - vertex 4.172 -19.689 -11 - vertex 4.172 -19.689 -5 - endloop - endfacet - facet normal -0.639875 0.768479 0 - outer loop - vertex 4.172 -19.689 -11 - vertex 3.927 -19.893 -5 - vertex 4.172 -19.689 -5 - endloop - endfacet - facet normal -0.639875 0.768479 0 - outer loop - vertex 3.927 -19.893 -5 - vertex 4.172 -19.689 -11 - vertex 3.927 -19.893 -11 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 3.927 -19.893 -11 - vertex 3.649 -20.048 -5 - vertex 3.927 -19.893 -5 - endloop - endfacet - facet normal -0.486978 0.873414 0 - outer loop - vertex 3.649 -20.048 -5 - vertex 3.927 -19.893 -11 - vertex 3.649 -20.048 -11 - endloop - endfacet - facet normal -0.310573 0.95055 0 - outer loop - vertex 3.649 -20.048 -11 - vertex 3.346 -20.147 -5 - vertex 3.649 -20.048 -5 - endloop - endfacet - facet normal -0.310573 0.95055 0 - outer loop - vertex 3.346 -20.147 -5 - vertex 3.649 -20.048 -11 - vertex 3.346 -20.147 -11 - endloop - endfacet - facet normal -0.108391 0.994108 0 - outer loop - vertex 3.346 -20.147 -11 - vertex 3.025 -20.182 -5 - vertex 3.346 -20.147 -5 - endloop - endfacet - facet normal -0.108391 0.994108 0 - outer loop - vertex 3.025 -20.182 -5 - vertex 3.346 -20.147 -11 - vertex 3.025 -20.182 -11 - endloop - endfacet - facet normal 0.108726 0.994072 -0 - outer loop - vertex 3.025 -20.182 -11 - vertex 2.705 -20.147 -5 - vertex 3.025 -20.182 -5 - endloop - endfacet - facet normal 0.108726 0.994072 0 - outer loop - vertex 2.705 -20.147 -5 - vertex 3.025 -20.182 -11 - vertex 2.705 -20.147 -11 - endloop - endfacet - facet normal 0.309648 0.950851 -0 - outer loop - vertex 2.705 -20.147 -11 - vertex 2.401 -20.048 -5 - vertex 2.705 -20.147 -5 - endloop - endfacet - facet normal 0.309648 0.950851 0 - outer loop - vertex 2.401 -20.048 -5 - vertex 2.705 -20.147 -11 - vertex 2.401 -20.048 -11 - endloop - endfacet - facet normal 0.486978 0.873414 -0 - outer loop - vertex 2.401 -20.048 -11 - vertex 2.123 -19.893 -5 - vertex 2.401 -20.048 -5 - endloop - endfacet - facet normal 0.486978 0.873414 0 - outer loop - vertex 2.123 -19.893 -5 - vertex 2.401 -20.048 -11 - vertex 2.123 -19.893 -11 - endloop - endfacet - facet normal 0.639877 0.768477 -0 - outer loop - vertex 2.123 -19.893 -11 - vertex 1.878 -19.689 -5 - vertex 2.123 -19.893 -5 - endloop - endfacet - facet normal 0.639877 0.768477 0 - outer loop - vertex 1.878 -19.689 -5 - vertex 2.123 -19.893 -11 - vertex 1.878 -19.689 -11 - endloop - endfacet - facet normal 0.768478 0.639877 0 - outer loop - vertex 1.878 -19.689 -5 - vertex 1.674 -19.444 -11 - vertex 1.674 -19.444 -5 - endloop - endfacet - facet normal 0.768478 0.639877 0 - outer loop - vertex 1.674 -19.444 -11 - vertex 1.878 -19.689 -5 - vertex 1.878 -19.689 -11 - endloop - endfacet - facet normal 0.873414 0.486978 0 - outer loop - vertex 1.674 -19.444 -5 - vertex 1.519 -19.166 -11 - vertex 1.519 -19.166 -5 - endloop - endfacet - facet normal 0.873414 0.486978 0 - outer loop - vertex 1.519 -19.166 -11 - vertex 1.674 -19.444 -5 - vertex 1.674 -19.444 -11 - endloop - endfacet - facet normal 0.95085 0.309651 0 - outer loop - vertex 1.519 -19.166 -5 - vertex 1.42 -18.862 -11 - vertex 1.42 -18.862 -5 - endloop - endfacet - facet normal 0.95085 0.309651 0 - outer loop - vertex 1.42 -18.862 -11 - vertex 1.519 -19.166 -5 - vertex 1.519 -19.166 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -65.078 -72.437 -11 - vertex -25.082 -32.441 -5 - vertex -65.078 -72.437 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -25.082 -32.441 -5 - vertex -65.078 -72.437 -11 - vertex -25.082 -32.441 -11 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -64.981 -72.534 -5 - vertex -65.078 -72.437 -11 - vertex -65.078 -72.437 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -65.078 -72.437 -11 - vertex -64.981 -72.534 -5 - vertex -64.981 -72.534 -11 - endloop - endfacet - facet normal -0.675077 -0.737747 0 - outer loop - vertex -25.082 -32.441 -11 - vertex -24.976 -32.538 -5 - vertex -25.082 -32.441 -5 - endloop - endfacet - facet normal -0.675077 -0.737747 -0 - outer loop - vertex -24.976 -32.538 -5 - vertex -25.082 -32.441 -11 - vertex -24.976 -32.538 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -24.976 -32.538 -5 - vertex -24.976 -32.397 -11 - vertex -24.976 -32.397 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -24.976 -32.397 -11 - vertex -24.976 -32.538 -5 - vertex -24.976 -32.538 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -24.976 -32.397 -11 - vertex 31.018 -32.397 -5 - vertex -24.976 -32.397 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 31.018 -32.397 -5 - vertex -24.976 -32.397 -11 - vertex 31.018 -32.397 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 31.018 -32.538 -11 - vertex 31.018 -32.397 -5 - vertex 31.018 -32.397 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 31.018 -32.397 -5 - vertex 31.018 -32.538 -11 - vertex 31.018 -32.538 -5 - endloop - endfacet - facet normal 0.675077 -0.737747 0 - outer loop - vertex 31.018 -32.538 -11 - vertex 31.124 -32.441 -5 - vertex 31.018 -32.538 -5 - endloop - endfacet - facet normal 0.675077 -0.737747 0 - outer loop - vertex 31.124 -32.441 -5 - vertex 31.018 -32.538 -11 - vertex 31.124 -32.441 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex 31.124 -32.441 -11 - vertex 71.12 -72.437 -5 - vertex 31.124 -32.441 -5 - endloop - endfacet - facet normal -0.707107 -0.707107 -0 - outer loop - vertex 71.12 -72.437 -5 - vertex 31.124 -32.441 -11 - vertex 71.12 -72.437 -11 - endloop - endfacet - facet normal -0.73774 0.675085 0 - outer loop - vertex 71.023 -72.543 -11 - vertex 71.12 -72.437 -5 - vertex 71.12 -72.437 -11 - endloop - endfacet - facet normal -0.73774 0.675085 0 - outer loop - vertex 71.12 -72.437 -5 - vertex 71.023 -72.543 -11 - vertex 71.023 -72.543 -5 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 71.023 -72.684 -11 - vertex 71.023 -72.543 -5 - vertex 71.023 -72.543 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex 71.023 -72.543 -5 - vertex 71.023 -72.684 -11 - vertex 71.023 -72.684 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 71.023 -72.684 -11 - vertex -64.981 -72.684 -5 - vertex 71.023 -72.684 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -64.981 -72.684 -5 - vertex 71.023 -72.684 -11 - vertex -64.981 -72.684 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -64.981 -72.684 -5 - vertex -64.981 -72.534 -11 - vertex -64.981 -72.534 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -64.981 -72.534 -11 - vertex -64.981 -72.684 -5 - vertex -64.981 -72.684 -11 - endloop - endfacet - facet normal 0.994402 -0.105666 0 - outer loop - vertex 105.878 -102.035 -5 - vertex 105.912 -101.715 -11 - vertex 105.912 -101.715 -5 - endloop - endfacet - facet normal 0.994402 -0.105666 0 - outer loop - vertex 105.912 -101.715 -11 - vertex 105.878 -102.035 -5 - vertex 105.878 -102.035 -11 - endloop - endfacet - facet normal 0.994436 0.105343 0 - outer loop - vertex 105.912 -102.356 -5 - vertex 105.878 -102.035 -11 - vertex 105.878 -102.035 -5 - endloop - endfacet - facet normal 0.994436 0.105343 0 - outer loop - vertex 105.878 -102.035 -11 - vertex 105.912 -102.356 -5 - vertex 105.912 -102.356 -11 - endloop - endfacet - facet normal 0.950548 -0.310578 0 - outer loop - vertex 105.912 -101.715 -5 - vertex 106.011 -101.412 -11 - vertex 106.011 -101.412 -5 - endloop - endfacet - facet normal 0.950548 -0.310578 0 - outer loop - vertex 106.011 -101.412 -11 - vertex 105.912 -101.715 -5 - vertex 105.912 -101.715 -11 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 106.011 -101.412 -5 - vertex 106.167 -101.134 -11 - vertex 106.167 -101.134 -5 - endloop - endfacet - facet normal 0.87208 -0.489363 0 - outer loop - vertex 106.167 -101.134 -11 - vertex 106.011 -101.412 -5 - vertex 106.011 -101.412 -11 - endloop - endfacet - facet normal 0.769757 -0.638337 0 - outer loop - vertex 106.167 -101.134 -5 - vertex 106.371 -100.888 -11 - vertex 106.371 -100.888 -5 - endloop - endfacet - facet normal 0.769757 -0.638337 0 - outer loop - vertex 106.371 -100.888 -11 - vertex 106.167 -101.134 -5 - vertex 106.167 -101.134 -11 - endloop - endfacet - facet normal 0.639888 -0.768468 0 - outer loop - vertex 106.371 -100.888 -11 - vertex 106.616 -100.684 -5 - vertex 106.371 -100.888 -5 - endloop - endfacet - facet normal 0.639888 -0.768468 0 - outer loop - vertex 106.616 -100.684 -5 - vertex 106.371 -100.888 -11 - vertex 106.616 -100.684 -11 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex 106.616 -100.684 -11 - vertex 106.894 -100.529 -5 - vertex 106.616 -100.684 -5 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex 106.894 -100.529 -5 - vertex 106.616 -100.684 -11 - vertex 106.894 -100.529 -11 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex 106.894 -100.529 -11 - vertex 107.197 -100.43 -5 - vertex 106.894 -100.529 -5 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex 107.197 -100.43 -5 - vertex 106.894 -100.529 -11 - vertex 107.197 -100.43 -11 - endloop - endfacet - facet normal 0.108403 -0.994107 0 - outer loop - vertex 107.197 -100.43 -11 - vertex 107.518 -100.395 -5 - vertex 107.197 -100.43 -5 - endloop - endfacet - facet normal 0.108403 -0.994107 0 - outer loop - vertex 107.518 -100.395 -5 - vertex 107.197 -100.43 -11 - vertex 107.518 -100.395 -11 - endloop - endfacet - facet normal -0.108403 -0.994107 0 - outer loop - vertex 107.518 -100.395 -11 - vertex 107.839 -100.43 -5 - vertex 107.518 -100.395 -5 - endloop - endfacet - facet normal -0.108403 -0.994107 -0 - outer loop - vertex 107.839 -100.43 -5 - vertex 107.518 -100.395 -11 - vertex 107.839 -100.43 -11 - endloop - endfacet - facet normal -0.310571 -0.95055 0 - outer loop - vertex 107.839 -100.43 -11 - vertex 108.142 -100.529 -5 - vertex 107.839 -100.43 -5 - endloop - endfacet - facet normal -0.310571 -0.95055 -0 - outer loop - vertex 108.142 -100.529 -5 - vertex 107.839 -100.43 -11 - vertex 108.142 -100.529 -11 - endloop - endfacet - facet normal -0.486973 -0.873417 0 - outer loop - vertex 108.142 -100.529 -11 - vertex 108.42 -100.684 -5 - vertex 108.142 -100.529 -5 - endloop - endfacet - facet normal -0.486973 -0.873417 -0 - outer loop - vertex 108.42 -100.684 -5 - vertex 108.142 -100.529 -11 - vertex 108.42 -100.684 -11 - endloop - endfacet - facet normal -0.639876 -0.768478 0 - outer loop - vertex 108.42 -100.684 -11 - vertex 108.665 -100.888 -5 - vertex 108.42 -100.684 -5 - endloop - endfacet - facet normal -0.639876 -0.768478 -0 - outer loop - vertex 108.665 -100.888 -5 - vertex 108.42 -100.684 -11 - vertex 108.665 -100.888 -11 - endloop - endfacet - facet normal -0.769757 -0.638337 0 - outer loop - vertex 108.869 -101.134 -11 - vertex 108.665 -100.888 -5 - vertex 108.665 -100.888 -11 - endloop - endfacet - facet normal -0.769757 -0.638337 0 - outer loop - vertex 108.665 -100.888 -5 - vertex 108.869 -101.134 -11 - vertex 108.869 -101.134 -5 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex 109.025 -101.412 -11 - vertex 108.869 -101.134 -5 - vertex 108.869 -101.134 -11 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex 108.869 -101.134 -5 - vertex 109.025 -101.412 -11 - vertex 109.025 -101.412 -5 - endloop - endfacet - facet normal -0.950548 -0.310578 0 - outer loop - vertex 109.124 -101.715 -11 - vertex 109.025 -101.412 -5 - vertex 109.025 -101.412 -11 - endloop - endfacet - facet normal -0.950548 -0.310578 0 - outer loop - vertex 109.025 -101.412 -5 - vertex 109.124 -101.715 -11 - vertex 109.124 -101.715 -5 - endloop - endfacet - facet normal -0.994073 -0.108712 0 - outer loop - vertex 109.159 -102.035 -11 - vertex 109.124 -101.715 -5 - vertex 109.124 -101.715 -11 - endloop - endfacet - facet normal -0.994073 -0.108712 0 - outer loop - vertex 109.124 -101.715 -5 - vertex 109.159 -102.035 -11 - vertex 109.159 -102.035 -5 - endloop - endfacet - facet normal -0.99411 0.10838 0 - outer loop - vertex 109.124 -102.356 -11 - vertex 109.159 -102.035 -5 - vertex 109.159 -102.035 -11 - endloop - endfacet - facet normal -0.99411 0.10838 0 - outer loop - vertex 109.159 -102.035 -5 - vertex 109.124 -102.356 -11 - vertex 109.124 -102.356 -5 - endloop - endfacet - facet normal -0.951147 0.308737 0 - outer loop - vertex 109.025 -102.661 -11 - vertex 109.124 -102.356 -5 - vertex 109.124 -102.356 -11 - endloop - endfacet - facet normal -0.951147 0.308737 0 - outer loop - vertex 109.124 -102.356 -5 - vertex 109.025 -102.661 -11 - vertex 109.025 -102.661 -5 - endloop - endfacet - facet normal -0.872833 0.488018 0 - outer loop - vertex 108.869 -102.94 -11 - vertex 109.025 -102.661 -5 - vertex 109.025 -102.661 -11 - endloop - endfacet - facet normal -0.872833 0.488018 0 - outer loop - vertex 109.025 -102.661 -5 - vertex 108.869 -102.94 -11 - vertex 108.869 -102.94 -5 - endloop - endfacet - facet normal -0.771017 0.636814 0 - outer loop - vertex 108.665 -103.187 -11 - vertex 108.869 -102.94 -5 - vertex 108.869 -102.94 -11 - endloop - endfacet - facet normal -0.771017 0.636814 0 - outer loop - vertex 108.869 -102.94 -5 - vertex 108.665 -103.187 -11 - vertex 108.665 -103.187 -5 - endloop - endfacet - facet normal -0.643556 0.765399 0 - outer loop - vertex 108.665 -103.187 -11 - vertex 108.42 -103.393 -5 - vertex 108.665 -103.187 -5 - endloop - endfacet - facet normal -0.643556 0.765399 0 - outer loop - vertex 108.42 -103.393 -5 - vertex 108.665 -103.187 -11 - vertex 108.42 -103.393 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex 108.42 -103.393 -11 - vertex 108.142 -103.549 -5 - vertex 108.42 -103.393 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex 108.142 -103.549 -5 - vertex 108.42 -103.393 -11 - vertex 108.142 -103.549 -11 - endloop - endfacet - facet normal -0.316242 0.948679 0 - outer loop - vertex 108.142 -103.549 -11 - vertex 107.839 -103.65 -5 - vertex 108.142 -103.549 -5 - endloop - endfacet - facet normal -0.316242 0.948679 0 - outer loop - vertex 107.839 -103.65 -5 - vertex 108.142 -103.549 -11 - vertex 107.839 -103.65 -11 - endloop - endfacet - facet normal -0.10838 0.99411 0 - outer loop - vertex 107.839 -103.65 -11 - vertex 107.518 -103.685 -5 - vertex 107.839 -103.65 -5 - endloop - endfacet - facet normal -0.10838 0.99411 0 - outer loop - vertex 107.518 -103.685 -5 - vertex 107.839 -103.65 -11 - vertex 107.518 -103.685 -11 - endloop - endfacet - facet normal 0.10838 0.99411 -0 - outer loop - vertex 107.518 -103.685 -11 - vertex 107.197 -103.65 -5 - vertex 107.518 -103.685 -5 - endloop - endfacet - facet normal 0.10838 0.99411 0 - outer loop - vertex 107.197 -103.65 -5 - vertex 107.518 -103.685 -11 - vertex 107.197 -103.65 -11 - endloop - endfacet - facet normal 0.316242 0.948679 -0 - outer loop - vertex 107.197 -103.65 -11 - vertex 106.894 -103.549 -5 - vertex 107.197 -103.65 -5 - endloop - endfacet - facet normal 0.316242 0.948679 0 - outer loop - vertex 106.894 -103.549 -5 - vertex 107.197 -103.65 -11 - vertex 106.894 -103.549 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex 106.894 -103.549 -11 - vertex 106.616 -103.393 -5 - vertex 106.894 -103.549 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex 106.616 -103.393 -5 - vertex 106.894 -103.549 -11 - vertex 106.616 -103.393 -11 - endloop - endfacet - facet normal 0.643568 0.765389 -0 - outer loop - vertex 106.616 -103.393 -11 - vertex 106.371 -103.187 -5 - vertex 106.616 -103.393 -5 - endloop - endfacet - facet normal 0.643568 0.765389 0 - outer loop - vertex 106.371 -103.187 -5 - vertex 106.616 -103.393 -11 - vertex 106.371 -103.187 -11 - endloop - endfacet - facet normal 0.771017 0.636814 0 - outer loop - vertex 106.371 -103.187 -5 - vertex 106.167 -102.94 -11 - vertex 106.167 -102.94 -5 - endloop - endfacet - facet normal 0.771017 0.636814 0 - outer loop - vertex 106.167 -102.94 -11 - vertex 106.371 -103.187 -5 - vertex 106.371 -103.187 -11 - endloop - endfacet - facet normal 0.872833 0.488018 0 - outer loop - vertex 106.167 -102.94 -5 - vertex 106.011 -102.661 -11 - vertex 106.011 -102.661 -5 - endloop - endfacet - facet normal 0.872833 0.488018 0 - outer loop - vertex 106.011 -102.661 -11 - vertex 106.167 -102.94 -5 - vertex 106.167 -102.94 -11 - endloop - endfacet - facet normal 0.951147 0.308737 0 - outer loop - vertex 106.011 -102.661 -5 - vertex 105.912 -102.356 -11 - vertex 105.912 -102.356 -5 - endloop - endfacet - facet normal 0.951147 0.308737 0 - outer loop - vertex 105.912 -102.356 -11 - vertex 106.011 -102.661 -5 - vertex 106.011 -102.661 -11 - endloop - endfacet - facet normal 0.994073 -0.108712 0 - outer loop - vertex -103.117 -102.035 -5 - vertex -103.082 -101.715 -11 - vertex -103.082 -101.715 -5 - endloop - endfacet - facet normal 0.994073 -0.108712 0 - outer loop - vertex -103.082 -101.715 -11 - vertex -103.117 -102.035 -5 - vertex -103.117 -102.035 -11 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -103.082 -102.356 -5 - vertex -103.117 -102.035 -11 - vertex -103.117 -102.035 -5 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -103.117 -102.035 -11 - vertex -103.082 -102.356 -5 - vertex -103.082 -102.356 -11 - endloop - endfacet - facet normal 0.950548 -0.310578 0 - outer loop - vertex -103.082 -101.715 -5 - vertex -102.983 -101.412 -11 - vertex -102.983 -101.412 -5 - endloop - endfacet - facet normal 0.950548 -0.310578 0 - outer loop - vertex -102.983 -101.412 -11 - vertex -103.082 -101.715 -5 - vertex -103.082 -101.715 -11 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -102.983 -101.412 -5 - vertex -102.828 -101.134 -11 - vertex -102.828 -101.134 -5 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -102.828 -101.134 -11 - vertex -102.983 -101.412 -5 - vertex -102.983 -101.412 -11 - endloop - endfacet - facet normal 0.768221 -0.640184 0 - outer loop - vertex -102.828 -101.134 -5 - vertex -102.623 -100.888 -11 - vertex -102.623 -100.888 -5 - endloop - endfacet - facet normal 0.768221 -0.640184 0 - outer loop - vertex -102.623 -100.888 -11 - vertex -102.828 -101.134 -5 - vertex -102.828 -101.134 -11 - endloop - endfacet - facet normal 0.639876 -0.768478 0 - outer loop - vertex -102.623 -100.888 -11 - vertex -102.378 -100.684 -5 - vertex -102.623 -100.888 -5 - endloop - endfacet - facet normal 0.639876 -0.768478 0 - outer loop - vertex -102.378 -100.684 -5 - vertex -102.623 -100.888 -11 - vertex -102.378 -100.684 -11 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -102.378 -100.684 -11 - vertex -102.1 -100.529 -5 - vertex -102.378 -100.684 -5 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -102.1 -100.529 -5 - vertex -102.378 -100.684 -11 - vertex -102.1 -100.529 -11 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex -102.1 -100.529 -11 - vertex -101.797 -100.43 -5 - vertex -102.1 -100.529 -5 - endloop - endfacet - facet normal 0.310571 -0.95055 0 - outer loop - vertex -101.797 -100.43 -5 - vertex -102.1 -100.529 -11 - vertex -101.797 -100.43 -11 - endloop - endfacet - facet normal 0.108403 -0.994107 0 - outer loop - vertex -101.797 -100.43 -11 - vertex -101.476 -100.395 -5 - vertex -101.797 -100.43 -5 - endloop - endfacet - facet normal 0.108403 -0.994107 0 - outer loop - vertex -101.476 -100.395 -5 - vertex -101.797 -100.43 -11 - vertex -101.476 -100.395 -11 - endloop - endfacet - facet normal -0.108738 -0.99407 0 - outer loop - vertex -101.476 -100.395 -11 - vertex -101.156 -100.43 -5 - vertex -101.476 -100.395 -5 - endloop - endfacet - facet normal -0.108738 -0.99407 -0 - outer loop - vertex -101.156 -100.43 -5 - vertex -101.476 -100.395 -11 - vertex -101.156 -100.43 -11 - endloop - endfacet - facet normal -0.309648 -0.950851 0 - outer loop - vertex -101.156 -100.43 -11 - vertex -100.852 -100.529 -5 - vertex -101.156 -100.43 -5 - endloop - endfacet - facet normal -0.309648 -0.950851 -0 - outer loop - vertex -100.852 -100.529 -5 - vertex -101.156 -100.43 -11 - vertex -100.852 -100.529 -11 - endloop - endfacet - facet normal -0.486973 -0.873417 0 - outer loop - vertex -100.852 -100.529 -11 - vertex -100.574 -100.684 -5 - vertex -100.852 -100.529 -5 - endloop - endfacet - facet normal -0.486973 -0.873417 -0 - outer loop - vertex -100.574 -100.684 -5 - vertex -100.852 -100.529 -11 - vertex -100.574 -100.684 -11 - endloop - endfacet - facet normal -0.639888 -0.768468 0 - outer loop - vertex -100.574 -100.684 -11 - vertex -100.329 -100.888 -5 - vertex -100.574 -100.684 -5 - endloop - endfacet - facet normal -0.639888 -0.768468 -0 - outer loop - vertex -100.329 -100.888 -5 - vertex -100.574 -100.684 -11 - vertex -100.329 -100.888 -11 - endloop - endfacet - facet normal -0.769757 -0.638337 0 - outer loop - vertex -100.125 -101.134 -11 - vertex -100.329 -100.888 -5 - vertex -100.329 -100.888 -11 - endloop - endfacet - facet normal -0.769757 -0.638337 0 - outer loop - vertex -100.329 -100.888 -5 - vertex -100.125 -101.134 -11 - vertex -100.125 -101.134 -5 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -99.97 -101.412 -11 - vertex -100.125 -101.134 -5 - vertex -100.125 -101.134 -11 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -100.125 -101.134 -5 - vertex -99.97 -101.412 -11 - vertex -99.97 -101.412 -5 - endloop - endfacet - facet normal -0.950548 -0.310578 0 - outer loop - vertex -99.871 -101.715 -11 - vertex -99.97 -101.412 -5 - vertex -99.97 -101.412 -11 - endloop - endfacet - facet normal -0.950548 -0.310578 0 - outer loop - vertex -99.97 -101.412 -5 - vertex -99.871 -101.715 -11 - vertex -99.871 -101.715 -5 - endloop - endfacet - facet normal -0.994071 -0.108735 0 - outer loop - vertex -99.836 -102.035 -11 - vertex -99.871 -101.715 -5 - vertex -99.871 -101.715 -11 - endloop - endfacet - facet normal -0.994071 -0.108735 0 - outer loop - vertex -99.871 -101.715 -5 - vertex -99.836 -102.035 -11 - vertex -99.836 -102.035 -5 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -99.87 -102.356 -11 - vertex -99.836 -102.035 -5 - vertex -99.836 -102.035 -11 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -99.836 -102.035 -5 - vertex -99.87 -102.356 -11 - vertex -99.87 -102.356 -5 - endloop - endfacet - facet normal -0.951147 0.308737 0 - outer loop - vertex -99.969 -102.661 -11 - vertex -99.87 -102.356 -5 - vertex -99.87 -102.356 -11 - endloop - endfacet - facet normal -0.951147 0.308737 0 - outer loop - vertex -99.87 -102.356 -5 - vertex -99.969 -102.661 -11 - vertex -99.969 -102.661 -5 - endloop - endfacet - facet normal -0.872833 0.488018 0 - outer loop - vertex -100.125 -102.94 -11 - vertex -99.969 -102.661 -5 - vertex -99.969 -102.661 -11 - endloop - endfacet - facet normal -0.872833 0.488018 0 - outer loop - vertex -99.969 -102.661 -5 - vertex -100.125 -102.94 -11 - vertex -100.125 -102.94 -5 - endloop - endfacet - facet normal -0.771017 0.636814 0 - outer loop - vertex -100.329 -103.187 -11 - vertex -100.125 -102.94 -5 - vertex -100.125 -102.94 -11 - endloop - endfacet - facet normal -0.771017 0.636814 0 - outer loop - vertex -100.125 -102.94 -5 - vertex -100.329 -103.187 -11 - vertex -100.329 -103.187 -5 - endloop - endfacet - facet normal -0.643568 0.765389 0 - outer loop - vertex -100.329 -103.187 -11 - vertex -100.574 -103.393 -5 - vertex -100.329 -103.187 -5 - endloop - endfacet - facet normal -0.643568 0.765389 0 - outer loop - vertex -100.574 -103.393 -5 - vertex -100.329 -103.187 -11 - vertex -100.574 -103.393 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -100.574 -103.393 -11 - vertex -100.852 -103.549 -5 - vertex -100.574 -103.393 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -100.852 -103.549 -5 - vertex -100.574 -103.393 -11 - vertex -100.852 -103.549 -11 - endloop - endfacet - facet normal -0.315306 0.94899 0 - outer loop - vertex -100.852 -103.549 -11 - vertex -101.156 -103.65 -5 - vertex -100.852 -103.549 -5 - endloop - endfacet - facet normal -0.315306 0.94899 0 - outer loop - vertex -101.156 -103.65 -5 - vertex -100.852 -103.549 -11 - vertex -101.156 -103.65 -11 - endloop - endfacet - facet normal -0.108715 0.994073 0 - outer loop - vertex -101.156 -103.65 -11 - vertex -101.476 -103.685 -5 - vertex -101.156 -103.65 -5 - endloop - endfacet - facet normal -0.108715 0.994073 0 - outer loop - vertex -101.476 -103.685 -5 - vertex -101.156 -103.65 -11 - vertex -101.476 -103.685 -11 - endloop - endfacet - facet normal 0.10838 0.99411 -0 - outer loop - vertex -101.476 -103.685 -11 - vertex -101.797 -103.65 -5 - vertex -101.476 -103.685 -5 - endloop - endfacet - facet normal 0.10838 0.99411 0 - outer loop - vertex -101.797 -103.65 -5 - vertex -101.476 -103.685 -11 - vertex -101.797 -103.65 -11 - endloop - endfacet - facet normal 0.316242 0.948679 -0 - outer loop - vertex -101.797 -103.65 -11 - vertex -102.1 -103.549 -5 - vertex -101.797 -103.65 -5 - endloop - endfacet - facet normal 0.316242 0.948679 0 - outer loop - vertex -102.1 -103.549 -5 - vertex -101.797 -103.65 -11 - vertex -102.1 -103.549 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex -102.1 -103.549 -11 - vertex -102.378 -103.393 -5 - vertex -102.1 -103.549 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex -102.378 -103.393 -5 - vertex -102.1 -103.549 -11 - vertex -102.378 -103.393 -11 - endloop - endfacet - facet normal 0.643556 0.765399 -0 - outer loop - vertex -102.378 -103.393 -11 - vertex -102.623 -103.187 -5 - vertex -102.378 -103.393 -5 - endloop - endfacet - facet normal 0.643556 0.765399 0 - outer loop - vertex -102.623 -103.187 -5 - vertex -102.378 -103.393 -11 - vertex -102.623 -103.187 -11 - endloop - endfacet - facet normal 0.771029 0.6368 0 - outer loop - vertex -102.623 -103.187 -5 - vertex -102.827 -102.94 -11 - vertex -102.827 -102.94 -5 - endloop - endfacet - facet normal 0.771029 0.6368 0 - outer loop - vertex -102.827 -102.94 -11 - vertex -102.623 -103.187 -5 - vertex -102.623 -103.187 -11 - endloop - endfacet - facet normal 0.872823 0.488036 0 - outer loop - vertex -102.827 -102.94 -5 - vertex -102.983 -102.661 -11 - vertex -102.983 -102.661 -5 - endloop - endfacet - facet normal 0.872823 0.488036 0 - outer loop - vertex -102.983 -102.661 -11 - vertex -102.827 -102.94 -5 - vertex -102.827 -102.94 -11 - endloop - endfacet - facet normal 0.951147 0.308737 0 - outer loop - vertex -102.983 -102.661 -5 - vertex -103.082 -102.356 -11 - vertex -103.082 -102.356 -5 - endloop - endfacet - facet normal 0.951147 0.308737 0 - outer loop - vertex -103.082 -102.356 -11 - vertex -102.983 -102.661 -5 - vertex -102.983 -102.661 -11 - endloop - endfacet - facet normal 0.994072 -0.108726 0 - outer loop - vertex 1.385 22.46 -5 - vertex 1.42 22.78 -11 - vertex 1.42 22.78 -5 - endloop - endfacet - facet normal 0.994072 -0.108726 0 - outer loop - vertex 1.42 22.78 -11 - vertex 1.385 22.46 -5 - vertex 1.385 22.46 -11 - endloop - endfacet - facet normal 0.994108 0.108392 0 - outer loop - vertex 1.42 22.139 -5 - vertex 1.385 22.46 -11 - vertex 1.385 22.46 -5 - endloop - endfacet - facet normal 0.994108 0.108392 0 - outer loop - vertex 1.385 22.46 -11 - vertex 1.42 22.139 -5 - vertex 1.42 22.139 -11 - endloop - endfacet - facet normal 0.95085 -0.309651 0 - outer loop - vertex 1.42 22.78 -5 - vertex 1.519 23.084 -11 - vertex 1.519 23.084 -5 - endloop - endfacet - facet normal 0.95085 -0.309651 0 - outer loop - vertex 1.519 23.084 -11 - vertex 1.42 22.78 -5 - vertex 1.42 22.78 -11 - endloop - endfacet - facet normal 0.873414 -0.486978 0 - outer loop - vertex 1.519 23.084 -5 - vertex 1.674 23.362 -11 - vertex 1.674 23.362 -5 - endloop - endfacet - facet normal 0.873414 -0.486978 0 - outer loop - vertex 1.674 23.362 -11 - vertex 1.519 23.084 -5 - vertex 1.519 23.084 -11 - endloop - endfacet - facet normal 0.768478 -0.639877 0 - outer loop - vertex 1.674 23.362 -5 - vertex 1.878 23.607 -11 - vertex 1.878 23.607 -5 - endloop - endfacet - facet normal 0.768478 -0.639877 0 - outer loop - vertex 1.878 23.607 -11 - vertex 1.674 23.362 -5 - vertex 1.674 23.362 -11 - endloop - endfacet - facet normal 0.63988 -0.768475 0 - outer loop - vertex 1.878 23.607 -11 - vertex 2.123 23.811 -5 - vertex 1.878 23.607 -5 - endloop - endfacet - facet normal 0.63988 -0.768475 0 - outer loop - vertex 2.123 23.811 -5 - vertex 1.878 23.607 -11 - vertex 2.123 23.811 -11 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex 2.123 23.811 -11 - vertex 2.401 23.966 -5 - vertex 2.123 23.811 -5 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex 2.401 23.966 -5 - vertex 2.123 23.811 -11 - vertex 2.401 23.966 -11 - endloop - endfacet - facet normal 0.312476 -0.949926 0 - outer loop - vertex 2.401 23.966 -11 - vertex 2.705 24.066 -5 - vertex 2.401 23.966 -5 - endloop - endfacet - facet normal 0.312476 -0.949926 0 - outer loop - vertex 2.705 24.066 -5 - vertex 2.401 23.966 -11 - vertex 2.705 24.066 -11 - endloop - endfacet - facet normal 0.105651 -0.994403 0 - outer loop - vertex 2.705 24.066 -11 - vertex 3.025 24.1 -5 - vertex 2.705 24.066 -5 - endloop - endfacet - facet normal 0.105651 -0.994403 0 - outer loop - vertex 3.025 24.1 -5 - vertex 2.705 24.066 -11 - vertex 3.025 24.1 -11 - endloop - endfacet - facet normal -0.105325 -0.994438 0 - outer loop - vertex 3.025 24.1 -11 - vertex 3.346 24.066 -5 - vertex 3.025 24.1 -5 - endloop - endfacet - facet normal -0.105325 -0.994438 -0 - outer loop - vertex 3.346 24.066 -5 - vertex 3.025 24.1 -11 - vertex 3.346 24.066 -11 - endloop - endfacet - facet normal -0.313407 -0.949619 0 - outer loop - vertex 3.346 24.066 -11 - vertex 3.649 23.966 -5 - vertex 3.346 24.066 -5 - endloop - endfacet - facet normal -0.313407 -0.949619 -0 - outer loop - vertex 3.649 23.966 -5 - vertex 3.346 24.066 -11 - vertex 3.649 23.966 -11 - endloop - endfacet - facet normal -0.486973 -0.873417 0 - outer loop - vertex 3.649 23.966 -11 - vertex 3.927 23.811 -5 - vertex 3.649 23.966 -5 - endloop - endfacet - facet normal -0.486973 -0.873417 -0 - outer loop - vertex 3.927 23.811 -5 - vertex 3.649 23.966 -11 - vertex 3.927 23.811 -11 - endloop - endfacet - facet normal -0.639879 -0.768476 0 - outer loop - vertex 3.927 23.811 -11 - vertex 4.172 23.607 -5 - vertex 3.927 23.811 -5 - endloop - endfacet - facet normal -0.639879 -0.768476 -0 - outer loop - vertex 4.172 23.607 -5 - vertex 3.927 23.811 -11 - vertex 4.172 23.607 -11 - endloop - endfacet - facet normal -0.766936 -0.641724 0 - outer loop - vertex 4.377 23.362 -11 - vertex 4.172 23.607 -5 - vertex 4.172 23.607 -11 - endloop - endfacet - facet normal -0.766936 -0.641724 0 - outer loop - vertex 4.172 23.607 -5 - vertex 4.377 23.362 -11 - vertex 4.377 23.362 -5 - endloop - endfacet - facet normal -0.873416 -0.486976 0 - outer loop - vertex 4.532 23.084 -11 - vertex 4.377 23.362 -5 - vertex 4.377 23.362 -11 - endloop - endfacet - facet normal -0.873416 -0.486976 0 - outer loop - vertex 4.377 23.362 -5 - vertex 4.532 23.084 -11 - vertex 4.532 23.084 -5 - endloop - endfacet - facet normal -0.95085 -0.309651 0 - outer loop - vertex 4.631 22.78 -11 - vertex 4.532 23.084 -5 - vertex 4.532 23.084 -11 - endloop - endfacet - facet normal -0.95085 -0.309651 0 - outer loop - vertex 4.532 23.084 -5 - vertex 4.631 22.78 -11 - vertex 4.631 22.78 -5 - endloop - endfacet - facet normal -0.994072 -0.108726 0 - outer loop - vertex 4.666 22.46 -11 - vertex 4.631 22.78 -5 - vertex 4.631 22.78 -11 - endloop - endfacet - facet normal -0.994072 -0.108726 0 - outer loop - vertex 4.631 22.78 -5 - vertex 4.666 22.46 -11 - vertex 4.666 22.46 -5 - endloop - endfacet - facet normal -0.994108 0.108392 0 - outer loop - vertex 4.631 22.139 -11 - vertex 4.666 22.46 -5 - vertex 4.666 22.46 -11 - endloop - endfacet - facet normal -0.994108 0.108392 0 - outer loop - vertex 4.666 22.46 -5 - vertex 4.631 22.139 -11 - vertex 4.631 22.139 -5 - endloop - endfacet - facet normal -0.950549 0.310574 0 - outer loop - vertex 4.532 21.836 -11 - vertex 4.631 22.139 -5 - vertex 4.631 22.139 -11 - endloop - endfacet - facet normal -0.950549 0.310574 0 - outer loop - vertex 4.631 22.139 -5 - vertex 4.532 21.836 -11 - vertex 4.532 21.836 -5 - endloop - endfacet - facet normal -0.873416 0.486976 0 - outer loop - vertex 4.377 21.558 -11 - vertex 4.532 21.836 -5 - vertex 4.532 21.836 -11 - endloop - endfacet - facet normal -0.873416 0.486976 0 - outer loop - vertex 4.532 21.836 -5 - vertex 4.377 21.558 -11 - vertex 4.377 21.558 -5 - endloop - endfacet - facet normal -0.766936 0.641724 0 - outer loop - vertex 4.172 21.313 -11 - vertex 4.377 21.558 -5 - vertex 4.377 21.558 -11 - endloop - endfacet - facet normal -0.766936 0.641724 0 - outer loop - vertex 4.377 21.558 -5 - vertex 4.172 21.313 -11 - vertex 4.172 21.313 -5 - endloop - endfacet - facet normal -0.639875 0.768479 0 - outer loop - vertex 4.172 21.313 -11 - vertex 3.927 21.109 -5 - vertex 4.172 21.313 -5 - endloop - endfacet - facet normal -0.639875 0.768479 0 - outer loop - vertex 3.927 21.109 -5 - vertex 4.172 21.313 -11 - vertex 3.927 21.109 -11 - endloop - endfacet - facet normal -0.489368 0.872077 0 - outer loop - vertex 3.927 21.109 -11 - vertex 3.649 20.953 -5 - vertex 3.927 21.109 -5 - endloop - endfacet - facet normal -0.489368 0.872077 0 - outer loop - vertex 3.649 20.953 -5 - vertex 3.927 21.109 -11 - vertex 3.649 20.953 -11 - endloop - endfacet - facet normal -0.310573 0.95055 0 - outer loop - vertex 3.649 20.953 -11 - vertex 3.346 20.854 -5 - vertex 3.649 20.953 -5 - endloop - endfacet - facet normal -0.310573 0.95055 0 - outer loop - vertex 3.346 20.854 -5 - vertex 3.649 20.953 -11 - vertex 3.346 20.854 -11 - endloop - endfacet - facet normal -0.108391 0.994108 0 - outer loop - vertex 3.346 20.854 -11 - vertex 3.025 20.819 -5 - vertex 3.346 20.854 -5 - endloop - endfacet - facet normal -0.108391 0.994108 0 - outer loop - vertex 3.025 20.819 -5 - vertex 3.346 20.854 -11 - vertex 3.025 20.819 -11 - endloop - endfacet - facet normal 0.108726 0.994072 -0 - outer loop - vertex 3.025 20.819 -11 - vertex 2.705 20.854 -5 - vertex 3.025 20.819 -5 - endloop - endfacet - facet normal 0.108726 0.994072 0 - outer loop - vertex 2.705 20.854 -5 - vertex 3.025 20.819 -11 - vertex 2.705 20.854 -11 - endloop - endfacet - facet normal 0.309648 0.950851 -0 - outer loop - vertex 2.705 20.854 -11 - vertex 2.401 20.953 -5 - vertex 2.705 20.854 -5 - endloop - endfacet - facet normal 0.309648 0.950851 0 - outer loop - vertex 2.401 20.953 -5 - vertex 2.705 20.854 -11 - vertex 2.401 20.953 -11 - endloop - endfacet - facet normal 0.489368 0.872077 -0 - outer loop - vertex 2.401 20.953 -11 - vertex 2.123 21.109 -5 - vertex 2.401 20.953 -5 - endloop - endfacet - facet normal 0.489368 0.872077 0 - outer loop - vertex 2.123 21.109 -5 - vertex 2.401 20.953 -11 - vertex 2.123 21.109 -11 - endloop - endfacet - facet normal 0.639877 0.768477 -0 - outer loop - vertex 2.123 21.109 -11 - vertex 1.878 21.313 -5 - vertex 2.123 21.109 -5 - endloop - endfacet - facet normal 0.639877 0.768477 0 - outer loop - vertex 1.878 21.313 -5 - vertex 2.123 21.109 -11 - vertex 1.878 21.313 -11 - endloop - endfacet - facet normal 0.768478 0.639877 0 - outer loop - vertex 1.878 21.313 -5 - vertex 1.674 21.558 -11 - vertex 1.674 21.558 -5 - endloop - endfacet - facet normal 0.768478 0.639877 0 - outer loop - vertex 1.674 21.558 -11 - vertex 1.878 21.313 -5 - vertex 1.878 21.313 -11 - endloop - endfacet - facet normal 0.873414 0.486978 0 - outer loop - vertex 1.674 21.558 -5 - vertex 1.519 21.836 -11 - vertex 1.519 21.836 -5 - endloop - endfacet - facet normal 0.873414 0.486978 0 - outer loop - vertex 1.519 21.836 -11 - vertex 1.674 21.558 -5 - vertex 1.674 21.558 -11 - endloop - endfacet - facet normal 0.950549 0.310574 0 - outer loop - vertex 1.519 21.836 -5 - vertex 1.42 22.139 -11 - vertex 1.42 22.139 -5 - endloop - endfacet - facet normal 0.950549 0.310574 0 - outer loop - vertex 1.42 22.139 -11 - vertex 1.519 21.836 -5 - vertex 1.519 21.836 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -87.118 26.464 -5 - vertex -87.118 49.465 -11 - vertex -87.118 49.465 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -87.118 49.465 -11 - vertex -87.118 26.464 -5 - vertex -87.118 26.464 -11 - endloop - endfacet - facet normal 0.995014 0.0997395 0 - outer loop - vertex -87.037 25.656 -5 - vertex -87.118 26.464 -11 - vertex -87.118 26.464 -5 - endloop - endfacet - facet normal 0.995014 0.0997395 0 - outer loop - vertex -87.118 26.464 -11 - vertex -87.037 25.656 -5 - vertex -87.037 25.656 -11 - endloop - endfacet - facet normal 0.995014 -0.09974 0 - outer loop - vertex -87.118 49.465 -5 - vertex -87.037 50.273 -11 - vertex -87.037 50.273 -5 - endloop - endfacet - facet normal 0.995014 -0.09974 0 - outer loop - vertex -87.037 50.273 -11 - vertex -87.118 49.465 -5 - vertex -87.118 49.465 -11 - endloop - endfacet - facet normal 0.956972 -0.290179 0 - outer loop - vertex -87.037 50.273 -5 - vertex -86.802 51.048 -11 - vertex -86.802 51.048 -5 - endloop - endfacet - facet normal 0.956972 -0.290179 0 - outer loop - vertex -86.802 51.048 -11 - vertex -87.037 50.273 -5 - vertex -87.037 50.273 -11 - endloop - endfacet - facet normal 0.883815 -0.467836 0 - outer loop - vertex -86.802 51.048 -5 - vertex -86.423 51.764 -11 - vertex -86.423 51.764 -5 - endloop - endfacet - facet normal 0.883815 -0.467836 0 - outer loop - vertex -86.423 51.764 -11 - vertex -86.802 51.048 -5 - vertex -86.802 51.048 -11 - endloop - endfacet - facet normal 0.774948 -0.632025 0 - outer loop - vertex -86.423 51.764 -5 - vertex -85.91 52.393 -11 - vertex -85.91 52.393 -5 - endloop - endfacet - facet normal 0.774948 -0.632025 0 - outer loop - vertex -85.91 52.393 -11 - vertex -86.423 51.764 -5 - vertex -86.423 51.764 -11 - endloop - endfacet - facet normal 0.632765 -0.774344 0 - outer loop - vertex -85.91 52.393 -11 - vertex -85.281 52.907 -5 - vertex -85.91 52.393 -5 - endloop - endfacet - facet normal 0.632765 -0.774344 0 - outer loop - vertex -85.281 52.907 -5 - vertex -85.91 52.393 -11 - vertex -85.281 52.907 -11 - endloop - endfacet - facet normal 0.47168 -0.88177 0 - outer loop - vertex -85.281 52.907 -11 - vertex -84.565 53.29 -5 - vertex -85.281 52.907 -5 - endloop - endfacet - facet normal 0.47168 -0.88177 0 - outer loop - vertex -84.565 53.29 -5 - vertex -85.281 52.907 -11 - vertex -84.565 53.29 -11 - endloop - endfacet - facet normal 0.293564 -0.955939 0 - outer loop - vertex -84.565 53.29 -11 - vertex -83.79 53.528 -5 - vertex -84.565 53.29 -5 - endloop - endfacet - facet normal 0.293564 -0.955939 0 - outer loop - vertex -83.79 53.528 -5 - vertex -84.565 53.29 -11 - vertex -83.79 53.528 -11 - endloop - endfacet - facet normal 0.100968 -0.99489 0 - outer loop - vertex -83.79 53.528 -11 - vertex -82.982 53.61 -5 - vertex -83.79 53.528 -5 - endloop - endfacet - facet normal 0.100968 -0.99489 0 - outer loop - vertex -82.982 53.61 -5 - vertex -83.79 53.528 -11 - vertex -82.982 53.61 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -82.982 53.61 -11 - vertex -80.98 53.61 -5 - vertex -82.982 53.61 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -80.98 53.61 -5 - vertex -82.982 53.61 -11 - vertex -80.98 53.61 -11 - endloop - endfacet - facet normal -0.100968 -0.99489 0 - outer loop - vertex -80.98 53.61 -11 - vertex -80.172 53.528 -5 - vertex -80.98 53.61 -5 - endloop - endfacet - facet normal -0.100968 -0.99489 -0 - outer loop - vertex -80.172 53.528 -5 - vertex -80.98 53.61 -11 - vertex -80.172 53.528 -11 - endloop - endfacet - facet normal -0.293567 -0.955939 0 - outer loop - vertex -80.172 53.528 -11 - vertex -79.397 53.29 -5 - vertex -80.172 53.528 -5 - endloop - endfacet - facet normal -0.293567 -0.955939 -0 - outer loop - vertex -79.397 53.29 -5 - vertex -80.172 53.528 -11 - vertex -79.397 53.29 -11 - endloop - endfacet - facet normal -0.471676 -0.881772 0 - outer loop - vertex -79.397 53.29 -11 - vertex -78.681 52.907 -5 - vertex -79.397 53.29 -5 - endloop - endfacet - facet normal -0.471676 -0.881772 -0 - outer loop - vertex -78.681 52.907 -5 - vertex -79.397 53.29 -11 - vertex -78.681 52.907 -11 - endloop - endfacet - facet normal -0.63277 -0.77434 0 - outer loop - vertex -78.681 52.907 -11 - vertex -78.052 52.393 -5 - vertex -78.681 52.907 -5 - endloop - endfacet - facet normal -0.63277 -0.77434 -0 - outer loop - vertex -78.052 52.393 -5 - vertex -78.681 52.907 -11 - vertex -78.052 52.393 -11 - endloop - endfacet - facet normal -0.77434 -0.63277 0 - outer loop - vertex -77.538 51.764 -11 - vertex -78.052 52.393 -5 - vertex -78.052 52.393 -11 - endloop - endfacet - facet normal -0.77434 -0.63277 0 - outer loop - vertex -78.052 52.393 -5 - vertex -77.538 51.764 -11 - vertex -77.538 51.764 -5 - endloop - endfacet - facet normal -0.881771 -0.471678 0 - outer loop - vertex -77.155 51.048 -11 - vertex -77.538 51.764 -5 - vertex -77.538 51.764 -11 - endloop - endfacet - facet normal -0.881771 -0.471678 0 - outer loop - vertex -77.538 51.764 -5 - vertex -77.155 51.048 -11 - vertex -77.155 51.048 -5 - endloop - endfacet - facet normal -0.955939 -0.293564 0 - outer loop - vertex -76.917 50.273 -11 - vertex -77.155 51.048 -5 - vertex -77.155 51.048 -11 - endloop - endfacet - facet normal -0.955939 -0.293564 0 - outer loop - vertex -77.155 51.048 -5 - vertex -76.917 50.273 -11 - vertex -76.917 50.273 -5 - endloop - endfacet - facet normal -0.99489 -0.100968 0 - outer loop - vertex -76.835 49.465 -11 - vertex -76.917 50.273 -5 - vertex -76.917 50.273 -11 - endloop - endfacet - facet normal -0.99489 -0.100968 0 - outer loop - vertex -76.917 50.273 -5 - vertex -76.835 49.465 -11 - vertex -76.835 49.465 -5 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -76.835 26.464 -11 - vertex -76.835 49.465 -5 - vertex -76.835 49.465 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -76.835 49.465 -5 - vertex -76.835 26.464 -11 - vertex -76.835 26.464 -5 - endloop - endfacet - facet normal -0.99489 0.100967 0 - outer loop - vertex -76.917 25.656 -11 - vertex -76.835 26.464 -5 - vertex -76.835 26.464 -11 - endloop - endfacet - facet normal -0.99489 0.100967 0 - outer loop - vertex -76.835 26.464 -5 - vertex -76.917 25.656 -11 - vertex -76.917 25.656 -5 - endloop - endfacet - facet normal -0.955939 0.293565 0 - outer loop - vertex -77.155 24.881 -11 - vertex -76.917 25.656 -5 - vertex -76.917 25.656 -11 - endloop - endfacet - facet normal -0.955939 0.293565 0 - outer loop - vertex -76.917 25.656 -5 - vertex -77.155 24.881 -11 - vertex -77.155 24.881 -5 - endloop - endfacet - facet normal -0.881771 0.471678 0 - outer loop - vertex -77.538 24.165 -11 - vertex -77.155 24.881 -5 - vertex -77.155 24.881 -11 - endloop - endfacet - facet normal -0.881771 0.471678 0 - outer loop - vertex -77.155 24.881 -5 - vertex -77.538 24.165 -11 - vertex -77.538 24.165 -5 - endloop - endfacet - facet normal -0.774342 0.632767 0 - outer loop - vertex -78.052 23.536 -11 - vertex -77.538 24.165 -5 - vertex -77.538 24.165 -11 - endloop - endfacet - facet normal -0.774342 0.632767 0 - outer loop - vertex -77.538 24.165 -5 - vertex -78.052 23.536 -11 - vertex -78.052 23.536 -5 - endloop - endfacet - facet normal -0.632031 0.774943 0 - outer loop - vertex -78.052 23.536 -11 - vertex -78.681 23.023 -5 - vertex -78.052 23.536 -5 - endloop - endfacet - facet normal -0.632031 0.774943 0 - outer loop - vertex -78.681 23.023 -5 - vertex -78.052 23.536 -11 - vertex -78.681 23.023 -11 - endloop - endfacet - facet normal -0.467829 0.883819 0 - outer loop - vertex -78.681 23.023 -11 - vertex -79.397 22.644 -5 - vertex -78.681 23.023 -5 - endloop - endfacet - facet normal -0.467829 0.883819 0 - outer loop - vertex -79.397 22.644 -5 - vertex -78.681 23.023 -11 - vertex -79.397 22.644 -11 - endloop - endfacet - facet normal -0.291309 0.956629 0 - outer loop - vertex -79.397 22.644 -11 - vertex -80.172 22.408 -5 - vertex -79.397 22.644 -5 - endloop - endfacet - facet normal -0.291309 0.956629 0 - outer loop - vertex -80.172 22.408 -5 - vertex -79.397 22.644 -11 - vertex -80.172 22.408 -11 - endloop - endfacet - facet normal -0.0985305 0.995134 0 - outer loop - vertex -80.172 22.408 -11 - vertex -80.98 22.328 -5 - vertex -80.172 22.408 -5 - endloop - endfacet - facet normal -0.0985305 0.995134 0 - outer loop - vertex -80.98 22.328 -5 - vertex -80.172 22.408 -11 - vertex -80.98 22.328 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -80.98 22.328 -11 - vertex -82.982 22.328 -5 - vertex -80.98 22.328 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -82.982 22.328 -5 - vertex -80.98 22.328 -11 - vertex -82.982 22.328 -11 - endloop - endfacet - facet normal 0.0985305 0.995134 -0 - outer loop - vertex -82.982 22.328 -11 - vertex -83.79 22.408 -5 - vertex -82.982 22.328 -5 - endloop - endfacet - facet normal 0.0985305 0.995134 0 - outer loop - vertex -83.79 22.408 -5 - vertex -82.982 22.328 -11 - vertex -83.79 22.408 -11 - endloop - endfacet - facet normal 0.291306 0.95663 -0 - outer loop - vertex -83.79 22.408 -11 - vertex -84.565 22.644 -5 - vertex -83.79 22.408 -5 - endloop - endfacet - facet normal 0.291306 0.95663 0 - outer loop - vertex -84.565 22.644 -5 - vertex -83.79 22.408 -11 - vertex -84.565 22.644 -11 - endloop - endfacet - facet normal 0.467833 0.883817 -0 - outer loop - vertex -84.565 22.644 -11 - vertex -85.281 23.023 -5 - vertex -84.565 22.644 -5 - endloop - endfacet - facet normal 0.467833 0.883817 0 - outer loop - vertex -85.281 23.023 -5 - vertex -84.565 22.644 -11 - vertex -85.281 23.023 -11 - endloop - endfacet - facet normal 0.632026 0.774947 -0 - outer loop - vertex -85.281 23.023 -11 - vertex -85.91 23.536 -5 - vertex -85.281 23.023 -5 - endloop - endfacet - facet normal 0.632026 0.774947 0 - outer loop - vertex -85.91 23.536 -5 - vertex -85.281 23.023 -11 - vertex -85.91 23.536 -11 - endloop - endfacet - facet normal 0.77495 0.632023 0 - outer loop - vertex -85.91 23.536 -5 - vertex -86.423 24.165 -11 - vertex -86.423 24.165 -5 - endloop - endfacet - facet normal 0.77495 0.632023 0 - outer loop - vertex -86.423 24.165 -11 - vertex -85.91 23.536 -5 - vertex -85.91 23.536 -11 - endloop - endfacet - facet normal 0.883815 0.467836 0 - outer loop - vertex -86.423 24.165 -5 - vertex -86.802 24.881 -11 - vertex -86.802 24.881 -5 - endloop - endfacet - facet normal 0.883815 0.467836 0 - outer loop - vertex -86.802 24.881 -11 - vertex -86.423 24.165 -5 - vertex -86.423 24.165 -11 - endloop - endfacet - facet normal 0.956972 0.29018 0 - outer loop - vertex -86.802 24.881 -5 - vertex -87.037 25.656 -11 - vertex -87.037 25.656 -5 - endloop - endfacet - facet normal 0.956972 0.29018 0 - outer loop - vertex -87.037 25.656 -11 - vertex -86.802 24.881 -5 - vertex -86.802 24.881 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -77.117 -2.543 -5 - vertex -77.117 7.458 -11 - vertex -77.117 7.458 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -77.117 7.458 -11 - vertex -77.117 -2.543 -5 - vertex -77.117 -2.543 -11 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -76.985 -2.543 -11 - vertex -77.117 -2.543 -5 - vertex -76.985 -2.543 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -77.117 -2.543 -5 - vertex -76.985 -2.543 -11 - vertex -77.117 -2.543 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -77.117 7.458 -11 - vertex -76.976 7.458 -5 - vertex -77.117 7.458 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -76.976 7.458 -5 - vertex -77.117 7.458 -11 - vertex -76.976 7.458 -11 - endloop - endfacet - facet normal 0.707097 0.707116 -0 - outer loop - vertex -76.976 7.458 -11 - vertex -77.082 7.564 -5 - vertex -76.976 7.458 -5 - endloop - endfacet - facet normal 0.707097 0.707116 0 - outer loop - vertex -77.082 7.564 -5 - vertex -76.976 7.458 -11 - vertex -77.082 7.564 -11 - endloop - endfacet - facet normal 0.706948 -0.707266 0 - outer loop - vertex -77.082 7.564 -11 - vertex -57.079 27.558 -5 - vertex -77.082 7.564 -5 - endloop - endfacet - facet normal 0.706948 -0.707266 0 - outer loop - vertex -57.079 27.558 -5 - vertex -77.082 7.564 -11 - vertex -57.079 27.558 -11 - endloop - endfacet - facet normal -0.710722 -0.703473 0 - outer loop - vertex -56.982 27.46 -11 - vertex -57.079 27.558 -5 - vertex -57.079 27.558 -11 - endloop - endfacet - facet normal -0.710722 -0.703473 0 - outer loop - vertex -57.079 27.558 -5 - vertex -56.982 27.46 -11 - vertex -56.982 27.46 -5 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -56.982 27.46 -5 - vertex -56.982 27.602 -11 - vertex -56.982 27.602 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -56.982 27.602 -11 - vertex -56.982 27.46 -5 - vertex -56.982 27.46 -11 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -56.982 27.602 -11 - vertex -36.98 27.602 -5 - vertex -56.982 27.602 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -36.98 27.602 -5 - vertex -56.982 27.602 -11 - vertex -36.98 27.602 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -36.98 27.46 -11 - vertex -36.98 27.602 -5 - vertex -36.98 27.602 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -36.98 27.602 -5 - vertex -36.98 27.46 -11 - vertex -36.98 27.46 -5 - endloop - endfacet - facet normal 0.710722 -0.703473 0 - outer loop - vertex -36.98 27.46 -5 - vertex -36.883 27.558 -11 - vertex -36.883 27.558 -5 - endloop - endfacet - facet normal 0.710722 -0.703473 0 - outer loop - vertex -36.883 27.558 -11 - vertex -36.98 27.46 -5 - vertex -36.98 27.46 -11 - endloop - endfacet - facet normal -0.706948 -0.707266 0 - outer loop - vertex -36.883 27.558 -11 - vertex -16.88 7.564 -5 - vertex -36.883 27.558 -5 - endloop - endfacet - facet normal -0.706948 -0.707266 -0 - outer loop - vertex -16.88 7.564 -5 - vertex -36.883 27.558 -11 - vertex -16.88 7.564 -11 - endloop - endfacet - facet normal -0.737731 0.675095 0 - outer loop - vertex -16.977 7.458 -11 - vertex -16.88 7.564 -5 - vertex -16.88 7.564 -11 - endloop - endfacet - facet normal -0.737731 0.675095 0 - outer loop - vertex -16.88 7.564 -5 - vertex -16.977 7.458 -11 - vertex -16.977 7.458 -5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -16.977 7.458 -11 - vertex -16.836 7.458 -5 - vertex -16.977 7.458 -5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex -16.836 7.458 -5 - vertex -16.977 7.458 -11 - vertex -16.836 7.458 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -16.836 -2.543 -11 - vertex -16.836 7.458 -5 - vertex -16.836 7.458 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -16.836 7.458 -5 - vertex -16.836 -2.543 -11 - vertex -16.836 -2.543 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -16.836 -2.543 -11 - vertex -16.977 -2.543 -5 - vertex -16.836 -2.543 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -16.977 -2.543 -5 - vertex -16.836 -2.543 -11 - vertex -16.977 -2.543 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -16.88 -2.64 -11 - vertex -16.977 -2.543 -5 - vertex -16.977 -2.543 -11 - endloop - endfacet - facet normal -0.707107 -0.707107 0 - outer loop - vertex -16.977 -2.543 -5 - vertex -16.88 -2.64 -11 - vertex -16.88 -2.64 -5 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -36.883 -22.643 -11 - vertex -16.88 -2.64 -5 - vertex -16.88 -2.64 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -16.88 -2.64 -5 - vertex -36.883 -22.643 -11 - vertex -36.883 -22.643 -5 - endloop - endfacet - facet normal 0.737734 0.675091 0 - outer loop - vertex -36.883 -22.643 -5 - vertex -36.98 -22.537 -11 - vertex -36.98 -22.537 -5 - endloop - endfacet - facet normal 0.737734 0.675091 0 - outer loop - vertex -36.98 -22.537 -11 - vertex -36.883 -22.643 -5 - vertex -36.883 -22.643 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -36.98 -22.678 -11 - vertex -36.98 -22.537 -5 - vertex -36.98 -22.537 -11 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -36.98 -22.537 -5 - vertex -36.98 -22.678 -11 - vertex -36.98 -22.678 -5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -36.98 -22.678 -11 - vertex -56.982 -22.678 -5 - vertex -36.98 -22.678 -5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -56.982 -22.678 -5 - vertex -36.98 -22.678 -11 - vertex -56.982 -22.678 -11 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -56.982 -22.678 -5 - vertex -56.982 -22.546 -11 - vertex -56.982 -22.546 -5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -56.982 -22.546 -11 - vertex -56.982 -22.678 -5 - vertex -56.982 -22.678 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -57.079 -22.643 -11 - vertex -56.982 -22.546 -5 - vertex -56.982 -22.546 -11 - endloop - endfacet - facet normal -0.707107 0.707107 0 - outer loop - vertex -56.982 -22.546 -5 - vertex -57.079 -22.643 -11 - vertex -57.079 -22.643 -5 - endloop - endfacet - facet normal 0.707107 0.707107 -0 - outer loop - vertex -57.079 -22.643 -11 - vertex -77.082 -2.64 -5 - vertex -57.079 -22.643 -5 - endloop - endfacet - facet normal 0.707107 0.707107 0 - outer loop - vertex -77.082 -2.64 -5 - vertex -57.079 -22.643 -11 - vertex -77.082 -2.64 -11 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -77.082 -2.64 -5 - vertex -76.985 -2.543 -11 - vertex -76.985 -2.543 -5 - endloop - endfacet - facet normal 0.707107 -0.707107 0 - outer loop - vertex -76.985 -2.543 -11 - vertex -77.082 -2.64 -5 - vertex -77.082 -2.64 -11 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -73.616 -32.538 -5 - vertex -73.581 -32.218 -11 - vertex -73.581 -32.218 -5 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -73.581 -32.218 -11 - vertex -73.616 -32.538 -5 - vertex -73.616 -32.538 -11 - endloop - endfacet - facet normal 0.99411 0.108379 0 - outer loop - vertex -73.581 -32.859 -5 - vertex -73.616 -32.538 -11 - vertex -73.616 -32.538 -5 - endloop - endfacet - facet normal 0.99411 0.108379 0 - outer loop - vertex -73.616 -32.538 -11 - vertex -73.581 -32.859 -5 - vertex -73.581 -32.859 -11 - endloop - endfacet - facet normal 0.950851 -0.30965 0 - outer loop - vertex -73.581 -32.218 -5 - vertex -73.482 -31.914 -11 - vertex -73.482 -31.914 -5 - endloop - endfacet - facet normal 0.950851 -0.30965 0 - outer loop - vertex -73.482 -31.914 -11 - vertex -73.581 -32.218 -5 - vertex -73.581 -32.218 -11 - endloop - endfacet - facet normal 0.87207 -0.489382 0 - outer loop - vertex -73.482 -31.914 -5 - vertex -73.326 -31.636 -11 - vertex -73.326 -31.636 -5 - endloop - endfacet - facet normal 0.87207 -0.489382 0 - outer loop - vertex -73.326 -31.636 -11 - vertex -73.482 -31.914 -5 - vertex -73.482 -31.914 -11 - endloop - endfacet - facet normal 0.768487 -0.639865 0 - outer loop - vertex -73.326 -31.636 -5 - vertex -73.122 -31.391 -11 - vertex -73.122 -31.391 -5 - endloop - endfacet - facet normal 0.768487 -0.639865 0 - outer loop - vertex -73.122 -31.391 -11 - vertex -73.326 -31.636 -5 - vertex -73.326 -31.636 -11 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -73.122 -31.391 -11 - vertex -72.877 -31.187 -5 - vertex -73.122 -31.391 -5 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -72.877 -31.187 -5 - vertex -73.122 -31.391 -11 - vertex -72.877 -31.187 -11 - endloop - endfacet - facet normal 0.486978 -0.873414 0 - outer loop - vertex -72.877 -31.187 -11 - vertex -72.599 -31.032 -5 - vertex -72.877 -31.187 -5 - endloop - endfacet - facet normal 0.486978 -0.873414 0 - outer loop - vertex -72.599 -31.032 -5 - vertex -72.877 -31.187 -11 - vertex -72.599 -31.032 -11 - endloop - endfacet - facet normal 0.310577 -0.950548 0 - outer loop - vertex -72.599 -31.032 -11 - vertex -72.296 -30.933 -5 - vertex -72.599 -31.032 -5 - endloop - endfacet - facet normal 0.310577 -0.950548 0 - outer loop - vertex -72.296 -30.933 -5 - vertex -72.599 -31.032 -11 - vertex -72.296 -30.933 -11 - endloop - endfacet - facet normal 0.108392 -0.994108 0 - outer loop - vertex -72.296 -30.933 -11 - vertex -71.975 -30.898 -5 - vertex -72.296 -30.933 -5 - endloop - endfacet - facet normal 0.108392 -0.994108 0 - outer loop - vertex -71.975 -30.898 -5 - vertex -72.296 -30.933 -11 - vertex -71.975 -30.898 -11 - endloop - endfacet - facet normal -0.108726 -0.994072 0 - outer loop - vertex -71.975 -30.898 -11 - vertex -71.655 -30.933 -5 - vertex -71.975 -30.898 -5 - endloop - endfacet - facet normal -0.108726 -0.994072 -0 - outer loop - vertex -71.655 -30.933 -5 - vertex -71.975 -30.898 -11 - vertex -71.655 -30.933 -11 - endloop - endfacet - facet normal -0.309654 -0.950849 0 - outer loop - vertex -71.655 -30.933 -11 - vertex -71.351 -31.032 -5 - vertex -71.655 -30.933 -5 - endloop - endfacet - facet normal -0.309654 -0.950849 -0 - outer loop - vertex -71.351 -31.032 -5 - vertex -71.655 -30.933 -11 - vertex -71.351 -31.032 -11 - endloop - endfacet - facet normal -0.486978 -0.873414 0 - outer loop - vertex -71.351 -31.032 -11 - vertex -71.073 -31.187 -5 - vertex -71.351 -31.032 -5 - endloop - endfacet - facet normal -0.486978 -0.873414 -0 - outer loop - vertex -71.073 -31.187 -5 - vertex -71.351 -31.032 -11 - vertex -71.073 -31.187 -11 - endloop - endfacet - facet normal -0.639881 -0.768474 0 - outer loop - vertex -71.073 -31.187 -11 - vertex -70.828 -31.391 -5 - vertex -71.073 -31.187 -5 - endloop - endfacet - facet normal -0.639881 -0.768474 -0 - outer loop - vertex -70.828 -31.391 -5 - vertex -71.073 -31.187 -11 - vertex -70.828 -31.391 -11 - endloop - endfacet - facet normal -0.768476 -0.639879 0 - outer loop - vertex -70.624 -31.636 -11 - vertex -70.828 -31.391 -5 - vertex -70.828 -31.391 -11 - endloop - endfacet - facet normal -0.768476 -0.639879 0 - outer loop - vertex -70.828 -31.391 -5 - vertex -70.624 -31.636 -11 - vertex -70.624 -31.636 -5 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex -70.468 -31.914 -11 - vertex -70.624 -31.636 -5 - vertex -70.624 -31.636 -11 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex -70.624 -31.636 -5 - vertex -70.468 -31.914 -11 - vertex -70.468 -31.914 -5 - endloop - endfacet - facet normal -0.950851 -0.30965 0 - outer loop - vertex -70.369 -32.218 -11 - vertex -70.468 -31.914 -5 - vertex -70.468 -31.914 -11 - endloop - endfacet - facet normal -0.950851 -0.30965 0 - outer loop - vertex -70.468 -31.914 -5 - vertex -70.369 -32.218 -11 - vertex -70.369 -32.218 -5 - endloop - endfacet - facet normal -0.994401 -0.105668 0 - outer loop - vertex -70.335 -32.538 -11 - vertex -70.369 -32.218 -5 - vertex -70.369 -32.218 -11 - endloop - endfacet - facet normal -0.994401 -0.105668 0 - outer loop - vertex -70.369 -32.218 -5 - vertex -70.335 -32.538 -11 - vertex -70.335 -32.538 -5 - endloop - endfacet - facet normal -0.994436 0.105342 0 - outer loop - vertex -70.369 -32.859 -11 - vertex -70.335 -32.538 -5 - vertex -70.335 -32.538 -11 - endloop - endfacet - facet normal -0.994436 0.105342 0 - outer loop - vertex -70.335 -32.538 -5 - vertex -70.369 -32.859 -11 - vertex -70.369 -32.859 -5 - endloop - endfacet - facet normal -0.950549 0.310575 0 - outer loop - vertex -70.468 -33.162 -11 - vertex -70.369 -32.859 -5 - vertex -70.369 -32.859 -11 - endloop - endfacet - facet normal -0.950549 0.310575 0 - outer loop - vertex -70.369 -32.859 -5 - vertex -70.468 -33.162 -11 - vertex -70.468 -33.162 -5 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -70.624 -33.44 -11 - vertex -70.468 -33.162 -5 - vertex -70.468 -33.162 -11 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -70.468 -33.162 -5 - vertex -70.624 -33.44 -11 - vertex -70.624 -33.44 -5 - endloop - endfacet - facet normal -0.768473 0.639882 0 - outer loop - vertex -70.828 -33.685 -11 - vertex -70.624 -33.44 -5 - vertex -70.624 -33.44 -11 - endloop - endfacet - facet normal -0.768473 0.639882 0 - outer loop - vertex -70.624 -33.44 -5 - vertex -70.828 -33.685 -11 - vertex -70.828 -33.685 -5 - endloop - endfacet - facet normal -0.639888 0.768468 0 - outer loop - vertex -70.828 -33.685 -11 - vertex -71.073 -33.889 -5 - vertex -70.828 -33.685 -5 - endloop - endfacet - facet normal -0.639888 0.768468 0 - outer loop - vertex -71.073 -33.889 -5 - vertex -70.828 -33.685 -11 - vertex -71.073 -33.889 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -71.073 -33.889 -11 - vertex -71.351 -34.045 -5 - vertex -71.073 -33.889 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -71.351 -34.045 -5 - vertex -71.073 -33.889 -11 - vertex -71.351 -34.045 -11 - endloop - endfacet - facet normal -0.309648 0.950851 0 - outer loop - vertex -71.351 -34.045 -11 - vertex -71.655 -34.144 -5 - vertex -71.351 -34.045 -5 - endloop - endfacet - facet normal -0.309648 0.950851 0 - outer loop - vertex -71.655 -34.144 -5 - vertex -71.351 -34.045 -11 - vertex -71.655 -34.144 -11 - endloop - endfacet - facet normal -0.108738 0.99407 0 - outer loop - vertex -71.655 -34.144 -11 - vertex -71.975 -34.179 -5 - vertex -71.655 -34.144 -5 - endloop - endfacet - facet normal -0.108738 0.99407 0 - outer loop - vertex -71.975 -34.179 -5 - vertex -71.655 -34.144 -11 - vertex -71.975 -34.179 -11 - endloop - endfacet - facet normal 0.108403 0.994107 -0 - outer loop - vertex -71.975 -34.179 -11 - vertex -72.296 -34.144 -5 - vertex -71.975 -34.179 -5 - endloop - endfacet - facet normal 0.108403 0.994107 0 - outer loop - vertex -72.296 -34.144 -5 - vertex -71.975 -34.179 -11 - vertex -72.296 -34.144 -11 - endloop - endfacet - facet normal 0.310571 0.95055 -0 - outer loop - vertex -72.296 -34.144 -11 - vertex -72.599 -34.045 -5 - vertex -72.296 -34.144 -5 - endloop - endfacet - facet normal 0.310571 0.95055 0 - outer loop - vertex -72.599 -34.045 -5 - vertex -72.296 -34.144 -11 - vertex -72.599 -34.045 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex -72.599 -34.045 -11 - vertex -72.877 -33.889 -5 - vertex -72.599 -34.045 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex -72.877 -33.889 -5 - vertex -72.599 -34.045 -11 - vertex -72.877 -33.889 -11 - endloop - endfacet - facet normal 0.639876 0.768478 -0 - outer loop - vertex -72.877 -33.889 -11 - vertex -73.122 -33.685 -5 - vertex -72.877 -33.889 -5 - endloop - endfacet - facet normal 0.639876 0.768478 0 - outer loop - vertex -73.122 -33.685 -5 - vertex -72.877 -33.889 -11 - vertex -73.122 -33.685 -11 - endloop - endfacet - facet normal 0.768485 0.639868 0 - outer loop - vertex -73.122 -33.685 -5 - vertex -73.326 -33.44 -11 - vertex -73.326 -33.44 -5 - endloop - endfacet - facet normal 0.768485 0.639868 0 - outer loop - vertex -73.326 -33.44 -11 - vertex -73.122 -33.685 -5 - vertex -73.122 -33.685 -11 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -73.326 -33.44 -5 - vertex -73.482 -33.162 -11 - vertex -73.482 -33.162 -5 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -73.482 -33.162 -11 - vertex -73.326 -33.44 -5 - vertex -73.326 -33.44 -11 - endloop - endfacet - facet normal 0.950549 0.310575 0 - outer loop - vertex -73.482 -33.162 -5 - vertex -73.581 -32.859 -11 - vertex -73.581 -32.859 -5 - endloop - endfacet - facet normal 0.950549 0.310575 0 - outer loop - vertex -73.581 -32.859 -11 - vertex -73.482 -33.162 -5 - vertex -73.482 -33.162 -11 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -93.618 37.462 -5 - vertex -93.583 37.782 -11 - vertex -93.583 37.782 -5 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -93.583 37.782 -11 - vertex -93.618 37.462 -5 - vertex -93.618 37.462 -11 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -93.583 37.141 -5 - vertex -93.618 37.462 -11 - vertex -93.618 37.462 -5 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -93.618 37.462 -11 - vertex -93.583 37.141 -5 - vertex -93.583 37.141 -11 - endloop - endfacet - facet normal 0.950851 -0.309648 0 - outer loop - vertex -93.583 37.782 -5 - vertex -93.484 38.086 -11 - vertex -93.484 38.086 -5 - endloop - endfacet - facet normal 0.950851 -0.309648 0 - outer loop - vertex -93.484 38.086 -11 - vertex -93.583 37.782 -5 - vertex -93.583 37.782 -11 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -93.484 38.086 -5 - vertex -93.329 38.364 -11 - vertex -93.329 38.364 -5 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -93.329 38.364 -11 - vertex -93.484 38.086 -5 - vertex -93.484 38.086 -11 - endloop - endfacet - facet normal 0.768478 -0.639876 0 - outer loop - vertex -93.329 38.364 -5 - vertex -93.125 38.609 -11 - vertex -93.125 38.609 -5 - endloop - endfacet - facet normal 0.768478 -0.639876 0 - outer loop - vertex -93.125 38.609 -11 - vertex -93.329 38.364 -5 - vertex -93.329 38.364 -11 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -93.125 38.609 -11 - vertex -92.88 38.813 -5 - vertex -93.125 38.609 -5 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -92.88 38.813 -5 - vertex -93.125 38.609 -11 - vertex -92.88 38.813 -11 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -92.88 38.813 -11 - vertex -92.602 38.968 -5 - vertex -92.88 38.813 -5 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -92.602 38.968 -5 - vertex -92.88 38.813 -11 - vertex -92.602 38.968 -11 - endloop - endfacet - facet normal 0.309659 -0.950848 0 - outer loop - vertex -92.602 38.968 -11 - vertex -92.298 39.067 -5 - vertex -92.602 38.968 -5 - endloop - endfacet - facet normal 0.309659 -0.950848 0 - outer loop - vertex -92.298 39.067 -5 - vertex -92.602 38.968 -11 - vertex -92.298 39.067 -11 - endloop - endfacet - facet normal 0.108715 -0.994073 0 - outer loop - vertex -92.298 39.067 -11 - vertex -91.978 39.102 -5 - vertex -92.298 39.067 -5 - endloop - endfacet - facet normal 0.108715 -0.994073 0 - outer loop - vertex -91.978 39.102 -5 - vertex -92.298 39.067 -11 - vertex -91.978 39.102 -11 - endloop - endfacet - facet normal -0.10838 -0.99411 0 - outer loop - vertex -91.978 39.102 -11 - vertex -91.657 39.067 -5 - vertex -91.978 39.102 -5 - endloop - endfacet - facet normal -0.10838 -0.99411 -0 - outer loop - vertex -91.657 39.067 -5 - vertex -91.978 39.102 -11 - vertex -91.657 39.067 -11 - endloop - endfacet - facet normal -0.310582 -0.950547 0 - outer loop - vertex -91.657 39.067 -11 - vertex -91.354 38.968 -5 - vertex -91.657 39.067 -5 - endloop - endfacet - facet normal -0.310582 -0.950547 -0 - outer loop - vertex -91.354 38.968 -5 - vertex -91.657 39.067 -11 - vertex -91.354 38.968 -11 - endloop - endfacet - facet normal -0.486973 -0.873417 0 - outer loop - vertex -91.354 38.968 -11 - vertex -91.076 38.813 -5 - vertex -91.354 38.968 -5 - endloop - endfacet - facet normal -0.486973 -0.873417 -0 - outer loop - vertex -91.076 38.813 -5 - vertex -91.354 38.968 -11 - vertex -91.076 38.813 -11 - endloop - endfacet - facet normal -0.639881 -0.768474 0 - outer loop - vertex -91.076 38.813 -11 - vertex -90.831 38.609 -5 - vertex -91.076 38.813 -5 - endloop - endfacet - facet normal -0.639881 -0.768474 -0 - outer loop - vertex -90.831 38.609 -5 - vertex -91.076 38.813 -11 - vertex -90.831 38.609 -11 - endloop - endfacet - facet normal -0.766938 -0.641722 0 - outer loop - vertex -90.626 38.364 -11 - vertex -90.831 38.609 -5 - vertex -90.831 38.609 -11 - endloop - endfacet - facet normal -0.766938 -0.641722 0 - outer loop - vertex -90.831 38.609 -5 - vertex -90.626 38.364 -11 - vertex -90.626 38.364 -5 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -90.471 38.086 -11 - vertex -90.626 38.364 -5 - vertex -90.626 38.364 -11 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -90.626 38.364 -5 - vertex -90.471 38.086 -11 - vertex -90.471 38.086 -5 - endloop - endfacet - facet normal -0.950851 -0.309648 0 - outer loop - vertex -90.372 37.782 -11 - vertex -90.471 38.086 -5 - vertex -90.471 38.086 -11 - endloop - endfacet - facet normal -0.950851 -0.309648 0 - outer loop - vertex -90.471 38.086 -5 - vertex -90.372 37.782 -11 - vertex -90.372 37.782 -5 - endloop - endfacet - facet normal -0.99407 -0.108738 0 - outer loop - vertex -90.337 37.462 -11 - vertex -90.372 37.782 -5 - vertex -90.372 37.782 -11 - endloop - endfacet - facet normal -0.99407 -0.108738 0 - outer loop - vertex -90.372 37.782 -5 - vertex -90.337 37.462 -11 - vertex -90.337 37.462 -5 - endloop - endfacet - facet normal -0.994107 0.108403 0 - outer loop - vertex -90.372 37.141 -11 - vertex -90.337 37.462 -5 - vertex -90.337 37.462 -11 - endloop - endfacet - facet normal -0.994107 0.108403 0 - outer loop - vertex -90.337 37.462 -5 - vertex -90.372 37.141 -11 - vertex -90.372 37.141 -5 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -90.471 36.838 -11 - vertex -90.372 37.141 -5 - vertex -90.372 37.141 -11 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -90.372 37.141 -5 - vertex -90.471 36.838 -11 - vertex -90.471 36.838 -5 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex -90.626 36.56 -11 - vertex -90.471 36.838 -5 - vertex -90.471 36.838 -11 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex -90.471 36.838 -5 - vertex -90.626 36.56 -11 - vertex -90.626 36.56 -5 - endloop - endfacet - facet normal -0.766933 0.641728 0 - outer loop - vertex -90.831 36.315 -11 - vertex -90.626 36.56 -5 - vertex -90.626 36.56 -11 - endloop - endfacet - facet normal -0.766933 0.641728 0 - outer loop - vertex -90.626 36.56 -5 - vertex -90.831 36.315 -11 - vertex -90.831 36.315 -5 - endloop - endfacet - facet normal -0.639881 0.768474 0 - outer loop - vertex -90.831 36.315 -11 - vertex -91.076 36.111 -5 - vertex -90.831 36.315 -5 - endloop - endfacet - facet normal -0.639881 0.768474 0 - outer loop - vertex -91.076 36.111 -5 - vertex -90.831 36.315 -11 - vertex -91.076 36.111 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -91.076 36.111 -11 - vertex -91.354 35.955 -5 - vertex -91.076 36.111 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -91.354 35.955 -5 - vertex -91.076 36.111 -11 - vertex -91.354 35.955 -11 - endloop - endfacet - facet normal -0.310582 0.950547 0 - outer loop - vertex -91.354 35.955 -11 - vertex -91.657 35.856 -5 - vertex -91.354 35.955 -5 - endloop - endfacet - facet normal -0.310582 0.950547 0 - outer loop - vertex -91.657 35.856 -5 - vertex -91.354 35.955 -11 - vertex -91.657 35.856 -11 - endloop - endfacet - facet normal -0.108392 0.994108 0 - outer loop - vertex -91.657 35.856 -11 - vertex -91.978 35.821 -5 - vertex -91.657 35.856 -5 - endloop - endfacet - facet normal -0.108392 0.994108 0 - outer loop - vertex -91.978 35.821 -5 - vertex -91.657 35.856 -11 - vertex -91.978 35.821 -11 - endloop - endfacet - facet normal 0.108726 0.994072 -0 - outer loop - vertex -91.978 35.821 -11 - vertex -92.298 35.856 -5 - vertex -91.978 35.821 -5 - endloop - endfacet - facet normal 0.108726 0.994072 0 - outer loop - vertex -92.298 35.856 -5 - vertex -91.978 35.821 -11 - vertex -92.298 35.856 -11 - endloop - endfacet - facet normal 0.309659 0.950848 -0 - outer loop - vertex -92.298 35.856 -11 - vertex -92.602 35.955 -5 - vertex -92.298 35.856 -5 - endloop - endfacet - facet normal 0.309659 0.950848 0 - outer loop - vertex -92.602 35.955 -5 - vertex -92.298 35.856 -11 - vertex -92.602 35.955 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex -92.602 35.955 -11 - vertex -92.88 36.111 -5 - vertex -92.602 35.955 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex -92.88 36.111 -5 - vertex -92.602 35.955 -11 - vertex -92.88 36.111 -11 - endloop - endfacet - facet normal 0.639869 0.768484 -0 - outer loop - vertex -92.88 36.111 -11 - vertex -93.125 36.315 -5 - vertex -92.88 36.111 -5 - endloop - endfacet - facet normal 0.639869 0.768484 0 - outer loop - vertex -93.125 36.315 -5 - vertex -92.88 36.111 -11 - vertex -93.125 36.315 -11 - endloop - endfacet - facet normal 0.768473 0.639882 0 - outer loop - vertex -93.125 36.315 -5 - vertex -93.329 36.56 -11 - vertex -93.329 36.56 -5 - endloop - endfacet - facet normal 0.768473 0.639882 0 - outer loop - vertex -93.329 36.56 -11 - vertex -93.125 36.315 -5 - vertex -93.125 36.315 -11 - endloop - endfacet - facet normal 0.873417 0.486973 0 - outer loop - vertex -93.329 36.56 -5 - vertex -93.484 36.838 -11 - vertex -93.484 36.838 -5 - endloop - endfacet - facet normal 0.873417 0.486973 0 - outer loop - vertex -93.484 36.838 -11 - vertex -93.329 36.56 -5 - vertex -93.329 36.56 -11 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -93.484 36.838 -5 - vertex -93.583 37.141 -11 - vertex -93.583 37.141 -5 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -93.583 37.141 -11 - vertex -93.484 36.838 -5 - vertex -93.484 36.838 -11 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -73.616 37.462 -5 - vertex -73.581 37.782 -11 - vertex -73.581 37.782 -5 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -73.581 37.782 -11 - vertex -73.616 37.462 -5 - vertex -73.616 37.462 -11 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -73.581 37.141 -5 - vertex -73.616 37.462 -11 - vertex -73.616 37.462 -5 - endloop - endfacet - facet normal 0.99411 0.10838 0 - outer loop - vertex -73.616 37.462 -11 - vertex -73.581 37.141 -5 - vertex -73.581 37.141 -11 - endloop - endfacet - facet normal 0.950851 -0.309648 0 - outer loop - vertex -73.581 37.782 -5 - vertex -73.482 38.086 -11 - vertex -73.482 38.086 -5 - endloop - endfacet - facet normal 0.950851 -0.309648 0 - outer loop - vertex -73.482 38.086 -11 - vertex -73.581 37.782 -5 - vertex -73.581 37.782 -11 - endloop - endfacet - facet normal 0.87207 -0.489382 0 - outer loop - vertex -73.482 38.086 -5 - vertex -73.326 38.364 -11 - vertex -73.326 38.364 -5 - endloop - endfacet - facet normal 0.87207 -0.489382 0 - outer loop - vertex -73.326 38.364 -11 - vertex -73.482 38.086 -5 - vertex -73.482 38.086 -11 - endloop - endfacet - facet normal 0.76849 -0.639862 0 - outer loop - vertex -73.326 38.364 -5 - vertex -73.122 38.609 -11 - vertex -73.122 38.609 -5 - endloop - endfacet - facet normal 0.76849 -0.639862 0 - outer loop - vertex -73.122 38.609 -11 - vertex -73.326 38.364 -5 - vertex -73.326 38.364 -11 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -73.122 38.609 -11 - vertex -72.877 38.813 -5 - vertex -73.122 38.609 -5 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -72.877 38.813 -5 - vertex -73.122 38.609 -11 - vertex -72.877 38.813 -11 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -72.877 38.813 -11 - vertex -72.599 38.968 -5 - vertex -72.877 38.813 -5 - endloop - endfacet - facet normal 0.486973 -0.873417 0 - outer loop - vertex -72.599 38.968 -5 - vertex -72.877 38.813 -11 - vertex -72.599 38.968 -11 - endloop - endfacet - facet normal 0.310582 -0.950547 0 - outer loop - vertex -72.599 38.968 -11 - vertex -72.296 39.067 -5 - vertex -72.599 38.968 -5 - endloop - endfacet - facet normal 0.310582 -0.950547 0 - outer loop - vertex -72.296 39.067 -5 - vertex -72.599 38.968 -11 - vertex -72.296 39.067 -11 - endloop - endfacet - facet normal 0.10838 -0.99411 0 - outer loop - vertex -72.296 39.067 -11 - vertex -71.975 39.102 -5 - vertex -72.296 39.067 -5 - endloop - endfacet - facet normal 0.10838 -0.99411 0 - outer loop - vertex -71.975 39.102 -5 - vertex -72.296 39.067 -11 - vertex -71.975 39.102 -11 - endloop - endfacet - facet normal -0.108715 -0.994073 0 - outer loop - vertex -71.975 39.102 -11 - vertex -71.655 39.067 -5 - vertex -71.975 39.102 -5 - endloop - endfacet - facet normal -0.108715 -0.994073 -0 - outer loop - vertex -71.655 39.067 -5 - vertex -71.975 39.102 -11 - vertex -71.655 39.067 -11 - endloop - endfacet - facet normal -0.309659 -0.950848 0 - outer loop - vertex -71.655 39.067 -11 - vertex -71.351 38.968 -5 - vertex -71.655 39.067 -5 - endloop - endfacet - facet normal -0.309659 -0.950848 -0 - outer loop - vertex -71.351 38.968 -5 - vertex -71.655 39.067 -11 - vertex -71.351 38.968 -11 - endloop - endfacet - facet normal -0.486973 -0.873417 0 - outer loop - vertex -71.351 38.968 -11 - vertex -71.073 38.813 -5 - vertex -71.351 38.968 -5 - endloop - endfacet - facet normal -0.486973 -0.873417 -0 - outer loop - vertex -71.073 38.813 -5 - vertex -71.351 38.968 -11 - vertex -71.073 38.813 -11 - endloop - endfacet - facet normal -0.639881 -0.768474 0 - outer loop - vertex -71.073 38.813 -11 - vertex -70.828 38.609 -5 - vertex -71.073 38.813 -5 - endloop - endfacet - facet normal -0.639881 -0.768474 -0 - outer loop - vertex -70.828 38.609 -5 - vertex -71.073 38.813 -11 - vertex -70.828 38.609 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex -70.624 38.364 -11 - vertex -70.828 38.609 -5 - vertex -70.828 38.609 -11 - endloop - endfacet - facet normal -0.768478 -0.639876 0 - outer loop - vertex -70.828 38.609 -5 - vertex -70.624 38.364 -11 - vertex -70.624 38.364 -5 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex -70.468 38.086 -11 - vertex -70.624 38.364 -5 - vertex -70.624 38.364 -11 - endloop - endfacet - facet normal -0.87208 -0.489363 0 - outer loop - vertex -70.624 38.364 -5 - vertex -70.468 38.086 -11 - vertex -70.468 38.086 -5 - endloop - endfacet - facet normal -0.950851 -0.309648 0 - outer loop - vertex -70.369 37.782 -11 - vertex -70.468 38.086 -5 - vertex -70.468 38.086 -11 - endloop - endfacet - facet normal -0.950851 -0.309648 0 - outer loop - vertex -70.468 38.086 -5 - vertex -70.369 37.782 -11 - vertex -70.369 37.782 -5 - endloop - endfacet - facet normal -0.994401 -0.105668 0 - outer loop - vertex -70.335 37.462 -11 - vertex -70.369 37.782 -5 - vertex -70.369 37.782 -11 - endloop - endfacet - facet normal -0.994401 -0.105668 0 - outer loop - vertex -70.369 37.782 -5 - vertex -70.335 37.462 -11 - vertex -70.335 37.462 -5 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -70.369 37.141 -11 - vertex -70.335 37.462 -5 - vertex -70.335 37.462 -11 - endloop - endfacet - facet normal -0.994436 0.105343 0 - outer loop - vertex -70.335 37.462 -5 - vertex -70.369 37.141 -11 - vertex -70.369 37.141 -5 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -70.468 36.838 -11 - vertex -70.369 37.141 -5 - vertex -70.369 37.141 -11 - endloop - endfacet - facet normal -0.95055 0.310571 0 - outer loop - vertex -70.369 37.141 -5 - vertex -70.468 36.838 -11 - vertex -70.468 36.838 -5 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -70.624 36.56 -11 - vertex -70.468 36.838 -5 - vertex -70.468 36.838 -11 - endloop - endfacet - facet normal -0.87208 0.489363 0 - outer loop - vertex -70.468 36.838 -5 - vertex -70.624 36.56 -11 - vertex -70.624 36.56 -5 - endloop - endfacet - facet normal -0.768473 0.639882 0 - outer loop - vertex -70.828 36.315 -11 - vertex -70.624 36.56 -5 - vertex -70.624 36.56 -11 - endloop - endfacet - facet normal -0.768473 0.639882 0 - outer loop - vertex -70.624 36.56 -5 - vertex -70.828 36.315 -11 - vertex -70.828 36.315 -5 - endloop - endfacet - facet normal -0.639881 0.768474 0 - outer loop - vertex -70.828 36.315 -11 - vertex -71.073 36.111 -5 - vertex -70.828 36.315 -5 - endloop - endfacet - facet normal -0.639881 0.768474 0 - outer loop - vertex -71.073 36.111 -5 - vertex -70.828 36.315 -11 - vertex -71.073 36.111 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -71.073 36.111 -11 - vertex -71.351 35.955 -5 - vertex -71.073 36.111 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -71.351 35.955 -5 - vertex -71.073 36.111 -11 - vertex -71.351 35.955 -11 - endloop - endfacet - facet normal -0.309659 0.950848 0 - outer loop - vertex -71.351 35.955 -11 - vertex -71.655 35.856 -5 - vertex -71.351 35.955 -5 - endloop - endfacet - facet normal -0.309659 0.950848 0 - outer loop - vertex -71.655 35.856 -5 - vertex -71.351 35.955 -11 - vertex -71.655 35.856 -11 - endloop - endfacet - facet normal -0.108726 0.994072 0 - outer loop - vertex -71.655 35.856 -11 - vertex -71.975 35.821 -5 - vertex -71.655 35.856 -5 - endloop - endfacet - facet normal -0.108726 0.994072 0 - outer loop - vertex -71.975 35.821 -5 - vertex -71.655 35.856 -11 - vertex -71.975 35.821 -11 - endloop - endfacet - facet normal 0.108392 0.994108 -0 - outer loop - vertex -71.975 35.821 -11 - vertex -72.296 35.856 -5 - vertex -71.975 35.821 -5 - endloop - endfacet - facet normal 0.108392 0.994108 0 - outer loop - vertex -72.296 35.856 -5 - vertex -71.975 35.821 -11 - vertex -72.296 35.856 -11 - endloop - endfacet - facet normal 0.310582 0.950547 -0 - outer loop - vertex -72.296 35.856 -11 - vertex -72.599 35.955 -5 - vertex -72.296 35.856 -5 - endloop - endfacet - facet normal 0.310582 0.950547 0 - outer loop - vertex -72.599 35.955 -5 - vertex -72.296 35.856 -11 - vertex -72.599 35.955 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex -72.599 35.955 -11 - vertex -72.877 36.111 -5 - vertex -72.599 35.955 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex -72.877 36.111 -5 - vertex -72.599 35.955 -11 - vertex -72.877 36.111 -11 - endloop - endfacet - facet normal 0.639869 0.768484 -0 - outer loop - vertex -72.877 36.111 -11 - vertex -73.122 36.315 -5 - vertex -72.877 36.111 -5 - endloop - endfacet - facet normal 0.639869 0.768484 0 - outer loop - vertex -73.122 36.315 -5 - vertex -72.877 36.111 -11 - vertex -73.122 36.315 -11 - endloop - endfacet - facet normal 0.768485 0.639868 0 - outer loop - vertex -73.122 36.315 -5 - vertex -73.326 36.56 -11 - vertex -73.326 36.56 -5 - endloop - endfacet - facet normal 0.768485 0.639868 0 - outer loop - vertex -73.326 36.56 -11 - vertex -73.122 36.315 -5 - vertex -73.122 36.315 -11 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -73.326 36.56 -5 - vertex -73.482 36.838 -11 - vertex -73.482 36.838 -5 - endloop - endfacet - facet normal 0.87207 0.489382 0 - outer loop - vertex -73.482 36.838 -11 - vertex -73.326 36.56 -5 - vertex -73.326 36.56 -11 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -73.482 36.838 -5 - vertex -73.581 37.141 -11 - vertex -73.581 37.141 -5 - endloop - endfacet - facet normal 0.95055 0.310571 0 - outer loop - vertex -73.581 37.141 -11 - vertex -73.482 36.838 -5 - vertex -73.482 36.838 -11 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -93.618 -32.538 -5 - vertex -93.583 -32.218 -11 - vertex -93.583 -32.218 -5 - endloop - endfacet - facet normal 0.994073 -0.108715 0 - outer loop - vertex -93.583 -32.218 -11 - vertex -93.618 -32.538 -5 - vertex -93.618 -32.538 -11 - endloop - endfacet - facet normal 0.99411 0.108379 0 - outer loop - vertex -93.583 -32.859 -5 - vertex -93.618 -32.538 -11 - vertex -93.618 -32.538 -5 - endloop - endfacet - facet normal 0.99411 0.108379 0 - outer loop - vertex -93.618 -32.538 -11 - vertex -93.583 -32.859 -5 - vertex -93.583 -32.859 -11 - endloop - endfacet - facet normal 0.950851 -0.30965 0 - outer loop - vertex -93.583 -32.218 -5 - vertex -93.484 -31.914 -11 - vertex -93.484 -31.914 -5 - endloop - endfacet - facet normal 0.950851 -0.30965 0 - outer loop - vertex -93.484 -31.914 -11 - vertex -93.583 -32.218 -5 - vertex -93.583 -32.218 -11 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -93.484 -31.914 -5 - vertex -93.329 -31.636 -11 - vertex -93.329 -31.636 -5 - endloop - endfacet - facet normal 0.873417 -0.486973 0 - outer loop - vertex -93.329 -31.636 -11 - vertex -93.484 -31.914 -5 - vertex -93.484 -31.914 -11 - endloop - endfacet - facet normal 0.768476 -0.639879 0 - outer loop - vertex -93.329 -31.636 -5 - vertex -93.125 -31.391 -11 - vertex -93.125 -31.391 -5 - endloop - endfacet - facet normal 0.768476 -0.639879 0 - outer loop - vertex -93.125 -31.391 -11 - vertex -93.329 -31.636 -5 - vertex -93.329 -31.636 -11 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -93.125 -31.391 -11 - vertex -92.88 -31.187 -5 - vertex -93.125 -31.391 -5 - endloop - endfacet - facet normal 0.639869 -0.768484 0 - outer loop - vertex -92.88 -31.187 -5 - vertex -93.125 -31.391 -11 - vertex -92.88 -31.187 -11 - endloop - endfacet - facet normal 0.486978 -0.873414 0 - outer loop - vertex -92.88 -31.187 -11 - vertex -92.602 -31.032 -5 - vertex -92.88 -31.187 -5 - endloop - endfacet - facet normal 0.486978 -0.873414 0 - outer loop - vertex -92.602 -31.032 -5 - vertex -92.88 -31.187 -11 - vertex -92.602 -31.032 -11 - endloop - endfacet - facet normal 0.309654 -0.950849 0 - outer loop - vertex -92.602 -31.032 -11 - vertex -92.298 -30.933 -5 - vertex -92.602 -31.032 -5 - endloop - endfacet - facet normal 0.309654 -0.950849 0 - outer loop - vertex -92.298 -30.933 -5 - vertex -92.602 -31.032 -11 - vertex -92.298 -30.933 -11 - endloop - endfacet - facet normal 0.108726 -0.994072 0 - outer loop - vertex -92.298 -30.933 -11 - vertex -91.978 -30.898 -5 - vertex -92.298 -30.933 -5 - endloop - endfacet - facet normal 0.108726 -0.994072 0 - outer loop - vertex -91.978 -30.898 -5 - vertex -92.298 -30.933 -11 - vertex -91.978 -30.898 -11 - endloop - endfacet - facet normal -0.108392 -0.994108 0 - outer loop - vertex -91.978 -30.898 -11 - vertex -91.657 -30.933 -5 - vertex -91.978 -30.898 -5 - endloop - endfacet - facet normal -0.108392 -0.994108 -0 - outer loop - vertex -91.657 -30.933 -5 - vertex -91.978 -30.898 -11 - vertex -91.657 -30.933 -11 - endloop - endfacet - facet normal -0.310577 -0.950548 0 - outer loop - vertex -91.657 -30.933 -11 - vertex -91.354 -31.032 -5 - vertex -91.657 -30.933 -5 - endloop - endfacet - facet normal -0.310577 -0.950548 -0 - outer loop - vertex -91.354 -31.032 -5 - vertex -91.657 -30.933 -11 - vertex -91.354 -31.032 -11 - endloop - endfacet - facet normal -0.486978 -0.873414 0 - outer loop - vertex -91.354 -31.032 -11 - vertex -91.076 -31.187 -5 - vertex -91.354 -31.032 -5 - endloop - endfacet - facet normal -0.486978 -0.873414 -0 - outer loop - vertex -91.076 -31.187 -5 - vertex -91.354 -31.032 -11 - vertex -91.076 -31.187 -11 - endloop - endfacet - facet normal -0.639881 -0.768474 0 - outer loop - vertex -91.076 -31.187 -11 - vertex -90.831 -31.391 -5 - vertex -91.076 -31.187 -5 - endloop - endfacet - facet normal -0.639881 -0.768474 -0 - outer loop - vertex -90.831 -31.391 -5 - vertex -91.076 -31.187 -11 - vertex -90.831 -31.391 -11 - endloop - endfacet - facet normal -0.766935 -0.641725 0 - outer loop - vertex -90.626 -31.636 -11 - vertex -90.831 -31.391 -5 - vertex -90.831 -31.391 -11 - endloop - endfacet - facet normal -0.766935 -0.641725 0 - outer loop - vertex -90.831 -31.391 -5 - vertex -90.626 -31.636 -11 - vertex -90.626 -31.636 -5 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -90.471 -31.914 -11 - vertex -90.626 -31.636 -5 - vertex -90.626 -31.636 -11 - endloop - endfacet - facet normal -0.873417 -0.486973 0 - outer loop - vertex -90.626 -31.636 -5 - vertex -90.471 -31.914 -11 - vertex -90.471 -31.914 -5 - endloop - endfacet - facet normal -0.950851 -0.30965 0 - outer loop - vertex -90.372 -32.218 -11 - vertex -90.471 -31.914 -5 - vertex -90.471 -31.914 -11 - endloop - endfacet - facet normal -0.950851 -0.30965 0 - outer loop - vertex -90.471 -31.914 -5 - vertex -90.372 -32.218 -11 - vertex -90.372 -32.218 -5 - endloop - endfacet - facet normal -0.99407 -0.108738 0 - outer loop - vertex -90.337 -32.538 -11 - vertex -90.372 -32.218 -5 - vertex -90.372 -32.218 -11 - endloop - endfacet - facet normal -0.99407 -0.108738 0 - outer loop - vertex -90.372 -32.218 -5 - vertex -90.337 -32.538 -11 - vertex -90.337 -32.538 -5 - endloop - endfacet - facet normal -0.994107 0.108402 0 - outer loop - vertex -90.372 -32.859 -11 - vertex -90.337 -32.538 -5 - vertex -90.337 -32.538 -11 - endloop - endfacet - facet normal -0.994107 0.108402 0 - outer loop - vertex -90.337 -32.538 -5 - vertex -90.372 -32.859 -11 - vertex -90.372 -32.859 -5 - endloop - endfacet - facet normal -0.950549 0.310575 0 - outer loop - vertex -90.471 -33.162 -11 - vertex -90.372 -32.859 -5 - vertex -90.372 -32.859 -11 - endloop - endfacet - facet normal -0.950549 0.310575 0 - outer loop - vertex -90.372 -32.859 -5 - vertex -90.471 -33.162 -11 - vertex -90.471 -33.162 -5 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex -90.626 -33.44 -11 - vertex -90.471 -33.162 -5 - vertex -90.471 -33.162 -11 - endloop - endfacet - facet normal -0.873417 0.486973 0 - outer loop - vertex -90.471 -33.162 -5 - vertex -90.626 -33.44 -11 - vertex -90.626 -33.44 -5 - endloop - endfacet - facet normal -0.766933 0.641728 0 - outer loop - vertex -90.831 -33.685 -11 - vertex -90.626 -33.44 -5 - vertex -90.626 -33.44 -11 - endloop - endfacet - facet normal -0.766933 0.641728 0 - outer loop - vertex -90.626 -33.44 -5 - vertex -90.831 -33.685 -11 - vertex -90.831 -33.685 -5 - endloop - endfacet - facet normal -0.639888 0.768468 0 - outer loop - vertex -90.831 -33.685 -11 - vertex -91.076 -33.889 -5 - vertex -90.831 -33.685 -5 - endloop - endfacet - facet normal -0.639888 0.768468 0 - outer loop - vertex -91.076 -33.889 -5 - vertex -90.831 -33.685 -11 - vertex -91.076 -33.889 -11 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -91.076 -33.889 -11 - vertex -91.354 -34.045 -5 - vertex -91.076 -33.889 -5 - endloop - endfacet - facet normal -0.489363 0.87208 0 - outer loop - vertex -91.354 -34.045 -5 - vertex -91.076 -33.889 -11 - vertex -91.354 -34.045 -11 - endloop - endfacet - facet normal -0.310571 0.95055 0 - outer loop - vertex -91.354 -34.045 -11 - vertex -91.657 -34.144 -5 - vertex -91.354 -34.045 -5 - endloop - endfacet - facet normal -0.310571 0.95055 0 - outer loop - vertex -91.657 -34.144 -5 - vertex -91.354 -34.045 -11 - vertex -91.657 -34.144 -11 - endloop - endfacet - facet normal -0.108403 0.994107 0 - outer loop - vertex -91.657 -34.144 -11 - vertex -91.978 -34.179 -5 - vertex -91.657 -34.144 -5 - endloop - endfacet - facet normal -0.108403 0.994107 0 - outer loop - vertex -91.978 -34.179 -5 - vertex -91.657 -34.144 -11 - vertex -91.978 -34.179 -11 - endloop - endfacet - facet normal 0.108738 0.99407 -0 - outer loop - vertex -91.978 -34.179 -11 - vertex -92.298 -34.144 -5 - vertex -91.978 -34.179 -5 - endloop - endfacet - facet normal 0.108738 0.99407 0 - outer loop - vertex -92.298 -34.144 -5 - vertex -91.978 -34.179 -11 - vertex -92.298 -34.144 -11 - endloop - endfacet - facet normal 0.309648 0.950851 -0 - outer loop - vertex -92.298 -34.144 -11 - vertex -92.602 -34.045 -5 - vertex -92.298 -34.144 -5 - endloop - endfacet - facet normal 0.309648 0.950851 0 - outer loop - vertex -92.602 -34.045 -5 - vertex -92.298 -34.144 -11 - vertex -92.602 -34.045 -11 - endloop - endfacet - facet normal 0.489363 0.87208 -0 - outer loop - vertex -92.602 -34.045 -11 - vertex -92.88 -33.889 -5 - vertex -92.602 -34.045 -5 - endloop - endfacet - facet normal 0.489363 0.87208 0 - outer loop - vertex -92.88 -33.889 -5 - vertex -92.602 -34.045 -11 - vertex -92.88 -33.889 -11 - endloop - endfacet - facet normal 0.639876 0.768478 -0 - outer loop - vertex -92.88 -33.889 -11 - vertex -93.125 -33.685 -5 - vertex -92.88 -33.889 -5 - endloop - endfacet - facet normal 0.639876 0.768478 0 - outer loop - vertex -93.125 -33.685 -5 - vertex -92.88 -33.889 -11 - vertex -93.125 -33.685 -11 - endloop - endfacet - facet normal 0.768473 0.639882 0 - outer loop - vertex -93.125 -33.685 -5 - vertex -93.329 -33.44 -11 - vertex -93.329 -33.44 -5 - endloop - endfacet - facet normal 0.768473 0.639882 0 - outer loop - vertex -93.329 -33.44 -11 - vertex -93.125 -33.685 -5 - vertex -93.125 -33.685 -11 - endloop - endfacet - facet normal 0.873417 0.486973 0 - outer loop - vertex -93.329 -33.44 -5 - vertex -93.484 -33.162 -11 - vertex -93.484 -33.162 -5 - endloop - endfacet - facet normal 0.873417 0.486973 0 - outer loop - vertex -93.484 -33.162 -11 - vertex -93.329 -33.44 -5 - vertex -93.329 -33.44 -11 - endloop - endfacet - facet normal 0.950549 0.310575 0 - outer loop - vertex -93.484 -33.162 -5 - vertex -93.583 -32.859 -11 - vertex -93.583 -32.859 -5 - endloop - endfacet - facet normal 0.950549 0.310575 0 - outer loop - vertex -93.583 -32.859 -11 - vertex -93.484 -33.162 -5 - vertex -93.484 -33.162 -11 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -104.5 -104.5 -4.5 - vertex -104.5 110.5 -1.5 - vertex -104.5 110.5 -4.5 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -104.5 110.5 -1.5 - vertex -104.5 -104.5 -4.5 - vertex -104.5 -104.5 -1.5 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -104.5 110.5 -1.5 - vertex 110.5 -104.5 -1.5 - vertex 110.5 110.5 -1.5 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 110.5 -104.5 -1.5 - vertex -104.5 110.5 -1.5 - vertex -104.5 -104.5 -1.5 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 110.5 -104.5 -1.5 - vertex 110.5 110.5 -4.5 - vertex 110.5 110.5 -1.5 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 110.5 110.5 -4.5 - vertex 110.5 -104.5 -1.5 - vertex 110.5 -104.5 -4.5 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -104.5 -104.5 -4.5 - vertex 110.5 110.5 -4.5 - vertex 110.5 -104.5 -4.5 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 110.5 110.5 -4.5 - vertex -104.5 -104.5 -4.5 - vertex -104.5 110.5 -4.5 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -104.5 -104.5 -4.5 - vertex 110.5 -104.5 -1.5 - vertex -104.5 -104.5 -1.5 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 110.5 -104.5 -1.5 - vertex -104.5 -104.5 -4.5 - vertex 110.5 -104.5 -4.5 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 110.5 110.5 -4.5 - vertex -104.5 110.5 -1.5 - vertex 110.5 110.5 -1.5 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -104.5 110.5 -1.5 - vertex 110.5 110.5 -4.5 - vertex -104.5 110.5 -4.5 - endloop - endfacet -endsolid OpenSCAD_Model From a8d2e53bcb05765156757c323d924a4565d659f6 Mon Sep 17 00:00:00 2001 From: CRojasV Date: Tue, 11 Apr 2017 15:24:02 -0500 Subject: [PATCH 233/816] Add files via upload Adding Platforms for makeR 3D printers --- resources/meshes/makeR_pegasus_platform.stl | Bin 0 -> 134284 bytes .../makeR_prusa_tairona_i3_platform.stl | 18790 ++++++++++++++++ 2 files changed, 18790 insertions(+) create mode 100644 resources/meshes/makeR_pegasus_platform.stl create mode 100644 resources/meshes/makeR_prusa_tairona_i3_platform.stl diff --git a/resources/meshes/makeR_pegasus_platform.stl b/resources/meshes/makeR_pegasus_platform.stl new file mode 100644 index 0000000000000000000000000000000000000000..91751eb0e4b332b62faff74eda42a1bf033b4e86 GIT binary patch literal 134284 zcmb@vef)OSnD>98aT_x~B`Oi_QIUr!Pf6vv&hxy!74ncmWyTD3D@_bho?@DfxiqHn zP)cFS)ZBCP8w!&l(e-8!vED;#w1-a*s2>syx_`oE&@aNhnk9LL?%erK)`R`MHG z3deD`4dM}}92`tg>a)rW35bmQo+Z?-%ga@L_6Up?N#)5HT_`nZk% z{lvKuq^F7Q_K)9q?*&efo+kFZ=2oc-ht`*0azOj3M#qyBt=}bW1RX#Ny1uYH7B_r9VEbmaXbl)Yr2f`=pIK z{L3aQ&6c1q67*z*e!B8MYqjB*G*f6qv37zns+Cb+bv(jG^grGDXYYTvjkjLBc})jC zxc#9Uce?6X7JlN-9=mbEamQJ>CEoY?2X8DMdw|6}d&{94-`>*+($j?6#GB9k9|L-t zP@CBE?oN=NCe$YW_I=(zlAb2iCjR*tCrD2dY7@Kf;{@qxLT%#mdpbdSno!LT4bm;4 zo@~p*-7g82Q%lf_wAxLa1tU7=x^>2oP`imUT{Q~jbvLd>v?5)J5@?CNU;m_9`?kE| zNwrp1qH4s|i-cNNXjj5C)QaBy-e+6w|GYt|BpY{pjFV)h;UfD#>dav zZ{s@;nwu}x@Y{d&lcx8FYx`{+a{RK@=#=yIpX|5s!2LE22zqKY9{jRLZanjx0|x{> zwZv=w+x{EhJL-S|K~F95|6a8J#y+pxe?ZVvOWf|!2W-6Z;2}XzE%9&HA26yxPc6~C z=D^W>&{IpWq*xyGREZK$nP;hye&lfv-gx?V*R3=w(TSiH{eJ$gkE-P~P0;F)vmRCJ z!Zbmv58d*pTHmG#TJ3b`riq%!e9-FeU$JT9%b#7dx?mceD|PFNx#$Ovu^6@@wyv70 z5@=f#^#&R})~)lrlTbN*Y5%?K{>F?uN4x|hhQ!4$Ej`0=JCBs0+S+UX;Ib|9Aip>N z)7LDlR{Q10f6&72z5I5{huYe6p7o&tK~F8Aw)UibFCP%})DmiIclhj(pr@8lTRUO@ z4-YixsU_6b7QZ(n=&2>t*2XmGsU_4V#_~Z=l_&u(!6*ZjVD#;(3%~Q5-^}vpoNEc{ zk**qr@>UyuNvJ(WIZYF^QhSWLFip@(?J?@xG(ju1$MKrT9MVcH>dc)!FmkRGv(MH` zEr!=uUQuhRO2AufT#>0a(C9I5wNX+e)Vj`l)s8uC?;P`B|m!4We zBl<0m9}@J`5*pEe`Z}M#VA|=aB{ZTx`RpM#B{cqw`5jtmj2h)MP0;EQw;WdMf)Sl_J_?V! zYU#yYu}0xvIS_Z-0t(g6M$wA2dnXZoc^}PLs!9l2U-cVjLH8nC&wW(eK8#=t&zn3& z>l$iA3<=#$L`!Q4#*i4C-5%@KS!yI$d(60V#OGw9Cen(nt0n&J0sCxhI`+J)byU4i z+z))?+xu+XY3n(5yd@YzLf5DlJ?E?uf-xkNsvREuhL-45f}i=>BkElWt*+Q%zdG)+ zRO!bE#l%=mMBIPSQzZo1csJB(MS7ah2 zW(4VJLL;OdA9lDAq$|-W=ep{@;e|(-70)iqrV=I4o-2*1f~MXyp)u8yHa*$&NKX?Q zQ~m5uoFF|-XiOCvq^Aj<1=2=z&b8-?=SSn9IMY?5P<}@rt%z2njVRXo>(*(-y9te) zqWs;|eha}E5*j&09cu}VkfOel&`2ikWLkp0NYGOyI^}~oRK0rsiT`Y6u93`3-aIzX zaO=UlZ9MRP|7G_wd%r%zTVAo-#?k+JQ{Lm4kTmXf);F*I!YBTGiw?Z-2j9H`)Kdmc99&VCEA?Lp^Vefo?4)9!wDeB*gnU-xU@t>NFf=Gzu-iFdqYhg!BDz29!N zSNp`R_h|bomna&KICZ;?qmR3dU0E)=aJSlXlJ1RNsv$mn+&ya_OnRF5#&hqrapX7N zYG;@9H1YjQ?!EEuoBqNG($mDB-Sf9LzWj;{j3C_-EN2otBQ3$vE9n8zIoGYzFNvf6 z<~|#5I_d3}LbI&|V@Uk^WA@lM|PTDV@O=}jr&ieiZLW!fARzCnQrsJ z7!rH_p9j^_^s`icOYYk?NGsB<#zXhmyVfPPV2%u0f__QRlM(vqlq%k5u>AEjqZyGE zYyFk`DBR=d2}X=22ZRHK&@Y5DDxD&5P(lSAt9Nuv?{ zPpd(idM)vYTeh!v)#^XuZc^>zz=u6xjn1T30kSgc)@YMjG&czjE0cVAXT(dkI|%Rl%SP*j5vofw!dyQ=d@C5j&kbl zM^Z&AwezS8(*&*5mqdM=CTOL*jHuHsq0x5C@2H$(zD#5In5$_C)&}~Wo>gNjBF(3= zLydU)N-NSW!RNB8M0hfyE5GHR_o5rWe!TSnB&MGUtKSVG-S- z^GtC@rU_bU#v;!8G(juPGeya^gl0VADKf1zUlR3gn$XNm)O()v}5A%Z%upb0T6$C>+OI;=Dt5+t~Av``Z1I?wwxqz}+pZd#X6@-b3U2 zyBvOXJmLNI8xOzw%<~VvT5&r5qBRe*~L?cTlpr`1qOE`Q5&%`f#TVH*4V#`_k#A9(ISgW8oS zfmTB)Irf<+ng;cZDE{@=t@Hd)k7vYf{kPRnO8)Z16HJ48mFT4L{KeZB_y5S*mJj-+ zUL{JP)sWTaK6bomP_GiEvD25%SiJMTZyIP&yAlHpSsne_<4l8kl`xHqE_~kN@#mg3 z(4clD1{$(DZ`-p>gL;*y8rQ$rt$41eU5SB)tb(RqB}_vtDr!6Z{>QrxuII24ra`M! zI`k?r(4gOEUwyAy7mO&@`s>!2c4~-@^X9fP7eOof{p8bbo=3YG6495?FFmz{dYR}y z==anMKRA!}Z$wFv{<`&5zoDlTMjdlonTwzX{odz!ec&C|ZiYnk;q*(rAra+4 zzc;-1>zhCKFYiu`k|O-5WOhR#Ctk8Wzeg` z?y$D|?LKEc&S9T>$Cl?j%iprl@%f1avPC;fmMeq$}}sohlOB2NC|+qeAwv0t)$FomNzH{y%$fBu#?oak?~(TeBI zH2R-5=hR~gTY`S6N4h1be$5x3x8;?aJcXoNg0+DJJyoL9x#Eb0H0xL;N}#>glAb2$ zmjqK-H7r#cZzUojx)sU>u!|IuIl(SV?*me6(k?@u~yK+sc5=*oHg2ZjVawS-37QTs^i+7;T< z1g&%>iu@VTIoGZ03J_yl_Pgq}V|?8bj3J@EeS8$oe9(%trzcWHE7H=A8rl+!A))+5 z4Q&a=kkAz;YG_Na3`nr8w1lqCQ4>iF%A?2pIvBN`1U~*xvB{p5cEr0#`f1qgUR(%K zzj6H&|JM30($j>_!lsA5&j`}fgq~A8eZTh_L3*0dbJdp|{~jYqPZPKP+MPEp`-e-6 zAl(vrF8jSt|EXD#;2ANZbFN#b73qsEyz|D<$GBcgFowj-4&HI&m7B&0#*p~zw{~nb zJW-{Vyz6y4)tVt9X13Q~zEfLEYCaSbZ!}Vap4xnD|Ja>s%^*QfE%D$V-?i2Z67wMRLUHo1ziyp=^}O!;r@qScm_oOexd=T! z`{#?#v3oMk4(dtVj@O-^_iDn7(37!~&VR#zpeGrRr;2BRDKw&|%DZaiiQC6Nf5t$A z+Le%0d9N?u3Q^jh@-QDWQm+!72t9qf`y2jjph0aTinab)4VI0b${qdMlk7~pt^aoG zoMROcZ{QC~u*X^rozeH-&BxcwQ`P8{Dyfg2Z}8Qtf%eTJ5LLn3AksK;|?MCY8J-MA+wp>VXDs!=F^!W(74wCgEp)VE5MKzpuq zMx&gWr%DVo=vU8Gquo?upuxICy-Ex;=vPl-qcs~*to7%$B+}0FqZCHjxUI}r&lUaZ z*=^G^6l?u;>-0qpr7-H4+sb@ZgMRh2_jNzSY*ew(=Ru8afMcC2~{yEd*moC{J-MX$i)VP|o9;*bl))|o?VtrB}$+@S9)hRXzEQ9dS^Gr(WIvdy|WwRXwuV!-q{Te($fUb0_jS0 z%DLWkjh=zT;9M1J{k3P8wBGBDvT;-UEd*mo=)K-3|CV433B9Eob*v@yo^I4v68s9P zCFqL;JyoJp&UsE$ui}cVH-2xq_Aw))rBgn5_*z}L<3mqt!s9C;bgn}GNE z`B7`lyMvZAD-RH-Uw+hDyw^v%H}>qTQ{x>c9<>(l_>rC__Py;1pDcKRI$O z))pZ>O+4@Br>@1?BBZB@$Nlb8*J5oE($fUXhO`l#bKN>)NZj~=r>w=wBrU-h66fyt zl$yepU<`>E;2CYc1J^%2DR?8R?mw#u!wWE(4`>Ih-s^YDCT9Iy3r6)Y`ri-4wz3HS^ zUo8uTue=Wluf^SqjyKOBg>@>ARgLh=)V3N-JFTWu#T<4Y`i-?uU+3Q* zkZv_d=xJyWq+5bkdX^ezTE}mDuIm}mIp?#S@pXk}9pk$a%~{5~MlGTF)+i6nI@T{# zKu;5zb&RiFNPBuBRZP2P9pj4{(k-Exl=za31U*d?{Cb465uJ10I;}LH6knogW-`96 zY6-@W(9C3f`P34OA)%Sc_`0ek7(+sHXX6@-A)#5d@q93bgl6uVFRD6ATWL{@A)(p9 zD9tt>j3J>J$fz+b!59*n<&0X{5{x0CnbfHHmFUznXoM8sMDeQx9dEwdF4p?fnrGQk zNle#7T9Ib^ckdFA2FE_9UiOT&_}2CTH$1Igi7FvzoiQZ#xc(Vyu~uA5&}#47Jaesn zkz2x{XGG^*nfHMeX@!HX8infCIUXdz{8gd^%9A+cc9kC2&^)Djv&#uwcr=&2<%f{d@mNzjuKopXM!;+&9Hna7vxt%k;&@hv;8 zNVkMWmhts633@W3E5GGmx6UgkX^lAJ8-64DA0NGj25IWGgvO#{#I%OSqLFiI&{M0S zv1pVB33_S?jVz(5)??*KT**hgJx*d&qm#y?x9+~S>v>!3djrzS zN3&jEvDRO!L7IAQ>%ZN)`iw}GT5Y@?ukiS~YP3>67++VY2aj`T-n-BsK|S?8&Dj-E z{tZ(VDN&!;kfQ%k5vjxr!YPc5NdKgxgvJ+%bO zfCN3Y1k0QRJsHvev~Pcspr=-YR=P8dcSk?=)_bqTN~Kk!Q_sM6HbulcuzWwYC3OE9 z@1D{x^=hh2L-()oW-nWBX70-8Kn&a?|qL zNrT_AvnH}+jnIz~jN$uGIv!5}D`_C9(DICX*DE{^5cd22;5eG+6Zfd`U zQ2!e1o6~AAA~OMLXfzR{R}zB}StT@@h;J%M&{LZ#T9M|M(Q{CKJEcnFkNDD)R-{`( z8T|+qNfHu8PS#B^3Uh=;~s!kx^l*sx<=?{K+sB8=Sb}| zK`V^_;*3law9+Ue&iXV#D~)8LE=&`&;yqO*O2B7|;tpcw0)975u z$0aeZ&iVG!FW-JR-)^bW*dXTdHL{4cen`7_Y6PM0SYpna^fbZwebOzVuTsLVz7mO4 z>G=4nL-a)rdNPg9mAZAtkf2^oRiR3&EnmCD*S#ckyqTdFHX!Jiw2b4g)zB9z@x+95 zSnI$3txS9~MuMrWL?=SulEl|?B=l9v_!n-BA)zl{Lc3~Ms;Dmdbw7Ncy+`z`5lZ1l zKKlV9NKb3%YnSIf`ol($o+k9Q%Z(59m6=IT6ZW;si?22f($j>#b~)k3Ym6X0P3UWv zZ@uOpj37Nt=&Or^cmAjmq+3GY8${hD!E!R9bI!kH4Zo!I-AtsgCHO5OzkJ{~H10h# z=$GF<>T8v#G1COCq!Be{nxK_Z8#QK{pq0KDi5k-q`uZfk)m6@;)$$umBRc2&``S2* zJPZ2rC2CBoK`Z;(rLT#<8o{)aZd1iFpdRy7Q`M<2;rehS_-wKgCE#DaL`@_;s$m3u zaSb}stp*9*O~$o^bW6}m?}*10N5}X37S_2F)+rx+0!qEvx8@m;dpeG}`@>~A-eQmrWN?Lctv5UbpK`Y%A$1Vm&=%-uNpq1{58;wzdR=O*W z{K;7U^;cGv$1_vipT*N~-M5X8OJo%}rxj`U?!W$ZP52@$?Wk{+=vH&CJK?BfzZ#*t z?Wkj) zc-z=}GQ7{=s9)jndjpNO;~P$mcjB92g`4j=J4;ka)jxfC@4Au>$Gcq1#BG%c<>T`2 z9JKbegWtK-(YcIzpxHG=ds@xu=;*Dn0}pBh2BCI0&7 z`>pM|&r7e=Q4&n85uN>(vr8+|=ig;nQ`i!WA#v(U7xgT(1Y=0-as9lW>6Ty&iT6Ku zUQ4qj7(-&Y-MrSAmiXIOZbp60^Y#zV-`v*r&bV@}j(z{;T3@L_Ppt;kNzjvf4~=Wz z_K3A-{`G&mO8=jwcHy@kxAuc~e&|ZK>wi174-&M})Au8vcddCMr83XD`=HP7xAvJ& zz2{0sMJ;(^s)5NR3_RzKc9{WfmNKX?FJL(~8r+XW|*LpmyaoCN!)izJPY2xkMc3XSk{rnn5 zdYZWMdAqH>{QZ87B0Wt!;r6?&-TX1XMv-m_=A5}bcgHX~uzufJAFTztbW^-Q+}V@T}xhr87BZwbbbSZ=pVtz#|ml}mT7 z^_9fCx}9syZwdM$K~F~XKjmC~evf*MA~9MMJCz5mR_U0BZ&UTfFYj5e0HVW+bW5<8 zAwf@-uvBrZ#*r+qk4E%A?O2p!T#lA2VHz5x-g2*tmpV!-jqZv1ruLX@aBT!8ozUy7g77IMW&-$DQT022(Oh6x8onqRiXUoT`Z$rC#@gy=^qX znn=1$l}4$%+<)HzK~F8AQR<7XJ77T2QziO*WO_+!4F8uWx~G<43<(>NJ;GNesYIu9 zrIGOex?ygqq7~_u&`9`*I~+71=&2<%5`O2-j~)>8)DjvA|JKZRwq>g5sUena|^wbg> zb3W(ke#Id{Pc5Mll>FMF+DaY)cpOXw|xSVxouJsHtC=i}WdHPRaO zM?cnTs9wbyDfFvRZRBs7pp{0oaSo>mT4_`pK3?A1tDq6B=NA^KhA zBYIR`OIm_{nL^S=bP|vT)5~*p!{2RRTiR^)U)$|F*FRDD7UN>cT`)4dDC1NRvy9<> z9E)XoDt`6X+3&2IAMnQ5(Q~oX?g;+noQM6}ENSFlH>VY8g@ZQx&MDXMHyYiqzxU|j zIGze6ai$Sg@*7qP$MKfX&Yk}C$zrKpD*b)PU!hZSS9Ey_cU27>8YOGa)!M{MJpoB6xMTP1Y=Y-QD1dD!j&k2Zl2!>FP7Td$G_TJ zEOURg)qLbv%8O<00^QQB1_`wZ|N5|{rwO$Q|H9E*RM69e+Jt{a=`AYgX+mwnztr>= z74$TrHsN1`dW#BrnoyhYZ&AHP1#Lvhlq#*`mfGju z-+);xb^O)cu2;=w{n;(n`cqA8t%BBCPZ4%onTLk2nB^M&MuKZx_o<(jxq&eaS_Pf! zNr5npTn$Ycv5MScnd_>p61f^$OVE?$qxkoH)DpS2 zSxeAUOXS*SEkRE$k?Wkb1U(s{pH5}Yl45z#lM%&Qf8N9ScQ=bA>0B$YFF`Y3)u7*8 zJ?$3}w93`fei1>dTnp_N5wyxx(tZ&^t6Yft)_nb&mY}DWP+Rjgc3Og-T0(7YOoN_ULTzF!AM|8| zema$hN-g?um1dL&JsDA~_2;cNtVpZ&_!>#5CEcn9{i;1iIhk`4SS4ts_84_xnxK{1 zW7M~4f>vseO-&q46|K~we0?9}yina-G5#iLdwt~<)l${jubthz*7EF5Yw*02P-*(w zLaV7_42j&8eU-==h{ZB@DfN2nJCpW=@=^YEbM0pAU-!3Gq%F^t(EWga-QN=Q)DpTM z@UQz@f}UDJ_XGZQe@oC)OXz;UzwU1ddTI&X5BS&pEkRE$p%J~Wu+S3p)DjxEk7>|T zOK7z1D{1(>LC_k{NB)e^Pp1+jK`V_>;~chx#-B02Lo1C@qnxG*T3!0%!)jfqLaT)O&*yuguM&(Qp;YN9Qs z@hfNerIk_@^fZyHTQ8P_RP|V^p%Id=0pQ~+|GFPJFH}otgyicCES99FQ>77-uVt`U zlCDH24PEtpjfD2>vTQ0*0&S`^rV5&R(}c!UzKX+QNqU;ln95g*SS(2!(K*+qN@J?f zAU#d+ERc5Zp+PI2AB}_JOjnIg=Sp|((I#j`y49c+X^ots{9A%CBs6l0I@S^zAw`WN zp^;47$+QH0k)Wqabjmq%s8)2|tF(9GVyThLeh;}d=NWpeo9DjBi)HRHp}D2lBYCxb zWawOHmZQy%tRtyYO#zhbe>buAW4eJc|^M$LH%l)0t4rpscf zuU(?&Bt1>&JC^8!Nlz2{Zsx$#zh`HZ^faM;Mb13u`$mwSCbUb)#yxK`g0vBxbKVA{ zoJsJEv;;@5tR(}&CCb^QUlQ8?<7IdL!AQMg3<>S#@q**V2*!}mULfNHV@PNRj`376 zhJ^Ohh%?=1+E3Y>F(kBeMU-YeyWMIVq!sB_LpxMNU1AI7$e<Pc5N7An2(j)Xu;BiVFq=JsHvec)#o4_AQpARoe%5+nvgTF(lMuyy>L3 zn|9S05VTT{amF>jjG&czj9*UBNf1CyE8S&8oi?H?zvW*y*JwNDcT}1&`=v2_JUuZ&KSr?3>6ddgl@Mgt^Qc#(`Bc`3 z;y*Qfjp)UaR-}#4PbUpN)mHJ-?^Zr-PC>yq4^!( zkHg=S34)#~(MdzSn(xQa67=NWLxU+HtzNWw+E@JhxzdbKJRhVLY4ctQ%?SAp9{z?% z_@$?o(2S7p;L#HF)DoHz@*O-{f}UDJGeW)xM@!ICOX!Y%OoN_`&`+oG;4@R6D|(tH zXr+0kI3v>ptu$j1XMLKWmFAhEWLrWr9`O{JR+=w~`Zi5yekR%qpFvL(nz@OZPkNeQ zN=R3t1j^kuYV~T__^u?YV;>O_Lqg#=-fG->@NOIa7Ng%g`5Uc%PZh^oLM!?CE)ngR zLC5_I`PEcu?Ui_frS(Mod-ugs$NhWvRU+4>SuB6H>z%LmcR3f!T!&?KB%?Kt{_?~V zwrC`yui_&gT0QC5XP#)s+kE8r@{47zA+=cMDp0GbqF?IeKJKdoHF9OER?kw^mEZEO zn`B}{`>t90m9qH08W(63g3iuzWGsu8}ZAv(@mB?cPwt97HI-BiLf=!+Vnqx>r| z(4b$fQx$zoB}{|9s3AJ)aV1PcJz4Zo^qcFHt@d#2`{6h_}QtwFz95$uw4wKMH%KIn@YN};bVxJu|OM%@(=WuvQ4 z9IvS=fo`7buq>8rwYetCsz$C5xmf0!iHl{f_Sh4h1f-E`F)o&RTiw5wT`Y5L8E6>6 zm|Ts<315K*gkUH&Q-cOONs!7bS*%I_*gnl~Jl3Z(0bNWf^N)+1D1g&&kiTqVUGIRE1?BUcu`Z}qr z?SnBSa$Q9bgM846w56(8>#v*Bif2LEzGh~x(HT$(#*k3{e9g>Nf-xl2=SK}S?^T0k zK!RuWG7t6-u}AwJk^P zqeeAIQ?I6~=yda3w{o#0q2tXJN2wYR^h>(fnza*rMn{6$M)XuS&lNDsTi$gq!ilGS zo$`^ZP_|ZlR#-Jkpqn#Qq;oAzv?wF!E7!2p^T9g}XCMbeu3=f;LaS?O{vwTB!*a1C z-R6U-$~7z(OVZOsu3@P!Ut%rIUzDm`&$5hz>ROts?L5~PEMFhh^)uUNw{5CuMLJi* zTul{YNaSjms{~_6%JSBVo z-Ck@XNNL0!i=L7_b?t%geNH02Q3lkj z#6W|7^~^KcjSZ?+tD_r^K?~%o~Z}dyO zX$|_-6W%k<*4jI(S7-XwJ1n86vk-lkX_ORss`w?FQWEco^3BtlDnWDlqK3{wT!~tO zF(j0yxR$g8V@N3H%@wD|%9q86A)!3Q7^P}-$_JmU(@Hsy?>N zBl;ij;X-{?FX(APW#g-V``frpszx>RKCQ3*?Qi1-J*}blX?^u?e;YUGX+m$u`s&~Q zHg3?B=yZ1VhN-XR?Qi48Szy^zq6FG=rT1xrrrtE6_i24ycz+u==xIXl)B4);{x)vV zMs&`#snYwjVMThH;8`GDiK650)<#PuF@3IRrMFmv);qURHl73j)f-zGLqhM|4oa{< zdIKV3NazjP@mivHXrsoF;1^15s_2UZJyoJps(4P+24f_vw{fpKZs#1y^q9}q#%L*5 zSXnG{Rh89VG*^LHEOX_S#gcSQRSCF;?@YN^=Khl{-4gUmLUY!O-+Nv5?VSXqaq<`6 zzUB9i{gTDdigc@?+3fJ8dEW5#=y#}qh_ef!HZ2#%ziizjsd{#Jk`r0|yrixE0HRByM#+{E5w9<@s)R<|4R+?Lm z8Z%AMO0&*UV>~^PD#gT8Z$262S!fBKMV?*Fo=1(DPL<7=_cifXBbav5ZK_xXOcnD~ ziB5fq=A)xOC!zV|=#MK=0&SU-9@Q{{zW9v^Y18QJw`h>i40K$5NV{ziw9-6N==4q&L z{S*IoU`4tmq`v8)?;8+GZFp)4&3Qk4zxNIZdTI&HdB5cN_Y4SnY6;D3U-l1|3Tx%2Rwr zrMd8CTq3Mn%{i?|%UIU>>*lLgao(gIbk{kOpbZKrR5#Zgd(5QJinMzVLbJ;;ze9qaT0(QhG3!Kv zo{Z>1gR|tE7p14FA;@Ovqvxa*>6Xa-=*v6XW&bGOY2L%WgZ=7V5${-dpP+ElQ};sc z8$ufI#1meHn`gq6n165YEpe~L@vh!siQ{J6mEZEOo97-*<=xu4Gt^?4E9I}|BUi*< zEOSNtUzNxe@mtzb)&G>Ycj``73w*F#CdYZ@;@mqSD$o1{@E>^6}znb%0hkUWj z_3al+(ya!GT;IN>r-@waez7ENMCV*L&lS-ZOA^#x)rb}NRcf)e{$iOc<*(+PF(h)O z{8fT6Byy$vRe~`ja;5xLf-xj=rTkSQSEz4uo@?N*61l#8OVCq$cB#%((UTFKbKN{w zc2^0;3iFF)t{vZ}N<{hB612+IbXW61zqulQn!YW0gHX(Kx4)bEy^zHI&f@&-g* z_r9#QQCH1JnHQ)fa<%%Fp4P~f>laJXEs<+0mp51IO8M%kGqs)r|1Ix$!HRUQd%s$O zxt_ZE+Sos8vD9(jS8A2uydmjat9+H9Rj!EN>b3bGkt^bt*~q#w|EdO4#gydw+p7dM zat-~(l6upr$~E+Lu3|0!U!;+1=r5L}r!{g7{l${>G?8oQFP5aIiCpV`u_QfB@Jy37 zqAS1UUpr4tE7C^vKi!;Gs=F~l%C+@Z&n|tjoH^s&YS0%oay9-{ja)U*TN1Ug$w9=?H&f7FWD~)QSWTy#QX~gL}?4o^is=LfN ztuz*m8al1PQ87odMil@0>*lLgai%pw_PvFFQL31dQNlD>YRuDgP1GpW_egDP32DoK zWkUJTDAo5!Z3%j635`;H-`AF)CnGxNd`ul}g0#l)zEdpDRe`!WV@TMD%yx?H32Bsn z-CQGK--opyxAj(}i>+BZp^>of!`c$`)DjvA`#!8KK~F8Ak+AQ>+7k5C5*i8nKCCT4 zPc4x2Ea&uOgnl}ehptQUZ5L@>yW*@*6SUG*ElSpi;@>qi zN{zOrQD(G3j;~w7$DG3gKM1U^lOK8j)y(RNOPc5M_ zXY|M<=&2<%=8RsS1U9~y<9{^I|%H-TtHI;{0yp96?Kk-gpMHOdJ3rJn8$;)>d8Foqg~KG86xiUc)C z_r}Fs1arugn?p4h=`nWq=N_3{0IgAO{{D}LdP$7+igb9)v8s{1C8R}bI#RMXhrRsDnZTHXL_C;D_iMFb-Y14P0&hD zst0SUn}(k1pLzblSF4uLifhH0MkjNnO3$!k4LVwpHbOr}aIHB#&yJPk^?Y#f{;m;> zA)#lJv1-2D+h3 zH6$~qRrjH%)hoaQZg^U~u1piuJN@#b+AEH*P8zggO78RXqb9Bf*Zj$mrBB@7`aTkS zT>p%<-#^}u4^tI6lwMp*rZwnSX+PuW15J0xkyhFkNe%HuEm~Vq+5blOA^#JqAS1U-*5yFo|>MF&`+mSaYRoIdYUF^rCJi}LrxR4QcaB1P7}0JZI3fD zP0&g$D$e>eK`XV|s0-5st$4Roi4xGbJ+GFlXL@`!L=h1~Lg6@W8l5Y734Z_hlh!ms z7JcNg86MxClUBNt#cI>K4vw!+O+u|GR+}d6>4{X4P%Ap{Vb8V{lAb2iCf@yCCrD2d zY7_U~^#s!(Jx!=h{OklLNKX^0?U%gG3DVPqN-fHUbW1RXgxbn37rS0dFouNMN~EwQ z7(+sBCC)-iFouNMN}TDIUh5u}HM20Z}y`y|v7LpSQ*8D+zjPHE2az zvmfKFR#(p0|C;SlSGd@fsA_c4Uq$~xTG!e*hm|M+zYc~kUEAw^MI{`^jp%>6Ijxuy zg@dj{Ck^&XB$%g4lt7!RRl3nA{=Jr{CyPCim=e;aQ3>^Au_qD<4zP)m){Bt5O6z9dSM^faNqD@v2}G@%|fN|W?7p1l#xLwcHE36gFJ&7Q{hwJe*Dz4hK}Z@qZ4^_50+&UJHIk)~d&!S85E zXukBohdm%QdQ3ChJFk81;CI@SF%j{m6Q87*apy?;ov>zsSIxqHHyj7W-0ZMmW9_Gvm$?|6(NegCoJS(7SigW}U;Y=HB8f zA~QQ+))I^%q1oYa4aShr?C>BT zoob1`=#PDuxWkQ(kMHzHU)0ci^7z?h3<=FAM>(}QXAB9=CpWdE$FwfaPWAgi68vJU z)u1mD^wbh;gFIJ*n%Ftl&1prN?LRcSc?oq|v)@PCvzgZEkCAsC&*#oYOjwcbQ?njQ z2fQ(MM3~JKj@h9MgXk2_n6j(U3cWg0)R_*gxC28TM?OS!<5sg-9#=~KYrB2d%Ril~ znRcf1*(h3-6&~x3535ARES97*tW@d$Mb*U}AvRB1SoU#lN}leE(Y?ZhaPGbO#are1=zvjG4_yXSh$5dQm%HNi3GSKldxyY?fhZ^z}*v zVrDba8J3m*c^gb$v)StNmeDI`H*Q6`_g~ALgu;G3cOtIsVzSIvts*7q$u%lvsS3Z! zQ}|6!Uau-)=W1x>=P*3gvukBezdED-Ik(0C@kK{^>1#IAU1Pkfl*gq(V%&$u;zAl%*>CD(&GnJs}@f+sCc^?1rb= z>?dD*)cl8^dCA#|F2y3Td5>Z6fBA^0@LrV%*AGt<%zovQUVG!agVG$76o35(*eWt4LLP zlGOw6xbOVKKle76eiuviYChBKyXAtYMF;Gjl%q?m5dDV;mN{b-j`^7kgRp|knAUH4 z^77WN>yXg>K%MugdaGqVZsqqSkwWut<*kqif5J;Ezk3-FT@aCyRXUy(w`HDIezz5+ zsXMRnGS3*M&{GwuHH|v&lTRA_?k@b&Q%huwzDtd#y|Y<{b#_ZltQt8(*IFf^^FtzI z7E96@UMayYV`ekX6z1_2V#12FQdR0yEpyGP#9350N;AVCI)yW4v0SCc%RH@o#w*HP zvr$ntcCO;i%Vxa7igbpR65R{xo>1ZR<@0dSujFx^D-xR18(NW;-@XKOzHA0EdP~w7 zULkC*FEli_7<7hLO0dz;Txj&|lZ4H^4y}AnHuRLPEOYsds~0sgEc>456v`N%-z6Q_ zE7|GKb*Q1VhgBX&&gNk%54qLG(W%$c zEkP^N8D2eCS_%5PPyN(1Xq92*0%v!YF=d?^&>2Q8Q9inina#95wd;{yAttOyD^*c% z6_VeJ&UvimgBlr@70V-I%3ez=w0lCTtd`J9c?zpMzCu{ehgP#$(n=F+yUy+{*FMJb zkyd`LB7ZGGE7BQOs#Z%dG*n|^f0Sur+{$ad)5-_SLxis?PAjjw1ELd4ja53|glgQ-inLO-+CIMW za((+qD{mj}NipoNsG%@v4=Yt==5D>r_1U?im9Bj;N1Df1iE%5xKE}*#J-a$rHui~` zU(y*?F3_UvS{o_RwLRzzD^>pI?IUB_r`CCVg=n5_rxj`W|LPx|Hh=w3zkG$ld%ylk z8}XLsmRCG!!{0ES%`z+v5*gFd=?NN}O1KjdZ_Uvv!_W|cRC!8*PEWFWz)>g9KYY8l zZ&Nr^wOF3@*e7lH`?RxJhNVFwV_G^r$?u-$J!Ag8r~KG7lF)vDhi&+~yk$IJ!_pv; zF>OlHlQe$x)Pv^Vee@pI29sDU7iS)};qNz>R#?N*AdxX`O45@w{=aK?pa1;wgG__O zr|)vuM!a>M$E87H+-f$<u=foM~i2e24h~f^@$ttE_fc728nU2*({Gsqm=jN zQi`U*n4_+L!bZHIp2wv@V%%yr%j446>w{m|^ujltW*UsS_24Izx7+-^`8+NS66030 zSss_hwa5I+75kj&8jRWVqQ}>KY0wbETzGN^o10Ib$C1(#O?$mB*z)V%(~<(@IOD)Wr3uyNvnJEr<5)W3kNR(jYNz zHJjyeX~@5*66_8+>(JV^(`vEI@CpH6izVp{D^;auSnvCi?)oi<);@|>8I}f!S;j1u zq%$lHwT-?{><-xB(AuBVD#OwMG0T{8?+iM_(kNGh_5S+NJ@IFc?XMr@DpQG;ZivQ; zbcUs&_NP{*6n=2~L;LH;Y(}dL%ZfzCES97*jB~YF^s`HO_6s-ylcIQ3e(CFqNEhNaQBsDXysUA##? zO^jQ4J9k=X?|TN*NWy!Zc=tSyD^(=a%M7hZOQY}MOd|>JIpb~hJT46q>Me&>q@~gK z)TWVyUjgFVgFG$`66*DbR-~oTUvW$$3BQs>3iG%$Na*S{v?48y{>o_@N%$2x&U7A^ z1_@n-hgPJep|(+KylEuiBa5h4d0ZMKG@2M%k(NfOyBhnLMiM@ziti@!xHL#;R5Y|A zEe-h>Re~LfOMiS=ZSxtH28db4(65gGqcvO4FjwxSk%W(TqwmtlGQKxy2pb8973mBs zAN>f~H0X;X?+hy+AZ!%wV|5?zMoQ9?G|F9(X3y6Z=KIF^{{O7Z-1A!i5*gFd=?NNE z9^Ao&RvA`4dJU^38B^wTu_sQ3rBRB({412H(vybx3c`=`D+nV57~wHP+P{J@GyC!R zSNi3*8F^g!@INEEajTN{5ie=d)&6602+B%j<-YT3iZbdqFH4E?F4n>3&ceTpn%7_1XI~=!~ z&GI;`JB2f5u~gW@X_OK2yo>^D z-iKc=<`=-TS%#%SB4cJV(iw(^&HM0sM_OeV8aC3;7*9#e`=lpn^jDm13TLVo%ls<3 zj1rn}s!3!_OQ$FK)tE%1ONEnIEb~k6*(}4#2Z@Yn>GUMO{RqI?ND|t$CBADfbMG}Q z4H6mCrX)Q{qaVqb1_^#spU0&^V%%yr%j44MM`WhK7=G!W$E87H+^W1kQCAR<24`^? z)2u&G32BfRx0=oJxHS3^vgLy@TooaYOM}F?)ohl>dyOk}r>ZbxxK=|R?=>nhZZ(_b zarrGd-&Sh8X)uOsOXTtXTvcM+YBtN`(ooybovOl&;ffb|TpA?CtxBI?SKE-^QWNXE z4`a9vM;@03iE*phERRd0w5U4olPiMIYO$Oo;A^oYonfU)=SjIQa$T-dGMmvV!%7v1 z#)@=?rJ?dxxl1EgPnpeVm0@XsXsk$QSQ?!7$@L3nGg@U>8Xy`g(iw(^T@Bo^8lkd{nHySVSQ;cU#_Ltk z=}8)W-JOe89gRChT4h*PBr?Wpc+lxd8hwizXsF%Ao%b{`ZsqNKeBLJs?^j|5A&)Cn zeP3d!QZF;KBCVYFec}q?J!i~>&{IpOw;WoLmWIYw8ZjxHg!l6?qm###4-)G2hgPI} z4LzGMjU@a^7Aef*y+$Q;^%`1{mPUW&G>s(uiX3M;k4uAuuFgX%($Xj;Sm%9`@R3E- zt32M9c_lQO7+R5*Mn96Vd?evxs+iHq-^J~_wF@XB9AK{{^$2=OjTNu4*Qaq zb%mLB?mwBwp&_Chx0=oJxcp)^sv&Y;%hG%7viFvw|MjMl2Wfyn4E-*at%klMD_@6M zKGIhim)z+cb#0M6E)5dnR-~1W@+H!G`F6>2{*xEHqu=Y3R^i1BdjMw*_?%znJg)7Naqy-f4CYY6fAjBzW{uHpU_&V5m7wOFPn z5M2^yW>_GImf;LQs~dF>Q$%n z?t6aFN~7fo0=^bY(iv8&^eyKn$~T?TQ~mLM8oc~tkC7x~MIvLowg;V_q|tw=XXlDB zYAe5U&9|?T*9@-^h+zs_J$cA7moH!CzxA6MvhRsbp^Wi%M>_Tkke&X#%&DP1Dy;JO zYMGB)dH)!C>0cod3dgz1uxt2rHV9fps?w8LeeqHC`zT!}qSWX&!>dHb_*Ew8^rTeb z%GohS*S@I78D1gmS{qiRGptng8fqUP7E6vYG7JqPGNz?7Rr1TX^tdls?$$e-Wmp;{ zGG;a-ondLb{N<<3fAih{Zu7g`v5Zz3mIes;^_0Y}P3cJ*{m62g!kMbYGWQUk%`z+v z5*gFd=}CV35wd9{u~_E*#j{z4r9mQN+LWXxY4js~E5Rfd%iOtnHp{RyNMuZ#lJq2v z{*J{oNN_*tJT46q<5v1|a=!NWS6)`E_1E94nFeFH%XJ=?28nU2@;&EE7i;VD5BD1V z9i(Y6hI?=4acPhkx0=oJxbjinS=yu-DTNuseZ%v(G)RnF=^O6YPh5UW+qk0Cc++4E zcQDW6(jYNzRo)LN`$R52_mMnTb+(o<+?73#_vfk-<5p#!q3m9n<FdKa)T>ex>-;WbxCeb6mj;P(D~)|(2YZ!Ac~f@%yZ&x%xj#Q>?QhO}pPj|D z(#UCofG<6jNjk$y72eY8v}frp_qy0LXq9253PgFr6Mh#<(ixUU>EY`9u69!Ol_O^} zT4h)oAQ~&u8I}fSYrEX*RqG6dp4K0Turxq4R-`j54YiH_`eB4$0cJB=Wmp;{GR9L9 zv{Dth5`g3JO#&~%Iot{wUMyLdR2U0JO*jqFSY4l~jk}9uP zL8m8a^mTVGT6NU-Mb!*c=(Ti9(28`1rJ=T=x5-yE)b3)ByJ=$F%G-@HxXBo<5U4Y|wx z_ce_SOM^tlv~+rs-!FamnE8|c_(s!6VzJCU=*!#9WzWeMU8gmRq(LHM^n55%)uynl z*m&R}^WAR!t##=ou~_CF^yU4svUBhMx?$dHkjR*pPEYdtu08HE|M$BeVj3j0JMa;A zILQ3wapi-=xYcZy$EERix4CiiAAI>3(_oDDEPm(Ck2Z}wE)5dnR%KSC($YBj{cqm< zx9>c~G#I1ZlYeWbZ@3rBJT46q<5uNKW2L2`woz)lX)s26I`8mK*U012ATe%L-aW6h zH2lx!uo$DArb8o-O9MnVZdJa0t+cFPc85=2amaf;AB@rd*Kw}$xHL$NTg_&9TpH!< zZj16@jCSRYGSB1EATe$=o8@t7lv=Va>J?+OS9sLjJT46q<5sg-9+!sNUujiV=8Vw} z=F#r*xHL$NTg_&9TpCv&d&v4FpR{(~X)kr}GibF~P7?67Sdz}LQuVdvvFm?+`ghe| zb=pNf`axP{Sg8Ur%b3#pfX=Wq?)%eI)(<=DY}3%*_R*iyD#OwMG0T|6l5~cpvDb%A zTR-J7pVZZ$+(+$KuYI)2urxr-GG?(PondJd*H+#NDaNms9`>tfOIM-`f>xyCx?5AF zYptcq_wJ^iYXsdAnJPb5K`Vc`3wVEaH%mij*LP*6UQ5^VFoM2FXISUztS2A4{(*zO zYlLcv@3BlhuQ8$B67)qn!_s)smP6JTH~rRJ`A|FXo$AXSMAh?}AKEQJE7BR3hT30g zhXW0@?HBI#psRHKm?p-pyf1NDX;=Fzt;#f#@Lnx;xz6KC6$$lZLo3qKIPu44Z#(VV zru_WPF%b@ePG(gxjb!bIe)}_}+D8f`nn(g0y2`*exB+T_kRdILXq z!D)$%(S6j;Yj@fGuT)~o3@aaay3~n?`8`@?Sor_}zn+qy(~~qdZ#j8>)~kJ;iA>dE z`ISp|F7E;OTyKV@K_X+?+@>dK+~e-gnEznspKMb&2|bV6W$mW(ea)LiV>q$(R9fn>@j9ZbG#*vG!ZTh=s`#nw)nnT`o?PagM!Zh-@ z&J~GqE7HBj6`_$t={cWq_sj?MOrsLxR-~oz!59DKw#D83TqRN7{kY}swLJ2;@xX{D)~xB?zHPVKN6{+7 z(g0EV#7Na*Njk&Qc-d(uuRm$W3)EkAhuyeaeI7-t3`+yVEMv;ImY_2%4Sgr0H>9O; z*=_IHUjfRumX&DfhG?uvXIL6qgQa|ZZ}&Lz8?&6W%CPc5B4a!yL8m8aXbqOKih!=Q zea_!fj(R@gij#z5NMuZuhtqxz6_!Ss5!N>*rlAsi`TNf{4O(Sb8YD7C*Vm*oER8a= zt#4&C_OY6H^T*z38nnu=tVm?cVyPM)bcUtTKj9r{sNKaAfoWpg%G>$)^Qa`e$B8E! zd0eUD^CUYAfeuJXhm8Y<;l+#dV@#dB>V~xPnz<$G)U-b zFtj4wYv`Q`(@4UvWRb!=-fL7sSFfQJX=$i!lp1duNtBe7>ua3pJT46q<5r}lapsSH zxcT}Y`7_8Qd}I;zDvwKpghmrXE7H;^{rbH0@0O1wd`#uF-Nz;2sUS%jkVT^rKg|BAsDr zl(E%ZV=QUV7f0S1Rz5)3T|@M>q%$my;@ZxWLR$N8hX=pmYW0>1-~Owgyef`+SQ zrSacC{_#!szRK@$7_uw&G28nU2vie1(rP0q*n+9XP@!Wg$ZLq9mQ3+{~ z7`G~IzS7b-^>+_hf7|E$dDMrGyJzh`(yH`bQv`f1mZUSRRK4WJW7bdo!1vT&br)T@ zTkQvFm0_g{#4KYLOVSyZ#!jC-W&P~8oMRdvz29!NKc`iOr2%4=F^eVX3`^tN<$3T& zUvsV9M`?H1xT?`A!_ojT%b3NIbcUr-PLY+jLW+rNAFVPhtDfi-${5!m?O|!?xpx2V zho#D|wbX0rmdI53xe8kOi>tQHa;}&6GBzt!I=gq;dQQ2Xmz9EGm0`t{dC^K_jF)-P z=}Gx0Z&|FD_cBaFwPe$==a~krGAs=e8RK;~==3BFJr6EVdFP_l4vzfBTTO#j8I~1^ zjPX_!bb69T{}g$kp|<_*oBqPaLDR&zmG>o1D^+@bMQ^1joP_skUw*{}rjf^$DiZ3+ zhE}BISMT9yc3a^jymx-nNpCleJT46q>XC<5q~*8N+bi@YlEO*&RpyLqTqBQ5gM_Xu zLo3qq>wiAxO~S91LFaL4fUs-o(2BII`?p0bAG)SG;aB}Q3wgZHhu%mrLRb2s6=`Xx z{Y7~s;iH!*%{<zhCKFYmre zWA&eGY&YNT1AhOJVQFaQLvtodVaAm2L_ud*R(QJ9iFn-)-)9=M%CIy*z_05Cot~u8 zznQsB;Y`(Hd5=@}n}6p^7Zttobf|`!H^-SZ?C%ln-0>iMPI-%8f59qK~3ghNS^wmNAPZ=?qJw^ltT4h)oAZ8h} zSdz}LH1M@kck_||vGD6hd3sj$TDl<`E7BR3hT5N6l~O3beg&A#Xq91Ek;oWNNzmy@ z8hpB>oPXrAAGoU3Yw4DtFVY#7Mqh$XIkYtHijKw{xeJDqUww?oA^J?{QAJ z@fy>}h*_Kq@~ecaqL_r;a9RqVIG$T30=L0R-~oDr%Orr6*keK|-U6p%rOq^dlKNS4sFd$ZPvzna8C;LZhXj6=`YoBQj}pBs2<(R-0jI zfUr?tSdq@KG<2Snduh;@Mw8KZWmp;@Y$P03q%$lHJ%3awN`t;Q^3Jd{K-efe`dZQ% zmIl{=&o_YSkHqVg9r9ooc%GdaH8X8s}S{MAb=So9+nWkQbp<%To zW6GUA=nPAvU#oas;Y^jUfxQ2-4zYaXacPjy>c&GW((+r1!SbLG358#@rgP=TJuHo$ zP{0UUgJV#u*Dqk=BjH5jtTB*>((jbvBuHiXfEYp)T`Y&>AP9_OoFMQvBJiyMCR$TP3G)QDj zxlcq&GAxZR-Ra=@PyWE)-%Ubm035Nl`h~+>BacgigjQ)CT9NKG^p2P1BMDz$Hd2_!dyPtH zwb`K+X=(H$ebY$7SI~_!oyYrgRo9czs<}fe($Xj;sCyjKNWxbFj(U~Hr9ncg{|>E4 zOQY1px}HoDzBaPAk8-VrrEk^R#1+%O*+FXgssvX8l*FDKc`iOr2(R>*B7bsb+&`n+St)Q)|m-i zKRT_LfD8*9#9iJxQZ~ z_k1o|b@b@3y9TW?EGrTjB>FUcertFprLm6zn?g_>&G-PZsqOVX{D;4 zNi~fmyvKR(1+J0Dl`0bIWrkLyrSZ0JUbyXBUwWZwB;h^h@t<*xJT46q>Me&>q@}^x zk0ksGaKzVKBacgignIp<73p51zKxrNU&$hcdA!%CgsxsgE7H;^Io}-TDha=>1^5CtQMMJ+kzxQCPIv3`+xqtrs3vq%$my(lgA<_aEv@I{MORGJ2m3O9ObU=)RfeSj!uF|-tD5wJ&agCiH<79Gef#3tt{w8m z?>{oe_oKLPFN9Y(Cv_!_Vbb6BC`~J;A^Z$OG-+v_GyA;O# zhxR^<5l%~FOnG-0Dao)jcsD^p`!mJ}FpsM|NQ_(gevsq$A4!xNT6V0Ak!&892Jb({ ztw<{$yqid(y!%sj-i#4>9+w7*aVyf&;N3(LzEf!2S>$nPkkIa+Lo3qKQ2W!UOyML- z?I}Bw@7nBB?S4yxEIYbJdC*f!j9ZbG2Ja@4C~dRsUmNu*kN0I> z?^wpINK1qFA4&M0ywN7|xHL#;_uQcsX=(8OLp%3I+a{gi6~cB04h_;7R;qNLrt?*3 z+owAEC|YG$8X#0egr2)eBsgAx@`$-3#VQKW=DBAspc7%?509s{O8YD8tcbX15JxPQ2AKDQ*u8_3K zurx?yjPEoZbb68o?EFIkX}zjlQS0dz>V^pN~6>JT46q>h*_Kq@~ecaZDo#zmi1?^SCrf=;}4J zA}tNxeF6&_lVmIm)8lJJp5)R;Uj4H6nn46R5@gLe~2l&5!POcnPZ zd0ZMK#;r(819ua)Pj&d!F3{0xGb{}dwoi3fQ7^;Nz}BpQo{ZQrH7?K zf>xw6EFO0g_P*#Lw|~BA&?>{y0AcToda67nK}*}i(&(R5+r2@i%HJ2g=$sc@KJ=v8 z!_pv;F>P+slQek$k%Yf5ddsyhH4Qy+_pmfbWQ@Nr8YxLn(%{>lN%;GlS6p+dY3R)X z4@-kY#`yc9k&^Tz4c<+Vu=ga6e}$Dz9+w7*ajX8l45OvNyNM+H4Ur%H)gPHg9+w6Q zy%jRFA}tNBUy_8s>GJm{on{(&TpA?wcFWL;v^2DCf>uLNI0=7a=lBn}Mjn?23B9E= zv?49P{SJAik%Yf_6e-N((jcL?jfPgFrNPxmlJGaE;!NjpX^_xcQ$s7#(%}6^68)QC zeZ9)#(jZ}Pe+{fiOM`b4N%*^Q(I)b^G)U;Zx1kkjX{^348f}|&hF1uCOD{C^{$0=+ zR;q9}VegAZA4RJSO9O|7<`Z+v=f_xDA^Q%h)6G_)cu4ZQtn?~4YZ zQCPIv3@aZX?0wO&qF#ojQF?~veNiWTyc@lbMwT9y1_*m!G_07C3`?W*aCJR>`r^nt z!_oj@?~6uXOFF~SD02cTi%ub}A@aRX|EaY*g>U|+ua&SL_pmg2LIERaMcTu%T3x^7 zjI*~^jj*D2Lm*YY?nlu2QqRNCu;)0Lc3;2bcYgDmmJbmgRzCVv8Idu}ldoSA`Kw<8 z+C5GZ{srJod){Cg`mWH!(&)b*G$La>ACZ#uq+YcGsUd9rlA#r8+4ow0;QQr72YYs%+rKgq{w<0Z#Qrqi#`bqdY3eoQJxbi_lD;^B3NK2z%Z9)0ywAw=S zAEYz9LfDE9p+P#sN>#sVg!(I6za;uWT4h)oAZ-1T=*hI^M9>+QM!))nX=wF}=+FOe zU1t|^TUCYO1tE3i@$W=|bkn7pmOrPX9>2X4%gpMeQ6dQzAw>m|kZ3{M@)$yz3c;bS z@+KnsF{RAVkIt?jq??eUz$?2@>7NX=l;$(W9P548UhA9-9n3kN`Odl5Tx0&NwLbTf zjfN5Ng^h}XPRmB4fA@pYV8d5DD(btJY&49BFLzWtcUm?Yt?1}eSme~$=U%e$>cj?1 zIr#+=r_;7}#9EE|)(9!RDLu9$2={VYwq1`as1?8azwY>Qj2Z4F8?Synf>2I=zoclD zghuZrLC}AWUG}BWa4*?tIH8>Ueo4_P2@U@m3HQMVFU%WP7ulFUQVNNYkoH>G(=={ zKL5PjvsOA9P7smjUQVOYzkd}PB65_u;hxV%JCu%w6O1f#FQ?JSe>vwBk)vhNN=L(p z_{uZ^m8w#(P+Oe-&NZoa`sYJ(@UBX%vk1L zPNTv1IG9~xi^y46^-87F4kws-&AptaT)r#9>=Ii_e%W2tYv=N7EvB7%FeP?g$FT7*dUzC@PMkg?Wa4)Cpug-^K`%mf| zzos;%dP+|Xs30b_l9$t^(1?9()t8gwYR77=bkl&?EPFXkx&6(_=({3#g6{0?4S)Q1 z`)yWhrK91*vX|3n9DDhqy_*kQ9PJR%p740_xf5@_;NFOdN=L(qWiO}E_}@P--hbrv z7e&k8^x$(R{_xb-TDk7ETC1cTVp0>QW#_M}e&spXtD9&?I|UwXBgn9vw6lioNm;9H zIJW=fHCI`~aK`<|yG9bJml{w(Y?i&8P6f^3AnLbrTDB1zY~`%hyL7cFuE$=#9zj&j zljk1q*L)ac(~fopM?yKNSG4OzFWIkt<-~`sKkY>IU8SSZ`qfA*d$sT9jx??HcP(Fi zgWIV3pCtIHaSixXSH@(HX5y8?e%wfH=aWezwwuU2|d|6MBGv3<+N;S z<=33Do;~I7vvQ?j#0FbAd7nF-_RbaDxCXJSyp+B}L`>N1VHMWAu$`TVV9 zr$&ymu*&grGm1*XuOQ<@U31Y%l-~53yO-0lsg;kM%E{3(dt#1Jsl7`uLe9OMrnOyT z9BYg4S%z%W2tqkt?rJSi1 z2I8R?uWseGw~0q$N>2zYH)~R~NjUpTxP9j>>u85;+Tnz9rma;;X!zU9 zB3A1QUOH?0*K_wmLpB;tD2Me~)oNP9@#H72porD_iTlsmo^$9(XvjvxpZ8JDFgPun zcJwo^&~W0~Gtb)I{Ef@v+9(|jCzid2LFs7t(>tE?pS#Z7{^P@!hKAD7aAMi3eGzJ; z(eSqiJm=}>&)A-S@8Qr;IvP$adkurq(dbWR#&6|0w_kO}_RgzPL+NNZvFz2J%NuDl z`V*$1;W-a|`}DCLN=L(qWiNKZibliVH}ITSPC0$N9!f{UiDj?0{upUA{OKLf`Oa;p zjr~gLXgIO#H4I8eqd#j9zm?})^74Uxf3&wjO>aspd+}~g(P*?giof}S#%BA#f$`p! z7w;IIgs`$!Yo}$?a(jDu^XK(}F-EzUY-(l1pq$m(Y1wGl(>t4s4jdTcxqHb*!-%#Y zP_d@_H1llF;Z^F!qqSg2%q~-q3I_*=RVSoa|Rct0Xjf z-`#_zk6!)2`$NOMWaH(8a#By zAnMP(oJOOMIH4gTN3yD+($R2&(QEGIG#Y*63=I)EBG)gibTph`6rOuIjfOwHBO+%O z)vuI}h7-&t=3Y*t(PuKz4iUq^d?$PRYOQoMoLKg98jU_9Lu2Cvv#`2rWusw4%-hP# zY1wGB$goH2(eSdESyuFsjfN31|12-3WuswF?`*s*pLxqh!-!ZlRIGJcHX6Q~c=)~} z+h>3K=sQ>&{OXHGwhtWqNwbGRHX2SShv#HO%ZB&$2gLcu9tjQil8uHDR&Lg$XqAM9 zuO?Kh)%xHyN4C#g`_pKLY&4uu&a|~E361{5)|1#Gcr)zs?LD7-EHq@J;e>Lgv`V7f z-V^t+Mev5(<=anv{AZyd8x1FvGo@7$<@P%&G@SVTS(k5*Ui^4m8>OS+#Ijd=7i^@_ z@YRIpZ0^2n`?{x7L+NNZvFz1uwUI`njRyP;w`hmw{ON^Dx1Tut^Js_C(Qsnft3AUs z(rC2NVEjI{=e*`!mu^=#rH0bcaAMi3{Y~$YMx%`eq(w-_iGQ2*F))OII-+C3`$4CR}-Fd!R>D!`<2qsaAMi3t)oX8jn)&#?=5-G z{(lek`=jj#j074^EPJ&*hml6Z-#7TpgNMd@TVAWR>>a|&TCJUyO|4pF7~gmP%$0}6 z80B8F(J*3A&T8$nY&2{&v3cUOLt{L5FWG1qF({|)ei$tqjW!za?dVv4{O;9D`uNdC zr41;^grX5ZwCu>r)N(FYdeBZuw!v-IEi`UU{DV;!d^9zbj)oIN%ej}+X!J-O8X|H8xbsMAC>;$ai28Fcr_tymPH2e8k*sQ{bTph` z^qPA)jYc0iLqkN4$n{Gr9StWKh38&Qqv5Lw5jnG{ex-CYoM1LF_i`GIK9h-dh#1-z zBrfmw%4)52G@MxWavBX=O>CTC7FKtyY&49BSzmcMEgOv%8OHYwyewvu6@6r*VMNSc z%gbrmXxM6E<7N5GTQ(X-#HyiUt<$p6@YMw85w-qcT~q51*=RVSoIJrOS|y=jtBE-O zs1<~J$wtG7IRD6U^K7DMw5xs7)r4x5rwg_IVC9uI8ovHePHJS!TMV{eVO&AR`a?vX zf7JSe6=d3I^fhM?%E|MOs)eF zwf;~#8cr;Gkp-);RL%Jb1$dSXrsaSy;l*rb5rXNrK8~lyESt! zr_pGm0bj<8-%3R8K-Ky~>1a5?uG8GhX*8I>F^|I*kvnNsL#3nP1iNQ*FQ+NDjRxcQ zmPF)^VExicN5ctr0q0&$qv5Lw5xKKj{YvR*IKgh_+{Fh6GZ*Fm(ytU5hpZ6 z8cr~qn0q;m zMxV(D0_RJe^g0Rf?3hr%V{+Fj0}x9|0sf4SlzXZ`o)V5$7KjYrQ72(eTv-XAt%L73-RM z{z^6)PADhOKZ;gKXxM6E15r;c}Y`(-I}?V(`dBOU~>MEMBjnx&tG{-QzCYqW?oLC(ME&G`A0t2l{;xw zLoaDcuzNQ5avF^`8cfbVsvYd_)i3QOO^Ic%+)u1ueY%&p(`f9Tf7HG0wCo)sc7#iV{p6x$Q>(tSO=Q@x zvt2RDy=0?dM4W$AlyO=%8n&8<^N)&T?j;)yBjWs{Vif!PMaxEmbu%-j25&fNs7UQz zve7Ui&Oa*FIxQOw*8j|yped_P_1#N0UQQ?{&p(P*Noe?Lg5RW`PH->TXgHyqJpU+K zC85!;;1$qZ+j`2vy=3F%gmUuyqiB_chM#88N9zeH_mYi<6Uxc+kD^r)8vPz*eigmF zytwb`37C@;%U*e(FF$`JA|p;c$)j{?fU2wv_nKj&UzwA>1a4Xw48f6 zjYf~{p&=qifO@h@>1a4X)Sr7fjYc1%LPJE3WK~0@qu~Uj*WAl#H2PQ@8X|H;u3uW| zXgI+rJoj=M4PQ-&$eBg;E2X311ha{`m(ytUnM|}pM4n*O^H)ko!wF_Zb1$dSu+>DI ze-yzitnOObXc!T*zVdQC*=V%LFggE7BImmmeVAFMjfN3%{!w0D6WM6kY9h`*sw|&* z%SOY9IRB_v>ot*$M(YFn`TzDSUU&WWo5$Ae@6{Y#W8ZSer>`7_<7OXi8lBi+?Rq(# z_VFO{{oO|HIq~@SZ@jX+uuG4U>)&S2y`07_8gIQ< Date: Tue, 11 Apr 2017 15:39:12 -0500 Subject: [PATCH 234/816] Add files via upload Adding makeR printers profile configuration files --- resources/definitions/makeR_pegasus.def.json | 66 +++++++++++++++++++ .../makeR_prusa_tairona_i3.def.json | 66 +++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 resources/definitions/makeR_pegasus.def.json create mode 100644 resources/definitions/makeR_prusa_tairona_i3.def.json diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json new file mode 100644 index 0000000000..c676623516 --- /dev/null +++ b/resources/definitions/makeR_pegasus.def.json @@ -0,0 +1,66 @@ +{ + "id": "makeR_pegasus", + "version": 2, + "name": "makeR Pegasus", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "makeR", + "manufacturer": "makeR", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "makeR_pegasus_platform.stl" + }, + + "overrides": { + "machine_name": { "default_value": " makeR Pegasus" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 400 + }, + "machine_height": { + "default_value": 400 + }, + "machine_depth": { + "default_value": 400 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 2.85 + }, + "machine_nozzle_heat_up_speed": { + "default_value": 2 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 2 + }, + "machine_head_polygon": { + "default_value": [ + [-75, -18], + [-75, 35], + [18, 35], + [18, -18] + ] + }, + "gantry_height": { + "default_value": 55 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" + }, + "machine_end_gcode": { + "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" + } + } +} \ No newline at end of file diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json new file mode 100644 index 0000000000..a205c8368d --- /dev/null +++ b/resources/definitions/makeR_prusa_tairona_i3.def.json @@ -0,0 +1,66 @@ +{ + "id": "makeR_prusa_tairona_i3", + "version": 3, + "name": "makeR Prusa Tairona i3", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "makeR", + "manufacturer": "makeR", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "makeR_prusa_tairona_i3_platform.stl" + }, + + "overrides": { + "machine_name": { "default_value": "makeR Prusa Tairona I3" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 200 + }, + "machine_height": { + "default_value": 200 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_heat_up_speed": { + "default_value": 2 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 2 + }, + "machine_head_polygon": { + "default_value": [ + [-75, -18], + [-75, 35], + [18, 35], + [18, -18] + ] + }, + "gantry_height": { + "default_value": 55 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" + }, + "machine_end_gcode": { + "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" + } + } +} \ No newline at end of file From f4e121200533be54101cf78dadb5e1bd8c3ed0e8 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Apr 2017 08:43:46 +0200 Subject: [PATCH 235/816] Use screen pixel ratio for OpenFilesIncludingProjectsDialog CURA-3642 --- .../qml/OpenFilesIncludingProjectsDialog.qml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/resources/qml/OpenFilesIncludingProjectsDialog.qml b/resources/qml/OpenFilesIncludingProjectsDialog.qml index 46d0d5c8f2..7aec068553 100644 --- a/resources/qml/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/OpenFilesIncludingProjectsDialog.qml @@ -6,6 +6,7 @@ import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.1 +import QtQuick.Window 2.1 import UM 1.3 as UM import Cura 1.0 as Cura @@ -16,8 +17,8 @@ UM.Dialog id: base title: catalog.i18nc("@title:window", "Open file(s)") - width: 420 - height: 170 + width: 420 * Screen.devicePixelRatio + height: 170 * Screen.devicePixelRatio maximumHeight: height maximumWidth: width @@ -51,15 +52,18 @@ UM.Dialog Column { anchors.fill: parent - anchors.margins: UM.Theme.getSize("default_margin").width + anchors.leftMargin: 20 * Screen.devicePixelRatio + anchors.rightMargin: 20 * Screen.devicePixelRatio + anchors.bottomMargin: 20 * Screen.devicePixelRatio anchors.left: parent.left anchors.right: parent.right - spacing: UM.Theme.getSize("default_margin").width + spacing: 10 * Screen.devicePixelRatio Text { - text: catalog.i18nc("@text:window", "We have found one or more project file(s) within the files you\nhave selected. You can open only one project file at a time. We\nsuggest to only import models from those files. Would you like\nto proceed?") - anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@text:window", "We have found one or more project file(s) within the files you have selected. You can open only one project file at a time. We suggest to only import models from those files. Would you like to proceed?") + anchors.left: parent.left + anchors.right: parent.right font: UM.Theme.getFont("default") wrapMode: Text.WordWrap } @@ -75,14 +79,13 @@ UM.Dialog { anchors.right: parent.right anchors.left: parent.left - height: childrenRect.height + height: childrenRect.height * Screen.devicePixelRatio Button { id: cancelButton text: catalog.i18nc("@action:button", "Cancel"); anchors.right: importAllAsModelsButton.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width onClicked: { // cancel From 5945212e4b262f339e3c9aeb6364951d2865867c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Apr 2017 08:55:15 +0200 Subject: [PATCH 236/816] Remove pixel ratio for childrenRect in OpenFilesIncludingProjectsDialog CURA-3642 --- resources/qml/OpenFilesIncludingProjectsDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/OpenFilesIncludingProjectsDialog.qml b/resources/qml/OpenFilesIncludingProjectsDialog.qml index 7aec068553..38160522e3 100644 --- a/resources/qml/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/OpenFilesIncludingProjectsDialog.qml @@ -79,7 +79,7 @@ UM.Dialog { anchors.right: parent.right anchors.left: parent.left - height: childrenRect.height * Screen.devicePixelRatio + height: childrenRect.height Button { From 4bb217592f6e4562261b5133d62e2f2da7d3a86b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 13:03:42 +0200 Subject: [PATCH 237/816] Refactor deserialise tests These are now essentially testing the same code as the similar tests for the global stack. This is ugly but without looking at the implementation this is correct. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 85 +++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 17 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 2e40217ac5..95f6a7a310 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -181,26 +181,77 @@ def test_constrainVariantInvalid(container, extruder_stack): def test_constrainDefinitionValid(container, extruder_stack): extruder_stack.definition = container #Should not give an error. -## Tests whether definitions are being read properly from an extruder stack. -@pytest.mark.parametrize("filename, definition_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyDefinition.extruder.cfg", "empty"), - ("Complete.extruder.cfg", "some_definition") -]) -def test_deserializeDefinition(filename, definition_id, container_registry, extruder_stack): - serialized = readStack(filename) +## Tests whether deserialising completes the missing containers with empty +# ones. +@pytest.mark.skip #The test currently fails because the definition container doesn't have a category, which is wrong but we don't have time to refactor that right now. +def test_deserializeCompletesEmptyContainers(extruder_stack: cura.Settings.ExtruderStack): + extruder_stack._containers = [DefinitionContainer(container_id = "definition")] #Set the internal state of this stack manually. - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + extruder_stack.deserialize("") - extruder_stack.deserialize(serialized) - assert extruder_stack.definition.getId() == definition_id + assert len(extruder_stack.getContainers()) == len(cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap) #Needs a slot for every type. + for container_type_index in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap: + if container_type_index == cura.Settings.CuraContainerStack._ContainerIndexes.Definition: #We're not checking the definition. + continue + assert extruder_stack.getContainer(container_type_index).getId() == "empty" #All others need to be empty. - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry +## Tests whether an instance container with the wrong type gets removed when +# deserialising. +def test_deserializeRemovesWrongInstanceContainer(extruder_stack): + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "wrong type") + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + extruder_stack.deserialize("") + + assert extruder_stack.quality == extruder_stack._empty_instance_container #Replaced with empty. + +## Tests whether a container with the wrong class gets removed when +# deserialising. +def test_deserializeRemovesWrongContainerClass(extruder_stack): + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = DefinitionContainer(container_id = "wrong class") + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + extruder_stack.deserialize("") + + assert extruder_stack.quality == extruder_stack._empty_instance_container #Replaced with empty. + +## Tests whether an instance container in the definition spot results in an +# error. +def test_deserializeWrongDefinitionClass(extruder_stack): + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = getInstanceContainer(container_type = "definition") #Correct type but wrong class. + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + with pytest.raises(UM.Settings.ContainerStack.InvalidContainerStackError): #Must raise an error that there is no definition container. + extruder_stack.deserialize("") + +## Tests whether an instance container with the wrong type is moved into the +# correct slot by deserialising. +def test_deserializeMoveInstanceContainer(extruder_stack): + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "material") #Not in the correct spot. + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = DefinitionContainer(container_id = "some definition") + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + extruder_stack.deserialize("") + + assert extruder_stack.quality.getId() == "empty" + assert extruder_stack.material.getId() != "empty" + +## Tests whether a definition container in the wrong spot is moved into the +# correct spot by deserialising. +@pytest.mark.skip #The test currently fails because the definition container doesn't have a category, which is wrong but we don't have time to refactor that right now. +def test_deserializeMoveDefinitionContainer(extruder_stack): + extruder_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Material] = DefinitionContainer(container_id = "some definition") #Not in the correct spot. + + with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize. + extruder_stack.deserialize("") + + assert extruder_stack.material.getId() == "empty" + assert extruder_stack.definition.getId() != "empty" + + UM.Settings.ContainerStack._containerRegistry = None ## Tests whether materials are being read properly from an extruder stack. @pytest.mark.parametrize("filename, material_id", [ From b97ef584369169f8aa819a4c5cdaa972655fbf1a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 13:25:12 +0200 Subject: [PATCH 238/816] Remove redundant deserialize tests They test Uranium code, not this module. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 120 ---------------------------- 1 file changed, 120 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 95f6a7a310..f41a6da0e2 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -253,126 +253,6 @@ def test_deserializeMoveDefinitionContainer(extruder_stack): UM.Settings.ContainerStack._containerRegistry = None -## Tests whether materials are being read properly from an extruder stack. -@pytest.mark.parametrize("filename, material_id", [ - ("Left.extruder.cfg", "some_instance"), - ("ExtruderLegacy.stack.cfg", "some_instance"), - ("OnlyMaterial.extruder.cfg", "some_instance"), - ("OnlyDefinition.extruder.cfg", "empty"), - ("Complete.extruder.cfg", "some_material") -]) -def test_deserializeMaterial(filename, material_id, container_registry, extruder_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - extruder_stack.deserialize(serialized) - assert extruder_stack.material.getId() == material_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests that when an extruder is loaded with an unknown instance, it raises an -# exception. -def test_deserializeMissingContainer(extruder_stack): - serialized = readStack("Left.extruder.cfg") - with pytest.raises(Exception): - extruder_stack.deserialize(serialized) - try: - extruder_stack.deserialize(serialized) - except Exception as e: - #Must be exactly Exception, not one of its subclasses, since that is what gets raised when a stack has an unknown container. - #That's why we can't use pytest.raises. - assert type(e) == Exception - -## Tests whether qualities are being read properly from an extruder stack. -@pytest.mark.parametrize("filename, quality_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyQuality.extruder.cfg", "some_instance"), - ("Complete.extruder.cfg", "some_quality") -]) -def test_deserializeQuality(filename, quality_id, container_registry, extruder_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - extruder_stack.deserialize(serialized) - assert extruder_stack.quality.getId() == quality_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether quality changes are being read properly from an extruder -# stack. -@pytest.mark.parametrize("filename, quality_changes_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyQualityChanges.extruder.cfg", "some_instance"), - ("Complete.extruder.cfg", "some_quality_changes") -]) -def test_deserializeQualityChanges(filename, quality_changes_id, container_registry, extruder_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - extruder_stack.deserialize(serialized) - assert extruder_stack.qualityChanges.getId() == quality_changes_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether user changes are being read properly from an extruder stack. -@pytest.mark.parametrize("filename, user_changes_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyUser.extruder.cfg", "some_instance"), - ("Complete.extruder.cfg", "some_user_changes") -]) -def test_deserializeUserChanges(filename, user_changes_id, container_registry, extruder_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - extruder_stack.deserialize(serialized) - assert extruder_stack.userChanges.getId() == user_changes_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - -## Tests whether variants are being read properly from an extruder stack. -@pytest.mark.parametrize("filename, variant_id", [ - ("Left.extruder.cfg", "empty"), - ("ExtruderLegacy.stack.cfg", "empty"), - ("OnlyVariant.extruder.cfg", "some_instance"), - ("Complete.extruder.cfg", "some_variant") -]) -def test_deserializeVariant(filename, variant_id, container_registry, extruder_stack): - serialized = readStack(filename) - - #Mock the loading of the instance containers. - extruder_stack.findContainer = findSomeContainers - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all profiles you ask of. - - extruder_stack.deserialize(serialized) - assert extruder_stack.variant.getId() == variant_id - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry - ## Tests whether getProperty properly applies the stack-like behaviour on its # containers. def test_getPropertyFallThrough(extruder_stack): From 8dc073f5c8febdf6ce2f623ecc3e8d9588583b89 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 13:34:26 +0200 Subject: [PATCH 239/816] Add container types to fallthrough tests This checks exactly the same code as the global stack. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 59 ++++++++++++++++------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index f41a6da0e2..4283cd928c 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -257,34 +257,41 @@ def test_deserializeMoveDefinitionContainer(extruder_stack): # containers. def test_getPropertyFallThrough(extruder_stack): #A few instance container mocks to put in the stack. - layer_height_5 = unittest.mock.MagicMock() #Sets layer height to 5. - layer_height_5.getProperty = lambda key, property: 5 if (key == "layer_height" and property == "value") else None - layer_height_5.hasProperty = lambda key: key == "layer_height" - layer_height_10 = unittest.mock.MagicMock() #Sets layer height to 10. - layer_height_10.getProperty = lambda key, property: 10 if (key == "layer_height" and property == "value") else None - layer_height_10.hasProperty = lambda key: key == "layer_height" - no_layer_height = unittest.mock.MagicMock() #No settings at all. - no_layer_height.getProperty = lambda key, property: None - no_layer_height.hasProperty = lambda key: False + mock_layer_heights = {} #For each container type, a mock container that defines layer height to something unique. + mock_no_settings = {} #For each container type, a mock container that has no settings at all. + container_indices = cura.Settings.CuraContainerStack._ContainerIndexes #Cache. + for type_id, type_name in container_indices.IndexTypeMap.items(): + container = unittest.mock.MagicMock() + container.getProperty = lambda key, property, type_id = type_id: type_id if (key == "layer_height" and property == "value") else None #Returns the container type ID as layer height, in order to identify it. + container.hasProperty = lambda key, property: key == "layer_height" + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) + mock_layer_heights[type_id] = container - extruder_stack.userChanges = no_layer_height - extruder_stack.qualityChanges = no_layer_height - extruder_stack.quality = no_layer_height - extruder_stack.material = no_layer_height - extruder_stack.variant = no_layer_height - extruder_stack.definition = layer_height_5 #Here it is! + container = unittest.mock.MagicMock() + container.getProperty = unittest.mock.MagicMock(return_value = None) #Has no settings at all. + container.hasProperty = unittest.mock.MagicMock(return_value = False) + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = type_name) + mock_no_settings[type_id] = container - assert extruder_stack.getProperty("layer_height", "value") == 5 - extruder_stack.variant = layer_height_10 - assert extruder_stack.getProperty("layer_height", "value") == 10 - extruder_stack.material = layer_height_5 - assert extruder_stack.getProperty("layer_height", "value") == 5 - extruder_stack.quality = layer_height_10 - assert extruder_stack.getProperty("layer_height", "value") == 10 - extruder_stack.qualityChanges = layer_height_5 - assert extruder_stack.getProperty("layer_height", "value") == 5 - extruder_stack.userChanges = layer_height_10 - assert extruder_stack.getProperty("layer_height", "value") == 10 + extruder_stack.userChanges = mock_no_settings[container_indices.UserChanges] + extruder_stack.qualityChanges = mock_no_settings[container_indices.QualityChanges] + extruder_stack.quality = mock_no_settings[container_indices.Quality] + extruder_stack.material = mock_no_settings[container_indices.Material] + extruder_stack.variant = mock_no_settings[container_indices.Variant] + with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. + extruder_stack.definition = mock_layer_heights[container_indices.Definition] #There's a layer height in here! + + assert extruder_stack.getProperty("layer_height", "value") == container_indices.Definition + extruder_stack.variant = mock_layer_heights[container_indices.Variant] + assert extruder_stack.getProperty("layer_height", "value") == container_indices.Variant + extruder_stack.material = mock_layer_heights[container_indices.Material] + assert extruder_stack.getProperty("layer_height", "value") == container_indices.Material + extruder_stack.quality = mock_layer_heights[container_indices.Quality] + assert extruder_stack.getProperty("layer_height", "value") == container_indices.Quality + extruder_stack.qualityChanges = mock_layer_heights[container_indices.QualityChanges] + assert extruder_stack.getProperty("layer_height", "value") == container_indices.QualityChanges + extruder_stack.userChanges = mock_layer_heights[container_indices.UserChanges] + assert extruder_stack.getProperty("layer_height", "value") == container_indices.UserChanges ## Tests whether inserting a container is properly forbidden. def test_insertContainer(extruder_stack): From c3ad7d114a571d3c6bd79b538720249545d39ff7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:20:04 +0200 Subject: [PATCH 240/816] Set return value of registry.findContainers in the test This way we need to mock way less. It's the min-cut. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 432d66a676..ecff2bb6a2 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -52,23 +52,8 @@ class MockContainer: @pytest.yield_fixture() def container_registry(): registry = unittest.mock.MagicMock() - - registry.typeMetaData = "registry_mock" - - def findInstanceContainers(registry, **kwargs): - container_id = kwargs.get("id", "test_container") - return [MockContainer(container_id, registry.typeMetaData)] - registry.findInstanceContainers = functools.partial(findInstanceContainers, registry) - - def findContainers(registry, container_type = None, id = None): - if not id: - id = "test_container" - return [MockContainer(id, registry.typeMetaData)] - registry.findContainers = functools.partial(findContainers, registry) - - def getEmptyInstanceContainer(): - return MockContainer(container_id = "empty") - registry.getEmptyInstanceContainer = getEmptyInstanceContainer + registry.return_value = unittest.mock.NonCallableMagicMock() + registry.findInstanceContainers = lambda *args, registry = registry, **kwargs: [registry.return_value] UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry UM.Settings.ContainerStack._containerRegistry = registry @@ -518,8 +503,8 @@ def test_setDefinitionByIdDoesntExist(global_stack): ## Tests setting definition changes by specifying an ID of a container that # exists. def test_setDefinitionChangesByIdExists(global_stack, container_registry): - container_registry.typeMetaData = "definition_changes" - global_stack.setDefinitionChangesById("some_definition_changes") #The container registry always has a container with the ID. + container_registry.return_value = getInstanceContainer(container_type = "definition_changes") + global_stack.setDefinitionChangesById("InstanceContainer") ## Tests setting definition changes by specifying an ID of a container that # doesn't exist. From 4f83ae3fa7b9db84b995b5f94469ca8471e64baf Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:36:22 +0200 Subject: [PATCH 241/816] Remove unused import It was removed when we removed some of the mocking code earlier. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index ecff2bb6a2..9b82426a2f 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -4,7 +4,6 @@ import os.path #To find the test files. import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. -import functools import cura.Settings.GlobalStack #The module we're testing. import cura.Settings.CuraContainerStack #To get the list of container types. From 6ba79881dfc627dc5dd2b24842f52c1abdd7b402 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:38:06 +0200 Subject: [PATCH 242/816] Use new container registry functionality for test_setDefinitionByIdExists We can just set the return value of the registry to whatever we like and we'll verify that we got that from the registry and it was put on the stack. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 9b82426a2f..c3b1880397 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -53,6 +53,7 @@ def container_registry(): registry = unittest.mock.MagicMock() registry.return_value = unittest.mock.NonCallableMagicMock() registry.findInstanceContainers = lambda *args, registry = registry, **kwargs: [registry.return_value] + registry.findDefinitionContainers = lambda *args, registry = registry, **kwargs: [registry.return_value] UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry UM.Settings.ContainerStack._containerRegistry = registry @@ -490,8 +491,8 @@ def test_removeContainer(global_stack): ## Tests setting definitions by specifying an ID of a definition that exists. def test_setDefinitionByIdExists(global_stack, container_registry): - with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against type checking the DefinitionContainer. - global_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. + container_registry.return_value = DefinitionContainer(container_id = "some_definition") + global_stack.setDefinitionById("some_definition") ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. From 546cacec37f73c64d3b9b545c7f1e1c2056ca1ca Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:41:00 +0200 Subject: [PATCH 243/816] Verify that we set the correct container after set...ByID Makes sense. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index c3b1880397..3354879f74 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -493,6 +493,7 @@ def test_removeContainer(global_stack): def test_setDefinitionByIdExists(global_stack, container_registry): container_registry.return_value = DefinitionContainer(container_id = "some_definition") global_stack.setDefinitionById("some_definition") + assert global_stack.definition.getId() == "some_definition" ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. @@ -505,6 +506,7 @@ def test_setDefinitionByIdDoesntExist(global_stack): def test_setDefinitionChangesByIdExists(global_stack, container_registry): container_registry.return_value = getInstanceContainer(container_type = "definition_changes") global_stack.setDefinitionChangesById("InstanceContainer") + assert global_stack.definitionChanges.getId() == "InstanceContainer" ## Tests setting definition changes by specifying an ID of a container that # doesn't exist. From d652e4564e2359dbd0341a436af904c4f2d5775d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:43:58 +0200 Subject: [PATCH 244/816] Fix test_setMaterialByIdExists It now also uses the return_value construct. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 3354879f74..4cd0917345 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -516,8 +516,9 @@ def test_setDefinitionChangesByIdDoesntExist(global_stack): ## Tests setting materials by specifying an ID of a material that exists. def test_setMaterialByIdExists(global_stack, container_registry): - container_registry.typeMetaData = "material" - global_stack.setMaterialById("some_material") #The container registry always has a container with the ID. + container_registry.return_value = getInstanceContainer(container_type = "material") + global_stack.setMaterialById("InstanceContainer") + assert global_stack.material.getId() == "InstanceContainer" ## Tests setting materials by specifying an ID of a material that doesn't # exist. From c5cce1078669a526685e265f1ee720f6d95f83e0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:46:00 +0200 Subject: [PATCH 245/816] Fix test_setQualityByIdExists It now also uses the return_value construct. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 4cd0917345..24ea3eee3e 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -573,8 +573,9 @@ def test_setPropertyOtherContainers(target_container, writable_global_stack): ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(global_stack, container_registry): - container_registry.typeMetaData = "quality" - global_stack.setQualityById("some_quality") #The container registry always has a container with the ID. + container_registry.return_value = getInstanceContainer(container_type = "quality") + global_stack.setQualityById("InstanceContainer") + global_stack.quality.getId() == "InstanceContainer" ## Tests setting qualities by specifying an ID of a quality that doesn't exist. def test_setQualityByIdDoesntExist(global_stack): From 73bd47a0a1841196e8e2a9126a0ddd8f7b2ea056 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:46:53 +0200 Subject: [PATCH 246/816] Actually assert that the ID is correct Oops. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 24ea3eee3e..135e9ce392 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -575,7 +575,7 @@ def test_setPropertyOtherContainers(target_container, writable_global_stack): def test_setQualityByIdExists(global_stack, container_registry): container_registry.return_value = getInstanceContainer(container_type = "quality") global_stack.setQualityById("InstanceContainer") - global_stack.quality.getId() == "InstanceContainer" + assert global_stack.quality.getId() == "InstanceContainer" ## Tests setting qualities by specifying an ID of a quality that doesn't exist. def test_setQualityByIdDoesntExist(global_stack): From f08053283e8dab315b19f15505854e946b2618ee Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:48:16 +0200 Subject: [PATCH 247/816] Fix test_setQualityChangesByIdExists It now also uses the return_value construct. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 135e9ce392..04c28b5075 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -585,8 +585,9 @@ def test_setQualityByIdDoesntExist(global_stack): ## Tests setting quality changes by specifying an ID of a quality change that # exists. def test_setQualityChangesByIdExists(global_stack, container_registry): - container_registry.typeMetaData = "quality_changes" - global_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. + container_registry.return_value = getInstanceContainer(container_type = "quality_changes") + global_stack.setQualityChangesById("InstanceContainer") + assert global_stack.qualityChanges.getId() == "InstanceContainer" ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. From e0c8a52eeca47e7bb954165940f16563a1adb1a5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 16:49:30 +0200 Subject: [PATCH 248/816] Fix test_setVariantByIdExists It now also uses the return_value construct. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 04c28b5075..bb9172cc39 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -597,8 +597,9 @@ def test_setQualityChangesByIdDoesntExist(global_stack): ## Tests setting variants by specifying an ID of a variant that exists. def test_setVariantByIdExists(global_stack, container_registry): - container_registry.typeMetaData = "variant" - global_stack.setVariantById("some_variant") #The container registry always has a container with the ID. + container_registry.return_value = getInstanceContainer(container_type = "variant") + global_stack.setVariantById("InstanceContainer") + assert global_stack.variant.getId() == "InstanceContainer" ## Tests setting variants by specifying an ID of a variant that doesn't exist. def test_setVariantByIdDoesntExist(global_stack): From bbddc2308eb067b6af93c7116379f5b397dcd8d7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 17:12:43 +0200 Subject: [PATCH 249/816] Don't use MockContainer in hasUserChanges tests This makes the testing code much simpler. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index bb9172cc39..00b85a38c9 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -452,31 +452,25 @@ def test_getPropertyInstancesBeforeResolve(global_stack): ## Tests whether the hasUserValue returns true for settings that are changed in # the user-changes container. def test_hasUserValueUserChanges(global_stack): - user_changes = MockContainer("test_user_changes", "user") + container = unittest.mock.MagicMock() + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user") + container.hasProperty = lambda key, property: key == "layer_height" #Only have the layer_height property set. + global_stack.userChanges = container - def hasProperty(key, property): - return key == "layer_height" and property == "value" # Only have the layer_height property set. - user_changes.hasProperty = hasProperty - - global_stack.userChanges = user_changes - - assert not global_stack.hasUserValue("infill_sparse_density") assert global_stack.hasUserValue("layer_height") + 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): - quality_changes = MockContainer("test_quality_changes", "quality_changes") + container = unittest.mock.MagicMock() + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = "quality_changes") + container.hasProperty = lambda key, property: key == "layer_height" #Only have the layer_height property set. + global_stack.qualityChanges = container - def hasProperty(key, property): - return key == "layer_height" and property == "value" # Only have the layer_height property set. - quality_changes.hasProperty = hasProperty - - global_stack.qualityChanges = quality_changes - - assert not global_stack.hasUserValue("infill_sparse_density") assert global_stack.hasUserValue("layer_height") + assert not global_stack.hasUserValue("infill_sparse_density") assert not global_stack.hasUserValue("") ## Tests whether inserting a container is properly forbidden. From 2c9e115488a1b3ae6cc5658dd09612c22dc2c0ed Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 17:16:12 +0200 Subject: [PATCH 250/816] Add test for hasUserValue returning false When a value is not in user changes or in quality changes, it is no longer a user value so it shouldn't get marked as one. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 00b85a38c9..bac69cee9f 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -473,6 +473,16 @@ 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() + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = "quality") + container.hasProperty = lambda key, property: key == "layer_height" #Only have the layer_height property set. + global_stack.quality = container + + 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): From 52d6c074f5ebe2354347d5f77a969a0f4bfa9308 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 11 Apr 2017 17:18:14 +0200 Subject: [PATCH 251/816] Align parameters of test_setPropertyUser For readability. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index bac69cee9f..2db27e68b6 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -537,9 +537,9 @@ def test_setNextStack(global_stack): ## Tests setting properties directly on the global stack. @pytest.mark.parametrize("key, property, value, output_value", [ - ("layer_height", "value", 0.1337, 0.1337), - ("foo", "value", 100, 100), - ("support_enabled", "value", True, True), + ("layer_height", "value", 0.1337, 0.1337), + ("foo", "value", 100, 100), + ("support_enabled", "value", True, True), ("layer_height", "default_value", 0.1337, 0.1337), ("layer_height", "is_bright_pink", "of course", "of course") ]) From 7f1930d452609c090cc893968e8a25f39c9a4c6a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:15:42 +0200 Subject: [PATCH 252/816] Rewrite test_setPropertyUser It now only checks if setProperty is being called on the user changes instance, not what the result of that should be. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 2db27e68b6..6dc395a598 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -543,9 +543,13 @@ def test_setNextStack(global_stack): ("layer_height", "default_value", 0.1337, 0.1337), ("layer_height", "is_bright_pink", "of course", "of course") ]) -def test_setPropertyUser(key, property, value, output_value, writable_global_stack): - writable_global_stack.setProperty(key, property, value) - assert writable_global_stack.userChanges.getProperty(key, property) == output_value +def test_setPropertyUser(key, property, value, output_value, global_stack): + user_changes = unittest.mock.MagicMock() + user_changes.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user") + global_stack.userChanges = user_changes + + global_stack.setProperty(key, property, value) + global_stack.userChanges.setProperty.assert_called_once_with(key, property, value) ## Tests setting properties on specific containers on the global stack. @pytest.mark.parametrize("target_container", [ From 2161cf9f52c3a30e87d809647435801646bf4099 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:17:23 +0200 Subject: [PATCH 253/816] Remove superfluous output_value parameter It's not used any more since we don't test the actual instance container any more. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 6dc395a598..48197d5c3d 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -536,14 +536,14 @@ def test_setNextStack(global_stack): global_stack.setNextStack(unittest.mock.MagicMock()) ## Tests setting properties directly on the global stack. -@pytest.mark.parametrize("key, property, value, output_value", [ - ("layer_height", "value", 0.1337, 0.1337), - ("foo", "value", 100, 100), - ("support_enabled", "value", True, True), - ("layer_height", "default_value", 0.1337, 0.1337), - ("layer_height", "is_bright_pink", "of course", "of course") +@pytest.mark.parametrize("key, property, value", [ + ("layer_height", "value", 0.1337), + ("foo", "value", 100), + ("support_enabled", "value", True), + ("layer_height", "default_value", 0.1337), + ("layer_height", "is_bright_pink", "of course") ]) -def test_setPropertyUser(key, property, value, output_value, global_stack): +def test_setPropertyUser(key, property, value, global_stack): user_changes = unittest.mock.MagicMock() user_changes.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user") global_stack.userChanges = user_changes From 09ab895febb604c580ca4fbc04082fe3fd93c3e9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:31:56 +0200 Subject: [PATCH 254/816] Only test whether setProperty calls setProperty on proper container It sets up a mock container and records whether setProperty is called on that container. Whether that actually sets the property correctly is up to the instance container. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 40 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 48197d5c3d..364b1513f3 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -548,36 +548,32 @@ 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) - global_stack.userChanges.setProperty.assert_called_once_with(key, property, value) + global_stack.setProperty(key, property, value) #The actual test. + + global_stack.userChanges.setProperty.assert_called_once_with(key, property, value) #Make sure that the user container gets a setProperty call. ## Tests setting properties on specific containers on the global stack. -@pytest.mark.parametrize("target_container", [ - "user", - "quality_changes", - "quality", - "material", - "variant", - "definition_changes", +@pytest.mark.parametrize("target_container, stack_variable", [ + ("user", "userChanges"), + ("quality_changes", "qualityChanges"), + ("quality", "quality"), + ("material", "material"), + ("variant", "variant"), + ("definition_changes", "definitionChanges") ]) -def test_setPropertyOtherContainers(target_container, writable_global_stack): +def test_setPropertyOtherContainers(target_container, stack_variable, global_stack): #Other parameters that don't need to be varied. key = "layer_height" property = "value" value = 0.1337 - output_value = 0.1337 + #A mock container in the right spot. + container = unittest.mock.MagicMock() + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = target_container) + setattr(global_stack, stack_variable, container) #For instance, set global_stack.qualityChanges = container. - writable_global_stack.setProperty(key, property, value, target_container = target_container) - containers = { - "user": writable_global_stack.userChanges, - "quality_changes": writable_global_stack.qualityChanges, - "quality": writable_global_stack.quality, - "material": writable_global_stack.material, - "variant": writable_global_stack.variant, - "definition_changes": writable_global_stack.definitionChanges, - "definition": writable_global_stack.definition - } - assert containers[target_container].getProperty(key, property) == output_value + global_stack.setProperty(key, property, value, target_container = target_container) #The actual test. + + getattr(global_stack, stack_variable).setProperty.assert_called_once_with(key, property, value) #Make sure that the proper container gets a setProperty call. ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(global_stack, container_registry): From 479176bc6f38c97c7e1c65a5988098a58a0c4050 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:35:13 +0200 Subject: [PATCH 255/816] Remove superfluous mocking and fixtures There, that's better. Contributes to issue CURA-3497. --- tests/Settings/TestGlobalStack.py | 65 ------------------------------- 1 file changed, 65 deletions(-) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index 364b1513f3..c8f4d5dfaf 100644 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -1,7 +1,6 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -import os.path #To find the test files. import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. @@ -14,39 +13,6 @@ from UM.Settings.SettingInstance import InstanceState import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack -class MockContainer: - def __init__(self, container_id, type = "mock"): - self._id = container_id - self._type = type - - self._property_map = {} - - def getId(self): - return self._id - - def getMetaDataEntry(self, entry, default = None): - if entry == "type": - return self._type - - return default - - def getProperty(self, key, property_name): - if key not in self._property_map: - return None - - if property_name not in self._property_map[key]: - return None - - return self._property_map[key][property_name] - - def setProperty(self, key, property_name, value): - if key not in self._property_map: - self._property_map[key] = {} - - self._property_map[key][property_name] = value - - propertyChanged = unittest.mock.MagicMock() - ## Fake container registry that always provides all containers you ask of. @pytest.yield_fixture() def container_registry(): @@ -68,37 +34,6 @@ def container_registry(): def global_stack() -> cura.Settings.GlobalStack.GlobalStack: return cura.Settings.GlobalStack.GlobalStack("TestStack") -@pytest.fixture() -def writable_global_stack(global_stack): - global_stack.userChanges = MockContainer("test_user_changes", "user") - global_stack.qualityChanges = MockContainer("test_quality_changes", "quality_changes") - global_stack.quality = MockContainer("test_quality", "quality") - global_stack.material = MockContainer("test_material", "material") - global_stack.variant = MockContainer("test_variant", "variant") - global_stack.definitionChanges = MockContainer("test_definition_changes", "definition_changes") - global_stack.definition = DefinitionContainerSubClass() - return global_stack - -## Place-in function for findContainer that finds only containers that start -# with "some_". -def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): - if container_id.startswith("some_"): - return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) - if container_type == DefinitionContainer: - definition_mock = unittest.mock.MagicMock() - definition_mock.getId = unittest.mock.MagicMock(return_value = "some_definition") #getId returns some_definition. - return definition_mock - -## Helper function to read the contents of a container stack in the test -# stack folder. -# -# \param filename The name of the file in the "stacks" folder to read from. -# \return The contents of that file. -def readStack(filename): - with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: - serialized = file_handle.read() - return serialized - ## Gets an instance container with a specified container type. # # \param container_type The type metadata for the instance container. From 361b58f49ca5bd4c116c00ef0284a2f94426df24 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:40:37 +0200 Subject: [PATCH 256/816] Let container_registry return a pre-set value for what containers it finds This makes a lot of tests more simple, without requiring elaborate mocks, patches and fixtures. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 41 ++++++++++++++++++----------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 4283cd928c..6360f2e313 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -13,16 +13,20 @@ import cura.Settings.ExtruderStack #The module we're testing. from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. ## Fake container registry that always provides all containers you ask of. -@pytest.fixture() +@pytest.yield_fixture() def container_registry(): registry = unittest.mock.MagicMock() - def findContainers(id = None): - if not id: - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer("test_container")] - else: - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] - registry.findContainers = findContainers - return registry + registry.return_value = unittest.mock.NonCallableMagicMock() + registry.findInstanceContainers = lambda *args, registry = registry, **kwargs: [registry.return_value] + registry.findDefinitionContainers = lambda *args, registry = registry, **kwargs: [registry.return_value] + + UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = registry + UM.Settings.ContainerStack._containerRegistry = registry + + yield registry + + UM.Settings.ContainerRegistry.ContainerRegistry._ContainerRegistry__instance = None + UM.Settings.ContainerStack._containerRegistry = None ## An empty extruder stack to test with. @pytest.fixture() @@ -305,21 +309,19 @@ def test_removeContainer(extruder_stack): ## Tests setting definitions by specifying an ID of a definition that exists. def test_setDefinitionByIdExists(extruder_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - extruder_stack.setDefinitionById("some_definition") #The container registry always has a container with the ID. - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry + container_registry.return_value = DefinitionContainer(container_id = "some_definition") + extruder_stack.setDefinitionById("some_definition") + assert extruder_stack.definition.getId() == "some_definition" ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. +@pytest.mark.skip def test_setDefinitionByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. ## Tests setting materials by specifying an ID of a material that exists. +@pytest.mark.skip def test_setMaterialByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -331,11 +333,13 @@ def test_setMaterialByIdExists(extruder_stack, container_registry): ## Tests setting materials by specifying an ID of a material that doesn't # exist. +@pytest.mark.skip def test_setMaterialByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setMaterialById("some_material") #Container registry is empty now. ## Tests setting properties directly on the extruder stack. +@pytest.mark.skip @pytest.mark.parametrize("key, property, value, output_value", [ ("layer_height", "value", "0.1337", 0.1337), ("foo", "value", "100", 100), @@ -348,6 +352,7 @@ def test_setPropertyUser(key, property, value, output_value, extruder_stack): assert extruder_stack.userChanges.getProperty(key, property) == output_value ## Tests setting properties on specific containers on the extruder stack. +@pytest.mark.skip @pytest.mark.parametrize("target_container", [ "user", "quality_changes", @@ -376,6 +381,7 @@ def test_setPropertyOtherContainers(target_container, extruder_stack): assert containers[target_container].getProperty(key, property) == output_value ## Tests setting qualities by specifying an ID of a quality that exists. +@pytest.mark.skip def test_setQualityByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -386,12 +392,14 @@ def test_setQualityByIdExists(extruder_stack, container_registry): UM.Settings.ContainerStack._containerRegistry = original_container_registry ## Tests setting qualities by specifying an ID of a quality that doesn't exist. +@pytest.mark.skip def test_setQualityByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setQualityById("some_quality") #Container registry is empty now. ## Tests setting quality changes by specifying an ID of a quality change that # exists. +@pytest.mark.skip def test_setQualityChangesByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -403,11 +411,13 @@ def test_setQualityChangesByIdExists(extruder_stack, container_registry): ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. +@pytest.mark.skip def test_setQualityChangesByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. ## Tests setting variants by specifying an ID of a variant that exists. +@pytest.mark.skip def test_setVariantByIdExists(extruder_stack, container_registry): original_container_registry = UM.Settings.ContainerStack._containerRegistry UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. @@ -418,6 +428,7 @@ def test_setVariantByIdExists(extruder_stack, container_registry): UM.Settings.ContainerStack._containerRegistry = original_container_registry ## Tests setting variants by specifying an ID of a variant that doesn't exist. +@pytest.mark.skip def test_setVariantByIdDoesntExist(extruder_stack): with pytest.raises(KeyError): extruder_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file From 27f053ad7b036c7dbf60908da119946d9924e7df Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:44:28 +0200 Subject: [PATCH 257/816] Let test_setMaterialByIdExists use new container registry functionality It sets the container it expects beforehand and tests for its ID. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 6360f2e313..db26e693a6 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -321,15 +321,10 @@ def test_setDefinitionByIdDoesntExist(extruder_stack): extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. ## Tests setting materials by specifying an ID of a material that exists. -@pytest.mark.skip def test_setMaterialByIdExists(extruder_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - extruder_stack.setMaterialById("some_material") #The container registry always has a container with the ID. - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry + container_registry.return_value = getInstanceContainer(container_type = "material") + extruder_stack.setMaterialById("InstanceContainer") + assert extruder_stack.material.getId() == "InstanceContainer" ## Tests setting materials by specifying an ID of a material that doesn't # exist. From 972e94386c9f927c35b3f64845f134a55b7cdd1d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:46:42 +0200 Subject: [PATCH 258/816] Let test_setQualityByIdExists use new container registry functionality It sets the container it expects beforehand and tests for its ID. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index db26e693a6..aed69f717a 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -376,15 +376,10 @@ def test_setPropertyOtherContainers(target_container, extruder_stack): assert containers[target_container].getProperty(key, property) == output_value ## Tests setting qualities by specifying an ID of a quality that exists. -@pytest.mark.skip def test_setQualityByIdExists(extruder_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - extruder_stack.setQualityById("some_quality") #The container registry always has a container with the ID. - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry + container_registry.return_value = getInstanceContainer(container_type = "quality") + extruder_stack.setQualityById("InstanceContainer") + assert extruder_stack.quality.getId() == "InstanceContainer" ## Tests setting qualities by specifying an ID of a quality that doesn't exist. @pytest.mark.skip From 4db7c6ae66f6841afc407d0a4431a28333292b8c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:47:44 +0200 Subject: [PATCH 259/816] Let test_setQualityChangesByIdExists use new container registry functionality It sets the container it expects beforehand and tests for its ID. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index aed69f717a..fff2283c93 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -389,15 +389,10 @@ def test_setQualityByIdDoesntExist(extruder_stack): ## Tests setting quality changes by specifying an ID of a quality change that # exists. -@pytest.mark.skip def test_setQualityChangesByIdExists(extruder_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - extruder_stack.setQualityChangesById("some_quality_changes") #The container registry always has a container with the ID. - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry + container_registry.return_value = getInstanceContainer(container_type = "quality_changes") + extruder_stack.setQualityChangesById("InstanceContainer") + assert extruder_stack.qualityChanges.getId() == "InstanceContainer" ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. From 0e82c84790eea7752a284cea6b5953d31c75fead Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:48:52 +0200 Subject: [PATCH 260/816] Let test_setVariantByIdExists use new container registry functionality It sets the container it expects beforehand and tests for its ID. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index fff2283c93..db3b1a6716 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -402,15 +402,10 @@ def test_setQualityChangesByIdDoesntExist(extruder_stack): extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. ## Tests setting variants by specifying an ID of a variant that exists. -@pytest.mark.skip def test_setVariantByIdExists(extruder_stack, container_registry): - original_container_registry = UM.Settings.ContainerStack._containerRegistry - UM.Settings.ContainerStack._containerRegistry = container_registry #Always has all the profiles you ask of. - - extruder_stack.setVariantById("some_variant") #The container registry always has a container with the ID. - - #Restore. - UM.Settings.ContainerStack._containerRegistry = original_container_registry + container_registry.return_value = getInstanceContainer(container_type = "variant") + extruder_stack.setVariantById("InstanceContainer") + assert extruder_stack.variant.getId() == "InstanceContainer" ## Tests setting variants by specifying an ID of a variant that doesn't exist. @pytest.mark.skip From 06797abafe58dbb7b84d3801429820c0041caa76 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:51:16 +0200 Subject: [PATCH 261/816] Change expected exception in test_set...ByIdDoesntExist It should raise an InvalidContainerError rather than a KeyError. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index db3b1a6716..8560a3e354 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -315,9 +315,8 @@ def test_setDefinitionByIdExists(extruder_stack, container_registry): ## Tests setting definitions by specifying an ID of a definition that doesn't # exist. -@pytest.mark.skip def test_setDefinitionByIdDoesntExist(extruder_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): extruder_stack.setDefinitionById("some_definition") #Container registry is empty now. ## Tests setting materials by specifying an ID of a material that exists. @@ -328,9 +327,8 @@ def test_setMaterialByIdExists(extruder_stack, container_registry): ## Tests setting materials by specifying an ID of a material that doesn't # exist. -@pytest.mark.skip def test_setMaterialByIdDoesntExist(extruder_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): extruder_stack.setMaterialById("some_material") #Container registry is empty now. ## Tests setting properties directly on the extruder stack. @@ -382,9 +380,8 @@ def test_setQualityByIdExists(extruder_stack, container_registry): assert extruder_stack.quality.getId() == "InstanceContainer" ## Tests setting qualities by specifying an ID of a quality that doesn't exist. -@pytest.mark.skip def test_setQualityByIdDoesntExist(extruder_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): extruder_stack.setQualityById("some_quality") #Container registry is empty now. ## Tests setting quality changes by specifying an ID of a quality change that @@ -396,9 +393,8 @@ def test_setQualityChangesByIdExists(extruder_stack, container_registry): ## Tests setting quality changes by specifying an ID of a quality change that # doesn't exist. -@pytest.mark.skip def test_setQualityChangesByIdDoesntExist(extruder_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): extruder_stack.setQualityChangesById("some_quality_changes") #Container registry is empty now. ## Tests setting variants by specifying an ID of a variant that exists. @@ -408,7 +404,6 @@ def test_setVariantByIdExists(extruder_stack, container_registry): assert extruder_stack.variant.getId() == "InstanceContainer" ## Tests setting variants by specifying an ID of a variant that doesn't exist. -@pytest.mark.skip def test_setVariantByIdDoesntExist(extruder_stack): - with pytest.raises(KeyError): + with pytest.raises(InvalidContainerError): extruder_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file From eaf180c150e968832ab5b130863f7581d3ecf95c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 09:59:05 +0200 Subject: [PATCH 262/816] Let setProperty tests test only whether setProperty on container is called This makes these tests more simple to mock and stuff and also removes all dependencies of these tests. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 65 ++++++++++++++--------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 8560a3e354..84d4a5d7c6 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -332,46 +332,43 @@ def test_setMaterialByIdDoesntExist(extruder_stack): extruder_stack.setMaterialById("some_material") #Container registry is empty now. ## Tests setting properties directly on the extruder stack. -@pytest.mark.skip -@pytest.mark.parametrize("key, property, value, output_value", [ - ("layer_height", "value", "0.1337", 0.1337), - ("foo", "value", "100", 100), - ("support_enabled", "value", "True", True), - ("layer_height", "default_value", 0.1337, 0.1337), - ("layer_height", "is_bright_pink", "of course", "of course") +@pytest.mark.parametrize("key, property, value", [ + ("layer_height", "value", 0.1337), + ("foo", "value", 100), + ("support_enabled", "value", True), + ("layer_height", "default_value", 0.1337), + ("layer_height", "is_bright_pink", "of course") ]) -def test_setPropertyUser(key, property, value, output_value, extruder_stack): - extruder_stack.setProperty(key, value, property) - assert extruder_stack.userChanges.getProperty(key, property) == output_value +def test_setPropertyUser(key, property, value, extruder_stack): + user_changes = unittest.mock.MagicMock() + user_changes.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user") + extruder_stack.userChanges = user_changes -## Tests setting properties on specific containers on the extruder stack. -@pytest.mark.skip -@pytest.mark.parametrize("target_container", [ - "user", - "quality_changes", - "quality", - "material", - "variant", - "definition" + extruder_stack.setProperty(key, property, value) #The actual test. + + extruder_stack.userChanges.setProperty.assert_called_once_with(key, property, value) #Make sure that the user container gets a setProperty call. + +## Tests setting properties on specific containers on the global stack. +@pytest.mark.parametrize("target_container, stack_variable", [ + ("user", "userChanges"), + ("quality_changes", "qualityChanges"), + ("quality", "quality"), + ("material", "material"), + ("variant", "variant") ]) -def test_setPropertyOtherContainers(target_container, extruder_stack): +def test_setPropertyOtherContainers(target_container, stack_variable, extruder_stack): #Other parameters that don't need to be varied. key = "layer_height" - property = "value", - value = "0.1337", - output_value = 0.1337 + property = "value" + value = 0.1337 + #A mock container in the right spot. + container = unittest.mock.MagicMock() + container.getMetaDataEntry = unittest.mock.MagicMock(return_value = target_container) + setattr(extruder_stack, stack_variable, container) #For instance, set global_stack.qualityChanges = container. - extruder_stack.setProperty(key, value, property, target_container = target_container) - containers = { - "user": extruder_stack.userChanges, - "quality_changes": extruder_stack.qualityChanges, - "quality": extruder_stack.quality, - "material": extruder_stack.material, - "variant": extruder_stack.variant, - "definition_changes": extruder_stack.definition_changes, - "definition": extruder_stack.definition - } - assert containers[target_container].getProperty(key, property) == output_value + extruder_stack.setProperty(key, property, value, target_container = target_container) #The actual test. + + getattr(extruder_stack, stack_variable).setProperty.assert_called_once_with(key, property, value) #Make sure that the proper container gets a setProperty call. ## Tests setting qualities by specifying an ID of a quality that exists. def test_setQualityByIdExists(extruder_stack, container_registry): From 70055d35c030a51332ff27e2a1b936dc18809bba Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 10:00:18 +0200 Subject: [PATCH 263/816] Remove superfluous mocking and fixtures These are now no longer used by the tests. Contributes to issue CURA-3497. --- tests/Settings/TestExtruderStack.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 84d4a5d7c6..41aefcbd05 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -1,7 +1,6 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -import os.path #To find the test stack files. import pytest #This module contains automated tests. import unittest.mock #For the mocking and monkeypatching functionality. @@ -33,26 +32,6 @@ def container_registry(): def extruder_stack() -> cura.Settings.ExtruderStack.ExtruderStack: return cura.Settings.ExtruderStack.ExtruderStack("TestStack") -## Place-in function for findContainer that finds only containers that start -# with "some_". -def findSomeContainers(container_id = "*", container_type = None, type = None, category = "*"): - if container_id.startswith("some_"): - return UM.Settings.ContainerRegistry._EmptyInstanceContainer(container_id) - if container_type == DefinitionContainer: - definition_mock = unittest.mock.MagicMock() - definition_mock.getId = unittest.mock.MagicMock(return_value = "some_definition") #getId returns some_definition. - return definition_mock - -## Helper function to read the contents of a container stack in the test -# stack folder. -# -# \param filename The name of the file in the "stacks" folder to read from. -# \return The contents of that file. -def readStack(filename): - with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)) as file_handle: - serialized = file_handle.read() - return serialized - ## Gets an instance container with a specified container type. # # \param container_type The type metadata for the instance container. From 14e65ae2b86a7395bf583f13d258f5012f645d38 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:10:57 +0200 Subject: [PATCH 264/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index c84e7c1bd8..bbae84c2a5 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -9,12 +9,16 @@ "manufacturer": "Cartesio bv", "category": "Other", "file_formats": "text/x-gcode", + "has_machine_materials": true, + "has_machine_quality": true, "has_variants": true, + "variants_name": "Nozzle size", "preferred_variant": "*0.4*", "preferred_material": "*pla*", "preferred_quality": "*draft*", + "machine_extruder_trains": { "0": "cartesio_extruder_0", From 5069dfbf65d940a92cbca2e0c024a24d78db2458 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:32:54 +0200 Subject: [PATCH 265/816] Update cartesio_0.8.inst.cfg --- resources/variants/cartesio_0.8.inst.cfg | 53 ------------------------ 1 file changed, 53 deletions(-) diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index bdaae61af5..d84a45e615 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -10,56 +10,3 @@ type = variant [values] machine_nozzle_size = 0.8 machine_nozzle_tip_outer_diameter = 1.05 - -infill_line_width = 0.9 - -wall_thickness = 2.4 -top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 24 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1.5 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 952fce4eda35cf5076955f0ccff2a89c74fd9030 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:33:24 +0200 Subject: [PATCH 266/816] Update cartesio_0.4.inst.cfg --- resources/variants/cartesio_0.4.inst.cfg | 53 ------------------------ 1 file changed, 53 deletions(-) diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 3462133717..43bed9bfbd 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -10,56 +10,3 @@ type = variant [values] machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 0.8 - -infill_line_width = 0.5 - -wall_thickness = 1.2 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = 50 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 1f4bc708cac802ac3b1c065bdcdb77f43fc14ee6 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:33:44 +0200 Subject: [PATCH 267/816] Update cartesio_0.25.inst.cfg --- resources/variants/cartesio_0.25.inst.cfg | 53 ----------------------- 1 file changed, 53 deletions(-) diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index b64f5121a8..2c7ecc7b03 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -10,56 +10,3 @@ type = variant [values] machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 1.05 - -infill_line_width = 0.3 - -wall_thickness = 1 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 8da7fbb11901ac06668221a600cbdafb70174d4b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:43:36 +0200 Subject: [PATCH 268/816] Create cartesio_0.4_pla_draft.inst.cfg --- .../cartesio/cartesio_0.4_pla_draft.inst.cfg | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg diff --git a/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg new file mode 100644 index 0000000000..5cf4a1d7d4 --- /dev/null +++ b/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg @@ -0,0 +1,67 @@ +[general] +version = 2 +name = Draft Print +definition = cartesio + +[metadata] +type = quality +quality_type = draft +material = generic_pla_cartesio_0.4_mm +weight = 0 + +[values] +layer_height = 0.2 +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +default_material_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_amount = 1 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = 50 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From d0cc5c1a0cf152f27922cc938a9ad05e3693694b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:44:29 +0200 Subject: [PATCH 269/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index bbae84c2a5..28953ae1e3 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -10,8 +10,10 @@ "category": "Other", "file_formats": "text/x-gcode", - "has_machine_materials": true, "has_machine_quality": true, + "has_materials": true, + "has_machine_materials": true, + "has_variant_materials": true, "has_variants": true, "variants_name": "Nozzle size", From a6346b1277e49446a3235a16226ba0830dcd32af Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:45:17 +0200 Subject: [PATCH 270/816] Add files via upload --- .../cartesio/cartesio_0.25_pla_draft.inst.cfg | 65 +++++++++++++++++++ .../cartesio/cartesio_0.8_pla_draft.inst.cfg | 65 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg create mode 100644 resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg diff --git a/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg new file mode 100644 index 0000000000..62002d3229 --- /dev/null +++ b/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg @@ -0,0 +1,65 @@ +[general] +version = 2 +name = Draft Print +definition = cartesio + +[metadata] +type = quality +quality_type = draft +material = generic_pla_cartesio_0.4_mm +weight = 0 + +[values] +layer_height = 0.2 +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =round(material_print_temperature) +material_initial_print_temperature = =round(material_print_temperature) +material_diameter = 1.75 +retraction_amount = 1 +retraction_prime_speed = =round(retraction_speed / 5) +retraction_min_travel = =round(line_width * 10) +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = =50 if layer_height < 0.4 else 30 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg new file mode 100644 index 0000000000..58e3450cb6 --- /dev/null +++ b/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg @@ -0,0 +1,65 @@ +[general] +version = 2 +name = Draft Print +definition = cartesio + +[metadata] +type = quality +quality_type = draft +material = generic_pla_cartesio_0.4_mm +weight = 0 + +[values] +layer_height = 0.2 +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 24 +infill_pattern = grid + +material_print_temperature_layer_0 = =round(material_print_temperature) +material_initial_print_temperature = =round(material_print_temperature) +material_diameter = 1.75 +retraction_amount = 1.5 +retraction_prime_speed = =round(retraction_speed / 5) +retraction_min_travel = =round(line_width * 10) +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = =50 if layer_height < 0.4 else 30 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From c41392a101a399720097a1198a37d9b41551a444 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:47:15 +0200 Subject: [PATCH 271/816] Update cartesio_0.25_pla_draft.inst.cfg --- resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg index 62002d3229..7d4a29fe37 100644 --- a/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg +++ b/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = draft -material = generic_pla_cartesio_0.4_mm +material = generic_pla_cartesio_0.25_mm weight = 0 [values] From 642dfa9372e38de7d8e3c22ef08cc9005fe9d24a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 10:47:30 +0200 Subject: [PATCH 272/816] Update cartesio_0.8_pla_draft.inst.cfg --- resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg index 58e3450cb6..7b32e1fcb7 100644 --- a/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg +++ b/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = draft -material = generic_pla_cartesio_0.4_mm +material = generic_pla_cartesio_0.8_mm weight = 0 [values] From bfc8cc8a9e8fa33e5b3d8badc2ea5355909b871a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 10:51:46 +0200 Subject: [PATCH 273/816] Codestyle --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 037bf124a1..f5c469d29d 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1287,7 +1287,7 @@ class CuraApplication(QtApplication): offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = min_offset) # Step is for skipping tests to make it a lot faster. it also makes the outcome somewhat rougher - node,_ = arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) + node, _ = arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) op = AddSceneNodeOperation(node, scene.getRoot()) op.push() From d29ae60d38d530045c5a1f14c52308a2765b3193 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 12 Apr 2017 12:05:40 +0200 Subject: [PATCH 274/816] Add missing Any import --- cura/Settings/ExtruderStack.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 4b50143c27..a4a1f61e96 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -1,6 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +from typing import Any + from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot from UM.Decorators import override @@ -21,7 +23,7 @@ class ExtruderStack(CuraContainerStack): self.addMetaDataEntry("type", "extruder_train") # For backward compatibility @override(ContainerStack) - def setNextStack(self, stack): + def setNextStack(self, stack: ContainerStack) -> None: super().setNextStack(stack) stack.addExtruder(self) From 0c232c94620b26ce1d1f88bdd9e0f69c25265af8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 12 Apr 2017 12:06:02 +0200 Subject: [PATCH 275/816] ExtruderStack requires a next stack, so make sure it has that in tests --- tests/Settings/TestExtruderStack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 41aefcbd05..c49448b030 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -263,6 +263,7 @@ def test_getPropertyFallThrough(extruder_stack): extruder_stack.variant = mock_no_settings[container_indices.Variant] with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): #To guard against the type checking. extruder_stack.definition = mock_layer_heights[container_indices.Definition] #There's a layer height in here! + extruder_stack.setNextStack(unittest.mock.MagicMock()) assert extruder_stack.getProperty("layer_height", "value") == container_indices.Definition extruder_stack.variant = mock_layer_heights[container_indices.Variant] @@ -382,4 +383,4 @@ def test_setVariantByIdExists(extruder_stack, container_registry): ## Tests setting variants by specifying an ID of a variant that doesn't exist. def test_setVariantByIdDoesntExist(extruder_stack): with pytest.raises(InvalidContainerError): - extruder_stack.setVariantById("some_variant") #Container registry is empty now. \ No newline at end of file + extruder_stack.setVariantById("some_variant") #Container registry is empty now. From 10dbd7e683916dbb039233cbcd0c66741bc8bf8c Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 13:12:55 +0200 Subject: [PATCH 276/816] Update cartesio_0.8.inst.cfg --- resources/variants/cartesio_0.8.inst.cfg | 53 ++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index d84a45e615..bdaae61af5 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -10,3 +10,56 @@ type = variant [values] machine_nozzle_size = 0.8 machine_nozzle_tip_outer_diameter = 1.05 + +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 24 +infill_pattern = grid + +material_print_temperature_layer_0 = =round(material_print_temperature) +material_initial_print_temperature = =round(material_print_temperature) +material_diameter = 1.75 +retraction_amount = 1.5 +retraction_prime_speed = =round(retraction_speed / 5) +retraction_min_travel = =round(line_width * 10) +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = =50 if layer_height < 0.4 else 30 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From f019d054221d070fa8c884dde69595cbe209f584 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 13:13:24 +0200 Subject: [PATCH 277/816] Update cartesio_0.25.inst.cfg --- resources/variants/cartesio_0.25.inst.cfg | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index 2c7ecc7b03..b64f5121a8 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -10,3 +10,56 @@ type = variant [values] machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 1.05 + +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =round(material_print_temperature) +material_initial_print_temperature = =round(material_print_temperature) +material_diameter = 1.75 +retraction_amount = 1 +retraction_prime_speed = =round(retraction_speed / 5) +retraction_min_travel = =round(line_width * 10) +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = =50 if layer_height < 0.4 else 30 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From f35a4bf276a0d7374aa83809bcd544b38adcfaf1 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 13:15:09 +0200 Subject: [PATCH 278/816] Update cartesio_0.4.inst.cfg --- resources/variants/cartesio_0.4.inst.cfg | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 43bed9bfbd..58637bbba7 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -10,3 +10,58 @@ type = variant [values] machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 0.8 + +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +default_material_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_amount = 1 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =round(retraction_speed) +switch_extruder_prime_speed = =round(retraction_prime_speed) + +speed_print = 30 +speed_infill = =round(speed_print) +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =round(speed_travel) +speed_support_interface = =round(speed_topbottom) + +retraction_combing = off +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) +cool_min_layer_time = 20 + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From 299ad624daf101a1771e1b57c340e9de3883ab34 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 15:01:39 +0200 Subject: [PATCH 279/816] Minor refactor; Return None instead of weird 999999 if no suitable location was found --- cura/Arrange.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Arrange.py b/cura/Arrange.py index 2348535efc..0d1f2e0c06 100755 --- a/cura/Arrange.py +++ b/cura/Arrange.py @@ -114,7 +114,7 @@ class Arrange: self._priority_unique_values.sort() ## Return the amount of "penalty points" for polygon, which is the sum of priority - # 999999 if occupied + # None if occupied # \param x x-coordinate to check shape # \param y y-coordinate # \param shape_arr the ShapeArray object to place @@ -128,9 +128,9 @@ class Arrange: offset_x:offset_x + shape_arr.arr.shape[1]] try: if numpy.any(occupied_slice[numpy.where(shape_arr.arr == 1)]): - return 999999 + return None except IndexError: # out of bounds if you try to place an object outside - return 999999 + return None prio_slice = self._priority[ offset_y:offset_y + shape_arr.arr.shape[0], offset_x:offset_x + shape_arr.arr.shape[1]] @@ -157,7 +157,7 @@ class Arrange: # array to "world" coordinates penalty_points = self.checkShape(projected_x, projected_y, shape_arr) - if penalty_points != 999999: + if penalty_points is not None: return LocationSuggestion(x = projected_x, y = projected_y, penalty_points = penalty_points, priority = priority) return LocationSuggestion(x = None, y = None, penalty_points = None, priority = priority) # No suitable location found :-( From 3319d077295ad21fedfb2fb51ffbefee968a5599 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:02:19 +0200 Subject: [PATCH 280/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 28953ae1e3..bcaaa30380 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -19,7 +19,7 @@ "variants_name": "Nozzle size", "preferred_variant": "*0.4*", "preferred_material": "*pla*", - "preferred_quality": "*draft*", + "preferred_quality": "*normal*", "machine_extruder_trains": { From 383c62218dd01ed992fc90c2fcb4c92d2c1cc238 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:03:59 +0200 Subject: [PATCH 281/816] Update cartesio_0.8.inst.cfg --- resources/variants/cartesio_0.8.inst.cfg | 53 ------------------------ 1 file changed, 53 deletions(-) diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index bdaae61af5..d84a45e615 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -10,56 +10,3 @@ type = variant [values] machine_nozzle_size = 0.8 machine_nozzle_tip_outer_diameter = 1.05 - -infill_line_width = 0.9 - -wall_thickness = 2.4 -top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 24 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1.5 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 2bcbd7415e7b4a277e06893913d7b6f7004b6aa2 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:04:15 +0200 Subject: [PATCH 282/816] Update cartesio_0.4.inst.cfg --- resources/variants/cartesio_0.4.inst.cfg | 55 ------------------------ 1 file changed, 55 deletions(-) diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 58637bbba7..43bed9bfbd 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -10,58 +10,3 @@ type = variant [values] machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 0.8 - -infill_line_width = 0.5 - -wall_thickness = 1.2 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -default_material_print_temperature = =material_print_temperature -material_print_temperature_layer_0 = =material_print_temperature + 5 -material_initial_print_temperature = =material_print_temperature -material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 -retraction_amount = 1 -retraction_min_travel = =round(line_width * 10) -retraction_prime_speed = 10 -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From f6799d64b7704201677009232b92ce807cffd462 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:04:39 +0200 Subject: [PATCH 283/816] Update cartesio_0.25.inst.cfg --- resources/variants/cartesio_0.25.inst.cfg | 53 ----------------------- 1 file changed, 53 deletions(-) diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index b64f5121a8..2c7ecc7b03 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -10,56 +10,3 @@ type = variant [values] machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 1.05 - -infill_line_width = 0.3 - -wall_thickness = 1 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 99afe3648e4f253ac91211c3ea26c1e1dcd5184d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:05:16 +0200 Subject: [PATCH 284/816] Delete cartesio_0.25_pla_draft.inst.cfg --- .../cartesio/cartesio_0.25_pla_draft.inst.cfg | 65 ------------------- 1 file changed, 65 deletions(-) delete mode 100644 resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg diff --git a/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg deleted file mode 100644 index 7d4a29fe37..0000000000 --- a/resources/quality/cartesio/cartesio_0.25_pla_draft.inst.cfg +++ /dev/null @@ -1,65 +0,0 @@ -[general] -version = 2 -name = Draft Print -definition = cartesio - -[metadata] -type = quality -quality_type = draft -material = generic_pla_cartesio_0.25_mm -weight = 0 - -[values] -layer_height = 0.2 -infill_line_width = 0.3 - -wall_thickness = 1 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From bcbe7bdbd48fd3558ce20345e3d275c3f4feacf8 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:05:28 +0200 Subject: [PATCH 285/816] Delete cartesio_0.4_pla_draft.inst.cfg --- .../cartesio/cartesio_0.4_pla_draft.inst.cfg | 67 ------------------- 1 file changed, 67 deletions(-) delete mode 100644 resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg diff --git a/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg deleted file mode 100644 index 5cf4a1d7d4..0000000000 --- a/resources/quality/cartesio/cartesio_0.4_pla_draft.inst.cfg +++ /dev/null @@ -1,67 +0,0 @@ -[general] -version = 2 -name = Draft Print -definition = cartesio - -[metadata] -type = quality -quality_type = draft -material = generic_pla_cartesio_0.4_mm -weight = 0 - -[values] -layer_height = 0.2 -infill_line_width = 0.5 - -wall_thickness = 1.2 -top_bottom_thickness = 0.8 -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 40 -infill_pattern = grid - -default_material_print_temperature = =material_print_temperature -material_print_temperature_layer_0 = =material_print_temperature + 5 -material_initial_print_temperature = =material_print_temperature -material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 -retraction_amount = 1 -retraction_min_travel = =round(line_width * 10) -retraction_prime_speed = 10 -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = 50 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From fb3966d8f55f65c59bb81eb826f5906f33d0d086 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:05:38 +0200 Subject: [PATCH 286/816] Delete cartesio_0.8_pla_draft.inst.cfg --- .../cartesio/cartesio_0.8_pla_draft.inst.cfg | 65 ------------------- 1 file changed, 65 deletions(-) delete mode 100644 resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg diff --git a/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg b/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg deleted file mode 100644 index 7b32e1fcb7..0000000000 --- a/resources/quality/cartesio/cartesio_0.8_pla_draft.inst.cfg +++ /dev/null @@ -1,65 +0,0 @@ -[general] -version = 2 -name = Draft Print -definition = cartesio - -[metadata] -type = quality -quality_type = draft -material = generic_pla_cartesio_0.8_mm -weight = 0 - -[values] -layer_height = 0.2 -infill_line_width = 0.9 - -wall_thickness = 2.4 -top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) -wall_0_inset = -0.05 -fill_perimeter_gaps = nowhere -travel_compensate_overlapping_walls_enabled = - -infill_sparse_density = 24 -infill_pattern = grid - -material_print_temperature_layer_0 = =round(material_print_temperature) -material_initial_print_temperature = =round(material_print_temperature) -material_diameter = 1.75 -retraction_amount = 1.5 -retraction_prime_speed = =round(retraction_speed / 5) -retraction_min_travel = =round(line_width * 10) -switch_extruder_retraction_amount = 2 -switch_extruder_retraction_speeds = =round(retraction_speed) -switch_extruder_prime_speed = =round(retraction_prime_speed) - -speed_print = =50 if layer_height < 0.4 else 30 -speed_infill = =round(speed_print) -speed_layer_0 = =round(speed_print / 5 * 4) -speed_wall = =round(speed_print / 2) -speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) -speed_topbottom = =round(speed_print / 5 * 4) -speed_slowdown_layers = 1 -speed_travel = =round(speed_print if magic_spiralize else 150) -speed_travel_layer_0 = =round(speed_travel) -speed_support_interface = =round(speed_topbottom) - -retraction_combing = off -retraction_hop_enabled = True -retraction_hop = 1 - -cool_min_layer_time_fan_speed_max = =round(cool_min_layer_time) -cool_min_layer_time = 20 - -support_z_distance = 0 -support_xy_distance = 0.5 -support_join_distance = 10 -support_interface_enable = True - -adhesion_type = skirt -skirt_gap = 0.5 -skirt_brim_minimal_length = 50 - -coasting_enable = True -coasting_volume = 0.1 -coasting_min_volume = 0.17 -coasting_speed = 90 From 46426db8e6e6dfe39a2e8f3d91e657bfbcc9d1c3 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:06:23 +0200 Subject: [PATCH 287/816] Create cartesio_global_Coarse_Quality.inst.cfg --- .../cartesio_global_Coarse_Quality.inst.cfg | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..1d6f7bb930 --- /dev/null +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +global_quality = True +weight = 0 + +[values] +layer_height = 0.4 + +speed_slowdown_layers = 1 + +retraction_combing = off + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 From a78bb88ebc5affedfc12d1fd212f2ad37b812d81 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:07:11 +0200 Subject: [PATCH 288/816] Add files via upload --- ...tesio_global_Extra_Coarse_Quality.inst.cfg | 25 +++++++++++++++++++ .../cartesio_global_High_Quality.inst.cfg | 25 +++++++++++++++++++ .../cartesio_global_Normal_Quality.inst.cfg | 25 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg create mode 100644 resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg create mode 100644 resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..841d63d1dc --- /dev/null +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +global_quality = True +weight = 0 + +[values] +layer_height = 0.6 + +speed_slowdown_layers = 1 + +retraction_combing = off + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..363c18d8a2 --- /dev/null +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +global_quality = True +weight = 0 + +[values] +layer_height = 0.1 + +speed_slowdown_layers = 1 + +retraction_combing = off + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..78272e2aef --- /dev/null +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +global_quality = True +weight = 0 + +[values] +layer_height = 0.2 + +speed_slowdown_layers = 1 + +retraction_combing = off + +support_z_distance = 0 +support_xy_distance = 0.5 +support_join_distance = 10 +support_interface_enable = True + +adhesion_type = skirt +skirt_gap = 0.5 From 0768cea49b383262842384fe310e33bab7c7a6f5 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Wed, 12 Apr 2017 15:08:36 +0200 Subject: [PATCH 289/816] Add files via upload --- .../abs/cartesio_0.25_abs_high.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.25_abs_normal.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.4_abs_high.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.4_abs_normal.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.8_abs_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_abs_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.8_abs_high.inst.cfg | 56 +++++++++++++++++++ .../abs/cartesio_0.8_abs_normal.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.25_hips_high.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.25_hips_normal.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.4_hips_high.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.4_hips_normal.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.8_hips_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_hips_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.8_hips_high.inst.cfg | 56 +++++++++++++++++++ .../hips/cartesio_0.8_hips_normal.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.25_nylon_high.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.25_nylon_normal.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.4_nylon_high.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.4_nylon_normal.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.8_nylon_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_nylon_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.8_nylon_high.inst.cfg | 56 +++++++++++++++++++ .../nylon/cartesio_0.8_nylon_normal.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.25_pc_high.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.25_pc_normal.inst.cfg | 56 +++++++++++++++++++ .../cartesio/pc/cartesio_0.4_pc_high.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.4_pc_normal.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.8_pc_coarse.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.8_pc_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio/pc/cartesio_0.8_pc_high.inst.cfg | 56 +++++++++++++++++++ .../pc/cartesio_0.8_pc_normal.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.25_petg_high.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.25_petg_normal.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.4_petg_high.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.4_petg_normal.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.8_petg_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_petg_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.8_petg_high.inst.cfg | 56 +++++++++++++++++++ .../petg/cartesio_0.8_petg_normal.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.25_pla_high.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.25_pla_normal.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.4_pla_high.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.4_pla_normal.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.8_pla_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_pla_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.8_pla_high.inst.cfg | 56 +++++++++++++++++++ .../pla/cartesio_0.8_pla_normal.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.25_pva_high.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.25_pva_normal.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.4_pva_high.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.4_pva_normal.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.8_pva_coarse.inst.cfg | 56 +++++++++++++++++++ .../cartesio_0.8_pva_extra_coarse.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.8_pva_high.inst.cfg | 56 +++++++++++++++++++ .../pva/cartesio_0.8_pva_normal.inst.cfg | 56 +++++++++++++++++++ 56 files changed, 3136 insertions(+) create mode 100644 resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg create mode 100644 resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg create mode 100644 resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg create mode 100644 resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg create mode 100644 resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg create mode 100644 resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg create mode 100644 resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg create mode 100644 resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg new file mode 100644 index 0000000000..c26f4a2683 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_abs_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg new file mode 100644 index 0000000000..a7c5677980 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_abs_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg new file mode 100644 index 0000000000..1287d66e33 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_abs_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg new file mode 100644 index 0000000000..62c4e462e7 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_abs_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg new file mode 100644 index 0000000000..4ae04132dc --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_abs_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg new file mode 100644 index 0000000000..836c2f8458 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_abs_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg new file mode 100644 index 0000000000..f8e6fac996 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_abs_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg new file mode 100644 index 0000000000..7aade0c846 --- /dev/null +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_abs_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg new file mode 100644 index 0000000000..1457945bdb --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_hips_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg new file mode 100644 index 0000000000..ac324cf42c --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_hips_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg new file mode 100644 index 0000000000..4f95cd2b8b --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_hips_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg new file mode 100644 index 0000000000..ac4de67c0c --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_hips_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg new file mode 100644 index 0000000000..beff6ec6f6 --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_hips_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg new file mode 100644 index 0000000000..ea8edbbdfe --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_hips_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg new file mode 100644 index 0000000000..13f139f596 --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_hips_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg new file mode 100644 index 0000000000..06b45cd601 --- /dev/null +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_hips_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg new file mode 100644 index 0000000000..569c5a786f --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_nylon_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg new file mode 100644 index 0000000000..7ac13e4d60 --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_nylon_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg new file mode 100644 index 0000000000..d294820c39 --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_nylon_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg new file mode 100644 index 0000000000..dd37e5f46a --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_nylon_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg new file mode 100644 index 0000000000..5d303731d9 --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_nylon_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg new file mode 100644 index 0000000000..9d015d71bb --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_nylon_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg new file mode 100644 index 0000000000..324149f527 --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_nylon_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg new file mode 100644 index 0000000000..b7e9920fac --- /dev/null +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_nylon_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg new file mode 100644 index 0000000000..224b4383f0 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pc_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg new file mode 100644 index 0000000000..e3ab6f83d9 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pc_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg new file mode 100644 index 0000000000..213b94bfaa --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pc_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg new file mode 100644 index 0000000000..8c258630e1 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pc_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg new file mode 100644 index 0000000000..8f29b3a679 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_pc_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg new file mode 100644 index 0000000000..f8238c28b5 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_pc_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg new file mode 100644 index 0000000000..ca1acf1e59 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pc_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg new file mode 100644 index 0000000000..54e2f3a8b8 --- /dev/null +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pc_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg new file mode 100644 index 0000000000..324ff40497 --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_petg_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg new file mode 100644 index 0000000000..55a04548bc --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_petg_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg new file mode 100644 index 0000000000..c6e759c87b --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_petg_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg new file mode 100644 index 0000000000..1ad1cc9f5d --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_petg_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg new file mode 100644 index 0000000000..3df1647d57 --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_petg_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg new file mode 100644 index 0000000000..99a3659e18 --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_petg_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg new file mode 100644 index 0000000000..8fc6fc8398 --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_petg_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg new file mode 100644 index 0000000000..05805e41d7 --- /dev/null +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_petg_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg new file mode 100644 index 0000000000..3eac407634 --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pla_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg new file mode 100644 index 0000000000..ac82dddf8a --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pla_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg new file mode 100644 index 0000000000..bdb6ace957 --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pla_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg new file mode 100644 index 0000000000..ca02ffc4a2 --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pla_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg new file mode 100644 index 0000000000..5a9e561177 --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_pla_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg new file mode 100644 index 0000000000..4ac73a3ce0 --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_pla_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg new file mode 100644 index 0000000000..582735062b --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pla_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg new file mode 100644 index 0000000000..f77e2ade8c --- /dev/null +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pla_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 10 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg new file mode 100644 index 0000000000..73b434365e --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pva_cartesio_0.25_mm +weight = 1 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg new file mode 100644 index 0000000000..1415954e6c --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pva_cartesio_0.25_mm +weight = 2 + +[values] +infill_line_width = 0.3 + +wall_thickness = 1 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg new file mode 100644 index 0000000000..97e48f8c7d --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pva_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg new file mode 100644 index 0000000000..f0231084db --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pva_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg new file mode 100644 index 0000000000..a9c313a7db --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = coarse +material = generic_pva_cartesio_0.8_mm +weight = 3 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg new file mode 100644 index 0000000000..2a2e2c9d0e --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Extra Coarse Quality +definition = cartesio + +[metadata] +type = quality +quality_type = extra coarse +material = generic_pva_cartesio_0.8_mm +weight = 4 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =layer_height * 3 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg new file mode 100644 index 0000000000..64e8ee2902 --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = generic_pva_cartesio_0.8_mm +weight = 1 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg new file mode 100644 index 0000000000..23fa682772 --- /dev/null +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -0,0 +1,56 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = generic_pva_cartesio_0.8_mm +weight = 2 + +[values] +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 8 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 50 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From 3e75583f2b37cb08bf7d4c25a144587859ea9865 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 15:09:31 +0200 Subject: [PATCH 290/816] Huge models no longer block loading CURA-3676 --- cura/CuraApplication.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index f5c469d29d..db25822654 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1283,11 +1283,13 @@ class CuraApplication(QtApplication): child.addDecorator(ConvexHullDecorator()) if node.callDecoration("isSliceable"): - # Find node location - offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = min_offset) + # Only check position if it's not already blatantly obvious that it won't fit. + if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: + # Find node location + offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = min_offset) - # Step is for skipping tests to make it a lot faster. it also makes the outcome somewhat rougher - node, _ = arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) + # Step is for skipping tests to make it a lot faster. it also makes the outcome somewhat rougher + node, _ = arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) op = AddSceneNodeOperation(node, scene.getRoot()) op.push() From 397c2666f0565df5812dea31a833d779c679c26b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 15:38:07 +0200 Subject: [PATCH 291/816] Optimise profiles for 0.8mm cores Sample testing confirms that these are equal to their originals. Nylon, PLA and PVA were already optimised, but ABS and CPE weren't. Now all are optimised except some 0.4mm core profiles. I'll see to those next. Note that the filament flow compensation setting is still wrong in these profiles (it was wrong in the original profiles as well). Contributes to issue CURA-3650. --- .../um3_aa0.8_ABS_Draft_Print.inst.cfg | 116 +++-------------- .../um3_aa0.8_ABS_Superdraft_Print.inst.cfg | 117 ++++------------- .../um3_aa0.8_ABS_Verydraft_Print.inst.cfg | 117 ++++------------- .../um3_aa0.8_CPE_Draft_Print.inst.cfg | 116 +++-------------- .../um3_aa0.8_CPE_Superdraft_Print.inst.cfg | 118 ++++-------------- .../um3_aa0.8_CPE_Verydraft_Print.inst.cfg | 117 ++++------------- .../um3_aa0.8_Nylon_Draft_Print.inst.cfg | 16 ++- .../um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 18 ++- .../um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 18 ++- .../um3_aa0.8_PLA_Draft_Print.inst.cfg | 16 +-- .../um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 16 +-- .../um3_aa0.8_PLA_Verydraft_Print.inst.cfg | 16 +-- .../um3_bb0.8_PVA_Draft_Print.inst.cfg | 2 +- .../um3_bb0.8_PVA_Superdraft_Print.inst.cfg | 4 +- .../um3_bb0.8_PVA_Verydraft_Print.inst.cfg | 4 +- resources/variants/ultimaker3_aa0.8.inst.cfg | 43 ++++--- resources/variants/ultimaker3_bb0.8.inst.cfg | 24 +++- 17 files changed, 248 insertions(+), 630 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index 1cb122147f..aedf428807 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -1,96 +1,20 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_abs_ultimaker3_AA_0.8 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 90 -material_print_temperature = =default_material_print_temperature + 25 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -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) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_abs_ultimaker3_AA_0.8 +weight = -2 + +[values] +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 25 +material_standby_temperature = 100 +speed_equalize_flow_enabled = 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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index b87cfde214..313754645c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -1,96 +1,21 @@ -[general] -version = 2 -name = Superdraft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_abs_ultimaker3_AA_0.8 -weight = -4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.4 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 90 -material_print_temperature = =default_material_print_temperature + 30 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -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) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 +[general] +version = 2 +name = Superdraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_abs_ultimaker3_AA_0.8 +weight = -4 + +[values] +layer_height = 0.4 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 30 +material_standby_temperature = 100 +speed_equalize_flow_enabled = 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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index d0f16f784e..f499b5bfa1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -1,96 +1,21 @@ -[general] -version = 2 -name = Verydraft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = verydraft -material = generic_abs_ultimaker3_AA_0.8 -weight = -3 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.3 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 90 -material_print_temperature = =default_material_print_temperature + 27 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -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) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 +[general] +version = 2 +name = Verydraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = verydraft +material = generic_abs_ultimaker3_AA_0.8 +weight = -3 + +[values] +layer_height = 0.3 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 27 +material_standby_temperature = 100 +speed_equalize_flow_enabled = 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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 5f46b97486..7356969835 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -1,96 +1,20 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_cpe_ultimaker3_AA_0.8 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 15 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = =default_material_print_temperature + 15 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 40 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 25 / 40) -speed_wall = =math.ceil(speed_print * 30 / 40) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 \ No newline at end of file +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_cpe_ultimaker3_AA_0.8 +weight = -2 + +[values] +brim_width = 15 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 15 +material_standby_temperature = 100 +speed_equalize_flow_enabled = False +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 25 / 40) +speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index fbb091c651..8e98a0fd9d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -1,96 +1,22 @@ -[general] -version = 2 -name = Superdraft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_cpe_ultimaker3_AA_0.8 -weight = -4 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 15 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.4 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = =default_material_print_temperature + 20 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 45 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -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) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 \ No newline at end of file +[general] +version = 2 +name = Superdraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_cpe_ultimaker3_AA_0.8 +weight = -2 + +[values] +brim_width = 15 +layer_height = 0.4 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 20 +material_standby_temperature = 100 +speed_equalize_flow_enabled = False +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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index 75b164735d..716ebbe5a5 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -1,96 +1,21 @@ -[general] -version = 2 -name = Verydraft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = verydraft -material = generic_cpe_ultimaker3_AA_0.8 -weight = -3 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 15 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 7 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_before_walls = False -infill_line_width = =round(line_width * 0.6 / 0.7, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 25 / 25) -jerk_wall = =math.ceil(jerk_print * 25 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) -jerk_wall_x = =jerk_wall -layer_height = 0.3 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_print_temperature = =default_material_print_temperature + 17 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = False -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retract_at_layer_change = True -retraction_amount = 6.5 -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -skin_overlap = 5 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 40 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 25 / 40) -speed_wall = =math.ceil(speed_print * 30 / 40) -speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance / 2 -support_pattern = zigzag -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_retraction_amount = 16.5 -top_bottom_thickness = 1.4 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =wall_line_width -wall_thickness = 2 \ No newline at end of file +[general] +version = 2 +name = Verydraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = verydraft +material = generic_cpe_ultimaker3_AA_0.8 +weight = -2 + +[values] +brim_width = 15 +layer_height = 0.3 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 17 +material_standby_temperature = 100 +speed_equalize_flow_enabled = False +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 25 / 40) +speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index eb69e804c0..0ad9d1c637 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -10,17 +10,27 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -2 [values] +brim_line_count = 7 brim_width = 8.0 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 infill_before_walls = True -infill_pattern = triangles +infill_line_width = =line_width machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_size = 15 +raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 -wall_line_width_x = =wall_line_width diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 4a226996b3..338aa6746b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -7,21 +7,31 @@ definition = ultimaker3 type = quality quality_type = superdraft material = generic_nylon_ultimaker3_AA_0.8 -weight = -2 +weight = -4 [values] +brim_line_count = 7 brim_width = 8.0 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 infill_before_walls = True -infill_pattern = triangles +infill_line_width = =line_width layer_height = 0.4 machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_size = 15 +raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 -wall_line_width_x = =wall_line_width diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 444aac8eda..b67e93e138 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -7,21 +7,31 @@ definition = ultimaker3 type = quality quality_type = verydraft material = generic_nylon_ultimaker3_AA_0.8 -weight = -2 +weight = -3 [values] +brim_line_count = 7 brim_width = 8.0 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 infill_before_walls = True -infill_pattern = triangles +infill_line_width = =line_width layer_height = 0.3 machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_size = 15 +raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 -wall_line_width_x = =wall_line_width diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 74f7f47a4d..1d059f6687 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -7,28 +7,30 @@ definition = ultimaker3 type = quality quality_type = draft material = generic_pla_ultimaker3_AA_0.8 -weight = 0 +weight = -2 [values] -brim_line_count = =math.ceil(brim_width / skirt_brim_line_width) +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 infill_line_width = =round(line_width * 0.535 / 0.75, 2) +infill_pattern = cubic infill_sparse_density = 80 line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 machine_nozzle_heat_up_speed = 1.6 material_final_print_temperature = =max(-273.15, material_print_temperature - 15) material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 -ooze_shield_angle = 60 -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -raft_margin = 15 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds +prime_tower_size = 15 +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 4702d382c7..a7045326ca 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -7,29 +7,31 @@ definition = ultimaker3 type = quality quality_type = superdraft material = generic_pla_ultimaker3_AA_0.8 -weight = 1 +weight = -4 [values] -brim_line_count = =math.ceil(brim_width / skirt_brim_line_width) +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 infill_line_width = =round(line_width * 0.535 / 0.75, 2) +infill_pattern = cubic infill_sparse_density = 80 layer_height = 0.4 line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 machine_nozzle_heat_up_speed = 1.6 material_final_print_temperature = =max(-273.15, material_print_temperature - 15) material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 -ooze_shield_angle = 60 -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -raft_margin = 15 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds +prime_tower_size = 15 +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index 174882aa68..cbf783febd 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -7,29 +7,31 @@ definition = ultimaker3 type = quality quality_type = verydraft material = generic_pla_ultimaker3_AA_0.8 -weight = 1 +weight = -3 [values] -brim_line_count = =math.ceil(brim_width / skirt_brim_line_width) +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 infill_line_width = =round(line_width * 0.535 / 0.75, 2) +infill_pattern = cubic infill_sparse_density = 80 layer_height = 0.3 line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 machine_nozzle_heat_up_speed = 1.6 material_final_print_temperature = =max(-273.15, material_print_temperature - 15) material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 -ooze_shield_angle = 60 -raft_acceleration = =acceleration_print -raft_jerk = =jerk_print -raft_margin = 15 -switch_extruder_prime_speed = =switch_extruder_retraction_speeds +prime_tower_size = 15 +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index c02e307b47..17e406cdc8 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -11,4 +11,4 @@ material = generic_pva_ultimaker3_BB_0.8 [values] material_print_temperature = =default_material_print_temperature + 5 - +material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 84075aa4b9..7e87761349 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -6,9 +6,9 @@ definition = ultimaker3 [metadata] type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pva_ultimaker3_BB_0.8 [values] layer_height = 0.4 - +material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index db10f3d848..d79f0c6848 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -6,9 +6,9 @@ definition = ultimaker3 [metadata] type = quality quality_type = verydraft -weight = -2 +weight = -3 material = generic_pva_ultimaker3_BB_0.8 [values] layer_height = 0.3 - +material_standby_temperature = 100 diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index c73e22db20..2acaa9a98f 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -9,33 +9,44 @@ type = variant [values] acceleration_enabled = True +acceleration_layer_0 = =acceleration_topbottom +acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) acceleration_print = 4000 -brim_line_count = 7 +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =acceleration_topbottom +acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) +acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) +acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_fan_speed = 100 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_fan_speed = 7 cool_fan_speed_max = 100 +cool_min_speed = 5 default_material_print_temperature = 200 infill_before_walls = False +infill_line_width = =round(line_width * 0.6 / 0.7, 2) infill_overlap = 0 -infill_pattern = cubic +infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True +jerk_layer_0 = =jerk_topbottom +jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) jerk_print = 25 +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 25 / 25) jerk_wall = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) layer_height = 0.2 +layer_height_0 = =round(machine_nozzle_size / 1.5, 2) machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 -machine_nozzle_size = 0.8 +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 -raft_acceleration = =acceleration_layer_0 -raft_margin = 10 +prime_tower_size = 16 retract_at_layer_change = True retraction_count_max = 25 retraction_extrusion_window = 1 @@ -45,20 +56,22 @@ retraction_hop_only_when_collides = True skin_overlap = 5 speed_equalize_flow_enabled = True speed_layer_0 = 20 +speed_prime_tower = =speed_topbottom speed_print = 35 +speed_support = =speed_wall_0 +speed_support_interface = =speed_topbottom speed_topbottom = =math.ceil(speed_print * 25 / 35) +speed_wall = =math.ceil(speed_print * 30 / 35) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -support_angle = 70 +speed_wall_x = =speed_wall +support_angle = 60 support_bottom_distance = =support_z_distance / 2 -support_line_width = =line_width * 0.75 support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 1.5 +support_xy_distance = =wall_line_width_0 * 2.5 +support_xy_distance_overhang = =wall_line_width_0 support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 16.5 top_bottom_thickness = 1.4 travel_avoid_distance = 3 wall_0_inset = 0 -wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = 2 - diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index a88c3ef6b7..8d8e2a16ed 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -9,9 +9,16 @@ type = variant [values] acceleration_enabled = True +acceleration_layer_0 = =acceleration_topbottom +acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) acceleration_print = 4000 +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) acceleration_support_interface = =math.ceil(acceleration_topbottom * 100 / 500) +acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) +acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) +acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) brim_width = 3 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_speed = 50 cool_min_speed = 5 infill_line_width = =round(line_width * 0.8 / 0.7, 2) @@ -19,12 +26,20 @@ infill_overlap = 0 infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True +jerk_layer_0 = =jerk_topbottom +jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) jerk_print = 25 +jerk_support = =math.ceil(jerk_print * 15 / 25) jerk_support_interface = =math.ceil(jerk_topbottom * 1 / 5) +jerk_topbottom = =math.ceil(jerk_print * 5 / 25) +jerk_wall = =math.ceil(jerk_print * 10 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) layer_height = 0.2 +layer_height_0 = =round(machine_nozzle_size / 1.5, 2) +line_width = =machine_nozzle_size * 0.875 machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 -machine_nozzle_size = 0.8 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 @@ -36,6 +51,7 @@ raft_interface_line_spacing = 0.5 raft_interface_line_width = 0.5 raft_interface_speed = 20 raft_interface_thickness = 0.2 +raft_jerk = =jerk_layer_0 raft_margin = 10 raft_speed = 25 raft_surface_layers = 1 @@ -48,9 +64,14 @@ retraction_min_travel = 5 retraction_prime_speed = 15 skin_overlap = 5 speed_layer_0 = 20 +speed_prime_tower = =speed_topbottom speed_print = 35 +speed_support = =speed_wall_0 speed_support_interface = =math.ceil(speed_topbottom * 15 / 20) +speed_topbottom = =math.ceil(speed_print * 20 / 35) +speed_wall = =math.ceil(speed_print * 30 / 35) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +speed_wall_x = =speed_wall support_angle = 60 support_bottom_height = =layer_height * 2 support_bottom_stair_step_height = =layer_height @@ -71,4 +92,3 @@ top_bottom_thickness = 1 travel_avoid_distance = 3 wall_0_inset = 0 wall_thickness = 1 - From c2fdf68cafb3b5dfd91414b1bdfb8994afd18417 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 15:42:09 +0200 Subject: [PATCH 292/816] Set Equalize Filament Flow to True for all 0.8mm profiles Orders from the materials team. They mistakenly set this to False in their original profiles. Contributes to issue CURA-3650. --- resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg | 1 - 6 files changed, 6 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index aedf428807..7fb96d0cea 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -13,7 +13,6 @@ weight = -2 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 25 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 50 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 313754645c..63f27c180d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -14,7 +14,6 @@ layer_height = 0.4 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 30 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 50 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index f499b5bfa1..1eeb95fcd2 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -14,7 +14,6 @@ layer_height = 0.3 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 27 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 50 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 7356969835..dbee576a94 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -14,7 +14,6 @@ brim_width = 15 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 8e98a0fd9d..9aa8b69381 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -15,7 +15,6 @@ layer_height = 0.4 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 45 speed_topbottom = =math.ceil(speed_print * 30 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index 716ebbe5a5..3f897c91d3 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -15,7 +15,6 @@ layer_height = 0.3 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 17 material_standby_temperature = 100 -speed_equalize_flow_enabled = False speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) From c7a6d4292057f8fa62561da7141f6945a1fc48ea Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 12 Apr 2017 15:58:09 +0200 Subject: [PATCH 293/816] Fixed arranger multiplying too big objects and arrange All. CURA-3676 --- cura/CuraApplication.py | 4 +++- cura/MultiplyObjectsJob.py | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) mode change 100644 => 100755 cura/MultiplyObjectsJob.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index db25822654..c3e5390736 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -984,7 +984,9 @@ class CuraApplication(QtApplication): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) if not node.isSelectable(): continue # i.e. node with layer data - nodes.append(node) + # Skip nodes that are too big + if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: + nodes.append(node) self.arrange(nodes, fixed_nodes = []) ## Arrange Selection diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py old mode 100644 new mode 100755 index 870f165487..40dbc221d6 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -47,13 +47,18 @@ class MultiplyObjectsJob(Job): root = scene.getRoot() arranger = Arrange.create(scene_root=root) - offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset) + node_too_big = False + if node.getBoundingBox().width < 300 or node.getBoundingBox().depth < 300: + offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset) + else: + node_too_big = True nodes = [] found_solution_for_all = True for i in range(self._count): # We do place the nodes one by one, as we want to yield in between. - node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) - if not solution_found: + if not node_too_big: + node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) + if node_too_big or not solution_found: found_solution_for_all = False new_location = node.getPosition() new_location = new_location.set(z = 100 - i * 20) @@ -72,4 +77,4 @@ class MultiplyObjectsJob(Job): if not found_solution_for_all: no_full_solution_message = Message(i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects")) - no_full_solution_message.show() \ No newline at end of file + no_full_solution_message.show() From 2879ec0e30e9872bad3b8d60344011527302fa33 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 12 Apr 2017 15:58:37 +0200 Subject: [PATCH 294/816] Permission for file. CURA-3676 --- cura/MultiplyObjectsJob.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 cura/MultiplyObjectsJob.py diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py old mode 100755 new mode 100644 From 28df5703119aa88a01ec5262b86c1321e8d31d1d Mon Sep 17 00:00:00 2001 From: CRojasV Date: Wed, 12 Apr 2017 09:06:57 -0500 Subject: [PATCH 295/816] =?UTF-8?q?Modify=20versi=C3=B3n=20Number?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixed the versión number. --- resources/definitions/makeR_prusa_tairona_i3.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json index a205c8368d..d9e8980979 100644 --- a/resources/definitions/makeR_prusa_tairona_i3.def.json +++ b/resources/definitions/makeR_prusa_tairona_i3.def.json @@ -1,6 +1,6 @@ { "id": "makeR_prusa_tairona_i3", - "version": 3, + "version": 2, "name": "makeR Prusa Tairona i3", "inherits": "fdmprinter", "metadata": { @@ -63,4 +63,4 @@ "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" } } -} \ No newline at end of file +} From d7e5e5780b2f44bffcdab5c8346f472c48322f8c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 16:21:03 +0200 Subject: [PATCH 296/816] Fixed width & height not being settable to 0 --- cura/BuildVolume.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index ab756d133e..8e0e3225fc 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -139,13 +139,16 @@ class BuildVolume(SceneNode): self._updateDisallowedAreasAndRebuild() def setWidth(self, width): - if width: self._width = width + if width is not None: + self._width = width def setHeight(self, height): - if height: self._height = height + if height is not None: + self._height = height def setDepth(self, depth): - if depth: self._depth = depth + if depth is not None: + self._depth = depth def setShape(self, shape): if shape: self._shape = shape From 5de3b4614f299f96f05f55c40fdbd757b85171a9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 16:26:25 +0200 Subject: [PATCH 297/816] Updated type hinting --- cura/BuildVolume.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 8e0e3225fc..203c00b445 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -25,6 +25,8 @@ catalog = i18nCatalog("cura") import numpy import math +from typing import List + # Setting for clearance around the prime PRIME_CLEARANCE = 6.5 @@ -129,7 +131,7 @@ class BuildVolume(SceneNode): ## Updates the listeners that listen for changes in per-mesh stacks. # # \param node The node for which the decorators changed. - def _updateNodeListeners(self, node): + def _updateNodeListeners(self, node: SceneNode): per_mesh_stack = node.callDecoration("getStack") if per_mesh_stack: per_mesh_stack.propertyChanged.connect(self._onSettingPropertyChanged) @@ -150,13 +152,14 @@ class BuildVolume(SceneNode): if depth is not None: self._depth = depth - def setShape(self, shape): - if shape: self._shape = shape + def setShape(self, shape: str): + if shape: + self._shape = shape - def getDisallowedAreas(self): + def getDisallowedAreas(self) -> List[Polygon]: return self._disallowed_areas - def setDisallowedAreas(self, areas): + def setDisallowedAreas(self, areas: List[Polygon]): self._disallowed_areas = areas def render(self, renderer): @@ -199,7 +202,6 @@ class BuildVolume(SceneNode): return for node in nodes: - # Need to check group nodes later if node.callDecoration("isGroup"): group_nodes.append(node) # Keep list of affected group_nodes @@ -415,10 +417,10 @@ class BuildVolume(SceneNode): self.updateNodeBoundaryCheck() - def getBoundingBox(self): + def getBoundingBox(self) -> AxisAlignedBox: return self._volume_aabb - def getRaftThickness(self): + def getRaftThickness(self) -> float: return self._raft_thickness def _updateRaftThickness(self): @@ -495,7 +497,7 @@ class BuildVolume(SceneNode): self._engine_ready = True self.rebuild() - def _onSettingPropertyChanged(self, setting_key, property_name): + def _onSettingPropertyChanged(self, setting_key: str, property_name: str): if property_name != "value": return @@ -528,7 +530,7 @@ class BuildVolume(SceneNode): if rebuild_me: self.rebuild() - def hasErrors(self): + def hasErrors(self) -> bool: return self._has_errors ## Calls _updateDisallowedAreas and makes sure the changes appear in the From febd1f0f7922304ea7b8c4c19ddc95b8d171dc5b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 16:29:36 +0200 Subject: [PATCH 298/816] Make sure that the UM3 definition is taken into account when optimising Otherwise it acts as if the settings were the defaults for FDMPrinter rather than defaulting to the current UM3 settings. Contributes to issue CURA-3650. --- .../um3_aa0.8_Nylon_Draft_Print.inst.cfg | 5 +--- .../um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 5 +--- .../um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 5 +--- .../um3_aa0.8_PLA_Draft_Print.inst.cfg | 4 +-- .../um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 4 +-- .../um3_aa0.8_PLA_Verydraft_Print.inst.cfg | 4 +-- resources/variants/ultimaker3_aa0.8.inst.cfg | 26 +++++-------------- resources/variants/ultimaker3_bb0.8.inst.cfg | 26 +++---------------- 8 files changed, 19 insertions(+), 60 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index 0ad9d1c637..82bdcea44b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -10,8 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -2 [values] -brim_line_count = 7 -brim_width = 8.0 +brim_width = 3 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True @@ -24,7 +23,6 @@ prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) support_angle = 70 @@ -33,4 +31,3 @@ support_xy_distance = =wall_line_width_0 * 1.5 switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 - diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 338aa6746b..99b433def1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -10,8 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -4 [values] -brim_line_count = 7 -brim_width = 8.0 +brim_width = 3 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True @@ -25,7 +24,6 @@ prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) support_angle = 70 @@ -34,4 +32,3 @@ support_xy_distance = =wall_line_width_0 * 1.5 switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 - diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index b67e93e138..6f41e231c5 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -10,8 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -3 [values] -brim_line_count = 7 -brim_width = 8.0 +brim_width = 3 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True @@ -25,7 +24,6 @@ prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) -raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) support_angle = 70 @@ -34,4 +32,3 @@ support_xy_distance = =wall_line_width_0 * 1.5 switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 - diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 1d059f6687..b9222d6350 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -11,7 +11,7 @@ weight = -2 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_fan_speed_max = =cool_fan_speed +cool_fan_speed_max = =100 cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 @@ -28,9 +28,9 @@ material_standby_temperature = 100 prime_tower_size = 15 support_angle = 70 support_line_width = =line_width * 0.75 +support_pattern = ='triangles' support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x - diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index a7045326ca..852ff52f6d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -11,7 +11,7 @@ weight = -4 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_fan_speed_max = =cool_fan_speed +cool_fan_speed_max = =100 cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 @@ -29,9 +29,9 @@ material_standby_temperature = 100 prime_tower_size = 15 support_angle = 70 support_line_width = =line_width * 0.75 +support_pattern = ='triangles' support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x - diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index cbf783febd..af18a87a20 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -11,7 +11,7 @@ weight = -3 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_fan_speed_max = =cool_fan_speed +cool_fan_speed_max = =100 cool_min_speed = 2 gradual_infill_step_height = =3 * layer_height gradual_infill_steps = 4 @@ -29,9 +29,9 @@ material_standby_temperature = 100 prime_tower_size = 15 support_angle = 70 support_line_width = =line_width * 0.75 +support_pattern = ='triangles' support_xy_distance = =wall_line_width_0 * 1.5 top_bottom_thickness = =layer_height * 4 wall_line_width = =round(line_width * 0.75 / 0.75, 2) wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) wall_thickness = =wall_line_width_0 + wall_line_width_x - diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 2acaa9a98f..bac1826a63 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -9,16 +9,8 @@ type = variant [values] acceleration_enabled = True -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_speed = 7 cool_fan_speed_max = 100 cool_min_speed = 5 @@ -29,16 +21,12 @@ infill_overlap = 0 infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 25 / 25) jerk_wall = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) +line_width = =machine_nozzle_size machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 @@ -46,8 +34,11 @@ material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_standby_temperature = 100 multiple_mesh_overlap = 0 +prime_tower_enable = False prime_tower_size = 16 +prime_tower_wipe_enabled = True retract_at_layer_change = True +retraction_amount = 6.5 retraction_count_max = 25 retraction_extrusion_window = 1 retraction_hop = 2 @@ -56,22 +47,17 @@ retraction_hop_only_when_collides = True skin_overlap = 5 speed_equalize_flow_enabled = True speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom speed_print = 35 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom speed_topbottom = =math.ceil(speed_print * 25 / 35) -speed_wall = =math.ceil(speed_print * 30 / 35) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall support_angle = 60 support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 support_z_distance = =layer_height * 2 switch_extruder_retraction_amount = 16.5 top_bottom_thickness = 1.4 travel_avoid_distance = 3 wall_0_inset = 0 +wall_line_width_x = =wall_line_width wall_thickness = 2 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index 8d8e2a16ed..79032d7ed3 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -9,16 +9,9 @@ type = variant [values] acceleration_enabled = True -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) acceleration_support_interface = =math.ceil(acceleration_topbottom * 100 / 500) -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) brim_width = 3 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height cool_fan_speed = 50 cool_min_speed = 5 infill_line_width = =round(line_width * 0.8 / 0.7, 2) @@ -26,23 +19,16 @@ infill_overlap = 0 infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) jerk_support_interface = =math.ceil(jerk_topbottom * 1 / 5) -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_wipe_enabled = True raft_acceleration = =acceleration_layer_0 raft_airgap = 0 raft_base_speed = 20 @@ -51,12 +37,12 @@ raft_interface_line_spacing = 0.5 raft_interface_line_width = 0.5 raft_interface_speed = 20 raft_interface_thickness = 0.2 -raft_jerk = =jerk_layer_0 raft_margin = 10 raft_speed = 25 raft_surface_layers = 1 retraction_amount = 4.5 retraction_count_max = 15 +retraction_extrusion_window = =retraction_amount retraction_hop = 2 retraction_hop_enabled = True retraction_hop_only_when_collides = True @@ -64,14 +50,9 @@ retraction_min_travel = 5 retraction_prime_speed = 15 skin_overlap = 5 speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom speed_print = 35 -speed_support = =speed_wall_0 speed_support_interface = =math.ceil(speed_topbottom * 15 / 20) -speed_topbottom = =math.ceil(speed_print * 20 / 35) -speed_wall = =math.ceil(speed_print * 30 / 35) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -speed_wall_x = =speed_wall support_angle = 60 support_bottom_height = =layer_height * 2 support_bottom_stair_step_height = =layer_height @@ -91,4 +72,5 @@ switch_extruder_retraction_amount = 12 top_bottom_thickness = 1 travel_avoid_distance = 3 wall_0_inset = 0 +wall_line_width_x = =wall_line_width wall_thickness = 1 From 53476b62bc9843a2a848f5ab77c6dd41e1786e90 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 16:33:25 +0200 Subject: [PATCH 299/816] Re-add nozzle size for 0.8mm variants Arguably the most important one. This is omitted from the original profiles so the original script assumed it had a nozzle size of 0.4mm. Contributes to issue CURA-3650. --- resources/variants/ultimaker3_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_bb0.8.inst.cfg | 1 + 2 files changed, 2 insertions(+) diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index bac1826a63..a938ea1a8f 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -30,6 +30,7 @@ line_width = =machine_nozzle_size machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_size = 0.8 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_standby_temperature = 100 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index 79032d7ed3..104b4d09d1 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -24,6 +24,7 @@ jerk_support_interface = =math.ceil(jerk_topbottom * 1 / 5) layer_height = 0.2 machine_min_cool_heat_time_window = 15 machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_size = 0.8 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 From 35fd58f721ab2b918f85c1bff2455ab7cdae2eda Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 17:23:29 +0200 Subject: [PATCH 300/816] Optimise 0.4mm profiles for CPEP, PC and TPU These optimisations should only remove settings that are exactly equal to the parent profile. Support interface settings are an exception, since they were defining non-existing settings in the original profiles. The stand-by temperature is also an exception, since the stand-by temperature of the material profile is set in stone because of firmware. Contributes to issue CURA-3650. --- .../um3_aa0.4_CPEP_Draft_Print.inst.cfg | 145 +++++--------- .../um3_aa0.4_CPEP_Fast_Print.inst.cfg | 144 +++++--------- .../um3_aa0.4_CPEP_High_Quality.inst.cfg | 146 +++++--------- .../um3_aa0.4_CPEP_Normal_Quality.inst.cfg | 145 +++++--------- .../um3_aa0.4_PC_Draft_Print.inst.cfg | 179 +++++++---------- .../um3_aa0.4_PC_Fast_Print.inst.cfg | 177 +++++++---------- .../um3_aa0.4_PC_High_Quality.inst.cfg | 180 +++++++----------- .../um3_aa0.4_PC_Normal_Quality.inst.cfg | 177 +++++++---------- .../um3_aa0.4_TPU_Draft_Print.inst.cfg | 172 +++++++---------- .../um3_aa0.4_TPU_Fast_Print.inst.cfg | 173 +++++++---------- .../um3_aa0.4_TPU_Normal_Quality.inst.cfg | 170 +++++++---------- 11 files changed, 658 insertions(+), 1150 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 9d67e2fadd..ee03b6dbcf 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -1,95 +1,50 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_cpe_plus_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 1 -cool_fan_speed_max = 80 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.35 / 0.35, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 107 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 10 -material_print_temperature_layer_0 = =material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -retraction_amount = 7 -retraction_combing = off -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 0.2 -retraction_hop_enabled = False -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 65 / 50) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 50 / 50) -speed_wall_0 = =math.ceil(speed_wall * 40 / 50) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_cpe_plus_ultimaker3_AA_0.4 +weight = -2 + +[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_pattern = triangles +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +layer_height = 0.2 +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 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_size = 17 +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 * 65 / 50) +speed_travel = 250 +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 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_thickness = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index bf6f3bcb55..b61a7ee9de 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -1,95 +1,49 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_cpe_plus_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 1 -cool_fan_speed_max = 80 -cool_min_layer_time = 5 -cool_min_speed = 6 -infill_line_width = =round(line_width * 0.35 / 0.35, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 107 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 10 -material_print_temperature_layer_0 = =material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -retraction_amount = 7 -retraction_combing = off -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 0.2 -retraction_hop_enabled = False -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 45 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 55 / 45) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 45 / 45) -speed_wall_0 = =math.ceil(speed_wall * 35 / 45) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_cpe_plus_ultimaker3_AA_0.4 +weight = -1 + +[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_pattern = triangles +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +layer_height = 0.15 +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 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_size = 17 +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 * 55 / 45) +speed_travel = 250 +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 +travel_avoid_distance = 3 +wall_0_inset = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 3a90954640..1507de5a6b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -1,95 +1,51 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_cpe_plus_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 1 -cool_fan_speed_max = 50 -cool_min_layer_time = 5 -cool_min_speed = 5 -infill_line_width = =round(line_width * 0.35 / 0.35, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -retraction_amount = 7 -retraction_combing = off -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 0.2 -retraction_hop_enabled = False -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 40 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 35 / 40) -speed_wall_0 = =math.ceil(speed_wall * 30 / 35) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_cpe_plus_ultimaker3_AA_0.4 +weight = 1 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 50 +cool_min_speed = 5 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_pattern = triangles +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +layer_height = 0.06 +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 + 2 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_size = 17 +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_travel = 250 +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 +travel_avoid_distance = 3 +wall_0_inset = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index b78e1aa3de..88090b12cd 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -1,95 +1,50 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_cpe_plus_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 1 -cool_fan_speed_max = 50 -cool_min_layer_time = 5 -cool_min_speed = 7 -infill_line_width = =round(line_width * 0.35 / 0.35, 2) -infill_overlap = 0 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 5 -material_print_temperature_layer_0 = =material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = True -prime_tower_size = 17 -prime_tower_wipe_enabled = True -retraction_amount = 7 -retraction_combing = off -retraction_count_max = 25 -retraction_extrusion_window = 1 -retraction_hop = 0.2 -retraction_hop_enabled = False -retraction_hop_only_when_collides = True -skin_overlap = 20 -speed_infill = =speed_print -speed_layer_0 = 20 -speed_prime_tower = =speed_topbottom -speed_print = 40 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 30 / 35) -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 35 / 40) -speed_wall_0 = =math.ceil(speed_wall * 30 / 35) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.3 / 0.35, 2) -wall_thickness = 1.3 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_cpe_plus_ultimaker3_AA_0.4 +weight = 0 + +[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_pattern = triangles +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 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_size = 17 +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_travel = 250 +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 +travel_avoid_distance = 3 +wall_0_inset = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 4046279f19..11dad72e08 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -1,113 +1,66 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_pc_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -brim_width = 20 -cool_fan_full_at_height = =layer_height_0 + layer_height -cool_fan_speed = 0 -cool_fan_speed_max = 90 -cool_min_layer_time = 5 -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_sparse_density = 20 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_flow = 100 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_airgap = 0.25 -raft_margin = 15 -retraction_amount = 8 -retraction_count_max = 80 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 30 -speed_infill = =speed_print -speed_layer_0 = 25 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = 25 -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 50) -speed_wall_0 = =math.ceil(speed_wall * 25 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_infill_rate = 15 -support_pattern = zigzag -support_roof_density = 100 -support_roof_enable = False -support_roof_line_distance = 0.4 -support_roof_pattern = lines -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -xy_offset = -0.15 -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) -wall_thickness = 1.2 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_pc_ultimaker3_AA_0.4 +weight = -2 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = raft +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 +layer_height = 0.2 +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_size = 16 +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_travel = 250 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_line_distance = 0.4 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 +xy_offset = -0.15 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index aa5d2448c3..39b02f392d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -1,112 +1,65 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_pc_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -brim_width = 20 -cool_fan_full_at_height = =layer_height_0 + layer_height -cool_fan_speed = 0 -cool_fan_speed_max = 85 -cool_min_layer_time = 5 -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_sparse_density = 20 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_flow = 100 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature + 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_airgap = 0.25 -raft_margin = 15 -retraction_amount = 8 -retraction_count_max = 80 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 30 -speed_infill = =speed_print -speed_layer_0 = 25 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = 25 -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 50) -speed_wall_0 = =math.ceil(speed_wall * 25 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_infill_rate = 15 -support_pattern = zigzag -support_roof_density = 100 -support_roof_enable = False -support_roof_line_distance = 0.4 -support_roof_pattern = lines -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -xy_offset = -0.15 -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) -wall_thickness = 1.2 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_pc_ultimaker3_AA_0.4 +weight = -1 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = raft +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 +layer_height = 0.15 +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_size = 16 +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_travel = 250 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_line_distance = 0.4 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 +xy_offset = -0.15 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index f770e06c2f..ab8a520b5b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -1,114 +1,66 @@ -[general] -version = 2 -name = High Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = high -material = generic_pc_ultimaker3_AA_0.4 -weight = 1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -brim_width = 20 -cool_fan_full_at_height = =layer_height_0 + layer_height -cool_fan_speed = 0 -cool_fan_speed_max = 50 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 5 -cool_min_speed = 8 -infill_line_width = =round(line_width * 0.4 / 0.35, 2) -infill_overlap = 0 -infill_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.06 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_flow = 100 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature - 10 -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_airgap = 0.25 -raft_margin = 15 -retraction_amount = 8 -retraction_count_max = 80 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 30 -speed_infill = =speed_print -speed_layer_0 = 25 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = 25 -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 50) -speed_wall_0 = =math.ceil(speed_wall * 25 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_infill_rate = 15 -support_pattern = zigzag -support_roof_density = 100 -support_roof_enable = False -support_roof_line_distance = 0.4 -support_roof_pattern = lines -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -xy_offset = -0.15 -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) -wall_thickness = 1.2 - +[general] +version = 2 +name = High Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = high +material = generic_pc_ultimaker3_AA_0.4 +weight = 1 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = raft +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 = 8 +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 +layer_height = 0.06 +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_size = 16 +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_travel = 250 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_line_distance = 0.4 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 +xy_offset = -0.15 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 2b66d22ab5..6d92720ae4 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -1,113 +1,64 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_pc_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = raft -brim_width = 20 -cool_fan_full_at_height = =layer_height_0 + layer_height -cool_fan_speed = 0 -cool_fan_speed_max = 50 -cool_min_layer_time = 5 -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_overlap_mm = 0.05 -infill_pattern = triangles -infill_sparse_density = 20 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -line_width = =machine_nozzle_size * 0.875 -machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.85 -machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 107 -material_flow = 100 -material_initial_print_temperature = =material_print_temperature - 5 -material_final_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -ooze_shield_angle = 40 -ooze_shield_dist = 2 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -raft_airgap = 0.25 -raft_margin = 15 -retraction_amount = 8 -retraction_count_max = 80 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 30 -speed_infill = =speed_print -speed_layer_0 = 25 -speed_prime_tower = =speed_topbottom -speed_print = 50 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = 25 -speed_travel = 250 -speed_wall = =math.ceil(speed_print * 40 / 50) -speed_wall_0 = =math.ceil(speed_wall * 25 / 40) -speed_wall_x = =speed_wall -support_angle = 60 -support_bottom_distance = =support_z_distance -support_infill_rate = 15 -support_pattern = zigzag -support_roof_density = 100 -support_roof_enable = False -support_roof_line_distance = 0.4 -support_roof_pattern = lines -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 1.2 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -xy_offset = -0.15 -wall_0_inset = 0 -wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) -wall_thickness = 1.2 \ No newline at end of file +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pc_ultimaker3_AA_0.4 +weight = 0 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = raft +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_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_standby_temperature = 100 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +prime_tower_size = 16 +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_travel = 250 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_line_distance = 0.4 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 +xy_offset = -0.15 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 8f9c1c5af1..1787b266e2 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -1,106 +1,66 @@ -[general] -version = 2 -name = Draft Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = draft -material = generic_tpu_ultimaker3_AA_0.4 -weight = -2 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 8.75 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 20 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 6 -cool_min_speed = 4 -gradual_infill_step_height = =5 * layer_height -gradual_infill_steps = 4 -infill_line_width = =round(line_width * 0.38 / 0.38, 2) -infill_overlap = 0 -infill_pattern = tetrahedral -infill_sparse_density = 96 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.2 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -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 = 0 -material_final_print_temperature = =material_print_temperature - 10 -material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 5 -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 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retraction_amount = 6.5 -retraction_count_max = 12 -retraction_extra_prime_amount = 0.8 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 15 -speed_equalize_flow_enabled = True -speed_infill = =speed_print -speed_layer_0 = 18 -speed_prime_tower = =speed_topbottom -speed_print = 25 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 25 / 25) -speed_travel = 300 -speed_wall = =math.ceil(speed_print * 25 / 25) -speed_wall_0 = =math.ceil(speed_wall * 25 / 25) -speed_wall_x = =speed_wall -support_angle = 50 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 0.7 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =line_width -wall_thickness = 0.76 +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_tpu_ultimaker3_AA_0.4 +weight = -2 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_sparse_density = 96 +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +layer_height = 0.2 +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_final_print_temperature = =material_print_temperature - 10 +material_flow = 106 +material_initial_print_temperature = =material_print_temperature - 5 +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 +prime_tower_enable = True +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_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index 46c6ec88d8..f53d3fd285 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -1,106 +1,67 @@ -[general] -version = 2 -name = Fast Print -definition = ultimaker3 - -[metadata] -type = quality -quality_type = fast -material = generic_tpu_ultimaker3_AA_0.4 -weight = -1 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 8.75 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 20 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 6 -cool_min_speed = 4 -gradual_infill_step_height = =5 * layer_height -gradual_infill_steps = 4 -infill_line_width = =round(line_width * 0.38 / 0.38, 2) -infill_overlap = 0 -infill_pattern = tetrahedral -infill_sparse_density = 96 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.15 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -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 = 0 -material_final_print_temperature = =material_print_temperature - 10 -material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 5 -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 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retraction_amount = 7 -retraction_count_max = 12 -retraction_extra_prime_amount = 0.8 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 15 -speed_equalize_flow_enabled = True -speed_infill = =speed_print -speed_layer_0 = 18 -speed_prime_tower = =speed_topbottom -speed_print = 25 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 25 / 25) -speed_travel = 300 -speed_wall = =math.ceil(speed_print * 25 / 25) -speed_wall_0 = =math.ceil(speed_wall * 25 / 25) -speed_wall_x = =speed_wall -support_angle = 50 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 0.7 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =line_width -wall_thickness = 0.76 +[general] +version = 2 +name = Fast Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = fast +material = generic_tpu_ultimaker3_AA_0.4 +weight = -1 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_sparse_density = 96 +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +layer_height = 0.15 +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_final_print_temperature = =material_print_temperature - 10 +material_flow = 106 +material_initial_print_temperature = =material_print_temperature - 5 +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 +prime_tower_enable = True +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_amount = 7 +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index ae91b6f19d..0b475eda92 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -1,106 +1,64 @@ -[general] -version = 2 -name = Normal Quality -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_tpu_ultimaker3_AA_0.4 -weight = 0 - -[values] -acceleration_enabled = True -acceleration_infill = =acceleration_print -acceleration_layer_0 = =acceleration_topbottom -acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_print = 4000 -acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) -acceleration_support_infill = =acceleration_support -acceleration_support_interface = =acceleration_topbottom -acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000) -acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000) -acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000) -acceleration_wall_x = =acceleration_wall -adhesion_type = brim -brim_width = 8.75 -cool_fan_full_at_height = =layer_height_0 + 4 * layer_height -cool_fan_speed = 20 -cool_fan_speed_max = 100 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 6 -cool_min_speed = 4 -gradual_infill_step_height = =5 * layer_height -gradual_infill_steps = 4 -infill_line_width = =round(line_width * 0.38 / 0.38, 2) -infill_overlap = 0 -infill_pattern = tetrahedral -infill_sparse_density = 96 -infill_wipe_dist = 0.1 -jerk_enabled = True -jerk_infill = =jerk_print -jerk_layer_0 = =jerk_topbottom -jerk_prime_tower = =math.ceil(jerk_print * 15 / 25) -jerk_print = 25 -jerk_support = =math.ceil(jerk_print * 15 / 25) -jerk_support_infill = =jerk_support -jerk_support_interface = =jerk_topbottom -jerk_topbottom = =math.ceil(jerk_print * 5 / 25) -jerk_wall = =math.ceil(jerk_print * 10 / 25) -jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -jerk_wall_x = =jerk_wall -layer_height = 0.1 -layer_height_0 = =round(machine_nozzle_size / 1.5, 2) -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 = 0 -material_final_print_temperature = =material_print_temperature - 10 -material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 10 -material_print_temperature = =default_material_print_temperature -material_print_temperature_layer_0 = =default_material_print_temperature -material_standby_temperature = 100 -multiple_mesh_overlap = 0 -prime_tower_enable = True -prime_tower_size = 16 -prime_tower_wipe_enabled = True -retraction_amount = 6.5 -retraction_count_max = 12 -retraction_extra_prime_amount = 0.8 -retraction_extrusion_window = 1 -retraction_hop = 2 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 0.8 -retraction_prime_speed = 15 -retraction_speed = 35 -skin_overlap = 15 -speed_equalize_flow_enabled = True -speed_infill = =speed_print -speed_layer_0 = 18 -speed_prime_tower = =speed_topbottom -speed_print = 25 -speed_support = =speed_wall_0 -speed_support_interface = =speed_topbottom -speed_topbottom = =math.ceil(speed_print * 25 / 25) -speed_travel = 300 -speed_wall = =math.ceil(speed_print * 25 / 25) -speed_wall_0 = =math.ceil(speed_wall * 25 / 25) -speed_wall_x = =speed_wall -support_angle = 50 -support_bottom_distance = =support_z_distance / 2 -support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 2.5 -support_xy_distance_overhang = =wall_line_width_0 -support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 15 -switch_extruder_retraction_amount = 20 -switch_extruder_retraction_speeds = 35 -top_bottom_thickness = 0.7 -travel_avoid_distance = 3 -travel_compensate_overlapping_walls_enabled = True -wall_0_inset = 0 -wall_line_width_x = =line_width -wall_thickness = 0.76 +[general] +version = 2 +name = Normal Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_tpu_ultimaker3_AA_0.4 +weight = 0 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_sparse_density = 96 +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_final_print_temperature = =material_print_temperature - 10 +material_flow = 106 +material_initial_print_temperature = =material_print_temperature - 10 +material_print_temperature_layer_0 = =default_material_print_temperature +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = True +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_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 From cc2d0d3cfed89f8c81d97cd44becf89893145b4b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Apr 2017 15:45:33 +0200 Subject: [PATCH 301/816] Add 0.8mm TPU profiles They have already been optimised together with ABS, CPE, PLA, Nylon and PVA. Contributes to issue CURA-3650. --- .../um3_aa0.8_TPU_Normal_Print.inst.cfg | 62 ++++++++++++++++++ .../um3_aa0.8_TPU_Superdraft_Print.inst.cfg | 63 +++++++++++++++++++ .../um3_aa0.8_TPU_Verydraft_Print.inst.cfg | 62 ++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg create mode 100644 resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg create mode 100644 resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg new file mode 100644 index 0000000000..3f3eeb145e --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 2 +name = Draft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = draft +material = generic_tpu_ultimaker3_AA_0.8 +weight = -2 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +expand_skins_expand_distance = =line_width * 2 +expand_skins_into_infill = True +expand_upper_skins = True +gradual_infill_step_height = =4 * layer_height +gradual_infill_steps = 5 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +infill_sparse_density = 80 +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 = 0 +material_flow = 105 +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_hop_only_when_collides = False +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +skin_overlap = 15 +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 25 / 30) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..38930d1507 --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 2 +name = Superdraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_tpu_ultimaker3_AA_0.8 +weight = -4 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +expand_skins_expand_distance = =line_width * 2 +expand_skins_into_infill = True +expand_upper_skins = True +gradual_infill_step_height = =4 * layer_height +gradual_infill_steps = 5 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +infill_sparse_density = 80 +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) +layer_height = 0.4 +material_bed_temperature_layer_0 = 0 +material_flow = 105 +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_hop_only_when_collides = False +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +skin_overlap = 15 +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 30) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..edc9f61f0e --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 2 +name = Verydraft Print +definition = ultimaker3 + +[metadata] +type = quality +quality_type = verydraft +material = generic_tpu_ultimaker3_AA_0.8 +weight = -3 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +expand_skins_expand_distance = =line_width * 2 +expand_skins_into_infill = True +expand_upper_skins = True +gradual_infill_step_height = =4 * layer_height +gradual_infill_steps = 5 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +infill_sparse_density = 80 +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) +layer_height = 0.3 +material_bed_temperature_layer_0 = 0 +material_flow = 105 +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_hop_only_when_collides = False +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +skin_overlap = 15 +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 23 / 30) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + From 558b446b4a44ec82102788a68aeec2b1315f4064 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Apr 2017 17:32:47 +0200 Subject: [PATCH 302/816] Fixed UMO g-code files not being loadable The processGcode did not take gcode + comments in the same line into account CURA-3677 --- plugins/GCodeReader/GCodeReader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index 1edce8a753..c59e6dce72 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -179,6 +179,7 @@ class GCodeReader(MeshReader): def _processGCode(self, G, line, position, path): func = getattr(self, "_gCode%s" % G, None) + line = line.split(";", 1)[0] # Remove comments (if any) if func is not None: s = line.upper().split(" ") x, y, z, e = None, None, None, None From 3edff39705b5fc8307db7eff3f09de921434a757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udio=20=28Patola=29=20Sampaio?= Date: Wed, 12 Apr 2017 13:04:35 -0300 Subject: [PATCH 303/816] Updated translations for Cura 2.5 --- resources/i18n/ptbr/cura.po | 158 ++++++++++---------- resources/i18n/ptbr/fdmextruder.def.json.po | 2 +- resources/i18n/ptbr/fdmprinter.def.json.po | 100 ++++++------- 3 files changed, 131 insertions(+), 129 deletions(-) diff --git a/resources/i18n/ptbr/cura.po b/resources/i18n/ptbr/cura.po index b21b36cc9c..681249d0c4 100644 --- a/resources/i18n/ptbr/cura.po +++ b/resources/i18n/ptbr/cura.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-27 17:27+0200\n" -"PO-Revision-Date: 2017-01-21 09:40+0200\n" +"PO-Revision-Date: 2017-04-09 18:00-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: LANGUAGE \n" "Language: ptbr\n" @@ -66,7 +66,7 @@ msgstr "Arquivo X3D" #: /home/ruben/Projects/Cura/plugins/GCodeWriter/__init__.py:12 msgctxt "@label" msgid "GCode Writer" -msgstr "Gravador de G-Code" +msgstr "Gerador de G-Code" #: /home/ruben/Projects/Cura/plugins/GCodeWriter/__init__.py:15 msgctxt "@info:whatsthis" @@ -157,7 +157,7 @@ msgstr "Imprimir pela USB" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:30 msgctxt "@info:status" msgid "Connected via USB" -msgstr "Conectado na USB" +msgstr "Conectado via USB" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:152 msgctxt "@info:status" @@ -167,7 +167,7 @@ msgstr "Incapaz de iniciar novo trabalho porque a impressora está ocupada ou n #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:450 msgctxt "@info:status" msgid "This printer does not support USB printing because it uses UltiGCode flavor." -msgstr "" +msgstr "Esta impressora não suporta impressão USB porque usa G-Code UltiGCode." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:454 msgctxt "@info:status" @@ -331,17 +331,17 @@ msgstr "Envia pedido de acesso à impressora" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:336 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." -msgstr "" +msgstr "Conectado pela rede. Por favor aprove a requisição de acesso na impressora." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:343 msgctxt "@info:status" msgid "Connected over the network." -msgstr "" +msgstr "Conectado pela rede." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:356 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." -msgstr "" +msgstr "Conectado pela rede. Sem acesso para controlar a impressora." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:361 msgctxt "@info:status" @@ -586,17 +586,17 @@ msgstr "Camadas" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:91 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 de Arame estiver habilitada" +msgstr "O Cura não mostra as camadas corretamente quando Impressão em Arame estiver habilitada" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py:14 msgctxt "@label" msgid "Version Upgrade 2.4 to 2.5" -msgstr "" +msgstr "Atualizar versão 2.4 para 2.5" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py:17 msgctxt "@info:whatsthis" msgid "Upgrades configurations from Cura 2.4 to Cura 2.5." -msgstr "" +msgstr "Atualiza as configurações do Cura 2.4 para o Cura 2.5" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py:14 msgctxt "@label" @@ -763,22 +763,22 @@ msgstr "Sólido" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:12 msgctxt "@label" msgid "G-code Reader" -msgstr "" +msgstr "Leitor de G-Code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:15 msgctxt "@info:whatsthis" msgid "Allows loading and displaying G-code files." -msgstr "" +msgstr "Permite carregar e mostrar arquivos G-Code." #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:25 msgctxt "@item:inlistbox" msgid "G File" -msgstr "" +msgstr "Arquivo G" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:227 msgctxt "@info:status" msgid "Parsing G-code" -msgstr "" +msgstr "Interpretando G-Code" #: /home/ruben/Projects/Cura/plugins/CuraProfileWriter/__init__.py:12 msgctxt "@label" @@ -799,7 +799,7 @@ msgstr "Perfil do Cura" #: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:13 msgctxt "@label" msgid "3MF Writer" -msgstr "Gravador 3MF" +msgstr "Gerador 3MF" #: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:16 msgctxt "@info:whatsthis" @@ -860,7 +860,7 @@ msgstr "Provê suporte para importar perfis do Cura." #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" -msgstr "" +msgstr "Arquivo pré-fatiado {0}" #: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:376 msgctxt "@item:material" @@ -986,13 +986,13 @@ msgstr "%(width).1f x %(depth).1f x %(height).1f mm" #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" -msgstr "" +msgstr "Somente um arquivo G-Code pode ser carregado por vez. Pulando importação de {0}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1201 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" -msgstr "" +msgstr "Não é possível abrir nenhum outro arquivo se G-Code estiver sendo carregado. Pulando importação de {0}" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:27 msgctxt "@title" @@ -1359,72 +1359,72 @@ msgstr "Troca os scripts de pós-processamento ativos" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:59 msgctxt "@label" msgid "View Mode: Layers" -msgstr "" +msgstr "Modo de Visão: Camadas" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:75 msgctxt "@label" msgid "Color scheme" -msgstr "" +msgstr "Esquema de Cores" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:88 msgctxt "@label:listbox" msgid "Material Color" -msgstr "" +msgstr "Cor do Material" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:92 msgctxt "@label:listbox" msgid "Line Type" -msgstr "" +msgstr "Tipo de Linha" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:133 msgctxt "@label" msgid "Compatibility Mode" -msgstr "" +msgstr "Modo de Compatibilidade" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:171 msgctxt "@label" msgid "Extruder %1" -msgstr "" +msgstr "Extrusor %1" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:185 msgctxt "@label" msgid "Show Travels" -msgstr "" +msgstr "Mostrar Viagens" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:206 msgctxt "@label" msgid "Show Helpers" -msgstr "" +msgstr "Mostrar Assistentes" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:227 msgctxt "@label" msgid "Show Shell" -msgstr "" +msgstr "Mostrar Perímetro" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:248 msgctxt "@label" msgid "Show Infill" -msgstr "" +msgstr "Mostrar Preenchimento" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:269 msgctxt "@label" msgid "Only Show Top Layers" -msgstr "" +msgstr "Somente Mostrar Camadas Superiores" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:277 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" -msgstr "" +msgstr "Mostrar 5 Camadas Superiores Detalhadas" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:285 msgctxt "@label" msgid "Top / Bottom" -msgstr "" +msgstr "Topo / Base" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:306 msgctxt "@label" msgid "Inner Wall" -msgstr "" +msgstr "Parede Interna" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -1598,8 +1598,8 @@ msgstr "Não no perfil" msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" -msgstr[0] "%1 sobreposição" -msgstr[1] "%1 sobreposições" +msgstr[0] "%1 sobrepujança" +msgstr[1] "%1 sobrepujanças" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:234 msgctxt "@action:label" @@ -1610,8 +1610,8 @@ msgstr "Derivado de" msgctxt "@action:label" msgid "%1, %2 override" msgid_plural "%1, %2 overrides" -msgstr[0] "%1, %2 sobreposição" -msgstr[1] "%1, %2 sobreposições" +msgstr[0] "%1, %2 sobrepujança" +msgstr[1] "%1, %2 sobrepujanças" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:255 msgctxt "@action:label" @@ -1891,7 +1891,7 @@ msgstr "Tem certeza que deseja abortar a impressão?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:14 msgctxt "@title:window" msgid "Discard or Keep changes" -msgstr "" +msgstr "Descartar ou Manter alterações" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:59 msgctxt "@text:window" @@ -1899,54 +1899,56 @@ msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" msgstr "" +"Você personalizou alguns ajustes de perfil.\n" +"Gostaria de manter ou descartar estes ajustes?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:108 msgctxt "@title:column" msgid "Profile settings" -msgstr "" +msgstr "Ajustes de perfil" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:115 msgctxt "@title:column" msgid "Default" -msgstr "" +msgstr "Default" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:122 msgctxt "@title:column" msgid "Customized" -msgstr "" +msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:152 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 msgctxt "@option:discardOrKeep" msgid "Always ask me this" -msgstr "" +msgstr "Sempre perguntar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:153 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:392 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" -msgstr "" +msgstr "Descartar e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:154 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:393 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" -msgstr "" +msgstr "Manter e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:189 msgctxt "@action:button" msgid "Discard" -msgstr "" +msgstr "Descartar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:202 msgctxt "@action:button" msgid "Keep" -msgstr "" +msgstr "Manter" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:215 msgctxt "@action:button" msgid "Create New Profile" -msgstr "" +msgstr "Criar Novo Perfil" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:29 msgctxt "@title" @@ -2006,7 +2008,7 @@ msgstr "Comprimento do Filamento" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:190 msgctxt "@label" msgid "Cost per Meter" -msgstr "" +msgstr "Custo por Metro" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 msgctxt "@label" @@ -2072,7 +2074,7 @@ msgstr "Idioma:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:157 msgctxt "@label" msgid "Currency:" -msgstr "" +msgstr "Moeda:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:173 msgctxt "@label" @@ -2082,12 +2084,12 @@ msgstr "A aplicação deverá ser reiniciada para que as alterações de idioma #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:190 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." -msgstr "" +msgstr "Fatiar automaticamente quando mudar ajustes." #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:199 msgctxt "@option:check" msgid "Slice automatically" -msgstr "" +msgstr "Fatiar automaticamente" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:213 msgctxt "@label" @@ -2137,17 +2139,17 @@ msgstr "Automaticamente fazer os modelos caírem na mesa de impressão." #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:278 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" -msgstr "" +msgstr "A Visão de Camada deve ser forçada a ficar em modo de compatibilidade?" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:283 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" -msgstr "" +msgstr "Forçar modo de compatibilidade da visão de camadas (requer reinício)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:299 msgctxt "@label" msgid "Opening and saving files" -msgstr "" +msgstr "Abrindo e salvando arquivos" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:305 msgctxt "@info:tooltip" @@ -2182,7 +2184,7 @@ msgstr "Adicionar prefixo de máquina ao nome do trabalho" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:347 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" -msgstr "Um resumo deve ser exibido quando se estiver salvando um arquivo de projeto?" +msgstr "Um resumo deve ser exibido ao salvar um arquivo de projeto?" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:351 msgctxt "@option:check" @@ -2192,12 +2194,12 @@ msgstr "Mostrar diálogo de resumo ao salvar projeto" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." -msgstr "" +msgstr "Quando você faz alterações em um perfil e troca para um diferent, um diálogo aparecerá perguntando se você quer manter ou aplicar suas modificações, ou você pode forçar um comportamento default e não ter o diálogo." #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:378 msgctxt "@label" msgid "Override Profile" -msgstr "" +msgstr "Sobrepujar Perfil" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:427 msgctxt "@label" @@ -2330,7 +2332,7 @@ msgstr "Descartar ajustes atuais" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:190 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 sobreposições na lista abaixo." +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:197 msgctxt "@action:label" @@ -2449,12 +2451,12 @@ msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:231 msgctxt "@label" msgid "%1 m / ~ %2 g / ~ %4 %3" -msgstr "" +msgstr "%1 m / ~ %2 g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:236 msgctxt "@label" msgid "%1 m / ~ %2 g" -msgstr "%1 m/~ %2 g" +msgstr "%1 m / ~ %2 g" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" @@ -2488,7 +2490,7 @@ msgstr "Framework de Aplicações" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 msgctxt "@label" msgid "GCode generator" -msgstr "Gravador de G-Code" +msgstr "Gerador de G-Code" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 msgctxt "@label" @@ -2538,7 +2540,7 @@ msgstr "Biblioteca de suporte para manuseamento de arquivos STL" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 msgctxt "@label" msgid "Support library for handling 3MF files" -msgstr "" +msgstr "Biblioteca de suporte para manuseamento de arquivos 3MF" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" @@ -2696,7 +2698,7 @@ msgstr "Abrir &Recente" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:33 msgctxt "@info:status" msgid "No printer connected" -msgstr "" +msgstr "Nenhuma impressora conectada" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:90 msgctxt "@label" @@ -2706,22 +2708,22 @@ msgstr "Hotend" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:119 msgctxt "@tooltip" msgid "The current temperature of this extruder." -msgstr "" +msgstr "A temperatura atual deste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:154 msgctxt "@tooltip" msgid "The colour of the material in this extruder." -msgstr "" +msgstr "A cor do material neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:186 msgctxt "@tooltip" msgid "The material in this extruder." -msgstr "" +msgstr "O material neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:218 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." -msgstr "" +msgstr "O bico inserido neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:249 msgctxt "@label" @@ -2731,32 +2733,32 @@ msgstr "Mesa de Impressão" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:278 msgctxt "@tooltip" msgid "The target temperature of the heated bed. The bed will heat up or cool down towards this temperature. If this is 0, the bed heating is turned off." -msgstr "" +msgstr "A temperatura-alvo da mesa aquecida. A mesa aquecerá ou resfriará para esta temperatura. Se for zero, o aquecimento é desligado." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:310 msgctxt "@tooltip" msgid "The current temperature of the heated bed." -msgstr "" +msgstr "A temperatura atual da mesa aquecida." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:379 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the bed to." -msgstr "" +msgstr "A temperatura à qual pré-aquecer a mesa." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:573 msgctxt "@button Cancel pre-heating" msgid "Cancel" -msgstr "" +msgstr "Cancelar" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:573 msgctxt "@button" msgid "Pre-heat" -msgstr "" +msgstr "Pré-aquecer" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:600 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 "" +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/PrintMonitor.qml:633 msgctxt "@label" @@ -2821,7 +2823,7 @@ msgstr "Administrar Materiais..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:126 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" -msgstr "&Atualizar perfil com valores e sobreposições atuais" +msgstr "&Atualizar perfil com valores e sobrepujanças atuais" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 msgctxt "@action:inmenu menubar:profile" @@ -2951,7 +2953,7 @@ msgstr "Por favor carregue um modelo 3D" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:33 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" -msgstr "" +msgstr "Pronto para fatiar" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:35 msgctxt "@label:PrintjobStatus" @@ -2971,17 +2973,17 @@ msgstr "Incapaz de Fatiar" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" -msgstr "" +msgstr "Fatiamento indisponível" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:136 msgctxt "@label:Printjob" msgid "Prepare" -msgstr "" +msgstr "Preparar" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:136 msgctxt "@label:Printjob" msgid "Cancel" -msgstr "" +msgstr "Cancelar" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:276 msgctxt "@info:tooltip" @@ -3213,7 +3215,7 @@ msgid "" "\n" "Click to open the profile manager." msgstr "" -"Alguns ajustes/sobreposições têm valores diferentes dos que estão armazenados no perfil.\n" +"Alguns ajustes/sobrepujanças têm valores diferentes dos que estão armazenados no perfil.\n" "\n" "Clique para abrir o gerenciador de perfis." diff --git a/resources/i18n/ptbr/fdmextruder.def.json.po b/resources/i18n/ptbr/fdmextruder.def.json.po index 5976c50643..1fb4e413ff 100644 --- a/resources/i18n/ptbr/fdmextruder.def.json.po +++ b/resources/i18n/ptbr/fdmextruder.def.json.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-03-27 17:27+0000\n" -"PO-Revision-Date: 2016-01-25 05:05-0300\n" +"PO-Revision-Date: 2017-04-10 09:05-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: LANGUAGE\n" "Language: ptbr\n" diff --git a/resources/i18n/ptbr/fdmprinter.def.json.po b/resources/i18n/ptbr/fdmprinter.def.json.po index f18b80ec7f..a3607ccac5 100644 --- a/resources/i18n/ptbr/fdmprinter.def.json.po +++ b/resources/i18n/ptbr/fdmprinter.def.json.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-03-27 17:27+0000\n" -"PO-Revision-Date: 2017-01-24 01:00-0300\n" +"PO-Revision-Date: 2017-04-10 19:00-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: LANGUAGE\n" "Language: ptbr\n" @@ -30,7 +30,7 @@ msgstr "Tipo de Máquina" #: fdmprinter.def.json msgctxt "machine_name description" msgid "The name of your 3D printer model." -msgstr "Nome do seu model de impressora 3D." +msgstr "Nome do seu modelo de impressora 3D." #: fdmprinter.def.json msgctxt "machine_show_variants label" @@ -254,12 +254,12 @@ msgstr "Distância da ponta do bico onde 'estacionar' o filamento quando seu ext #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled label" msgid "Enable Nozzle Temperature Control" -msgstr "" +msgstr "Habilitar Controle de Temperatura do Bico" #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled description" msgid "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura." -msgstr "" +msgstr "Se a temperatura deve ser controlada pelo Cura. Desligue para controlar a temperatura do bico fora do Cura." #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" @@ -579,7 +579,7 @@ msgstr "Altura de Camada" #: fdmprinter.def.json msgctxt "layer_height description" msgid "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution." -msgstr "A altura das camadas em mm. Valores mais altos produzem impressões mais rápidas em resoluções baixas, valores mais baixos produzem impressão mais lentas em resolução mais alta. Recomenda-se não deixar a altura de camada maior que 80%% do diâmetro do bico." +msgstr "A altura das camadas em mm. Valores mais altos produzem impressões mais rápidas em resoluções baixas, valores mais baixos produzem impressão mais lentas em resolução mais alta. Recomenda-se não deixar a altura de camada maior que 80% do diâmetro do bico." #: fdmprinter.def.json msgctxt "layer_height_0 label" @@ -809,37 +809,37 @@ msgstr "Ziguezague" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 label" msgid "Bottom Pattern Initial Layer" -msgstr "" +msgstr "Camada Inicial do Padrão da Base" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 description" msgid "The pattern on the bottom of the print on the first layer." -msgstr "" +msgstr "O padrão na base da impressão na primeira camada." #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option lines" msgid "Lines" -msgstr "" +msgstr "Linhas" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option concentric" msgid "Concentric" -msgstr "" +msgstr "Concêntrico" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "Ziguezague" #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" -msgstr "" +msgstr "Direções de Linha Superior/Inferior" #: fdmprinter.def.json msgctxt "skin_angles description" msgid "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees)." -msgstr "" +msgstr "Uma lista de direções de linha inteiras para usar quando as camadas superiores e inferiores usarem os padrões de linha ou ziguezague. Elementos desta lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela inicia novamente. Os itens da lista são separados por vírgulas e a lita inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (45 e 135 graus)." #: fdmprinter.def.json msgctxt "wall_0_inset label" @@ -984,7 +984,7 @@ msgstr "Ignorar Pequenos Vãos em Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Quando o modelo tem pequenos vãos verticais, aproximadamente 5%% de tempo de computação adicional pode ser gasto ao gerar pele superior e inferior nestes espaços estreitos. Em tal caso, desabilite este ajuste." +msgstr "Quando o modelo tem pequenos vãos verticais, aproximadamente 5% de tempo de computação adicional pode ser gasto ao gerar camada externa superior e inferior nestes espaços estreitos. Em tal caso, desabilite este ajuste." #: fdmprinter.def.json msgctxt "infill label" @@ -1094,12 +1094,12 @@ msgstr "Um multiplicador do raio do centro de cada cubo para verificar a borda d #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" -msgstr "Casca de Subdivisão Cúbica" +msgstr "Cobertura de Subdivisão Cúbica" #: fdmprinter.def.json msgctxt "sub_div_rad_add description" msgid "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model." -msgstr "Um adicional ao raio do centro de cada cubo para verificar a borda do modelo, de modo a decidir se este cubo deve ser subdividido. Valores maiores levam a uma casca mais espessa de pequenos cubos perto da borda do modelo." +msgstr "Um adicional ao raio do centro de cada cubo para verificar a borda do modelo, de modo a decidir se este cubo deve ser subdividido. Valores maiores levam a uma cobertura mais espessa de pequenos cubos perto da borda do modelo." #: fdmprinter.def.json msgctxt "infill_overlap label" @@ -1124,22 +1124,22 @@ msgstr "Medida de sobreposição entre o preenchimento e as paredes. Uma leve so #: fdmprinter.def.json msgctxt "skin_overlap label" msgid "Skin Overlap Percentage" -msgstr "Porcentagem de Sobreposição da Pele" +msgstr "Porcentagem de Sobreposição do Contorno" #: fdmprinter.def.json msgctxt "skin_overlap description" msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." -msgstr "Porcentagem de sobreposição entre a pele e as paredes. Uma ligeira sobreposição permite às paredes ficarem firmemente aderidas à pele." +msgstr "Porcentagem de sobreposição entre o contorno e as paredes. Uma ligeira sobreposição permite às paredes ficarem firmemente aderidas ao contorno." #: fdmprinter.def.json msgctxt "skin_overlap_mm label" msgid "Skin Overlap" -msgstr "Sobreposição da Pele" +msgstr "Sobreposição do Contorno" #: fdmprinter.def.json msgctxt "skin_overlap_mm description" msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." -msgstr "Medida de sobreposição entre a pele e as paredes. Uma ligeira sobreposição permite às paredes ficarem firmemente aderidas à pele." +msgstr "Medida de sobreposição entre o contorno e as paredes. Uma ligeira sobreposição permite às paredes ficarem firmemente aderidas ao contorno." #: fdmprinter.def.json msgctxt "infill_wipe_dist label" @@ -1194,72 +1194,72 @@ msgstr "Imprime o preenchimento antes de imprimir as paredes. Imprimir as parede #: fdmprinter.def.json msgctxt "min_infill_area label" msgid "Minimum Infill Area" -msgstr "" +msgstr "Área Mínima para Preenchimento" #: fdmprinter.def.json msgctxt "min_infill_area description" msgid "Don't generate areas of infill smaller than this (use skin instead)." -msgstr "" +msgstr "Não gerar preenchimento para áreas menores que esta (usar contorno)." #: fdmprinter.def.json msgctxt "expand_skins_into_infill label" msgid "Expand Skins Into Infill" -msgstr "" +msgstr "Expandir Contorno Para Preenchimento" #: fdmprinter.def.json msgctxt "expand_skins_into_infill description" msgid "Expand skin areas of top and/or bottom skin of flat surfaces. By default, skins stop under the wall lines that surround infill but this can lead to holes appearing when the infill density is low. This setting extends the skins beyond the wall lines so that the infill on the next layer rests on skin." -msgstr "" +msgstr "Expandir áreas de perímetro das partes superiores e inferiores de superfícies chatas. Por default, o perímetro para sob as paredes que rodeiam o preenchimento mas isso pode fazer com que buracos apareçam caso a densidade de preenchimento seja baixa. Este ajuste estenda os perímetros além das linhas de parede de modo que o preenchimento da próxima camada fique em cima de perímetros." #: fdmprinter.def.json msgctxt "expand_upper_skins label" msgid "Expand Upper Skins" -msgstr "" +msgstr "Expandir Contornos Superiores" #: fdmprinter.def.json msgctxt "expand_upper_skins description" msgid "Expand upper skin areas (areas with air above) so that they support infill above." -msgstr "" +msgstr "Expandir as áreas de contorno superiores (áreas com ar acima) de modo que suportem o preenchimento acima." #: fdmprinter.def.json msgctxt "expand_lower_skins label" msgid "Expand Lower Skins" -msgstr "" +msgstr "Expandir Contornos Inferiores" #: fdmprinter.def.json msgctxt "expand_lower_skins description" msgid "Expand lower skin areas (areas with air below) so that they are anchored by the infill layers above and below." -msgstr "" +msgstr "Expandir as áreas de contorno inferiores (áreas com ar abaixo) de modo que fiquem ancoradas pelas camadas de preenchimento acima e abaixo." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" msgid "Skin Expand Distance" -msgstr "" +msgstr "Distância de Expansão do Contorno" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. The default distance is enough to bridge the gap between the infill lines and will stop holes appearing in the skin where it meets the wall when the infill density is low. A smaller distance will often be sufficient." -msgstr "" +msgstr "A distância que os contornos são expandidos para dentro do preenchimento. A distância default é suficiente para ligar o vão entre as linhas de preenchimento e impedirá que buracos apareçam no contorno onde ele encontrar a parede em que a densidade de preenchimento é baixa. Uma distância menor pode ser suficiente." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" msgid "Maximum Skin Angle for Expansion" -msgstr "" +msgstr "Ângulo Máximo do Contorno para Expansão" #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion description" msgid "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical." -msgstr "" +msgstr "Superfícies Superiores e/ou Inferiores de seu objeto com um ângulo maior que este ajuste não terão seus contornos superior/inferior expandidos. Isto evita que expandam as áreas estreitas de contorno que são criadas quando a superfície do modelo tem uma inclinação praticamente vertical. Um ângulo de 0° é horizontal, um ângulo de 90° é vertical." #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion label" msgid "Minimum Skin Width for Expansion" -msgstr "" +msgstr "Largura Mínima de Contorno para Expansão" #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion description" msgid "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical." -msgstr "" +msgstr "Áreas de contorno mais estreitas que esta não são expandidas. Isto evita expandir as áreas estreitas que são criadas quando a superfície do modelo tem inclinações quase verticais." #: fdmprinter.def.json msgctxt "material label" @@ -1299,7 +1299,7 @@ msgstr "Temperatura de Impressão" #: fdmprinter.def.json msgctxt "material_print_temperature description" msgid "The temperature used for printing." -msgstr "" +msgstr "A temperatura usada para impressão." #: fdmprinter.def.json msgctxt "material_print_temperature_layer_0 label" @@ -1359,7 +1359,7 @@ msgstr "Temperatura da Mesa de Impressão" #: fdmprinter.def.json msgctxt "material_bed_temperature description" msgid "The temperature used for the heated build plate. If this is 0, the bed will not heat up for this print." -msgstr "" +msgstr "A temperatura usada pela mesa aquecida de impressão. Se for 0, a mesa não aquecerá para esta impressão." #: fdmprinter.def.json msgctxt "material_bed_temperature_layer_0 label" @@ -1589,7 +1589,7 @@ msgstr "Velocidade da Parede Exterior" #: fdmprinter.def.json msgctxt "speed_wall_0 description" msgid "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way." -msgstr "A velocidade em que as paredes mais externas são impressas. Imprimir a parede mais externa a uma velocidade menor melhora a qualidade final da pele. No entanto, ter uma diferença muito grande entre a velocidade da parede interna e a velocidade da parede externa afetará a qualidade de forma negativa." +msgstr "A velocidade em que as paredes mais externas são impressas. Imprimir a parede mais externa a uma velocidade menor melhora a qualidade final do contorno. No entanto, ter uma diferença muito grande entre a velocidade da parede interna e a velocidade da parede externa afetará a qualidade de forma negativa." #: fdmprinter.def.json msgctxt "speed_wall_x label" @@ -2079,7 +2079,7 @@ msgstr "Modo de Combing" #: fdmprinter.def.json msgctxt "retraction_combing description" msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas quando viaja. Isso resulta em movimentos de viagem 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 paredes superiores e inferiores habilitando o penteamento no preenchimento somente." +msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas quando viaja. Isso resulta em movimentos de viagem 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." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2094,17 +2094,17 @@ msgstr "Tudo" #: fdmprinter.def.json msgctxt "retraction_combing option noskin" msgid "No Skin" -msgstr "Somente Preenchimento" +msgstr "Evita Contornos" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall label" msgid "Retract Before Outer Wall" -msgstr "" +msgstr "Retrair Antes da Parede Externa" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall description" msgid "Always retract when moving to start an outer wall." -msgstr "" +msgstr "Sempre retrair quando se mover para iniciar uma parede externa." #: fdmprinter.def.json msgctxt "travel_avoid_other_parts label" @@ -2139,7 +2139,7 @@ msgstr "Em cada camada iniciar imprimindo o objeto próximo ao mesmo ponto, de m #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" -msgstr "X do Início da Camada" +msgstr "X Inicial da Camada" #: fdmprinter.def.json msgctxt "layer_start_x description" @@ -2149,7 +2149,7 @@ msgstr "A coordenada X da posição próxima de onde achar a parte com que come #: fdmprinter.def.json msgctxt "layer_start_y label" msgid "Layer Start Y" -msgstr "Y do Início da Camada" +msgstr "Y Inicial da Camada" #: fdmprinter.def.json msgctxt "layer_start_y description" @@ -2484,7 +2484,7 @@ msgstr "Distância em Z do Suporte" #: fdmprinter.def.json msgctxt "support_z_distance description" msgid "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height." -msgstr "" +msgstr "Distância do topo e base da estrutura de suporte para a impressão. Este vão provê um espaço para remover os suportes depois de o modelo ser impresso. O valor é arredondado para um múltiplo da altura de camada." #: fdmprinter.def.json msgctxt "support_top_distance label" @@ -2584,7 +2584,7 @@ msgstr "Habilitar Interface de Suporte" #: fdmprinter.def.json msgctxt "support_interface_enable description" msgid "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model." -msgstr "Gera uma interface densa entre o modelo e o suporte. Isto criará uma pele no topo do suporte em que o modelo é impresso e na base do suporte, onde ele fica sobre o modelo." +msgstr "Gera uma interface densa entre o modelo e o suporte. Isto criará um contorno no topo do suporte em que o modelo é impresso e na base do suporte, onde ele fica sobre o modelo." #: fdmprinter.def.json msgctxt "support_interface_height label" @@ -3583,7 +3583,7 @@ msgstr "Velocidade de Desengrenagem" #: fdmprinter.def.json msgctxt "coasting_speed description" msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops." -msgstr "A velocidade pela qual se mover durante a desengrenagem, relativa à velocidade do caminho de extrusão. Um valor ligeiramente menor que 100%% é sugerido, já que durante a desengrenagem a pressão dentro do hotend cai." +msgstr "A velocidade pela qual se mover durante a desengrenagem, relativa à velocidade do caminho de extrusão. Um valor ligeiramente menor que 100% é sugerido, já que durante a desengrenagem a pressão dentro do hotend cai." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -3648,7 +3648,7 @@ msgstr "Remove todo o preenchimento e torna o interior oco do objeto elegível a #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled label" msgid "Fuzzy Skin" -msgstr "Pele Felpuda" +msgstr "Contorno Felpudo" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled description" @@ -3658,7 +3658,7 @@ msgstr "Faz flutuações de movimento aleatório enquanto imprime a parede mais #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness label" msgid "Fuzzy Skin Thickness" -msgstr "Espessura da Pele Felpuda" +msgstr "Espessura do Contorno Felpudo" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness description" @@ -3668,7 +3668,7 @@ msgstr "A largura dentro da qual flutuar. É sugerido deixar este valor abaixo d #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density label" msgid "Fuzzy Skin Density" -msgstr "Densidade da Pele Felpuda" +msgstr "Densidade do Contorno Felpudo" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density description" @@ -3678,12 +3678,12 @@ msgstr "A densidade média dos pontos introduzidos em cada polígono de uma cama #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist label" msgid "Fuzzy Skin Point Distance" -msgstr "Distância de Pontos da Pele Felpuda" +msgstr "Distância de Pontos do Contorno Felpudo" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist description" msgid "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness." -msgstr "A distância média entre os pontos aleatórios introduzidos em cada segmento de linha. Note que os pontos originais do polígono são descartados, portanto umo alto alisamento resulta em redução da resolução. Este valor deve ser maior que a metade da Espessura da Pele Felpuda." +msgstr "A distância média entre os pontos aleatórios introduzidos em cada segmento de linha. Note que os pontos originais do polígono são descartados, portanto umo alto alisamento resulta em redução da resolução. Este valor deve ser maior que a metade da Espessura do Contorno Felpudo." #: fdmprinter.def.json msgctxt "wireframe_enabled label" From 0a58214d74c39173415e3e6e03adf18567338117 Mon Sep 17 00:00:00 2001 From: CRojasV Date: Wed, 12 Apr 2017 11:06:39 -0500 Subject: [PATCH 304/816] Delete File, to add a fixed one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This file was delete because it don´t have the current location of the platform --- resources/definitions/makeR_pegasus.def.json | 66 -------------------- 1 file changed, 66 deletions(-) delete mode 100644 resources/definitions/makeR_pegasus.def.json diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json deleted file mode 100644 index c676623516..0000000000 --- a/resources/definitions/makeR_pegasus.def.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": "makeR_pegasus", - "version": 2, - "name": "makeR Pegasus", - "inherits": "fdmprinter", - "metadata": { - "visible": true, - "author": "makeR", - "manufacturer": "makeR", - "category": "Other", - "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", - "platform": "makeR_pegasus_platform.stl" - }, - - "overrides": { - "machine_name": { "default_value": " makeR Pegasus" }, - "machine_heated_bed": { - "default_value": true - }, - "machine_width": { - "default_value": 400 - }, - "machine_height": { - "default_value": 400 - }, - "machine_depth": { - "default_value": 400 - }, - "machine_center_is_zero": { - "default_value": false - }, - "machine_nozzle_size": { - "default_value": 0.4 - }, - "material_diameter": { - "default_value": 2.85 - }, - "machine_nozzle_heat_up_speed": { - "default_value": 2 - }, - "machine_nozzle_cool_down_speed": { - "default_value": 2 - }, - "machine_head_polygon": { - "default_value": [ - [-75, -18], - [-75, 35], - [18, 35], - [18, -18] - ] - }, - "gantry_height": { - "default_value": 55 - }, - "machine_gcode_flavor": { - "default_value": "RepRap (Marlin/Sprinter)" - }, - "machine_start_gcode": { - "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" - }, - "machine_end_gcode": { - "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" - } - } -} \ No newline at end of file From d71e964be74dc324ae105dd4f0005e4b4cc50894 Mon Sep 17 00:00:00 2001 From: CRojasV Date: Wed, 12 Apr 2017 11:08:24 -0500 Subject: [PATCH 305/816] Deleted to Fix platform position This file was deleted because it don't have the correct platform position setup --- .../makeR_prusa_tairona_i3.def.json | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 resources/definitions/makeR_prusa_tairona_i3.def.json diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json deleted file mode 100644 index d9e8980979..0000000000 --- a/resources/definitions/makeR_prusa_tairona_i3.def.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": "makeR_prusa_tairona_i3", - "version": 2, - "name": "makeR Prusa Tairona i3", - "inherits": "fdmprinter", - "metadata": { - "visible": true, - "author": "makeR", - "manufacturer": "makeR", - "category": "Other", - "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", - "platform": "makeR_prusa_tairona_i3_platform.stl" - }, - - "overrides": { - "machine_name": { "default_value": "makeR Prusa Tairona I3" }, - "machine_heated_bed": { - "default_value": true - }, - "machine_width": { - "default_value": 200 - }, - "machine_height": { - "default_value": 200 - }, - "machine_depth": { - "default_value": 200 - }, - "machine_center_is_zero": { - "default_value": false - }, - "machine_nozzle_size": { - "default_value": 0.4 - }, - "material_diameter": { - "default_value": 1.75 - }, - "machine_nozzle_heat_up_speed": { - "default_value": 2 - }, - "machine_nozzle_cool_down_speed": { - "default_value": 2 - }, - "machine_head_polygon": { - "default_value": [ - [-75, -18], - [-75, 35], - [18, 35], - [18, -18] - ] - }, - "gantry_height": { - "default_value": 55 - }, - "machine_gcode_flavor": { - "default_value": "RepRap (Marlin/Sprinter)" - }, - "machine_start_gcode": { - "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" - }, - "machine_end_gcode": { - "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" - } - } -} From 3e19261fa858460295d512c054fba903a2324cb7 Mon Sep 17 00:00:00 2001 From: CRojasV Date: Wed, 12 Apr 2017 11:10:22 -0500 Subject: [PATCH 306/816] New version files This time it have the platform position configuration, and it have version number error fixed. --- resources/definitions/makeR_pegasus.def.json | 70 +++++++++++++++++++ .../makeR_prusa_tairona_i3.def.json | 67 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 resources/definitions/makeR_pegasus.def.json create mode 100644 resources/definitions/makeR_prusa_tairona_i3.def.json diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json new file mode 100644 index 0000000000..efaa3a5c3f --- /dev/null +++ b/resources/definitions/makeR_pegasus.def.json @@ -0,0 +1,70 @@ +{ + "id": "makeR_pegasus", + "version": 2, + "name": "makeR Pegasus", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "makeR", + "manufacturer": "makeR", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "makeR_pegasus_platform.stl", + "platform_offset": [-200,-10,200] + }, + + "overrides": { + "machine_name": { "default_value": " makeR Pegasus" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 400 + }, + "machine_height": { + "default_value": 400 + }, + "machine_depth": { + "default_value": 400 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 2.85 + }, + "machine_nozzle_heat_up_speed": { + "default_value": 2 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 2 + }, + "machine_head_polygon": { + "default_value": [ + [-75, -18], + [-75, 35], + [18, 35], + [18, -18] + ] + }, + "gantry_height": { + "default_value": -25 + }, + "machine_platform_offset":{ + "default_value":-25 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" + }, + "machine_end_gcode": { + "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" + } + } +} \ No newline at end of file diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json new file mode 100644 index 0000000000..ab80fd0f5e --- /dev/null +++ b/resources/definitions/makeR_prusa_tairona_i3.def.json @@ -0,0 +1,67 @@ +{ + "id": "makeR_prusa_tairona_i3", + "version": 2, + "name": "makeR Prusa Tairona i3", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "makeR", + "manufacturer": "makeR", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "makeR_prusa_tairona_i3_platform.stl", + "platform_offset": [-2,0,0] + }, + + "overrides": { + "machine_name": { "default_value": "makeR Prusa Tairona I3" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 200 + }, + "machine_height": { + "default_value": 200 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_heat_up_speed": { + "default_value": 2 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 2 + }, + "machine_head_polygon": { + "default_value": [ + [-75, -18], + [-75, 35], + [18, 35], + [18, -18] + ] + }, + "gantry_height": { + "default_value": 55 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G1 Z15;\nG28;Home\nG29;Auto Level\nG1 Z5 F5000;Move the platform down 15mm" + }, + "machine_end_gcode": { + "default_value": "M104 S0;Turn off temperature\nG28 X0; Home X\nM84; Disable Motors" + } + } +} \ No newline at end of file From 81dffc442ac5313e759160b8dcbd3099c65a0cc5 Mon Sep 17 00:00:00 2001 From: CRojasV Date: Wed, 12 Apr 2017 11:11:48 -0500 Subject: [PATCH 307/816] Delete this file to add a better version We delete this file because the model is not properly scaled --- resources/meshes/makeR_pegasus_platform.stl | Bin 134284 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/meshes/makeR_pegasus_platform.stl diff --git a/resources/meshes/makeR_pegasus_platform.stl b/resources/meshes/makeR_pegasus_platform.stl deleted file mode 100644 index 91751eb0e4b332b62faff74eda42a1bf033b4e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134284 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 Date: Wed, 12 Apr 2017 11:12:45 -0500 Subject: [PATCH 308/816] Add new type of platform This version has a well scaled platform, tested. --- resources/meshes/makeR_pegasus_platform.stl | Bin 0 -> 134284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/meshes/makeR_pegasus_platform.stl diff --git a/resources/meshes/makeR_pegasus_platform.stl b/resources/meshes/makeR_pegasus_platform.stl new file mode 100644 index 0000000000000000000000000000000000000000..b7e7d24d358ea851fdac578e00514c7f171ee989 GIT binary patch literal 134284 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 literal 0 HcmV?d00001 From e92aaca7b6dbf9abfa80ef723940a7ecaf24e290 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 12 Apr 2017 23:03:58 +0200 Subject: [PATCH 309/816] Filter materials by the (approximate) material diameter of the printer If a machine defines material diameter of 2.85mm, there is no use to show the 1.75mm materials and vice-versa --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 ++ resources/qml/Menus/MaterialMenu.qml | 11 ++++++++++- resources/qml/Preferences/MaterialsPage.qml | 11 ++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7dc565ce26..fcf6d99688 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -118,6 +118,7 @@ class XmlMaterialProfile(InstanceContainer): metadata.pop("variant", "") metadata.pop("type", "") metadata.pop("base_file", "") + metadata.pop("approximate_diameter", "") ## Begin Name Block builder.start("name") @@ -437,6 +438,7 @@ class XmlMaterialProfile(InstanceContainer): Logger.log("d", "Unsupported material setting %s", key) self._cached_values = global_setting_values + meta_data["approximate_diameter"] = round(diameter) meta_data["compatible"] = global_compatibility self.setMetaData(meta_data) self._dirty = False diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index ab38de97aa..cb1a4cf644 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -15,6 +15,15 @@ Menu property int extruderIndex: 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 + UM.SettingPropertyProvider + { + id: materialDiameterProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "material_diameter" + watchedProperties: [ "value" ] + } + MenuItem { id: automaticMaterial @@ -141,7 +150,7 @@ Menu function materialFilter() { - var result = { "type": "material" }; + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) }; if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 03bf9f5aa1..08cb6d4d13 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -18,7 +18,7 @@ UM.ManagementPage { filter: { - var result = { "type": "material" } + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) } if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; @@ -327,6 +327,15 @@ UM.ManagementPage id: messageDialog } + UM.SettingPropertyProvider + { + id: materialDiameterProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "material_diameter" + watchedProperties: [ "value" ] + } + UM.I18nCatalog { id: catalog; name: "cura"; } SystemPalette { id: palette } } From db6cdad956eb3d2899cd4ca6c919efdb1d637813 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 12 Apr 2017 23:27:34 +0200 Subject: [PATCH 310/816] Filter preferred materials by approximate material diameter --- cura/Settings/ExtruderManager.py | 8 +++++++- cura/Settings/MachineManager.py | 9 +++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 746c70099b..d21480b11b 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -244,7 +244,13 @@ class ExtruderManager(QObject): material = materials[0] preferred_material_id = machine_definition.getMetaDataEntry("preferred_material") if preferred_material_id: - search_criteria = { "type": "material", "id": preferred_material_id} + global_stack = ContainerRegistry.getInstance().findContainerStacks(id = machine_id) + if global_stack: + approximate_material_diameter = round(global_stack[0].getProperty("material_diameter", "value")) + else: + approximate_material_diameter = round(machine_definition.getProperty("material_diameter", "value")) + + search_criteria = { "type": "material", "id": preferred_material_id, "approximate_diameter": approximate_material_diameter} if machine_definition.getMetaDataEntry("has_machine_materials"): search_criteria["definition"] = machine_definition_id diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 638b475094..d41f5fd84f 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -332,7 +332,7 @@ class MachineManager(QObject): container_registry.addContainer(new_global_stack) variant_instance_container = self._updateVariantContainer(definition) - material_instance_container = self._updateMaterialContainer(definition, variant_instance_container) + material_instance_container = self._updateMaterialContainer(definition, new_global_stack, variant_instance_container) quality_instance_container = self._updateQualityContainer(definition, variant_instance_container, material_instance_container) current_settings_instance_container = InstanceContainer(name + "_current_settings") @@ -760,7 +760,7 @@ class MachineManager(QObject): if old_material: preferred_material_name = old_material.getName() - self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), containers[0], preferred_material_name).id) + self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), self._global_container_stack, containers[0], preferred_material_name).id) else: Logger.log("w", "While trying to set the active variant, no variant was found to replace.") @@ -1110,11 +1110,12 @@ class MachineManager(QObject): return self._empty_variant_container - def _updateMaterialContainer(self, definition, variant_container = None, preferred_material_name = None): + def _updateMaterialContainer(self, stack, definition, variant_container = None, preferred_material_name = None): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container - search_criteria = { "type": "material" } + approximate_material_diameter = round(stack.getProperty("material_diameter", "value")) + search_criteria = { "type": "material", "approximate_diameter": approximate_material_diameter } if definition.getMetaDataEntry("has_machine_materials"): search_criteria["definition"] = self.getQualityDefinitionId(definition) From c97f8679c2d9d8289af93bf356ec1d814860c3e2 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 13 Apr 2017 00:25:38 +0200 Subject: [PATCH 311/816] Fix NaN values on material print settings tab --- resources/qml/Preferences/MaterialView.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index 3e17943310..d1b3a76f50 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -273,10 +273,10 @@ TabView { id: spinBox anchors.left: label.right - value: parseFloat(provider.properties.value); + value: (provider.properties.value != "None") ? parseFloat(provider.properties.value) : 0 width: base.secondColumnWidth; readOnly: !base.editingEnabled - suffix: model.unit + suffix: " " + model.unit maximumValue: 99999 decimals: model.unit == "mm" ? 2 : 0 From 5e50a8fe0bdd903626df477708e422317c4d0bbf Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 13 Apr 2017 00:50:03 +0200 Subject: [PATCH 312/816] Show value from definition if it is not defined in the material profile This way you get sane defaults if no value is provided in the material xml file, instead of 0s --- resources/qml/Preferences/MaterialView.qml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index d1b3a76f50..226fd349bf 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -273,17 +273,28 @@ TabView { id: spinBox anchors.left: label.right - value: (provider.properties.value != "None") ? parseFloat(provider.properties.value) : 0 - width: base.secondColumnWidth; + value: { + if (!isNaN(parseFloat(materialPropertyProvider.properties.value))) + { + return parseFloat(materialPropertyProvider.properties.value); + } + if (!isNaN(parseFloat(machinePropertyProvider.properties.value))) + { + return parseFloat(machinePropertyProvider.properties.value); + } + return 0; + } + width: base.secondColumnWidth readOnly: !base.editingEnabled suffix: " " + model.unit maximumValue: 99999 decimals: model.unit == "mm" ? 2 : 0 - onEditingFinished: provider.setPropertyValue("value", value) + onEditingFinished: materialPropertyProvider.setPropertyValue("value", value) } - UM.ContainerPropertyProvider { id: provider; containerId: base.containerId; watchedProperties: [ "value" ]; key: model.key } + UM.ContainerPropertyProvider { id: materialPropertyProvider; containerId: base.containerId; watchedProperties: [ "value" ]; key: model.key } + UM.ContainerPropertyProvider { id: machinePropertyProvider; containerId: Cura.MachineManager.activeDefinitionId; watchedProperties: [ "value" ]; key: model.key } } } } From df8bba6c96d97340eff77e11ec6691338e66799b Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Apr 2017 01:33:22 +0200 Subject: [PATCH 313/816] Add "machine" metadata entry when setting the next stack for an extruder --- cura/Settings/ExtruderStack.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index a4a1f61e96..03ed5f8a41 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -26,6 +26,10 @@ class ExtruderStack(CuraContainerStack): def setNextStack(self, stack: ContainerStack) -> None: super().setNextStack(stack) stack.addExtruder(self) + if not self.getMetaDataEntry("machine"): + self.addMetaDataEntry("machine", stack.id) + else: + self.setMetaDataEntry("machine", stack.id) @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: From f154db13b1faa92eabde97fe8af811d95518482d Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Apr 2017 01:37:01 +0200 Subject: [PATCH 314/816] Add a createMachine method to CuraStackBuilder that creates a complete machine --- cura/Settings/CuraStackBuilder.py | 51 +++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 527e860f31..f7253dc81d 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -7,11 +7,50 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from .GlobalStack import GlobalStack from .ExtruderStack import ExtruderStack +from .CuraContainerStack import CuraContainerStack class CuraStackBuilder: - @staticmethod - def createExtruderStack(new_stack_id: str, definition_id: str, **kwargs) -> ExtruderStack: - registry = ContainerRegistry.getInstance() + @classmethod + def createMachine(cls, name: str, definition_id: str) -> GlobalStack: + cls.__registry = ContainerRegistry.getInstance() + definitions = cls.__registry.findDefinitionContainers(id = definition_id) + if not definitions: + Logger.log("w", "Definition {definition} was not found!", definition = definition_id) + return None + + machine_definition = definitions[0] + name = cls.__registry.createUniqueName("machine", "", name, machine_definition.name) + + new_global_stack = cls.createGlobalStack( + new_stack_id = name, + definition = machine_definition, + quality = "default", + material = "default", + variant = "default", + ) + + for extruder_definition in cls.__registry.findDefinitionContainers(machine = machine_definition.id): + position = extruder_definition.getMetaDataEntry("position", None) + if not position: + Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.id) + + new_extruder_id = cls.__registry.uniqueName(extruder_definition.id) + new_extruder = cls.createExtruderStack( + new_extruder_id = new_extruder_id, + definition = extruder_definition, + machine_definition = machine_definition, + quality = "default", + material = "default", + variant = "default", + next_stack = new_global_stack + ) + + return new_global_stack + + + @classmethod + def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainer, machine_definition: DefinitionContainer, **kwargs) -> ExtruderStack: + cls.__registry = ContainerRegistry.getInstance() stack = ExtruderStack(new_stack_id) @@ -84,3 +123,9 @@ class CuraStackBuilder: registry.addContainer(user_container) return stack + + # Convenience variable + # It should get set before any private functions are called so the privates do not need to + # re-get the container registry. + __registry = None # type: ContainerRegistry + From 33301c835b09d8160d4b35e6757ec25bc82f471e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Apr 2017 01:37:26 +0200 Subject: [PATCH 315/816] Use CuraStackBuilder::createMachine when adding a new machine --- cura/Settings/MachineManager.py | 47 ++++----------------------------- 1 file changed, 5 insertions(+), 42 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a7bdca0663..b6a8cadede 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -353,48 +353,11 @@ class MachineManager(QObject): @pyqtSlot(str, str) def addMachine(self, name: str, definition_id: str) -> None: - container_registry = ContainerRegistry.getInstance() - definitions = container_registry.findDefinitionContainers(id = definition_id) - if definitions: - definition = definitions[0] - name = self._createUniqueName("machine", "", name, definition.getName()) - - variant_instance_container = self._updateVariantContainer(definition) - material_instance_container = self._updateMaterialContainer(definition, variant_instance_container) - quality_instance_container = self._updateQualityContainer(definition, variant_instance_container, material_instance_container) - - #new_global_stack = GlobalStack(name) - #container_registry.addContainer(new_global_stack) - - new_global_stack = CuraStackBuilder.createGlobalStack( - new_stack_id = name, - definition = definition, - quality = quality_instance_container.getId(), - material = material_instance_container.getId(), - variant = variant_instance_container.getId(), - ) - - #current_settings_instance_container = InstanceContainer(name + "_current_settings") - #current_settings_instance_container.addMetaDataEntry("machine", name) - #current_settings_instance_container.addMetaDataEntry("type", "user") - #current_settings_instance_container.setDefinition(definitions[0]) - #container_registry.addContainer(current_settings_instance_container) - - #new_global_stack.addContainer(definition) - #if variant_instance_container: - #new_global_stack.addContainer(variant_instance_container) - #if material_instance_container: - #new_global_stack.addContainer(material_instance_container) - #if quality_instance_container: - #new_global_stack.addContainer(quality_instance_container) - - #new_global_stack.addContainer(self._empty_quality_changes_container) - #new_global_stack.addContainer(current_settings_instance_container) - - ExtruderManager.getInstance().addMachineExtruders(definition, new_global_stack.getId()) - - Application.getInstance().setGlobalContainerStack(new_global_stack) - + new_stack = CuraStackBuilder.createMachine(name, definition_id) + if new_stack: + Application.getInstance().setGlobalContainerStack(new_stack) + else: + Logger.log("w", "Failed creating a new machine!") ## Create a name that is not empty and unique # \param container_type \type{string} Type of the container (machine, quality, ...) From b87e7c46bfa1cd427b0e153f48d25c038e51c9c6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Apr 2017 01:37:45 +0200 Subject: [PATCH 316/816] Use the normal empty container for quality changes as well --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index b6a8cadede..235ede4808 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -55,7 +55,7 @@ class MachineManager(QObject): self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_quality_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() - self._empty_quality_changes_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality_changes")[0] + self._empty_quality_changes_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._onGlobalContainerChanged() From 0fee41d51976a3099f32b1aae29935a539bba5bd Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 13 Apr 2017 01:39:11 +0200 Subject: [PATCH 317/816] Allow CuraStackBuilder to determine the "default" variant/material/quality --- cura/Settings/CuraStackBuilder.py | 261 +++++++++++++++++++++++++----- 1 file changed, 222 insertions(+), 39 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index f7253dc81d..eb35d4d7e7 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -1,6 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. +from UM.Logger import Logger + from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry @@ -53,48 +55,48 @@ class CuraStackBuilder: cls.__registry = ContainerRegistry.getInstance() stack = ExtruderStack(new_stack_id) + stack.setDefinition(definition) + stack.addMetaDataEntry("position", definition.getMetaDataEntry("position")) user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") - user_container.addMetaDataEntry("machine", new_stack_id) + user_container.addMetaDataEntry("extruder", new_stack_id) stack.setUserChanges(user_container) - if "quality_changes" in kwargs: - stack.setQualityChangesById(kwargs["quality_changes"]) - - if "quality" in kwargs: - stack.setQualityById(kwargs["quality"]) - - if "material" in kwargs: - stack.setMaterialById(kwargs["material"]) - - if "variant" in kwargs: - stack.setVariantById(kwargs["variant"]) - - if "definition_changes" in kwargs: - stack.setDefinitionChangesById(kwargs["definition_changes"]) - - if "definition" in kwargs: - stack.setDefinitionById(kwargs["definition"]) - if "next_stack" in kwargs: stack.setNextStack(kwargs["next_stack"]) + # Important! The order here matters, because that allows functions like __setStackQuality to + # assume the material and variant have already been set. + if "definition_changes" in kwargs: + stack.setDefinitionChangesById(kwargs["definition_changes"]) + + if "variant" in kwargs: + cls.__setStackVariant(stack, kwargs["variant"]) + + if "material" in kwargs: + cls.__setStackMaterial(stack, kwargs["material"]) + + if "quality" in kwargs: + cls.__setStackQuality(stack, kwargs["quality"]) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + # Only add the created containers to the registry after we have set all the other # properties. This makes the create operation more transactional, since any problems # setting properties will not result in incomplete containers being added. - registry.addContainer(stack) - registry.addContainer(user_container) + cls.__registry.addContainer(stack) + cls.__registry.addContainer(user_container) return stack - @staticmethod - def createGlobalStack(new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: - registry = ContainerRegistry.getInstance() + @classmethod + def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: + cls.__registry = ContainerRegistry.getInstance() stack = GlobalStack(new_stack_id) - stack.setDefinition(definition) user_container = InstanceContainer(new_stack_id + "_user") @@ -104,23 +106,25 @@ class CuraStackBuilder: stack.setUserChanges(user_container) - if "quality_changes" in kwargs: - stack.setQualityChangesById(kwargs["quality_changes"]) - - if "quality" in kwargs: - stack.setQualityById(kwargs["quality"]) - - if "material" in kwargs: - stack.setMaterialById(kwargs["material"]) - - if "variant" in kwargs: - stack.setVariantById(kwargs["variant"]) - + # Important! The order here matters, because that allows functions like __setStackQuality to + # assume the material and variant have already been set. if "definition_changes" in kwargs: stack.setDefinitionChangesById(kwargs["definition_changes"]) - registry.addContainer(stack) - registry.addContainer(user_container) + if "variant" in kwargs: + cls.__setStackVariant(stack, kwargs["variant"]) + + if "material" in kwargs: + cls.__setStackMaterial(stack, kwargs["material"]) + + if "quality" in kwargs: + cls.__setStackQuality(stack, kwargs["quality"]) + + if "quality_changes" in kwargs: + stack.setQualityChangesById(kwargs["quality_changes"]) + + cls.__registry.addContainer(stack) + cls.__registry.addContainer(user_container) return stack @@ -129,3 +133,182 @@ class CuraStackBuilder: # re-get the container registry. __registry = None # type: ContainerRegistry + @classmethod + def __setStackQuality(cls, stack: CuraContainerStack, quality_id: str, machine_definition: DefinitionContainer) -> None: + if quality_id != "default": + # Specific quality ID specified, so use that. + stack.setQualityById(quality_id) + return + + quality = None + + container_registry = ContainerRegistry.getInstance() + search_criteria = { "type": "quality" } + + if definition.getMetaDataEntry("has_machine_quality"): + search_criteria["definition"] = self.getQualityDefinitionId(definition) + + if definition.getMetaDataEntry("has_materials") and material_container: + search_criteria["material"] = material_container.id + else: + search_criteria["definition"] = "fdmprinter" + + if preferred_quality_name and preferred_quality_name != "empty": + search_criteria["name"] = preferred_quality_name + else: + preferred_quality = definition.getMetaDataEntry("preferred_quality") + if preferred_quality: + search_criteria["id"] = preferred_quality + + containers = container_registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + if "material" in search_criteria: + # First check if we can solve our material not found problem by checking if we can find quality containers + # that are assigned to the parents of this material profile. + try: + inherited_files = material_container.getInheritedFiles() + except AttributeError: # Material_container does not support inheritance. + inherited_files = [] + + if inherited_files: + for inherited_file in inherited_files: + # Extract the ID from the path we used to load the file. + search_criteria["material"] = os.path.basename(inherited_file).split(".")[0] + containers = container_registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + # We still weren't able to find a quality for this specific material. + # Try to find qualities for a generic version of the material. + material_search_criteria = { "type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} + if definition.getMetaDataEntry("has_machine_quality"): + if material_container: + material_search_criteria["definition"] = material_container.getDefinition().id + + if definition.getMetaDataEntry("has_variants"): + material_search_criteria["variant"] = material_container.getMetaDataEntry("variant") + else: + material_search_criteria["definition"] = self.getQualityDefinitionId(definition) + + if definition.getMetaDataEntry("has_variants") and variant_container: + material_search_criteria["variant"] = self.getQualityVariantId(definition, variant_container) + else: + material_search_criteria["definition"] = "fdmprinter" + material_containers = container_registry.findInstanceContainers(**material_search_criteria) + # Try all materials to see if there is a quality profile available. + for material_container in material_containers: + search_criteria["material"] = material_container.getId() + + containers = container_registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + if "name" in search_criteria or "id" in search_criteria: + # If a quality by this name can not be found, try a wider set of search criteria + search_criteria.pop("name", None) + search_criteria.pop("id", None) + + containers = container_registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + # Notify user that we were unable to find a matching quality + message = Message(catalog.i18nc("@info:status", "Unable to find a quality profile for this combination. Default settings will be used instead.")) + message.show() + return self._empty_quality_container + + @classmethod + def __setStackMaterial(cls, stack: CuraContainerStack, material_id: str, machine_definition: DefinitionContainer) -> None: + if not machine_definition.getMetaDataEntry("has_materials"): + # Machine does not use materials, never try to set it. + return + + if material_id != "default": + # Specific material ID specified, so use that. + stack.setMaterialById(material_id) + return + + # If material_id is "default", find a default material to use for this stack. + # First add any material. Later, overwrite with preference if the preference is valid. + material = None + search_criteria = { "type": "material" } + if machine_definition.getMetaDataEntry("has_machine_materials"): + search_criteria["definition"] = cls.__findInstanceContainerDefinitionId(machine_definition) + + if machine_definition.getMetaDataEntry("has_variants"): + search_criteria["variant"] = stack.variant.id + else: + search_criteria["definition"] = "fdmprinter" + + preferred_material = machine_definition.getMetaDataEntry("preferred_material") + if preferred_material: + search_criteria["id"] = preferred_material + + materials = cls.__registry.findInstanceContainers(**search_criteria) + if not materials: + Logger.log("w", "The preferred material \"{material}\" could not be found for stack {stack}", material = preferred_material, stack = stack.id) + search_criteria.pop("variant", None) + search_criteria.pop("id", None) + materials = cls.__registry.findInstanceContainers(**search_criteria) + + if materials: + stack.setMaterial(materials[0]) + else: + Logger.log("w", "Could not find a valid material for stack {stack}", stack = stack.id) + + @classmethod + def __setStackVariant(cls, stack: CuraContainerStack, variant_id: str, machine_definition: DefinitionContainer) -> None: + if not machine_definition.getMetaDataEntry("has_variants"): + # If the machine does not use variants, we should never set a variant. + return + + if variant_id != "default": + # If we specify a specific variant ID, use that and do nothing else. + stack.setVariantById(variant_id) + return + + # When the id is "default", look up the variant based on machine definition etc. + # First add any variant. Later, overwrite with preference if the preference is valid. + variant = None + + definition_id = cls.__findInstanceContainerDefinitionId(machine_definition.id) + variants = cls.__registry.findInstanceContainers(definition = definition_id, type = "variant") + if variants: + variant = variants[0] + + preferred_variant_id = machine_definition.getMetaDataEntry("preferred_variant") + if preferred_variant_id: + preferred_variants = cls.__registry.findInstanceContainers(id = preferred_variant_id, definition = definition_id, type = "variant") + if len(preferred_variants) >= 1: + variant = preferred_variants[0] + else: + Logger.log("w", "The preferred variant \"{variant}\" of stack {stack} does not exist or is not a variant.", variant = preferred_variant_id, stack = stack.id) + # And leave it at the default variant. + + if variant: + stack.setVariant(variant) + else: + Logger.log("w", "Could not find a valid default variant for stack {stack}", stack = stack.id) + + ## Find the ID that should be used when searching for instance containers for a specified definition. + # + # This handles the situation where the definition specifies we should use a different definition when + # searching for instance containers. + # + # \param machine_definition The definition to find the "quality definition" for. + # + # \return The ID of the definition container to use when searching for instance containers. + @classmethod + def __findInstanceContainerDefinitionId(cls, machine_definition: DefinitionContainer) -> str: + quality_definition = machine_definition.getMetaDataEntry("quality_definition") + if not quality_definition: + return machine_definition.id + + definitions = cls.__registry.findDefinitionContainers(id = quality_definition) + if not definitions: + Logger.log("w", "Unable to find parent definition {parent} for machine {machine}", parent = quality_definition, machine = machine_definition.id) + return machine_definition.id + + return cls.__findInstanceContainerDefinitionId(definitions[0]) + From 907d06468499b18d344d42be9cc91ef5f8466816 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Apr 2017 09:05:56 +0200 Subject: [PATCH 318/816] Copy 0.8mm variants of UM3 to UM3E They share the same profiles. They should also have the same settings in the variants, but this is not automatically shared for some reason. Contributes to issue CURA-3650. --- .../ultimaker3_extended_aa0.8.inst.cfg | 28 +++++++++---------- .../ultimaker3_extended_bb0.8.inst.cfg | 5 +++- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 98860889b3..09b6bacee7 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -10,15 +10,15 @@ type = variant [values] acceleration_enabled = True acceleration_print = 4000 -brim_line_count = 7 brim_width = 7 -cool_fan_full_at_height = =layer_height_0 + 2 * layer_height -cool_fan_speed = 100 +cool_fan_speed = 7 cool_fan_speed_max = 100 +cool_min_speed = 5 default_material_print_temperature = 200 infill_before_walls = False +infill_line_width = =round(line_width * 0.6 / 0.7, 2) infill_overlap = 0 -infill_pattern = cubic +infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True jerk_print = 25 @@ -26,17 +26,20 @@ jerk_topbottom = =math.ceil(jerk_print * 25 / 25) jerk_wall = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) layer_height = 0.2 +line_width = =machine_nozzle_size machine_min_cool_heat_time_window = 15 -machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.8 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 -raft_acceleration = =acceleration_layer_0 -raft_margin = 10 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True retract_at_layer_change = True +retraction_amount = 6.5 retraction_count_max = 25 retraction_extrusion_window = 1 retraction_hop = 2 @@ -48,17 +51,14 @@ speed_layer_0 = 20 speed_print = 35 speed_topbottom = =math.ceil(speed_print * 25 / 35) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) -support_angle = 70 +support_angle = 60 support_bottom_distance = =support_z_distance / 2 -support_line_width = =line_width * 0.75 +support_pattern = zigzag support_top_distance = =support_z_distance -support_xy_distance = =wall_line_width_0 * 1.5 support_z_distance = =layer_height * 2 -switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 16.5 top_bottom_thickness = 1.4 travel_avoid_distance = 3 wall_0_inset = 0 -wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_line_width_x = =wall_line_width wall_thickness = 2 - diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index ea12c850ef..e8096c2cd6 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -28,6 +28,8 @@ machine_nozzle_size = 0.8 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_wipe_enabled = True raft_acceleration = =acceleration_layer_0 raft_airgap = 0 raft_base_speed = 20 @@ -41,6 +43,7 @@ raft_speed = 25 raft_surface_layers = 1 retraction_amount = 4.5 retraction_count_max = 15 +retraction_extrusion_window = =retraction_amount retraction_hop = 2 retraction_hop_enabled = True retraction_hop_only_when_collides = True @@ -70,5 +73,5 @@ switch_extruder_retraction_amount = 12 top_bottom_thickness = 1 travel_avoid_distance = 3 wall_0_inset = 0 +wall_line_width_x = =wall_line_width wall_thickness = 1 - From cf25eeea5fd9c21705ce7570078a019301c9263e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Apr 2017 09:39:10 +0200 Subject: [PATCH 319/816] Remove Japanese and Korean translations They are not complete (by far). Contributes to issue CURA-3487. --- resources/qml/Preferences/GeneralPage.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 4f90f47b15..bfce03c2de 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -116,8 +116,6 @@ UM.PreferencesPage append({ text: "Suomi", code: "fi" }) append({ text: "Français", code: "fr" }) append({ text: "Italiano", code: "it" }) - append({ text: "日本語", code: "jp" }) - append({ text: "한국어", code: "ko" }) append({ text: "Nederlands", code: "nl" }) append({ text: "Português do Brasil", code: "ptbr" }) append({ text: "Русский", code: "ru" }) From a02eacd8bc5a2fa2f36becd25fe60d8d4e59d2b4 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 13 Apr 2017 11:28:19 +0200 Subject: [PATCH 320/816] Fixed unit test --- tests/TestArrange.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/TestArrange.py b/tests/TestArrange.py index 764da3cb65..d69747383d 100755 --- a/tests/TestArrange.py +++ b/tests/TestArrange.py @@ -82,7 +82,7 @@ def test_checkShape(): assert points3 > points -## After placing an object on a location that location should give more penalty points +## Check that placing an object on occupied place returns None. def test_checkShape_place(): ar = Arrange(30, 30, 15, 15) ar.centerFirst() @@ -92,7 +92,7 @@ def test_checkShape_place(): ar.place(3, 6, shape_arr) points2 = ar.checkShape(3, 6, shape_arr) - assert points2 > points + assert points2 is None ## Test the whole sequence From 740b5ebc808841d372a109c2a0ce2a3e01c56f4f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 13 Apr 2017 11:29:09 +0200 Subject: [PATCH 321/816] Removed print statements from unit test --- tests/TestArrange.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/TestArrange.py b/tests/TestArrange.py index d69747383d..f3612c1ac7 100755 --- a/tests/TestArrange.py +++ b/tests/TestArrange.py @@ -100,16 +100,10 @@ def test_smoke_place_objects(): ar = Arrange(20, 20, 10, 10) ar.centerFirst() shape_arr = gimmeShapeArray() - print(shape_arr) - now = time.time() for i in range(5): best_spot_x, best_spot_y, score, prio = ar.bestSpot(shape_arr) - print(best_spot_x, best_spot_y, score) ar.place(best_spot_x, best_spot_y, shape_arr) - print(ar._occupied) - - print(time.time() - now) ## Polygon -> array From c0f35a620ae9deb160024691748b251520e3fdf3 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 13 Apr 2017 13:52:11 +0200 Subject: [PATCH 322/816] Use the correct i18n catalog name for translations in the right-click menu CURA-3660 --- resources/qml/Settings/SettingView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 66f1c19a08..fcd1523c15 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -299,7 +299,7 @@ Item } } - UM.I18nCatalog { id: catalog; name: "uranium"; } + UM.I18nCatalog { id: catalog; name: "cura"; } add: Transition { SequentialAnimation { From 9b2bd36fdfbe560b0c3b419daab59c995baf108d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Apr 2017 14:51:42 +0200 Subject: [PATCH 323/816] Update Russian translations again Previous time I accidentally committed this to master instead of 2.5. This was then cherry-picked to 2.5 by a colleague but that went wrong in all sorts of ways. So I'm doing this again but then properly. Contributes to issue CURA-3487. --- resources/i18n/ru/cura.po | 162 +++++++++++----------- resources/i18n/ru/fdmextruder.def.json.po | 17 +-- resources/i18n/ru/fdmprinter.def.json.po | 111 +++++++-------- 3 files changed, 142 insertions(+), 148 deletions(-) diff --git a/resources/i18n/ru/cura.po b/resources/i18n/ru/cura.po index de709027cb..cd118d16ac 100644 --- a/resources/i18n/ru/cura.po +++ b/resources/i18n/ru/cura.po @@ -1,21 +1,21 @@ -# Cura -# Copyright (C) 2017 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2017. +# 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. # msgid "" msgstr "" -"Project-Id-Version: Cura 2.5\n" -"Report-Msgid-Bugs-To: https://github.com/Ultimaker/Cura\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-27 17:27+0200\n" -"PO-Revision-Date: 2017-03-28 04:39+0300\n" +"PO-Revision-Date: 2017-03-30 12:10+0300\n" "Last-Translator: Ruslan Popov \n" -"Language-Team: Ruslan Popov \n" +"Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/__init__.py:12 @@ -167,7 +167,7 @@ msgstr "Невозможно запустить новое задание, по #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:450 msgctxt "@info:status" msgid "This printer does not support USB printing because it uses UltiGCode flavor." -msgstr "" +msgstr "Данный принтер не поддерживает печать через USB, потому что он использует UltiGCode диалект." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:454 msgctxt "@info:status" @@ -177,7 +177,7 @@ msgstr "Невозможно запустить новую задачу, так #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:107 msgctxt "@info" msgid "Unable to update firmware because there are no printers connected." -msgstr "Невозможно обновить прошивку, не найдены подключенные принтеры." +msgstr "Невозможно обновить прошивку, потому что не были найдены подключенные принтеры." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:121 #, python-format @@ -252,7 +252,7 @@ msgstr "Извлечено {0}. Вы можете теперь безопасн #, python-brace-format msgctxt "@info:status" msgid "Failed to eject {0}. Another program may be using the drive." -msgstr "Невозможно извлечь {0}. Другая программа может использовать это устройство?" +msgstr "Невозможно извлечь {0}. Другая программа может использовать это устройство." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12 msgctxt "@label" @@ -287,7 +287,7 @@ msgstr "Печать через сеть" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:156 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос к принтеру" +msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос на принтере" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:status" @@ -331,17 +331,17 @@ msgstr "Отправить запрос на доступ к принтеру" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:336 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." -msgstr "" +msgstr "Подключен по сети. Пожалуйста, подтвердите запрос на принтере." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:343 msgctxt "@info:status" msgid "Connected over the network." -msgstr "" +msgstr "Подключен по сети." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:356 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." -msgstr "" +msgstr "Подключен по сети. Нет доступа к управлению принтером." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:361 msgctxt "@info:status" @@ -586,17 +586,17 @@ msgstr "Слои" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:91 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" -msgstr "Cura не аккуратно отображает слоя при использовании печати через провод" +msgstr "Cura не аккуратно отображает слои при использовании печати через кабель" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py:14 msgctxt "@label" msgid "Version Upgrade 2.4 to 2.5" -msgstr "" +msgstr "Обновление версии 2.4 до 2.5" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py:17 msgctxt "@info:whatsthis" msgid "Upgrades configurations from Cura 2.4 to Cura 2.5." -msgstr "" +msgstr "Обновление конфигурации Cura 2.4 до Cura 2.5." #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py:14 msgctxt "@label" @@ -606,17 +606,17 @@ msgstr "Обновление версии 2.1 до 2.2" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py:17 msgctxt "@info:whatsthis" msgid "Upgrades configurations from Cura 2.1 to Cura 2.2." -msgstr "Обновляет настройки с Cura 2.1 до Cura 2.2." +msgstr "Обновляет настройки Cura 2.1 до Cura 2.2." #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py:14 msgctxt "@label" msgid "Version Upgrade 2.2 to 2.4" -msgstr "Обновление версии с 2.2 на 2.4" +msgstr "Обновление версии 2.2 до 2.4" #: /home/ruben/Projects/Cura/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py:17 msgctxt "@info:whatsthis" msgid "Upgrades configurations from Cura 2.2 to Cura 2.4." -msgstr "Обновляет конфигурацию с версии Cura 2.2 до Cura 2.4" +msgstr "Обновляет конфигурации Cura 2.2 до Cura 2.4" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:12 msgctxt "@label" @@ -763,22 +763,22 @@ msgstr "Твёрдое тело" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:12 msgctxt "@label" msgid "G-code Reader" -msgstr "" +msgstr "Чтение G-code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:15 msgctxt "@info:whatsthis" msgid "Allows loading and displaying G-code files." -msgstr "" +msgstr "Позволяет загружать и отображать файлы G-code." #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:25 msgctxt "@item:inlistbox" msgid "G File" -msgstr "" +msgstr "Файл G" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:227 msgctxt "@info:status" msgid "Parsing G-code" -msgstr "" +msgstr "Обработка G-code" #: /home/ruben/Projects/Cura/plugins/CuraProfileWriter/__init__.py:12 msgctxt "@label" @@ -860,7 +860,7 @@ msgstr "Предоставляет поддержку для импорта пр #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" -msgstr "" +msgstr "Предообратка файла {0}" #: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:376 msgctxt "@item:material" @@ -986,13 +986,13 @@ msgstr "%(width).1f x %(depth).1f x %(height).1f мм" #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" -msgstr "" +msgstr "Только один G-code файла может быть загружен в момент времени. Пропускаю импортирование {0}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1201 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" -msgstr "" +msgstr "Невозможно открыть любой другой файл, если G-code файл уже загружен. Пропускаю импортирование {0}" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:27 msgctxt "@title" @@ -1344,72 +1344,72 @@ msgstr "Изменить активные скрипты пост-обработ #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:59 msgctxt "@label" msgid "View Mode: Layers" -msgstr "" +msgstr "Режим просмотра: Слои" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:75 msgctxt "@label" msgid "Color scheme" -msgstr "" +msgstr "Цветовая схема" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:88 msgctxt "@label:listbox" msgid "Material Color" -msgstr "" +msgstr "Цвет материала" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:92 msgctxt "@label:listbox" msgid "Line Type" -msgstr "" +msgstr "Тип линии" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:133 msgctxt "@label" msgid "Compatibility Mode" -msgstr "" +msgstr "Режим совместимости" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:171 msgctxt "@label" msgid "Extruder %1" -msgstr "" +msgstr "Экструдер %1" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:185 msgctxt "@label" msgid "Show Travels" -msgstr "" +msgstr "Показать движения" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:206 msgctxt "@label" msgid "Show Helpers" -msgstr "" +msgstr "Показать поддержку" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:227 msgctxt "@label" msgid "Show Shell" -msgstr "" +msgstr "Показать стенки" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:248 msgctxt "@label" msgid "Show Infill" -msgstr "" +msgstr "Показать заполнение" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:269 msgctxt "@label" msgid "Only Show Top Layers" -msgstr "" +msgstr "Показать только верхние слои" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:277 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" -msgstr "" +msgstr "Показать 5 детализированных слоёв сверху" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:285 msgctxt "@label" msgid "Top / Bottom" -msgstr "" +msgstr "Дно / крышка" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.qml:306 msgctxt "@label" msgid "Inner Wall" -msgstr "" +msgstr "Внутренняя стенка" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -1878,7 +1878,7 @@ msgstr "Вы уверены, что желаете прервать печать #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:14 msgctxt "@title:window" msgid "Discard or Keep changes" -msgstr "" +msgstr "Сбросить или сохранить изменения" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:59 msgctxt "@text:window" @@ -1886,54 +1886,56 @@ msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" msgstr "" +"Вы изменили некоторые параметры профиля.\n" +"Желаете сохранить их или вернуть к прежним значениям?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:108 msgctxt "@title:column" msgid "Profile settings" -msgstr "" +msgstr "Параметры профиля" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:115 msgctxt "@title:column" msgid "Default" -msgstr "" +msgstr "По умолчанию" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:122 msgctxt "@title:column" msgid "Customized" -msgstr "" +msgstr "Свой" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:152 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 msgctxt "@option:discardOrKeep" msgid "Always ask me this" -msgstr "" +msgstr "Всегда спрашивать меня" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:153 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:392 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" -msgstr "" +msgstr "Сбросить и никогда больше не спрашивать" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:154 #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:393 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" -msgstr "" +msgstr "Сохранить и никогда больше не спрашивать" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:189 msgctxt "@action:button" msgid "Discard" -msgstr "" +msgstr "Сбросить" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:202 msgctxt "@action:button" msgid "Keep" -msgstr "" +msgstr "Сохранить" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:215 msgctxt "@action:button" msgid "Create New Profile" -msgstr "" +msgstr "Создать новый профиль" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:29 msgctxt "@title" @@ -1993,7 +1995,7 @@ msgstr "Длина материала" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:190 msgctxt "@label" msgid "Cost per Meter" -msgstr "" +msgstr "Стоимость метра" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 msgctxt "@label" @@ -2059,7 +2061,7 @@ msgstr "Язык:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:157 msgctxt "@label" msgid "Currency:" -msgstr "" +msgstr "Валюта:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:173 msgctxt "@label" @@ -2069,12 +2071,12 @@ msgstr "Вам потребуется перезапустить приложе #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:190 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." -msgstr "" +msgstr "Нарезать автоматически при изменении настроек." #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:199 msgctxt "@option:check" msgid "Slice automatically" -msgstr "" +msgstr "Нарезать автоматически" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:213 msgctxt "@label" @@ -2124,17 +2126,17 @@ msgstr "Автоматически опускать модели на стол" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:278 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" -msgstr "" +msgstr "Должен ли слой быть переведён в режим совместимости?" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:283 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" -msgstr "" +msgstr "Просматривать слои в режиме совместимости (требуется перезапуск)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:299 msgctxt "@label" msgid "Opening and saving files" -msgstr "" +msgstr "Открытие и сохранение файлов" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:305 msgctxt "@info:tooltip" @@ -2179,12 +2181,12 @@ msgstr "Показывать сводку при сохранении проек #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." -msgstr "" +msgstr "При внесении изменений в профиль и переключении на другой, будет показан диалог, запрашивающий ваше решение о сохранении ваших изменений, или вы можете указать стандартное поведение и не показывать такой диалог." #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:378 msgctxt "@label" msgid "Override Profile" -msgstr "" +msgstr "Переопределение профиля" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:427 msgctxt "@label" @@ -2436,7 +2438,7 @@ msgstr "00ч 00мин" #: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:231 msgctxt "@label" msgid "%1 m / ~ %2 g / ~ %4 %3" -msgstr "" +msgstr "%1 м / ~ %2 гр / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:236 msgctxt "@label" @@ -2525,7 +2527,7 @@ msgstr "Вспомогательная библиотека для работы #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 msgctxt "@label" msgid "Support library for handling 3MF files" -msgstr "" +msgstr "Вспомогательная библиотека для работы с 3MF файлами" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" @@ -2651,6 +2653,8 @@ msgid "" "Print Setup disabled\n" "G-code files cannot be modified" msgstr "" +"Настройка принтера отключена\n" +"G-code файлы нельзя изменять" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:572 msgctxt "@tooltip" @@ -2685,7 +2689,7 @@ msgstr "Открыть недавние" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:33 msgctxt "@info:status" msgid "No printer connected" -msgstr "" +msgstr "Принтер не подключен" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:90 msgctxt "@label" @@ -2695,22 +2699,22 @@ msgstr "Голова" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:119 msgctxt "@tooltip" msgid "The current temperature of this extruder." -msgstr "" +msgstr "Текущая температура экструдера." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:154 msgctxt "@tooltip" msgid "The colour of the material in this extruder." -msgstr "" +msgstr "Цвет материала в данном экструдере." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:186 msgctxt "@tooltip" msgid "The material in this extruder." -msgstr "" +msgstr "Материал в данном экструдере." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:218 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." -msgstr "" +msgstr "Сопло, вставленное в данный экструдер." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:249 msgctxt "@label" @@ -2720,32 +2724,32 @@ msgstr "Стол" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:278 msgctxt "@tooltip" msgid "The target temperature of the heated bed. The bed will heat up or cool down towards this temperature. If this is 0, the bed heating is turned off." -msgstr "" +msgstr "Целевая температура горячего стола. Стол будет нагреваться и охлаждаться, оставаясь на этой температуре. Если установлена в 0, значит нагрев стола отключен." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:310 msgctxt "@tooltip" msgid "The current temperature of the heated bed." -msgstr "" +msgstr "Текущая температура горячего стола." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:379 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the bed to." -msgstr "" +msgstr "Температура преднагрева горячего стола." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:573 msgctxt "@button Cancel pre-heating" msgid "Cancel" -msgstr "" +msgstr "Отмена" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:573 msgctxt "@button" msgid "Pre-heat" -msgstr "" +msgstr "Преднагрев" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:600 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 "" +msgstr "Нагрев горячего стола перед печатью. Вы можете продолжать настройки вашей печати, пока стол нагревается, и вам не понадобится ждать нагрева стола для старта печати." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:633 msgctxt "@label" @@ -2940,7 +2944,7 @@ msgstr "Пожалуйста, загрузите 3D модель" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:33 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" -msgstr "" +msgstr "Готов к нарезке" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:35 msgctxt "@label:PrintjobStatus" @@ -2960,17 +2964,17 @@ msgstr "Невозможно нарезать" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" -msgstr "" +msgstr "Нарезка недоступна" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:136 msgctxt "@label:Printjob" msgid "Prepare" -msgstr "" +msgstr "Подготовка" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:136 msgctxt "@label:Printjob" msgid "Cancel" -msgstr "" +msgstr "Отмена" #: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:276 msgctxt "@info:tooltip" diff --git a/resources/i18n/ru/fdmextruder.def.json.po b/resources/i18n/ru/fdmextruder.def.json.po index c66f3ba00b..4809a3adc7 100644 --- a/resources/i18n/ru/fdmextruder.def.json.po +++ b/resources/i18n/ru/fdmextruder.def.json.po @@ -1,17 +1,12 @@ -# Cura JSON setting files -# Copyright (C) 2017 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2017. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 2.5\n" -"Report-Msgid-Bugs-To: http://github.com/Ultimaker/Cura\n" +"Project-Id-Version: Uranium json setting files\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-03-27 17:27+0000\n" -"PO-Revision-Date: 2017-03-28 04:33+0300\n" -"Language-Team: Ruslan Popov \n" -"Language: ru\n" +"PO-Revision-Date: 2017-01-08 04:33+0300\n" +"Last-Translator: Ruslan Popov \n" +"Language-Team: \n" +"Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/resources/i18n/ru/fdmprinter.def.json.po b/resources/i18n/ru/fdmprinter.def.json.po index 5765e62224..c24428e89f 100644 --- a/resources/i18n/ru/fdmprinter.def.json.po +++ b/resources/i18n/ru/fdmprinter.def.json.po @@ -1,21 +1,16 @@ -# Cura JSON setting files -# Copyright (C) 2017 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2017. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 2.5\n" -"Report-Msgid-Bugs-To: http://github.com/Ultimaker/Cura\n" +"Project-Id-Version: Uranium json setting files\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-03-27 17:27+0000\n" -"PO-Revision-Date: 2017-03-28 04:41+0300\n" -"Language-Team: Ruslan Popov \n" -"Language: ru\n" +"PO-Revision-Date: 2017-03-30 15:05+0300\n" +"Last-Translator: Ruslan Popov \n" +"Language-Team: \n" +"Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 2.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: fdmprinter.def.json @@ -259,12 +254,12 @@ msgstr "Расстояние от кончика сопла до места, г #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled label" msgid "Enable Nozzle Temperature Control" -msgstr "" +msgstr "Разрешить управление температурой сопла" #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled description" msgid "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura." -msgstr "" +msgstr "Следует ли управлять температурой из Cura. Выключение этого параметра предполагает управление температурой сопла вне Cura." #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" @@ -814,37 +809,37 @@ msgstr "Зигзаг" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 label" msgid "Bottom Pattern Initial Layer" -msgstr "" +msgstr "Нижний шаблон начального слоя" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 description" msgid "The pattern on the bottom of the print on the first layer." -msgstr "" +msgstr "Шаблон низа печати на первом слое." #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option lines" msgid "Lines" -msgstr "" +msgstr "Линии" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option concentric" msgid "Concentric" -msgstr "" +msgstr "Концентрический" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "Зигзаг" #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" -msgstr "" +msgstr "Направление линии дна/крышки" #: fdmprinter.def.json msgctxt "skin_angles description" msgid "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees)." -msgstr "" +msgstr "Список направлений линии при печати слоёв дна/крышки линиями или зигзагом. Элементы списка используются последовательно по мере печати слоёв и когда конец списка будет достигнут, он начнётся сначала. Элементы списка отделяются запятыми и сам список заключён в квадратные скобки. По умолчанию, он пустой, что означает использование стандартных углов (45 и 135 градусов)." #: fdmprinter.def.json msgctxt "wall_0_inset label" @@ -989,7 +984,7 @@ msgstr "Игнорирование Z зазоров" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Когда модель имеет небольшие вертикальные зазоры, около 5% дополнительного времени будет потрачено на вычисления верхних и нижних поверхностей в этих узких пространствах. В этом случае, отключите данный параметр." +msgstr "Когда модель имеет небольшие вертикальные зазоры, около 5% дополнительного времени будет потрачено на вычисления верхних и нижних оболочек в этих узких пространствах. В этом случае, отключите данный параметр." #: fdmprinter.def.json msgctxt "infill label" @@ -1079,12 +1074,12 @@ msgstr "Зигзаг" #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" -msgstr "" +msgstr "Направления линии заполнения" #: fdmprinter.def.json msgctxt "infill_angles description" msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns)." -msgstr "" +msgstr "Список направлений линии при печати слоёв. Элементы списка используются последовательно по мере печати слоёв и когда конец списка будет достигнут, он начнётся сначала. Элементы списка отделяются запятыми и сам список заключён в квадратные скобки. По умолчанию, он пустой, что означает использование стандартных углов (45 и 135 градусов для линий из зигзага и 45 градусов для всех остальных шаблонов)." #: fdmprinter.def.json msgctxt "sub_div_rad_mult label" @@ -1129,22 +1124,22 @@ msgstr "Величина перекрытия между заполнением #: fdmprinter.def.json msgctxt "skin_overlap label" msgid "Skin Overlap Percentage" -msgstr "Процент перекрытия поверхности" +msgstr "Процент перекрытия оболочек" #: fdmprinter.def.json msgctxt "skin_overlap description" msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." -msgstr "Величина перекрытия между поверхностью и стенками. Небольшое перекрытие позволяет стенкам плотно соединиться с поверхностью." +msgstr "Величина перекрытия между оболочкой и стенками. Небольшое перекрытие позволяет стенкам плотно соединиться с оболочкой." #: fdmprinter.def.json msgctxt "skin_overlap_mm label" msgid "Skin Overlap" -msgstr "Перекрытие поверхности" +msgstr "Перекрытие оболочек" #: fdmprinter.def.json msgctxt "skin_overlap_mm description" msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." -msgstr "Величина перекрытия между поверхностью и стенками. Небольшое перекрытие позволяет стенкам плотно соединиться с поверхностью." +msgstr "Величина перекрытия между оболочкой и стенками. Небольшое перекрытие позволяет стенкам плотно соединиться с оболочкой." #: fdmprinter.def.json msgctxt "infill_wipe_dist label" @@ -1199,72 +1194,72 @@ msgstr "Печатать заполнение до печати стенок. Е #: fdmprinter.def.json msgctxt "min_infill_area label" msgid "Minimum Infill Area" -msgstr "" +msgstr "Минимальная область заполнения" #: fdmprinter.def.json msgctxt "min_infill_area description" msgid "Don't generate areas of infill smaller than this (use skin instead)." -msgstr "" +msgstr "Не генерировать области заполнения меньше чем указано здесь (вместо этого использовать оболочку)." #: fdmprinter.def.json msgctxt "expand_skins_into_infill label" msgid "Expand Skins Into Infill" -msgstr "" +msgstr "Расширять оболочку в заполнение" #: fdmprinter.def.json msgctxt "expand_skins_into_infill description" msgid "Expand skin areas of top and/or bottom skin of flat surfaces. By default, skins stop under the wall lines that surround infill but this can lead to holes appearing when the infill density is low. This setting extends the skins beyond the wall lines so that the infill on the next layer rests on skin." -msgstr "" +msgstr "Расширять области оболочки на верхних и/или нижних обшивках плоских поверхностях. По умолчанию, обшивки завершаются под линиями стенки, которые окружают заполнение, но это может приводить к отверстиям, появляющимся при малой плотности заполнения. Данный параметр расширяет обшивку позади линий стенки таким образом, что заполнение следующего слоя располагается на обшивке." #: fdmprinter.def.json msgctxt "expand_upper_skins label" msgid "Expand Upper Skins" -msgstr "" +msgstr "Расширять верхние оболочки" #: fdmprinter.def.json msgctxt "expand_upper_skins description" msgid "Expand upper skin areas (areas with air above) so that they support infill above." -msgstr "" +msgstr "Расширять области верхней оболочки (над ними будет воздух) так, что они поддерживают заполнение над ними." #: fdmprinter.def.json msgctxt "expand_lower_skins label" msgid "Expand Lower Skins" -msgstr "" +msgstr "Расширять нижние оболочки" #: fdmprinter.def.json msgctxt "expand_lower_skins description" msgid "Expand lower skin areas (areas with air below) so that they are anchored by the infill layers above and below." -msgstr "" +msgstr "Расширять области нижней оболочки (под ними будет воздух) так, что они сцепляются с слоями заполнения сверху и снизу." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" msgid "Skin Expand Distance" -msgstr "" +msgstr "Дистанция расширения оболочки" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. The default distance is enough to bridge the gap between the infill lines and will stop holes appearing in the skin where it meets the wall when the infill density is low. A smaller distance will often be sufficient." -msgstr "" +msgstr "Дистанция, на которую расширяется оболочка внутри заполнения. По умолчанию, дистанция достаточна для связывания промежутков между линиями заполнения и предотвращает появление отверстий в оболочке, где она встречается со стенкой когда плотность заполнения низкая. Меньшая дистанция чаще всего будет достаточной." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" msgid "Maximum Skin Angle for Expansion" -msgstr "" +msgstr "Максимальный угол оболочки при расширении" #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion description" msgid "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical." -msgstr "" +msgstr "Верхняя и/или нижняя поверхности вашего объекта с углом больше указанного в данном параметре, не будут иметь расширенные оболочки дна/крышки. Это предотвращает расширение узких областей оболочек, которые создаются, если поверхность модели имеет почти вертикальный наклон. Угол в 0° является горизонтальным, а в 90° - вертикальным." #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion label" msgid "Minimum Skin Width for Expansion" -msgstr "" +msgstr "Минимальная ширина оболочки при расширении" #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion description" msgid "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical." -msgstr "" +msgstr "Области оболочек уже указанного значения не расширяются. Это предотвращает расширение узких областей оболочек, которые создаются, если наклон поверхности модели близок к вертикальному." #: fdmprinter.def.json msgctxt "material label" @@ -1304,7 +1299,7 @@ msgstr "Температура сопла" #: fdmprinter.def.json msgctxt "material_print_temperature description" msgid "The temperature used for printing." -msgstr "" +msgstr "Температура, используемая при печати." #: fdmprinter.def.json msgctxt "material_print_temperature_layer_0 label" @@ -1364,7 +1359,7 @@ msgstr "Температура стола" #: fdmprinter.def.json msgctxt "material_bed_temperature description" msgid "The temperature used for the heated build plate. If this is 0, the bed will not heat up for this print." -msgstr "" +msgstr "Температура, используемая для горячего стола. Если указан 0, то горячий стол не нагревается при печати." #: fdmprinter.def.json msgctxt "material_bed_temperature_layer_0 label" @@ -2104,12 +2099,12 @@ msgstr "Без поверхности" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall label" msgid "Retract Before Outer Wall" -msgstr "" +msgstr "Откат перед внешней стенкой" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall description" msgid "Always retract when moving to start an outer wall." -msgstr "" +msgstr "Всегда откатывать материал при движении к началу внешней стенки." #: fdmprinter.def.json msgctxt "travel_avoid_other_parts label" @@ -2489,7 +2484,7 @@ msgstr "Зазор поддержки по оси Z" #: fdmprinter.def.json msgctxt "support_z_distance description" msgid "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height." -msgstr "" +msgstr "Дистанция от дна/крышки структуры поддержек до печати. Этот зазор упрощает извлечение поддержек после окончания печати модели. Это значение округляется до числа, кратного высоте слоя." #: fdmprinter.def.json msgctxt "support_top_distance label" @@ -3293,7 +3288,7 @@ msgstr "Ремонт объектов" #: fdmprinter.def.json msgctxt "meshfix description" msgid "category_fixes" -msgstr "" +msgstr "category_fixes" #: fdmprinter.def.json msgctxt "meshfix_union_all label" @@ -3373,7 +3368,7 @@ msgstr "Специальные режимы" #: fdmprinter.def.json msgctxt "blackmagic description" msgid "category_blackmagic" -msgstr "" +msgstr "category_blackmagic" #: fdmprinter.def.json msgctxt "print_sequence label" @@ -3403,7 +3398,7 @@ msgstr "Заполнение объекта" #: fdmprinter.def.json msgctxt "infill_mesh description" msgid "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh." -msgstr "Использовать указанный объект для изменения заполнения других объектов, с которыми он перекрывается. Заменяет области заполнения других объектов областями для этого объекта. Предлагается только для печати одной стенки без верхних и нижних поверхностей." +msgstr "Использовать указанный объект для изменения заполнения других объектов, с которыми он перекрывается. Заменяет области заполнения других объектов областями для этого объекта. Предлагается только для печати одной стенки без верхних и нижних оболочек." #: fdmprinter.def.json msgctxt "infill_mesh_order label" @@ -3443,7 +3438,7 @@ msgstr "Поверхностный режим" #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode description" msgid "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces." -msgstr "Рассматривать модель только в виде поверхности или как объёмы со свободными поверхностями. При нормальном режиме печатаются только закрытые объёмы. В режиме \"Поверхность\" печатается одиночная стенка по границе объекта, без заполнения, верха и низа. В режиме \"Оба варианта\" печатаются закрытые объёмы как нормальные, а любые оставшиеся полигоны как поверхности." +msgstr "Рассматривать модель только в виде поверхности или как объёмы со свободными поверхностями. При нормальном режиме печатаются только закрытые объёмы. В режиме \"Поверхность\" печатается одиночная стенка по границе объекта, без заполнения, без верхних и нижних оболочек. В режиме \"Оба варианта\" печатаются закрытые объёмы как нормальные, а любые оставшиеся полигоны как поверхности." #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode option normal" @@ -3593,7 +3588,7 @@ msgstr "Скорость, с которой производятся движе #: fdmprinter.def.json msgctxt "skin_outline_count label" msgid "Extra Skin Wall Count" -msgstr "Количество внешних дополнительных поверхностей" +msgstr "Количество внешних дополнительных оболочек" #: fdmprinter.def.json msgctxt "skin_outline_count description" @@ -3603,7 +3598,7 @@ msgstr "Заменяет внешнюю часть шаблона крышки/ #: fdmprinter.def.json msgctxt "skin_alternate_rotation label" msgid "Alternate Skin Rotation" -msgstr "Чередование вращения поверхности" +msgstr "Чередование вращения оболочек" #: fdmprinter.def.json msgctxt "skin_alternate_rotation description" @@ -3653,7 +3648,7 @@ msgstr "Удаляет всё заполнение и разрешает ген #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled label" msgid "Fuzzy Skin" -msgstr "Нечёткая поверхность" +msgstr "Нечёткая оболочка" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled description" @@ -3663,7 +3658,7 @@ msgstr "Вносит небольшое дрожание при печати в #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness label" msgid "Fuzzy Skin Thickness" -msgstr "Толщина шершавости" +msgstr "Толщина шершавости оболочки" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness description" @@ -3673,7 +3668,7 @@ msgstr "Величина амплитуды дрожания. Рекоменду #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density label" msgid "Fuzzy Skin Density" -msgstr "Плотность шершавой стенки" +msgstr "Плотность шершавой оболочки" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density description" @@ -3683,12 +3678,12 @@ msgstr "Средняя плотность точек, добавленных н #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist label" msgid "Fuzzy Skin Point Distance" -msgstr "Дистанция между точками шершавости" +msgstr "Дистанция между точками шершавой оболочки" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist description" msgid "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness." -msgstr "Среднее расстояние между случайными точками, который вносятся в каждый сегмент линии. Следует отметить, что оригинальные точки полигона отбрасываются, таким образом, сильное сглаживание приводит к уменьшению разрешения. Это значение должно быть больше половины толщины шершавости." +msgstr "Среднее расстояние между случайными точками, который вносятся в каждый сегмент линии. Следует отметить, что оригинальные точки полигона отбрасываются, таким образом, сильное сглаживание приводит к уменьшению разрешения. Это значение должно быть больше половины толщины шершавой оболочки." #: fdmprinter.def.json msgctxt "wireframe_enabled label" From ba64573fa0072f9b2fed70fd9c7f8104c5a2e01e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Apr 2017 16:09:51 +0200 Subject: [PATCH 324/816] Use support interface density instead of line distance This way the user can still override the line distance if necessary. Contributes to issue CURA-3650. --- resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg | 2 +- resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg | 2 +- resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 11dad72e08..12463ab831 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -54,7 +54,7 @@ speed_travel = 250 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance -support_interface_line_distance = 0.4 +support_interface_density = 87.5 support_interface_pattern = lines switch_extruder_prime_speed = 15 switch_extruder_retraction_amount = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index 39b02f392d..9353a6c6fa 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -53,7 +53,7 @@ speed_travel = 250 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance -support_interface_line_distance = 0.4 +support_interface_density = 87.5 support_interface_pattern = lines switch_extruder_prime_speed = 15 switch_extruder_retraction_amount = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index ab8a520b5b..01fe47a6a2 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -54,7 +54,7 @@ speed_travel = 250 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance -support_interface_line_distance = 0.4 +support_interface_density = 87.5 support_interface_pattern = lines switch_extruder_prime_speed = 15 switch_extruder_retraction_amount = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 6d92720ae4..41272a7718 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -52,7 +52,7 @@ speed_travel = 250 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance -support_interface_line_distance = 0.4 +support_interface_density = 87.5 support_interface_pattern = lines switch_extruder_prime_speed = 15 switch_extruder_retraction_amount = 20 From 437c78711de5712544fd458c4792cae9d7ae2229 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 13 Apr 2017 16:32:17 +0200 Subject: [PATCH 325/816] Added typing to all singletons This greatly helps with pycharms ability to do auto code completion --- cura/QualityManager.py | 4 ++-- cura/Settings/ProfilesModel.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index d7b2c7d705..f0f095b912 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -16,9 +16,9 @@ class QualityManager: ## Get the singleton instance for this class. @classmethod - def getInstance(cls): + def getInstance(cls) -> "QualityManager": # Note: Explicit use of class name to prevent issues with inheritance. - if QualityManager.__instance is None: + if not QualityManager.__instance: QualityManager.__instance = cls() return QualityManager.__instance diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 404bb569a5..9056273216 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -32,9 +32,9 @@ class ProfilesModel(InstanceContainersModel): ## Get the singleton instance for this class. @classmethod - def getInstance(cls): + def getInstance(cls) -> "ProfilesModel": # Note: Explicit use of class name to prevent issues with inheritance. - if ProfilesModel.__instance is None: + if not ProfilesModel.__instance: ProfilesModel.__instance = cls() return ProfilesModel.__instance From e49316d1b9692a8d950fdec8b1026dbd22696f4b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 13 Apr 2017 18:21:17 +0200 Subject: [PATCH 326/816] Set nozzle switch prime speed in AA 0.8mm profiles to 20 Some of them ended up as 15 because that's the default in the Ultimaker 3. This was done correctly by the profile optimiser because this setting was not specified by the original profiles, but it should've been 20 for all AA 0.8mm profiles. Contributes to issue CURA-3650. --- resources/variants/ultimaker3_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_extended_aa0.8.inst.cfg | 1 + 2 files changed, 2 insertions(+) diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index a938ea1a8f..98859a64a1 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -56,6 +56,7 @@ support_bottom_distance = =support_z_distance / 2 support_pattern = zigzag support_top_distance = =support_z_distance support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = 20 switch_extruder_retraction_amount = 16.5 top_bottom_thickness = 1.4 travel_avoid_distance = 3 diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 09b6bacee7..4ce6689f67 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -56,6 +56,7 @@ support_bottom_distance = =support_z_distance / 2 support_pattern = zigzag support_top_distance = =support_z_distance support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = 20 switch_extruder_retraction_amount = 16.5 top_bottom_thickness = 1.4 travel_avoid_distance = 3 From bb752fa16f2967559063d40ad83e06667cd5f4c5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 13 Apr 2017 19:05:13 +0200 Subject: [PATCH 327/816] Added more logging --- plugins/USBPrinting/USBPrinterOutputDevice.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 580bbf06df..28ab67dc46 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -148,6 +148,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Start a print based on a g-code. # \param gcode_list List with gcode (strings). def printGCode(self, gcode_list): + Logger.log("d", "Started printing g-code") if self._progress or self._connection_state != ConnectionState.connected: self._error_message = Message(catalog.i18nc("@info:status", "Unable to start a new job because the printer is busy or not connected.")) self._error_message.show() @@ -183,6 +184,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Private function (threaded) that actually uploads the firmware. def _updateFirmware(self): + Logger.log("d", "Attempting to update firmware") self._error_code = 0 self.setProgress(0, 100) self._firmware_update_finished = False @@ -536,6 +538,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._sendNextGcodeLine() elif b"resend" in line.lower() or b"rs" in line: # Because a resend can be asked with "resend" and "rs" try: + Logger.log("d", "Got a resend response") self._gcode_position = int(line.replace(b"N:",b" ").replace(b"N",b" ").replace(b":",b" ").split()[-1]) except: if b"rs" in line: From 6dfe9f609a299ec595417ce0c9a619cc785cbfc2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Apr 2017 09:48:17 +0200 Subject: [PATCH 328/816] Added build info to gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 22d42783f2..a6a456fd90 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,10 @@ plugins/GodMode plugins/PostProcessingPlugin plugins/X3GWriter +#Build stuff +CmakeCache.txt +CmakeFiles +CTestTestfile.cmake +Makefile + + From fe36da34387851dd898f203296c065e67ea5a5a6 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Apr 2017 09:52:29 +0200 Subject: [PATCH 329/816] Added more files to gitignore --- .gitignore | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index a6a456fd90..52d888f465 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ LC_MESSAGES *~ *.qm .idea +cura.desktop # Eclipse+PyDev .project @@ -33,11 +34,21 @@ plugins/Doodle3D-cura-plugin plugins/GodMode plugins/PostProcessingPlugin plugins/X3GWriter +plugins/FlatProfileExporter +plugins/cura-god-mode-plugin #Build stuff -CmakeCache.txt -CmakeFiles +CMakeCache.txt +CMakeFiles +CPackSourceConfig.cmake +Testing/ CTestTestfile.cmake -Makefile +Makefile* +junit-pytest-* +CuraVersion.py +cmake_install.cmake +#Debug +*.gcode +run.sh From 39ceb53980ef5daf00c53fe1e522fa41958d021f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 10:22:25 +0200 Subject: [PATCH 330/816] Set raft margin to 10 This was ambiguous in the original profiles. Contributes to issue CURA-3650. --- .../quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 852ff52f6d..e9f081ef4a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -27,6 +27,7 @@ material_initial_print_temperature = =max(-273.15, material_print_temperature - material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 prime_tower_size = 15 +raft_margin = 10 support_angle = 70 support_line_width = =line_width * 0.75 support_pattern = ='triangles' From 137b5309fd0f52f4921bef7f54a914cac4762d95 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 10:28:13 +0200 Subject: [PATCH 331/816] Relax warning value for support interface thickness It was being violated by the superdraft profiles. With very thick layers, 2 layers of interface suffices. But 2 layers is not quite enough for very thin layers. So I'm making it scale a bit more slowly with an offset. Contributes to issue CURA-3650. --- resources/definitions/fdmprinter.def.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 881805d83a..110475c8b4 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3080,7 +3080,7 @@ "type": "float", "default_value": 1, "minimum_value": "0", - "minimum_value_warning": "3 * resolveOrValue('layer_height')", + "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "maximum_value_warning": "10", "limit_to_extruder": "support_interface_extruder_nr", "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", @@ -3095,7 +3095,7 @@ "type": "float", "default_value": 1, "minimum_value": "0", - "minimum_value_warning": "3 * resolveOrValue('layer_height')", + "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "maximum_value_warning": "10", "value": "extruderValue(support_interface_extruder_nr, 'support_interface_height')", "limit_to_extruder": "support_interface_extruder_nr", @@ -3111,7 +3111,7 @@ "default_value": 1, "value": "extruderValue(support_interface_extruder_nr, 'support_interface_height')", "minimum_value": "0", - "minimum_value_warning": "min(3 * resolveOrValue('layer_height'), extruderValue(support_interface_extruder_nr, 'support_bottom_stair_step_height'))", + "minimum_value_warning": "min(0.2 + resolveOrValue('layer_height'), extruderValue(support_interface_extruder_nr, 'support_bottom_stair_step_height'))", "maximum_value_warning": "10", "limit_to_extruder": "support_interface_extruder_nr", "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", From d6d6036760a6ec04a83606b07be074790f0341c5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Apr 2017 10:29:24 +0200 Subject: [PATCH 332/816] Fixed minor mistake with pull request CURA-3681 --- 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 3f9dc3971a..0100874eab 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -570,7 +570,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): # m105 instead. # Don't send the M0 or M1 to the machine, as M0 and M1 are handled as # an LCD menu pause. - if line == "" or line == "M1" or line == "M1": + if line == "" or line == "M0" or line == "M1": line = "M105" try: if ("G0" in line or "G1" in line) and "Z" in line: From 4f2c76e462d8db59ca362cdf6687a7aa2505b617 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Apr 2017 15:25:15 +0200 Subject: [PATCH 333/816] Update a profile when deserializing it CURA-3540 --- .../XmlMaterialProfile/XmlMaterialProfile.py | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7dc565ce26..76a33ce8e3 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -11,7 +11,7 @@ from UM.Util import parseBool from cura.CuraApplication import CuraApplication import UM.Dictionary -from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.InstanceContainer import InstanceContainer, InvalidInstanceError from UM.Settings.ContainerRegistry import ContainerRegistry ## Handles serializing and deserializing material containers from an XML file @@ -369,8 +369,30 @@ class XmlMaterialProfile(InstanceContainer): self._dirty = False self._path = "" + def getConfigurationType(self) -> str: + return "material" # FIXME: not sure if this is correct + + def getVersionFromSerialized(self, serialized: str) -> int: + version = None + data = ET.fromstring(serialized) + metadata = data.iterfind("./um:metadata/*", self.__namespaces) + for entry in metadata: + tag_name = _tag_without_namespace(entry) + if tag_name == "version": + try: + version = int(entry.text) + except Exception as e: + raise InvalidInstanceError("Invalid version string '%s': %s" % (entry.text, e)) + break + if version is None: + raise InvalidInstanceError("Missing version in metadata") + return version + ## Overridden from InstanceContainer def deserialize(self, serialized): + # update the serialized data first + from UM.Settings.Interfaces import ContainerInterface + serialized = ContainerInterface.deserialize(self, serialized) data = ET.fromstring(serialized) # Reset previous metadata @@ -405,10 +427,10 @@ class XmlMaterialProfile(InstanceContainer): continue meta_data[tag_name] = entry.text - if not "description" in meta_data: + if "description" not in meta_data: meta_data["description"] = "" - if not "adhesion_info" in meta_data: + if "adhesion_info" not in meta_data: meta_data["adhesion_info"] = "" property_values = {} From 8ede11100170f351b1e3d9a4673b0e34183d4bfb Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 14 Apr 2017 11:41:12 +0200 Subject: [PATCH 334/816] Texts in the mainwindow should be Text instead of Label CURA-3389 --- resources/qml/SidebarSimple.qml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 21abe1b4bb..8f43e411ff 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -33,7 +33,7 @@ Item width: base.width * .45 - UM.Theme.getSize("default_margin").width height: childrenRect.height - Label + Text { id: infillLabel //: Infill selection label @@ -162,7 +162,7 @@ Item } } } - Label + Text { id: infillLabel font: UM.Theme.getFont("default") @@ -225,7 +225,7 @@ Item anchors.right: parent.right height: childrenRect.height - Label + Text { id: enableSupportLabel anchors.left: parent.left @@ -272,7 +272,7 @@ Item } } - Label + Text { id: supportExtruderLabel visible: (supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1) @@ -372,7 +372,7 @@ Item } - Label + Text { id: adhesionHelperLabel anchors.left: parent.left @@ -470,7 +470,7 @@ Item width: parent.width height: childrenRect.height - Label + Text { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width From e72d5ce93fb1e7ba0efed52bd8784949e6be74e6 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 11:54:20 +0200 Subject: [PATCH 335/816] Make raft middle thickness warn based on nozzle size Whether the layer is too thick to extrude properly depends on the nozzle size, not on the line width. Contributes to issue CURA-3650. --- 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 110475c8b4..17add697a5 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3496,7 +3496,7 @@ "value": "resolveOrValue('layer_height') * 1.5", "minimum_value": "0.001", "minimum_value_warning": "0.04", - "maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'raft_interface_line_width')", + "maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'machine_nozzle_size')", "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, From 3a30386ec6ab594ecfc78f48cd64a77d1dc2dde6 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 11:56:36 +0200 Subject: [PATCH 336/816] Fix brim width of Nylon 0.8mm profiles The 3mm was computed from wanting 7 lines, but in that calculation I used a line width of 0.4mm. This is obviously wrong, since for 0.8mm profiles the line width is 0.8mm. Contributes to issue CURA-3650. --- .../quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index 82bdcea44b..30d9dccb19 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -10,7 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -2 [values] -brim_width = 3 +brim_width = 5.6 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 99b433def1..b2348c7a30 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -10,7 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -4 [values] -brim_width = 3 +brim_width = 5.6 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 6f41e231c5..42b09bd272 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -10,7 +10,7 @@ material = generic_nylon_ultimaker3_AA_0.8 weight = -3 [values] -brim_width = 3 +brim_width = 5.6 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 10 infill_before_walls = True From 9cd7d9a038c8e1eb5b744e16054ef10e2dd3f6a2 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 13 Apr 2017 13:52:11 +0200 Subject: [PATCH 337/816] Use the correct i18n catalog name for translations in the right-click menu CURA-3660 --- resources/qml/Settings/SettingView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 7138d4acd3..19792e3e0e 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -312,7 +312,7 @@ Item } } - UM.I18nCatalog { id: catalog; name: "uranium"; } + UM.I18nCatalog { id: catalog; name: "cura"; } add: Transition { SequentialAnimation { From bfda8712e1070613534e37e1e0cfbece97a6b893 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 14 Apr 2017 13:16:48 +0200 Subject: [PATCH 338/816] Change all Label to Text so fonts are rendered correct CURA-3389 --- resources/qml/PrintMonitor.qml | 32 ++++++++++++++++---------------- resources/qml/SaveButton.qml | 2 +- resources/qml/Sidebar.qml | 2 +- resources/qml/SidebarHeader.qml | 6 +++--- resources/qml/SidebarTooltip.qml | 2 +- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index ddbfac0e4f..1b500d5b20 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -27,7 +27,7 @@ Column height: childrenRect.height + UM.Theme.getSize("default_margin").height * 2 color: UM.Theme.getColor("setting_category") - Label + Text { id: connectedPrinterNameLabel text: connectedPrinter != null ? connectedPrinter.name : catalog.i18nc("@info:status", "No printer connected") @@ -37,7 +37,7 @@ Column anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width } - Label + Text { id: connectedPrinterAddressLabel text: (connectedPrinter != null && connectedPrinter.address != null) ? connectedPrinter.address : "" @@ -47,7 +47,7 @@ Column anchors.right: parent.right anchors.margins: UM.Theme.getSize("default_margin").width } - Label + Text { text: connectedPrinter != null ? connectedPrinter.connectionText : catalog.i18nc("@info:status", "The printer is not connected.") color: connectedPrinter != null && connectedPrinter.acceptsCommands ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") @@ -85,7 +85,7 @@ Column width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : extrudersGrid.width / 2 - UM.Theme.getSize("sidebar_lining_thin").width / 2 height: UM.Theme.getSize("sidebar_extruder_box").height - Label //Extruder name. + Text //Extruder name. { text: ExtruderManager.getExtruderName(index) != "" ? ExtruderManager.getExtruderName(index) : catalog.i18nc("@label", "Hotend") color: UM.Theme.getColor("text") @@ -94,7 +94,7 @@ Column anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width } - Label //Temperature indication. + Text //Temperature indication. { id: extruderTemperature text: (connectedPrinter != null && connectedPrinter.hotendIds[index] != null && connectedPrinter.hotendTemperatures[index] != null) ? Math.round(connectedPrinter.hotendTemperatures[index]) + "°C" : "" @@ -161,7 +161,7 @@ Column } } } - Label //Material name. + Text //Material name. { id: materialName text: (connectedPrinter != null && connectedPrinter.materialNames[index] != null && connectedPrinter.materialIds[index] != "") ? connectedPrinter.materialNames[index] : "" @@ -193,7 +193,7 @@ Column } } } - Label //Variant name. + Text //Variant name. { id: variantName text: (connectedPrinter != null && connectedPrinter.hotendIds[index] != null) ? connectedPrinter.hotendIds[index] : "" @@ -244,7 +244,7 @@ Column height: machineHeatedBed.properties.value == "True" ? UM.Theme.getSize("sidebar_extruder_box").height : 0 visible: machineHeatedBed.properties.value == "True" - Label //Build plate label. + Text //Build plate label. { text: catalog.i18nc("@label", "Build plate") font: UM.Theme.getFont("default") @@ -253,7 +253,7 @@ Column anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width } - Label //Target temperature. + Text //Target temperature. { id: bedTargetTemperature text: connectedPrinter != null ? connectedPrinter.targetBedTemperature + "°C" : "" @@ -285,7 +285,7 @@ Column } } } - Label //Current temperature. + Text //Current temperature. { id: bedCurrentTemperature text: connectedPrinter != null ? connectedPrinter.bedTemperature + "°C" : "" @@ -353,7 +353,7 @@ Column color: UM.Theme.getColor("setting_control_highlight") opacity: preheatTemperatureControl.hovered ? 1.0 : 0 } - Label //Maximum temperature indication. + Text //Maximum temperature indication. { text: (bedTemperature.properties.maximum_value != "None" ? bedTemperature.properties.maximum_value : "") + "°C" color: UM.Theme.getColor("setting_unit") @@ -452,7 +452,7 @@ Column } } } - Label + Text { id: preheatCountdown text: connectedPrinter != null ? connectedPrinter.preheatBedRemainingTime : "" @@ -546,7 +546,7 @@ Column } } - Label + Text { id: actualLabel anchors.centerIn: parent @@ -662,7 +662,7 @@ Column anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width - Label + Text { width: parent.width * 0.4 anchors.verticalCenter: parent.verticalCenter @@ -671,7 +671,7 @@ Column font: UM.Theme.getFont("default") elide: Text.ElideRight } - Label + Text { width: parent.width * 0.6 anchors.verticalCenter: parent.verticalCenter @@ -692,7 +692,7 @@ Column width: base.width height: UM.Theme.getSize("section").height - Label + Text { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index c87c58b53e..411da0c392 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -44,7 +44,7 @@ Item { } } - Label { + Text { id: statusLabel width: parent.width - 2 * UM.Theme.getSize("default_margin").width anchors.top: parent.top diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 212d18629b..f4f439439f 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -332,7 +332,7 @@ Rectangle } } - Label { + Text { id: settingsModeLabel text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified"); anchors.left: parent.left diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 93d4e9d6f2..e4070c5d43 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -128,7 +128,7 @@ Column border.color: UM.Theme.getColor("setting_control_border") } - Label + Text { anchors.verticalCenter: parent.verticalCenter anchors.left: swatch.visible ? swatch.right : parent.left @@ -174,7 +174,7 @@ Column rightMargin: UM.Theme.getSize("default_margin").width } - Label + Text { id: variantLabel text: @@ -272,7 +272,7 @@ Column } - Label + Text { id: globalProfileLabel text: catalog.i18nc("@label","Profile:"); diff --git a/resources/qml/SidebarTooltip.qml b/resources/qml/SidebarTooltip.qml index 7344834c7e..08ba0a081e 100644 --- a/resources/qml/SidebarTooltip.qml +++ b/resources/qml/SidebarTooltip.qml @@ -43,7 +43,7 @@ UM.PointingRectangle { base.opacity = 0; } - Label { + Text { id: label; anchors { top: parent.top; From 09d624dcfe977aedd15e2f20511039db769b1fb4 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Apr 2017 14:15:43 +0200 Subject: [PATCH 339/816] Fixed accidental switch of function properties --- cura/Settings/MachineManager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d41f5fd84f..66dad04f3b 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -329,6 +329,7 @@ class MachineManager(QObject): name = self._createUniqueName("machine", "", name, definition.getName()) new_global_stack = ContainerStack(name) new_global_stack.addMetaDataEntry("type", "machine") + new_global_stack.addContainer(definition) container_registry.addContainer(new_global_stack) variant_instance_container = self._updateVariantContainer(definition) @@ -341,7 +342,7 @@ class MachineManager(QObject): current_settings_instance_container.setDefinition(definitions[0]) container_registry.addContainer(current_settings_instance_container) - new_global_stack.addContainer(definition) + if variant_instance_container: new_global_stack.addContainer(variant_instance_container) if material_instance_container: @@ -1110,7 +1111,7 @@ class MachineManager(QObject): return self._empty_variant_container - def _updateMaterialContainer(self, stack, definition, variant_container = None, preferred_material_name = None): + def _updateMaterialContainer(self, definition, stack, variant_container = None, preferred_material_name = None): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container From 53ecaba7f238ca7352bf4580bd7663bef2fdda27 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 14 Apr 2017 14:21:36 +0200 Subject: [PATCH 340/816] Added more typing. These typing hints should have prevented the previous issue from happening --- cura/Settings/MachineManager.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 66dad04f3b..493f8fcf07 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -15,9 +15,7 @@ from UM.Message import Message from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer -from UM.Settings.SettingDefinition import SettingDefinition from UM.Settings.SettingFunction import SettingFunction -from UM.Settings.Validator import ValidatorState from UM.Signal import postponeSignals from cura.QualityManager import QualityManager @@ -27,6 +25,11 @@ from cura.Settings.ExtruderManager import ExtruderManager from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from UM.Settings.DefinitionContainer import DefinitionContainer + import os class MachineManager(QObject): @@ -1095,7 +1098,7 @@ class MachineManager(QObject): def createMachineManager(engine=None, script_engine=None): return MachineManager() - def _updateVariantContainer(self, definition): + def _updateVariantContainer(self, definition: "DefinitionContainer"): if not definition.getMetaDataEntry("has_variants"): return self._empty_variant_container machine_definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(definition) @@ -1111,7 +1114,7 @@ class MachineManager(QObject): return self._empty_variant_container - def _updateMaterialContainer(self, definition, stack, variant_container = None, preferred_material_name = None): + def _updateMaterialContainer(self, definition: "DefinitionContainer", stack: "ContainerStack", variant_container: Optional["InstanceContainer"] = None, preferred_material_name: Optional[str] = None): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container @@ -1148,7 +1151,7 @@ class MachineManager(QObject): Logger.log("w", "Unable to find a material container with provided criteria, returning an empty one instead.") return self._empty_material_container - def _updateQualityContainer(self, definition, variant_container, material_container = None, preferred_quality_name = None): + def _updateQualityContainer(self, definition: "DefinitionContainer", variant_container: "ContainerStack", material_container = None, preferred_quality_name: Optional[str] = None): container_registry = ContainerRegistry.getInstance() search_criteria = { "type": "quality" } From 72c0295c816acade0e53faa152f7bcf859c47446 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 14:00:53 +0200 Subject: [PATCH 341/816] Set nozzle tip diameter for 0.8mm cores They have a outer diameter of 2mm. Contributes to issue CURA-3650. --- resources/variants/ultimaker3_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_bb0.8.inst.cfg | 1 + resources/variants/ultimaker3_extended_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_extended_bb0.8.inst.cfg | 1 + 4 files changed, 4 insertions(+) diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 98859a64a1..e7e1654c6e 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -31,6 +31,7 @@ machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_standby_temperature = 100 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index 104b4d09d1..d0c2c9c661 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -25,6 +25,7 @@ layer_height = 0.2 machine_min_cool_heat_time_window = 15 machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 4ce6689f67..b89ce4406b 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -31,6 +31,7 @@ machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_standby_temperature = 100 diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index e8096c2cd6..e4fb152ee0 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -25,6 +25,7 @@ layer_height = 0.2 machine_min_cool_heat_time_window = 15 machine_nozzle_heat_up_speed = 1.5 machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 From 541e28a3879140926fb66d36f0f1f1378deaa26c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 14:11:55 +0200 Subject: [PATCH 342/816] Allow exactly 2 line widths for prime tower We give a warning when it's 2 or fewer lines in the prime tower, but 2 should be allowable. It works quite well. Contributes to issue CURA-3650. --- 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 17add697a5..147f966a94 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3898,7 +3898,7 @@ "value": "round(max(2 * min(extruderValues('prime_tower_line_width')), 0.5 * (resolveOrValue('prime_tower_size') - math.sqrt(max(0, resolveOrValue('prime_tower_size') ** 2 - max(extruderValues('prime_tower_min_volume')) / resolveOrValue('layer_height'))))), 3)", "resolve": "max(extruderValues('prime_tower_wall_thickness'))", "minimum_value": "0.001", - "minimum_value_warning": "2 * min(extruderValues('prime_tower_line_width'))", + "minimum_value_warning": "2 * min(extruderValues('prime_tower_line_width')) - 0.0001", "maximum_value_warning": "resolveOrValue('prime_tower_size') / 2", "enabled": "resolveOrValue('prime_tower_enable')", "settable_per_mesh": false, From 0d793a60fefe524acfcd14710ab98327273808aa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 15:14:51 +0200 Subject: [PATCH 343/816] Remove duplicate infill overlap setting infill_overlap and infill_overlap_mm were in conflict with each other. Went to the Materials team to resolve it. They say it should be 0. Contributes to issue CURA-3650. --- .../quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 41272a7718..cc50189e8c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -20,7 +20,6 @@ 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_overlap_mm = 0.05 infill_pattern = triangles infill_wipe_dist = 0.1 jerk_enabled = True From b3f60c461b047c669e63a861339faf748f3bfe60 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 14 Apr 2017 15:40:15 +0200 Subject: [PATCH 344/816] Fix type hinting and function name for upgrade profile CURA-3540 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 76a33ce8e3..1e1ea7ce59 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -3,6 +3,7 @@ import copy import io +from typing import Optional import xml.etree.ElementTree as ET from UM.Resources import Resources @@ -369,10 +370,10 @@ class XmlMaterialProfile(InstanceContainer): self._dirty = False self._path = "" - def getConfigurationType(self) -> str: - return "material" # FIXME: not sure if this is correct + def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]: + return "material" - def getVersionFromSerialized(self, serialized: str) -> int: + def getVersionFromSerialized(self, serialized: str) -> Optional[int]: version = None data = ET.fromstring(serialized) metadata = data.iterfind("./um:metadata/*", self.__namespaces) From 39fbe542b909ee4211f923243a27a361d2ebd38c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 16:08:12 +0200 Subject: [PATCH 345/816] Fix font rendering issues in job spec details Labels render with system settings. Text renders with our settings. Contributes to issue CURA-3389. --- resources/qml/JobSpecs.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 39b7f42ea0..54b559f794 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -132,7 +132,7 @@ Item { } } - Label + Text { id: boundingSpec anchors.top: jobNameRow.bottom @@ -169,7 +169,7 @@ Item { color: UM.Theme.getColor("text_subtext") source: UM.Theme.getIcon("print_time") } - Label + Text { id: timeSpec anchors.right: lengthIcon.left @@ -192,7 +192,7 @@ Item { color: UM.Theme.getColor("text_subtext") source: UM.Theme.getIcon("category_material") } - Label + Text { id: lengthSpec anchors.right: parent.right From 9b06d7dd80c8c493712b53dad4d2e343a75a5869 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 16:26:14 +0200 Subject: [PATCH 346/816] Relax warning constraints for top and bottom thickness With very thick layers, fewer layers will still provide enough strength to not sag. 2 is quite a hard minimum though because there are 2 different orientations. Contributes to issue CURA-3650. --- resources/definitions/fdmprinter.def.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 147f966a94..13c983e2b7 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -845,7 +845,7 @@ "unit": "mm", "default_value": 0.8, "minimum_value": "0", - "minimum_value_warning": "3 * resolveOrValue('layer_height')", + "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "maximum_value": "machine_height", "type": "float", "value": "top_bottom_thickness", @@ -860,7 +860,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "type": "int", - "minimum_value_warning": "4", + "minimum_value_warning": "2", "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))", "settable_per_mesh": true } @@ -873,7 +873,7 @@ "unit": "mm", "default_value": 0.6, "minimum_value": "0", - "minimum_value_warning": "3 * resolveOrValue('layer_height')", + "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "type": "float", "value": "top_bottom_thickness", "maximum_value": "machine_height", @@ -885,7 +885,7 @@ "label": "Bottom Layers", "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.", "minimum_value": "0", - "minimum_value_warning": "4", + "minimum_value_warning": "2", "default_value": 6, "type": "int", "value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))", From c3d18bc2565915f1b56435e449333b22f7e76d24 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 14 Apr 2017 17:06:18 +0200 Subject: [PATCH 347/816] Remove lower warnings for jerk settings It's not a problem to have lower jerk. It'll just print corners quite slow. But sometimes that's necessary, for example for PVA. Contributes to issue CURA-3650. --- resources/definitions/fdmprinter.def.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 13c983e2b7..d0ebde0533 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2273,7 +2273,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "enabled": "resolveOrValue('jerk_enabled')", @@ -2287,7 +2286,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", @@ -2301,7 +2299,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", @@ -2316,7 +2313,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_wall", @@ -2330,7 +2326,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_wall", @@ -2346,7 +2341,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", @@ -2360,7 +2354,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", @@ -2379,7 +2372,6 @@ "default_value": 20, "value": "jerk_support", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled') and support_enable", "limit_to_extruder": "support_infill_extruder_nr", @@ -2395,7 +2387,6 @@ "default_value": 20, "value": "jerk_support", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled') and extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "limit_to_extruder": "support_interface_extruder_nr", @@ -2411,7 +2402,6 @@ "unit": "mm/s", "type": "float", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", @@ -2428,7 +2418,6 @@ "type": "float", "default_value": 30, "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "value": "jerk_print if magic_spiralize else 30", "enabled": "resolveOrValue('jerk_enabled')", @@ -2443,7 +2432,6 @@ "default_value": 20, "value": "jerk_print", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled')", "settable_per_mesh": true, @@ -2458,7 +2446,6 @@ "default_value": 20, "value": "jerk_layer_0", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled')", "settable_per_mesh": true @@ -2472,7 +2459,6 @@ "default_value": 20, "value": "jerk_layer_0 * jerk_travel / jerk_print", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled')", "settable_per_extruder": true, @@ -2488,7 +2474,6 @@ "type": "float", "default_value": 20, "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "value": "jerk_layer_0", "enabled": "resolveOrValue('jerk_enabled')", From 12079fc9daeb8cda016f0300e787878a2c1ef4eb Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 15 Apr 2017 18:55:59 +0200 Subject: [PATCH 348/816] Add documentation --- plugins/MachineSettingsAction/MachineSettingsAction.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index ec8ce7102e..f9504f866f 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -98,6 +98,7 @@ class MachineSettingsAction(MachineAction): Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) def _onGlobalContainerChanged(self): + # This stub is needed because we cannot connect a UM.Signal directly to a pyqtSignal self.globalContainerChanged.emit() globalContainerChanged = pyqtSignal() From 813ee65849cc889109db9bea8aa72843d5516b0f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 15 Apr 2017 18:58:25 +0200 Subject: [PATCH 349/816] Update printer (& disallowed areas) when setting nozzle offsets --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 2456b62ddc..41e8e79421 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -545,7 +545,7 @@ Cura.MachineAction sourceComponent: numericTextFieldWithUnit property var propertyProvider: extruderOffsetXProvider property string unit: catalog.i18nc("@label", "mm") - property bool forceUpdateOnChange: false + property bool forceUpdateOnChange: true } Label { @@ -557,7 +557,7 @@ Cura.MachineAction sourceComponent: numericTextFieldWithUnit property var propertyProvider: extruderOffsetYProvider property string unit: catalog.i18nc("@label", "mm") - property bool forceUpdateOnChange: false + property bool forceUpdateOnChange: true } } From 6e0221636dad0a4493e1047f774a167541237b8b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 15 Apr 2017 19:08:05 +0200 Subject: [PATCH 350/816] Save definition_changes in their own folder --- cura/CuraApplication.py | 5 ++++- plugins/MachineSettingsAction/MachineSettingsAction.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index d407ae1b85..bc7185083d 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -104,6 +104,7 @@ class CuraApplication(QtApplication): UserInstanceContainer = Resources.UserType + 6 MachineStack = Resources.UserType + 7 ExtruderStack = Resources.UserType + 8 + DefinitionChangesContainer = Resources.UserType + 9 Q_ENUMS(ResourceTypes) @@ -145,6 +146,7 @@ class CuraApplication(QtApplication): Resources.addStorageType(self.ResourceTypes.UserInstanceContainer, "user") Resources.addStorageType(self.ResourceTypes.ExtruderStack, "extruders") Resources.addStorageType(self.ResourceTypes.MachineStack, "machine_instances") + Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "machine_settings") ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.QualityInstanceContainer) ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.VariantInstanceContainer) @@ -152,6 +154,7 @@ class CuraApplication(QtApplication): ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.UserInstanceContainer) ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.ExtruderStack) ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MachineStack) + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.DefinitionChangesContainer) ## Initialise the version upgrade manager with Cura's storage paths. import UM.VersionUpgradeManager #Needs to be here to prevent circular dependencies. @@ -408,7 +411,7 @@ class CuraApplication(QtApplication): elif instance_type == "variant": path = Resources.getStoragePath(self.ResourceTypes.VariantInstanceContainer, file_name) elif instance_type == "definition_changes": - path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) + path = Resources.getStoragePath(self.ResourceTypes.DefinitionChangesContainer, file_name) if path: instance.setPath(path) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index f9504f866f..6e37ae9ae0 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -59,7 +59,7 @@ class MachineSettingsAction(MachineAction): # Make sure there is a definition_changes container to store the machine settings definition_changes_container = extruder_container_stack.findContainer({"type": "definition_changes"}) if not definition_changes_container: - definition_changes_container = self._createDefinitionChangesContainer(extruder_container_stack, global_container_stack.getName() + "_" + extruder_container_stack.getId() + "_settings") + definition_changes_container = self._createDefinitionChangesContainer(extruder_container_stack, extruder_container_stack.getId() + "_settings") # Notify the UI in which container to store the machine settings data container_index = extruder_container_stack.getContainerIndex(definition_changes_container) From 94545ec4eec9daf1d7406f3de1e3d3a9dc95c1ef Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 15 Apr 2017 20:09:20 +0200 Subject: [PATCH 351/816] Restore active extruder after forcing an update of the global extruder stack --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 41e8e79421..314265e1c1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -671,7 +671,12 @@ Cura.MachineAction propertyProvider.setPropertyValue("value", text); if(forceUpdateOnChange) { + var extruderIndex = ExtruderManager.activeExtruderIndex; manager.forceUpdate(); + if(ExtruderManager.activeExtruderIndex != extruderIndex) + { + ExtruderManager.setActiveExtruderIndex(extruderIndex) + } } } } From b908e3a2016813384f4d1dcb443aeccdebe5e8f2 Mon Sep 17 00:00:00 2001 From: Mehmet Sutas Date: Sun, 16 Apr 2017 01:00:27 +0300 Subject: [PATCH 352/816] Rigid3D Zero2 Machine Definition --- resources/definitions/rigid3d_zero2.def.json | 130 +++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 resources/definitions/rigid3d_zero2.def.json diff --git a/resources/definitions/rigid3d_zero2.def.json b/resources/definitions/rigid3d_zero2.def.json new file mode 100644 index 0000000000..73b50f0950 --- /dev/null +++ b/resources/definitions/rigid3d_zero2.def.json @@ -0,0 +1,130 @@ +{ + "id": "rigid3d_zero2", + "name": "Rigid3D Zero2", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Rigid3D", + "manufacturer": "Rigid3D", + "category": "Other", + "has_materials": false, + "file_formats": "text/x-gcode", + "platform": "rigid3d_zero2_platform.stl", + "platform_offset": [ 5, 0, -35] + }, + "overrides": { + "machine_name": { "default_value": "Rigid3D Zero2" }, + "machine_head_with_fans_polygon": { + "default_value": [[ 30, 30], [ 30, 70], [ 30, 70], [ 30, 30]] + }, + "z_seam_type": { + "default_value": "random" + }, + "machine_heated_bed": { + "default_value": true + }, + "layer_height": { + "default_value": 0.2 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 0.8 + }, + "top_bottom_thickness": { + "default_value": 0.8 + }, + "xy_offset": { + "default_value": -0.2 + }, + "material_print_temperature": { + "value": 235 + }, + "material_bed_temperature": { + "default_value": 100 + }, + "material_diameter": { + "default_value": 1.75 + }, + "speed_print": { + "default_value": 40 + }, + "speed_layer_0": { + "value": 15 + }, + "speed_tarvel": { + "value": 100 + }, + "support_enable": { + "default_value": false + }, + "infill_sparse_density": { + "default_value": 15 + }, + "infill_pattern": { + "default_value": "lines", + "value": "lines" + }, + "retraction_amount": { + "default_value": 1 + }, + "machine_width": { + "default_value": 200 + }, + "machine_height": { + "default_value": 200 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "gantry_height": { + "default_value": 25 + }, + "machine_gcode_flavor": { + "default_value": "RepRap" + }, + "cool_fan_enabled": { + "default_value": false + }, + "cool_fan_speed": { + "default_value": 50, + "value": 50 + }, + "cool_fan_speed_min": { + "default_value": 0 + }, + "cool_fan_full_at_height": { + "default_value": 1.0, + "value": 1.0 + }, + "support_z_distance": { + "default_value": 0.2 + }, + "support_interface_enable": { + "default_value": true + }, + "support_interface_height": { + "default_value": 0.8 + }, + "support_interface_density": { + "default_value": 70 + }, + "support_interface_pattern": { + "default_value": "grid" + }, + "machine_start_gcode": { + "default_value": "G21\nG28 ; Home extruder\nM107 ; Turn off fan\nG91 ; Relative positioning\nG1 Z5 F180;\nG1 X100 Y100 F3000;\nG1 Z-5 F180;\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nG92 E0 ; Reset extruder position\n" + }, + "machine_end_gcode": { + "default_value": "G1 X0 Y180 ; Get extruder out of way.\nM107 ; Turn off fan\nG91 ; Relative positioning\nG0 Z20 ; Lift extruder up\nT0\nG1 E-1 ; Reduce filament pressure\nM104 T0 S0 ; Turn extruder heater off\nG90 ; Absolute positioning\nG92 E0 ; Reset extruder position\nM140 S0 ; Disable heated bed\nM84 ; Turn steppers off\n" + } + } +} From 9b0dbdf47c8f6cea88e0bf0cfbf8d79bfbacba72 Mon Sep 17 00:00:00 2001 From: Mehmet Sutas Date: Sun, 16 Apr 2017 01:01:16 +0300 Subject: [PATCH 353/816] Rigid3D Zero2 Platform --- resources/meshes/rigid3d_zero2_platform.stl | Bin 0 -> 2198584 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/meshes/rigid3d_zero2_platform.stl diff --git a/resources/meshes/rigid3d_zero2_platform.stl b/resources/meshes/rigid3d_zero2_platform.stl new file mode 100644 index 0000000000000000000000000000000000000000..08d6e7519b39823ac99f18928d989ec486ef8089 GIT binary patch literal 2198584 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"&!DHWc4;BuanrJI@6Aif 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�U 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 J9PL!$Wka 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

t{7mDk;gK&j^b>=2 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 !4f8tV6%zc76u7%QpO&Ka&=Y_ZlD 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%0DjsF{<1Y1sYC_9}2KR$# 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

>tM1 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�FCG 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 GiT?p10ZP9B literal 0 HcmV?d00001 From 4d2e4ea5f47544aee0fe54ea894c568b66113829 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Tue, 18 Apr 2017 09:30:17 +0200 Subject: [PATCH 354/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 78272e2aef..bcef9b82ac 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -12,6 +12,10 @@ weight = 0 [values] layer_height = 0.2 +skin_angles = [0,90] + +infill_angles = [0,90] + speed_slowdown_layers = 1 retraction_combing = off From 1bd7e6d0198673b06820e758520fb6cc04bb8971 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Tue, 18 Apr 2017 09:30:43 +0200 Subject: [PATCH 355/816] Update cartesio_global_High_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 363c18d8a2..d3e4964d75 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -12,6 +12,10 @@ weight = 0 [values] layer_height = 0.1 +skin_angles = [0,90] + +infill_angles = [0,90] + speed_slowdown_layers = 1 retraction_combing = off From 12351dc278aa0ff5b57ef5b791c476306cb9ede7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Tue, 18 Apr 2017 09:30:52 +0200 Subject: [PATCH 356/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 841d63d1dc..e1e1c3a294 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -12,6 +12,10 @@ weight = 0 [values] layer_height = 0.6 +skin_angles = [0,90] + +infill_angles = [0,90] + speed_slowdown_layers = 1 retraction_combing = off From 351d8ceb8993c1702e5249768882e751aaba17ad Mon Sep 17 00:00:00 2001 From: MaukCC Date: Tue, 18 Apr 2017 09:30:59 +0200 Subject: [PATCH 357/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 1d6f7bb930..3604f8a824 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -12,6 +12,10 @@ weight = 0 [values] layer_height = 0.4 +skin_angles = [0,90] + +infill_angles = [0,90] + speed_slowdown_layers = 1 retraction_combing = off From c686cecb6bbcb9388023ce18506dc6c060227219 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Tue, 18 Apr 2017 09:33:29 +0200 Subject: [PATCH 358/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index bcaaa30380..60ee386bb4 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -46,6 +46,7 @@ "material_print_temp_wait": { "default_value": false }, "material_bed_temp_wait": { "default_value": false }, "infill_pattern": { "default_value": "grid"}, + "infill_before_walls":{ "default_value": false}, "prime_tower_enable": { "default_value": true }, "prime_tower_wall_thickness": { "resolve": 0.7 }, "prime_tower_position_x": { "default_value": 50 }, From 9ad85ce235268f611a56733e6f6c03587f9fbc48 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Apr 2017 10:29:41 +0200 Subject: [PATCH 359/816] Move prime tower 1mm down The combination PC-0.4 and PVA-0.8 wouldn't print because the raft was getting so big that it intersected with the prime tower. Moving the prime tower 1mm down allows us to print again. Contributes to issue CURA-3650. --- resources/definitions/ultimaker3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index afac8f3226..ad8b08dfa1 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -70,7 +70,7 @@ "machine_start_gcode": { "default_value": "" }, "machine_end_gcode": { "default_value": "" }, "prime_tower_position_x": { "default_value": 175 }, - "prime_tower_position_y": { "default_value": 179 }, + "prime_tower_position_y": { "default_value": 178 }, "prime_tower_wipe_enabled": { "default_value": false }, "acceleration_enabled": { "value": "True" }, From 8c9eccd1f4f49a0d0584b3f56985f4fa16e48915 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 18 Apr 2017 12:11:02 +0200 Subject: [PATCH 360/816] Change Label to Text because of ugle font rendering CURA-3389 --- resources/qml/AddMachineDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index 756badc4d2..ba3f40260d 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -180,7 +180,7 @@ UM.Dialog anchors.bottom:parent.bottom spacing: UM.Theme.getSize("default_margin").width - Label + Text { text: catalog.i18nc("@label", "Printer Name:") anchors.verticalCenter: machineName.verticalCenter From 2d14052f4e41f4346aa429439d46fe68182e9395 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 18 Apr 2017 13:35:39 +0200 Subject: [PATCH 361/816] Change Label to Text to fix ugly fonts CURA-3389 --- resources/qml/Preferences/MachinesPage.qml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 9051f8a8fa..8568acc4ce 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -66,7 +66,7 @@ UM.ManagementPage visible: base.currentItem != null anchors.fill: parent - Label + Text { id: machineName text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" @@ -146,26 +146,28 @@ UM.ManagementPage property var connectedPrinter: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - Label + Text { text: catalog.i18nc("@label", "Printer type:") visible: base.currentItem && "definition_name" in base.currentItem.metadata } - Label { + Text + { text: (base.currentItem && "definition_name" in base.currentItem.metadata) ? base.currentItem.metadata.definition_name : "" } - Label + Text { text: catalog.i18nc("@label", "Connection:") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId } - Label { + Text + { width: parent.width * 0.7 text: machineInfo.printerConnected ? machineInfo.connectedPrinter.connectionText : catalog.i18nc("@info:status", "The printer is not connected.") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId wrapMode: Text.WordWrap } - Label + Text { text: catalog.i18nc("@label", "State:") visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands From 4d96e6931d70b0e240396cf547c44422979ba84a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 18 Apr 2017 15:08:46 +0200 Subject: [PATCH 362/816] Store definition changes containers in a folder named definition_changes --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index bc7185083d..9cd05bb135 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -146,7 +146,7 @@ class CuraApplication(QtApplication): Resources.addStorageType(self.ResourceTypes.UserInstanceContainer, "user") Resources.addStorageType(self.ResourceTypes.ExtruderStack, "extruders") Resources.addStorageType(self.ResourceTypes.MachineStack, "machine_instances") - Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "machine_settings") + Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes") ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.QualityInstanceContainer) ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.VariantInstanceContainer) From 9ce8f6cf660c6ad9b4f2426b57c26fd7178ea9cd Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 18 Apr 2017 13:48:22 +0200 Subject: [PATCH 363/816] Added new icons CURA-3577 --- .../themes/cura/icons/material_not_selected.svg | 15 +++++++++++++++ resources/themes/cura/icons/material_selected.svg | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 resources/themes/cura/icons/material_not_selected.svg create mode 100644 resources/themes/cura/icons/material_selected.svg diff --git a/resources/themes/cura/icons/material_not_selected.svg b/resources/themes/cura/icons/material_not_selected.svg new file mode 100644 index 0000000000..2d4fb7cfd3 --- /dev/null +++ b/resources/themes/cura/icons/material_not_selected.svg @@ -0,0 +1,15 @@ + + + + Artboard 3 + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/material_selected.svg b/resources/themes/cura/icons/material_selected.svg new file mode 100644 index 0000000000..87ffdf55da --- /dev/null +++ b/resources/themes/cura/icons/material_selected.svg @@ -0,0 +1,15 @@ + + + + Artboard 3 Copy + Created with Sketch. + + + + + + + + + + \ No newline at end of file From f1ac1bd8769943d459eec1fd81d369555f907864 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 18 Apr 2017 15:11:24 +0200 Subject: [PATCH 364/816] Add JellyBox to XML material printer name translations Because the automatic translation removes the underscore, and then the definition can't be found any more. Contributes to issue CURA-3695. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index fcf6d99688..fd018c8f7b 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -583,7 +583,8 @@ class XmlMaterialProfile(InstanceContainer): "Ultimaker 2 Extended": "ultimaker2_extended", "Ultimaker 2 Extended+": "ultimaker2_extended_plus", "Ultimaker Original": "ultimaker_original", - "Ultimaker Original+": "ultimaker_original_plus" + "Ultimaker Original+": "ultimaker_original_plus", + "IMADE3D JellyBOX": "imade3d_jellybox" } # Map of recognised namespaces with a proper prefix. From c75887be80874c32b52113d0b9e22392cf088033 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 18 Apr 2017 16:27:37 +0200 Subject: [PATCH 365/816] Use a toggle button for mode switching CURA-3574 --- resources/qml/Sidebar.qml | 54 ++++++++++++++++++++++++++++++++ resources/themes/cura/styles.qml | 38 ++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index f4f439439f..aeb86c9dbd 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -407,6 +407,8 @@ Rectangle } } ExclusiveGroup { id: modeMenuGroup; } + + /* ListView{ id: modesList property var index: 0 @@ -415,6 +417,54 @@ Rectangle anchors.top: parent.top anchors.left: parent.left width: parent.width + }*/ + + Text + { + id: toggleLeftText + anchors.right: modeToggleSwitch.left + anchors.rightMargin: 10 + anchors.verticalCenter: parent.verticalCenter + text: "" + color: UM.Theme.getColor("toggle_active_text") + font: UM.Theme.getFont("default") + } + + Switch + { + id: modeToggleSwitch + checked: false + anchors.right: toggleRightText.left + anchors.rightMargin: 10 + anchors.verticalCenter: parent.verticalCenter + + onClicked: + { + var index = 0; + if (checked) + { + index = 1; + } + updateActiveMode(index); + } + + function updateActiveMode(index) + { + base.currentModeIndex = index; + UM.Preferences.setValue("cura/active_mode", index); + } + + style: UM.Theme.styles.toggle_button + } + + Text + { + id: toggleRightText + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + text: "" + color: UM.Theme.getColor("toggle_active_text") + font: UM.Theme.getFont("default") } } @@ -541,10 +591,14 @@ Rectangle }) sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "immediate": true }); + toggleLeftText.text = modesListModel.get(0).text + toggleRightText.text = modesListModel.get(1).text + var index = parseInt(UM.Preferences.getValue("cura/active_mode")) if(index) { currentModeIndex = index; + modeToggleSwitch.checked = index > 0; } } diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 64b4436622..18508a0055 100644 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -8,6 +8,44 @@ import QtQuick.Controls.Styles 1.1 import UM 1.1 as UM QtObject { + property Component toggle_button: Component { + SwitchStyle { + groove: Rectangle { + implicitWidth: 40 + implicitHeight: 15 + radius: 9 + border.color: { + if (control.pressed || (control.checkable && control.checked)) { + return UM.Theme.getColor("sidebar_header_active"); + } else if(control.hovered) { + return UM.Theme.getColor("sidebar_header_hover"); + } else { + return UM.Theme.getColor("sidebar_header_bar"); + } + } + Behavior on border.color { ColorAnimation { duration: 50; } } + border.width: 2 + } + + handle: Rectangle { + implicitWidth: Math.round((parent.parent.width - padding.left - padding.right)/2) + implicitHeight: implicitWidth + radius: 9 + + color: { + if (control.pressed || (control.checkable && control.checked)) { + return UM.Theme.getColor("sidebar_header_active"); + } else if(control.hovered) { + return UM.Theme.getColor("sidebar_header_hover"); + } else { + return UM.Theme.getColor("sidebar_header_bar"); + } + } + Behavior on color { ColorAnimation { duration: 50; } } + } + } + } + property Component sidebar_header_button: Component { ButtonStyle { background: Rectangle { From 6bf096563246c1271f13c7e805b161071dabd788 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 18 Apr 2017 16:52:17 +0200 Subject: [PATCH 366/816] Adjust toggle button size CURA-3574 --- resources/themes/cura/styles.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 18508a0055..9b553236c8 100644 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -11,7 +11,7 @@ QtObject { property Component toggle_button: Component { SwitchStyle { groove: Rectangle { - implicitWidth: 40 + implicitWidth: 30 implicitHeight: 15 radius: 9 border.color: { @@ -24,12 +24,12 @@ QtObject { } } Behavior on border.color { ColorAnimation { duration: 50; } } - border.width: 2 + border.width: 1 } handle: Rectangle { - implicitWidth: Math.round((parent.parent.width - padding.left - padding.right)/2) - implicitHeight: implicitWidth + implicitHeight: 15 + implicitWidth: 15 radius: 9 color: { From af3f340fc293851388e3f0bd3a6c91b599fb2e81 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:37:05 +0200 Subject: [PATCH 367/816] Handle the fact that findContainers might end up returning None Since we now do not necessarily have a container with the specified type. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 235ede4808..83f8fe9f0f 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -699,7 +699,7 @@ class MachineManager(QObject): Logger.log("w", "While trying to set the active material, no material was found to replace it.") return - if old_quality_changes.getId() == "empty_quality_changes": + if old_quality_changes and old_quality_changes.getId() == "empty_quality_changes": old_quality_changes = None self.blurSettings.emit() From 8e1580d8d9a5239fd905b77aa6e6ac16adf7f8b1 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:37:26 +0200 Subject: [PATCH 368/816] Document GlobalStack --- cura/Settings/GlobalStack.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index f0d8a5f574..c86c496516 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -18,6 +18,8 @@ from UM.Settings.Interfaces import ContainerInterface from . import Exceptions from .CuraContainerStack import CuraContainerStack +## Represents the Global or Machine stack and its related containers. +# class GlobalStack(CuraContainerStack): def __init__(self, container_id: str, *args, **kwargs): super().__init__(container_id, *args, **kwargs) @@ -31,11 +33,20 @@ class GlobalStack(CuraContainerStack): # if the resolve function tried to access the same property it is a resolve for. self._resolving_settings = set() + ## Get the list of extruders of this stack. + # + # \return The extruders registered with this stack. @pyqtProperty("QVariantList") def extruders(self) -> list: return self._extruders - def addExtruder(self, extruder): + ## Add an extruder to the list of extruders of this stack. + # + # \param extruder The extruder to add. + # + # \throws Exceptions.TooManyExtrudersError Raised when trying to add an extruder while we + # already have the maximum number of extruders. + def addExtruder(self, extruder: ContainerStack) -> None: extruder_count = self.getProperty("machine_extruder_count", "value") if extruder_count and len(self._extruders) + 1 > extruder_count: raise Exceptions.TooManyExtrudersError("Tried to add extruder to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count)) @@ -43,6 +54,16 @@ class GlobalStack(CuraContainerStack): self._extruders.append(extruder) ## Overridden from ContainerStack + # + # This will return the value of the specified property for the specified setting, + # unless the property is "value" and that setting has a "resolve" function set. + # When a resolve is set, it will instead try and execute the resolve first and + # then fall back to the normal "value" property. + # + # \param key The setting key to get the property of. + # \param property_name The property to get the value of. + # + # \return The value of the property for the specified setting, or None if not found. @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: if not self.definition.findDefinitions(key = key): @@ -58,10 +79,16 @@ class GlobalStack(CuraContainerStack): return super().getProperty(key, property_name) ## Overridden from ContainerStack + # + # This will simply raise an exception since the Global stack cannot have a next stack. @override(ContainerStack) def setNextStack(self, next_stack: ContainerStack) -> None: raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!") + # protected: + + # Determine whether or not we should try to get the "resolve" property instead of the + # requested property. def _shouldResolve(self, key: str, property_name: str) -> bool: if property_name is not "value": # Do not try to resolve anything but the "value" property From de57546020473a5dd6bb7a6b3841138e2f6ec168 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:37:52 +0200 Subject: [PATCH 369/816] Document ExtruderStack --- cura/Settings/ExtruderStack.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 03ed5f8a41..a85140065e 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -16,12 +16,18 @@ from UM.Settings.Interfaces import ContainerInterface from . import Exceptions from .CuraContainerStack import CuraContainerStack +## Represents an Extruder and its related containers. +# +# class ExtruderStack(CuraContainerStack): def __init__(self, container_id, *args, **kwargs): super().__init__(container_id, *args, **kwargs) self.addMetaDataEntry("type", "extruder_train") # For backward compatibility + ## Overridden from ContainerStack + # + # This will set the next stack and ensure that we register this stack as an extruder. @override(ContainerStack) def setNextStack(self, stack: ContainerStack) -> None: super().setNextStack(stack) @@ -31,6 +37,15 @@ class ExtruderStack(CuraContainerStack): else: self.setMetaDataEntry("machine", stack.id) + ## Overridden from ContainerStack + # + # It will perform a few extra checks when trying to get properties. + # + # The two extra checks it currently does is to ensure a next stack is set and to bypass + # the extruder when the property is not settable per extruder. + # + # \throws Exceptions.NoGlobalStackError Raised when trying to get a property from an extruder without + # having a next stack set. @override(ContainerStack) def getProperty(self, key: str, property_name: str) -> Any: if not self._next_stack: From edc5b8b84e8f13f0760488f82748ec2339f9f8ed Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:38:09 +0200 Subject: [PATCH 370/816] Register extruders with ExtruderManager For backward compatibility --- cura/Settings/ExtruderStack.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index a85140065e..2a481863e1 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -15,6 +15,7 @@ from UM.Settings.Interfaces import ContainerInterface from . import Exceptions from .CuraContainerStack import CuraContainerStack +from .ExtruderManager import ExtruderManager ## Represents an Extruder and its related containers. # @@ -37,6 +38,9 @@ class ExtruderStack(CuraContainerStack): else: self.setMetaDataEntry("machine", stack.id) + # For backward compatibility: Register the extruder with the Extruder Manager + ExtruderManager.getInstance().registerExtruder(self, stack.id) + ## Overridden from ContainerStack # # It will perform a few extra checks when trying to get properties. From f1b5098a0a7c5c1c7edbc37ebc333d82b772e761 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:38:44 +0200 Subject: [PATCH 371/816] Document CuraStackBuilder --- cura/Settings/CuraStackBuilder.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index eb35d4d7e7..81bfa34b8f 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -11,7 +11,14 @@ from .GlobalStack import GlobalStack from .ExtruderStack import ExtruderStack from .CuraContainerStack import CuraContainerStack +## Contains helper functions to create new machines. class CuraStackBuilder: + ## Create a new instance of a machine. + # + # \param name The name of the new machine. + # \param definition_id The ID of the machine definition to use. + # + # \return The new global stack or None if an error occurred. @classmethod def createMachine(cls, name: str, definition_id: str) -> GlobalStack: cls.__registry = ContainerRegistry.getInstance() @@ -49,7 +56,14 @@ class CuraStackBuilder: return new_global_stack - + ## 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 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" + # + # \return A new Global stack instance with the specified parameters. @classmethod def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainer, machine_definition: DefinitionContainer, **kwargs) -> ExtruderStack: cls.__registry = ContainerRegistry.getInstance() @@ -92,6 +106,13 @@ class CuraStackBuilder: return stack + ## 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 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. @classmethod def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: cls.__registry = ContainerRegistry.getInstance() From 8682eb14869f7a250b24c548d11a1ccb8bb93475 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:40:12 +0200 Subject: [PATCH 372/816] Document CuraContainerStack --- cura/Settings/CuraContainerStack.py | 128 +++++++++++++++++++++++++++- 1 file changed, 127 insertions(+), 1 deletion(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 70459aa73a..766b37b114 100644 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -16,6 +16,24 @@ from UM.Settings.Interfaces import ContainerInterface from . import Exceptions +## Base class for Cura related stacks that want to enforce certain containers are available. +# +# This class makes sure that the stack has the following containers set: user changes, quality +# changes, quality, material, variant, definition changes and finally definition. Initially, +# these will be equal to the empty instance container. +# +# The container types are determined based on the following criteria: +# - user: An InstanceContainer with the metadata entry "type" set to "user". +# - quality changes: An InstanceContainer with the metadata entry "type" set to "quality_changes". +# - quality: An InstanceContainer with the metadata entry "type" set to "quality". +# - material: An InstanceContainer with the metadata entry "type" set to "material". +# - variant: An InstanceContainer with the metadata entry "type" set to "variant". +# - definition changes: An InstanceContainer with the metadata entry "type" set to "definition_changes". +# - definition: A DefinitionContainer. +# +# Internally, this class ensures the mentioned containers are always there and kept in a specific order. +# This also means that operations on the stack that modifies the container ordering is prohibited and +# will raise an exception. class CuraContainerStack(ContainerStack): def __init__(self, container_id: str, *args, **kwargs): super().__init__(container_id, *args, **kwargs) @@ -26,18 +44,35 @@ class CuraContainerStack(ContainerStack): self.containersChanged.connect(self._onContainersChanged) + # This is emitted whenever the containersChanged signal from the ContainerStack base class is emitted. pyqtContainersChanged = pyqtSignal() + ## Set the user changes container. + # + # \param new_user_changes The new user changes container. It is expected to have a "type" metadata entry with the value "user". def setUserChanges(self, new_user_changes: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.UserChanges, new_user_changes) + ## Get the user changes container. + # + # \return The user changes container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setUserChanges, notify = pyqtContainersChanged) def userChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.UserChanges] + ## Set the quality changes container. + # + # \param new_quality_changes The new quality changes container. It is expected to have a "type" metadata entry with the value "quality_changes". def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + ## Set the quality changes container by an ID. + # + # This will search for the specified container and set it. If no container was found, an error will be raised. + # + # \param new_quality_changes_id The ID of the new quality changes container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setQualityChangesById(self, new_quality_changes_id: str) -> None: quality_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_changes_id) if quality_changes: @@ -45,13 +80,24 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_changes_id)) + ## Get the quality changes container. + # + # \return The quality changes container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setQualityChanges, notify = pyqtContainersChanged) def qualityChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.QualityChanges] + ## Set the quality container. + # + # \param new_quality The new quality container. It is expected to have a "type" metadata entry with the value "quality". def setQuality(self, new_quality: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Quality, new_quality) + ## Set the quality container by an ID. + # + # \param new_quality_id The ID of the new quality container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setQualityById(self, new_quality_id: str) -> None: quality = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) if quality: @@ -59,13 +105,24 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) + ## Get the quality container. + # + # \return The quality container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setQuality, notify = pyqtContainersChanged) def quality(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Quality] + ## Set the material container. + # + # \param new_quality_changes The new material container. It is expected to have a "type" metadata entry with the value "quality_changes". def setMaterial(self, new_material: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Material, new_material) + ## Set the material container by an ID. + # + # \param new_quality_changes_id The ID of the new material container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setMaterialById(self, new_material_id: str) -> None: material = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) if material: @@ -73,13 +130,24 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) + ## Get the material container. + # + # \return The material container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setMaterial, notify = pyqtContainersChanged) def material(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Material] + ## Set the variant container. + # + # \param new_quality_changes The new variant container. It is expected to have a "type" metadata entry with the value "quality_changes". def setVariant(self, new_variant: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.Variant, new_variant) + ## Set the variant container by an ID. + # + # \param new_quality_changes_id The ID of the new variant container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setVariantById(self, new_variant_id: str) -> None: variant = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) if variant: @@ -87,13 +155,25 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) + + ## Get the variant container. + # + # \return The variant container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setVariant, notify = pyqtContainersChanged) def variant(self) -> InstanceContainer: return self._containers[_ContainerIndexes.Variant] + ## Set the definition changes container. + # + # \param new_quality_changes The new definition changes container. It is expected to have a "type" metadata entry with the value "quality_changes". def setDefinitionChanges(self, new_definition_changes: InstanceContainer) -> None: self.replaceContainer(_ContainerIndexes.DefinitionChanges, new_definition_changes) + ## Set the definition changes container by an ID. + # + # \param new_quality_changes_id The ID of the new definition changes container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setDefinitionChangesById(self, new_definition_changes_id: str) -> None: new_definition_changes = ContainerRegistry.getInstance().findInstanceContainers(id = new_definition_changes_id) if new_definition_changes: @@ -101,13 +181,24 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_changes_id)) + ## Get the definition changes container. + # + # \return The definition changes container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(InstanceContainer, fset = setDefinitionChanges, notify = pyqtContainersChanged) def definitionChanges(self) -> InstanceContainer: return self._containers[_ContainerIndexes.DefinitionChanges] + ## Set the definition container. + # + # \param new_quality_changes The new definition container. It is expected to have a "type" metadata entry with the value "quality_changes". def setDefinition(self, new_definition: DefinitionContainer) -> None: self.replaceContainer(_ContainerIndexes.Definition, new_definition) + ## Set the definition container by an ID. + # + # \param new_quality_changes_id The ID of the new definition container. + # + # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setDefinitionById(self, new_definition_id: str) -> None: new_definition = ContainerRegistry.getInstance().findDefinitionContainers(id = new_definition_id) if new_definition: @@ -115,6 +206,9 @@ class CuraContainerStack(ContainerStack): else: raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_definition_id)) + ## Get the definition container. + # + # \return The definition container. Should always be a valid container, but can be equal to the empty InstanceContainer. @pyqtProperty(DefinitionContainer, fset = setDefinition, notify = pyqtContainersChanged) def definition(self) -> DefinitionContainer: return self._containers[_ContainerIndexes.Definition] @@ -135,6 +229,16 @@ class CuraContainerStack(ContainerStack): return False + ## Set a property of a setting. + # + # This will set a property of a specified setting. Since the container stack does not contain + # any settings itself, it is required to specify a container to set the property on. The target + # container is matched by container type. + # + # \param key The key of the setting to set. + # \param property_name The name of the property to set. + # \param new_value The new value to set the property to. + # \param target_container The type of the container to set the property of. Defaults to "user". def setProperty(self, key: str, property_name: str, new_value: Any, target_container: str = "user") -> None: container_index = _ContainerIndexes.indexForType(target_container) if container_index != -1: @@ -144,22 +248,34 @@ class CuraContainerStack(ContainerStack): ## Overridden from ContainerStack # - # Since we have a fixed order of containers in the stack, we want to enforce this. + # Since we have a fixed order of containers in the stack and this method would modify the container + # ordering, we disallow this operation. @override(ContainerStack) def addContainer(self, container: ContainerInterface) -> None: raise Exceptions.InvalidOperationError("Cannot add a container to Global stack") ## Overridden from ContainerStack + # + # Since we have a fixed order of containers in the stack and this method would modify the container + # ordering, we disallow this operation. @override(ContainerStack) def insertContainer(self, index: int, container: ContainerInterface) -> None: raise Exceptions.InvalidOperationError("Cannot insert a container into Global stack") ## Overridden from ContainerStack + # + # Since we have a fixed order of containers in the stack and this method would modify the container + # ordering, we disallow this operation. @override(ContainerStack) def removeContainer(self, index: int) -> None: raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") ## Overridden from ContainerStack + # + # Replaces the container at the specified index with another container. + # This version performs checks to make sure the new container has the expected metadata and type. + # + # \throws Exception.InvalidContainerError Raised when trying to replace a container with a container that has an incorrect type. @override(ContainerStack) def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None: expected_type = _ContainerIndexes.IndexTypeMap[index] @@ -172,6 +288,13 @@ class CuraContainerStack(ContainerStack): super().replaceContainer(index, container, postpone_emit) ## Overridden from ContainerStack + # + # This deserialize will make sure the internal list of containers matches with what we expect. + # It will first check to see if the container at a certain index already matches with what we + # expect. If it does not, it will search for a matching container with the correct type. Should + # no container with the correct type be found, it will use the empty container. + # + # \throws InvalidContainerStackError Raised when no definition can be found for the stack. @override(ContainerStack) def deserialize(self, contents: str) -> None: super().deserialize(contents) @@ -209,6 +332,8 @@ class CuraContainerStack(ContainerStack): self.pyqtContainersChanged.emit() ## private: + +# Private helper class to keep track of container positions and their types. class _ContainerIndexes: UserChanges = 0 QualityChanges = 1 @@ -229,6 +354,7 @@ class _ContainerIndexes: Definition: "definition", } + # Perform reverse lookup (type name -> index) @classmethod def indexForType(cls, type_name: str) -> int: for key, value in cls.IndexTypeMap.items(): From 0a0353da82f05a08af03444716f2e8e0758d58a8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:41:48 +0200 Subject: [PATCH 373/816] Move code to set default variant/material/quality to CuraContainerStack This allows us to eventually make sure everything uses the same code. --- cura/Settings/CuraContainerStack.py | 277 ++++++++++++++++++++++++++-- cura/Settings/CuraStackBuilder.py | 185 ------------------- 2 files changed, 262 insertions(+), 200 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 766b37b114..df8cc6078d 100644 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -1,12 +1,14 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from typing import Any +import os.path + +from typing import Any, Optional from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from UM.Decorators import override - +from UM.Logger import Logger from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError from UM.Settings.InstanceContainer import InstanceContainer @@ -95,15 +97,28 @@ class CuraContainerStack(ContainerStack): ## Set the quality container by an ID. # + # This will search for the specified container and set it. If no container was found, an error will be raised. + # There is a special value for ID, which is "default". The "default" value indicates the quality should be set + # to whatever the machine definition specifies as "preferred" container, or a fallback value. See findDefaultQuality + # for details. + # # \param new_quality_id The ID of the new quality container. # # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setQualityById(self, new_quality_id: str) -> None: - quality = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) - if quality: - self.setQuality(quality[0]) + quality = self._empty_instance_container + if new_quality_id == "default": + new_quality = self.findDefaultQuality() + if new_quality: + quality = new_quality else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) + qualities = ContainerRegistry.getInstance().findInstanceContainers(id = new_quality_id) + if qualities: + quality = qualities[0] + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_quality_id)) + + self.setQuality(quality) ## Get the quality container. # @@ -120,15 +135,28 @@ class CuraContainerStack(ContainerStack): ## Set the material container by an ID. # + # This will search for the specified container and set it. If no container was found, an error will be raised. + # There is a special value for ID, which is "default". The "default" value indicates the quality should be set + # to whatever the machine definition specifies as "preferred" container, or a fallback value. See findDefaultMaterial + # for details. + # # \param new_quality_changes_id The ID of the new material container. # # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setMaterialById(self, new_material_id: str) -> None: - material = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) - if material: - self.setMaterial(material[0]) + material = self._empty_instance_container + if new_material_id == "default": + new_material = self.findDefaultMaterial() + if new_material: + material = new_material else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) + materials = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) + if materials: + material = materials[0] + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_material_id)) + + self.setMaterial(material) ## Get the material container. # @@ -145,16 +173,28 @@ class CuraContainerStack(ContainerStack): ## Set the variant container by an ID. # + # This will search for the specified container and set it. If no container was found, an error will be raised. + # There is a special value for ID, which is "default". The "default" value indicates the quality should be set + # to whatever the machine definition specifies as "preferred" container, or a fallback value. See findDefaultVariant + # for details. + # # \param new_quality_changes_id The ID of the new variant container. # # \throws Exceptions.InvalidContainerError Raised when no container could be found with the specified ID. def setVariantById(self, new_variant_id: str) -> None: - variant = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) - if variant: - self.setVariant(variant[0]) + variant = self._empty_instance_container + if new_variant_id == "default": + new_variant = self.findDefaultVariant() + if new_variant: + variant = new_variant else: - raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) + variants = ContainerRegistry.getInstance().findInstanceContainers(id = new_variant_id) + if variants: + variant = variants[0] + else: + raise Exceptions.InvalidContainerError("Could not find container with id {id}".format(id = new_variant_id)) + self.setVariant(variant) ## Get the variant container. # @@ -328,9 +368,216 @@ class CuraContainerStack(ContainerStack): self._containers = new_containers - def _onContainersChanged(self, container): + ## Find the variant that should be used as "default" variant. + # + # This will search for variants that match the current definition and pick the preferred one, + # if specified by the machine definition. + # + # The following criteria are used to find the default variant: + # - If the machine definition does not have a metadata entry "has_variants" set to True, return None + # - The definition of the variant should be the same as the machine definition for this stack. + # - The container should have a metadata entry "type" with value "variant". + # - If the machine definition has a metadata entry "preferred_variant", filter the variant IDs based on that. + # + # \return The container that should be used as default, or None if nothing was found or the machine does not use variants. + # + # \note This method assumes the stack has a valid machine definition. + def findDefaultVariant(self) -> Optional[ContainerInterface]: + definition = self._getMachineDefinition() + if not definition.getMetaDataEntry("has_variants"): + # If the machine does not use variants, we should never set a variant. + return None + + # First add any variant. Later, overwrite with preference if the preference is valid. + variant = None + definition_id = self._findInstanceContainerDefinitionId(definition) + variants = ContainerRegistry.getInstance().findInstanceContainers(definition = definition_id, type = "variant") + if variants: + variant = variants[0] + + preferred_variant_id = definition.getMetaDataEntry("preferred_variant") + if preferred_variant_id: + preferred_variants = ContainerRegistry.getInstance().findInstanceContainers(id = preferred_variant_id, definition = definition_id, type = "variant") + if preferred_variants: + variant = preferred_variants[0] + else: + Logger.log("w", "The preferred variant \"{variant}\" of stack {stack} does not exist or is not a variant.", variant = preferred_variant_id, stack = self.id) + # And leave it at the default variant. + + if variant: + return variant + + Logger.log("w", "Could not find a valid default variant for stack {stack}", stack = self.id) + return None + + ## Find the material that should be used as "default" material. + # + # This will search for materials that match the current definition and pick the preferred one, + # if specified by the machine definition. + # + # The following criteria are used to find the default material: + # - If the machine definition does not have a metadata entry "has_materials" set to True, return None + # - If the machine definition has a metadata entry "has_machine_materials", the definition of the material should + # be the same as the machine definition for this stack. Otherwise, the definition should be "fdmprinter". + # - The container should have a metadata entry "type" with value "material". + # - If the machine definition has a metadata entry "has_variants" and set to True, the "variant" metadata entry of + # the material should be the same as the ID of the variant in the stack. Only applies if "has_machine_materials" is also True. + # - If the stack currently has a material set, try to find a material that matches the current material by name. + # - Otherwise, if the machine definition has a metadata entry "preferred_material", try to find a material that matches the specified ID. + # + # \return The container that should be used as default, or None if nothing was found or the machine does not use materials. + # + # + def findDefaultMaterial(self) -> Optional[ContainerInterface]: + definition = self._getMachineDefinition() + if not definition.getMetaDataEntry("has_materials"): + # Machine does not use materials, never try to set it. + return None + + material = None + search_criteria = {"type": "material"} + if definition.getMetaDataEntry("has_machine_materials"): + search_criteria["definition"] = self._findInstanceContainerDefinitionId(definition) + + if definition.getMetaDataEntry("has_variants"): + search_criteria["variant"] = self.variant.id + else: + search_criteria["definition"] = "fdmprinter" + + if self.material != self._empty_instance_container: + search_criteria["name"] = self.material.name + else: + preferred_material = definition.getMetaDataEntry("preferred_material") + if preferred_material: + search_criteria["id"] = preferred_material + + materials = ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) + if not materials: + Logger.log("w", "The preferred material \"{material}\" could not be found for stack {stack}", material = preferred_material, stack = self.id) + # We failed to find any materials matching the specified criteria, drop some specific criteria and try to find + # a material that sort-of matches what we want. + search_criteria.pop("variant", None) + search_criteria.pop("id", None) + search_criteria.pop("name", None) + materials = ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) + + if materials: + return materials[0] + + Logger.log("w", "Could not find a valid material for stack {stack}", stack = self.id) + return None + + def findDefaultQuality(self) -> Optional[ContainerInterface]: + definition = self._getMachineDefinition() + registry = ContainerRegistry.getInstance() + material_container = self.material if self.material != self._empty_instance_container else None + + quality = None + search_criteria = {"type": "quality"} + + if definition.getMetaDataEntry("has_machine_quality"): + search_criteria["definition"] = self._findInstanceContainerDefinitionId(definition) + + if definition.getMetaDataEntry("has_materials") and material_container: + search_criteria["material"] = material_container.id + else: + search_criteria["definition"] = "fdmprinter" + + if self.quality != self._empty_instance_container: + search_criteria["name"] = self.quality.name + else: + preferred_quality = definition.getMetaDataEntry("preferred_quality") + if preferred_quality: + search_criteria["id"] = preferred_quality + + containers = registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + if "material" in search_criteria: + # First check if we can solve our material not found problem by checking if we can find quality containers + # that are assigned to the parents of this material profile. + try: + inherited_files = material_container.getInheritedFiles() + except AttributeError: # Material_container does not support inheritance. + inherited_files = [] + + if inherited_files: + for inherited_file in inherited_files: + # Extract the ID from the path we used to load the file. + search_criteria["material"] = os.path.basename(inherited_file).split(".")[0] + containers = registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + # We still weren't able to find a quality for this specific material. + # Try to find qualities for a generic version of the material. + material_search_criteria = {"type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} + if definition.getMetaDataEntry("has_machine_quality"): + if self.material != self._em: + material_search_criteria["definition"] = material_container.getDefinition().id + + if definition.getMetaDataEntry("has_variants"): + material_search_criteria["variant"] = material_container.getMetaDataEntry("variant") + else: + material_search_criteria["definition"] = self._findInstanceContainerDefinitionId(definition) + + if definition.getMetaDataEntry("has_variants") and self.variant != self._empty_instance_container: + material_search_criteria["variant"] = self.variant.id + else: + material_search_criteria["definition"] = "fdmprinter" + material_containers = registry.findInstanceContainers(**material_search_criteria) + # Try all materials to see if there is a quality profile available. + for material_container in material_containers: + search_criteria["material"] = material_container.getId() + + containers = registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + if "name" in search_criteria or "id" in search_criteria: + # If a quality by this name can not be found, try a wider set of search criteria + search_criteria.pop("name", None) + search_criteria.pop("id", None) + + containers = registry.findInstanceContainers(**search_criteria) + if containers: + return containers[0] + + return None + + ## protected: + + # Helper to make sure we emit a PyQt signal on container changes. + def _onContainersChanged(self, container: Any) -> None: 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. + def _getMachineDefinition(self) -> ContainerInterface: + return self.definition + + ## Find the ID that should be used when searching for instance containers for a specified definition. + # + # This handles the situation where the definition specifies we should use a different definition when + # searching for instance containers. + # + # \param machine_definition The definition to find the "quality definition" for. + # + # \return The ID of the definition container to use when searching for instance containers. + @classmethod + def _findInstanceContainerDefinitionId(cls, machine_definition: DefinitionContainer) -> str: + quality_definition = machine_definition.getMetaDataEntry("quality_definition") + if not quality_definition: + return machine_definition.id + + definitions = ContainerRegistry.getInstance().findDefinitionContainers(id = quality_definition) + if not definitions: + Logger.log("w", "Unable to find parent definition {parent} for machine {machine}", parent = quality_definition, machine = machine_definition.id) + return machine_definition.id + + return cls._findInstanceContainerDefinitionId(definitions[0]) + ## private: # Private helper class to keep track of container positions and their types. diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 81bfa34b8f..897e66e265 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -148,188 +148,3 @@ class CuraStackBuilder: cls.__registry.addContainer(user_container) return stack - - # Convenience variable - # It should get set before any private functions are called so the privates do not need to - # re-get the container registry. - __registry = None # type: ContainerRegistry - - @classmethod - def __setStackQuality(cls, stack: CuraContainerStack, quality_id: str, machine_definition: DefinitionContainer) -> None: - if quality_id != "default": - # Specific quality ID specified, so use that. - stack.setQualityById(quality_id) - return - - quality = None - - container_registry = ContainerRegistry.getInstance() - search_criteria = { "type": "quality" } - - if definition.getMetaDataEntry("has_machine_quality"): - search_criteria["definition"] = self.getQualityDefinitionId(definition) - - if definition.getMetaDataEntry("has_materials") and material_container: - search_criteria["material"] = material_container.id - else: - search_criteria["definition"] = "fdmprinter" - - if preferred_quality_name and preferred_quality_name != "empty": - search_criteria["name"] = preferred_quality_name - else: - preferred_quality = definition.getMetaDataEntry("preferred_quality") - if preferred_quality: - search_criteria["id"] = preferred_quality - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - if "material" in search_criteria: - # First check if we can solve our material not found problem by checking if we can find quality containers - # that are assigned to the parents of this material profile. - try: - inherited_files = material_container.getInheritedFiles() - except AttributeError: # Material_container does not support inheritance. - inherited_files = [] - - if inherited_files: - for inherited_file in inherited_files: - # Extract the ID from the path we used to load the file. - search_criteria["material"] = os.path.basename(inherited_file).split(".")[0] - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - # We still weren't able to find a quality for this specific material. - # Try to find qualities for a generic version of the material. - material_search_criteria = { "type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} - if definition.getMetaDataEntry("has_machine_quality"): - if material_container: - material_search_criteria["definition"] = material_container.getDefinition().id - - if definition.getMetaDataEntry("has_variants"): - material_search_criteria["variant"] = material_container.getMetaDataEntry("variant") - else: - material_search_criteria["definition"] = self.getQualityDefinitionId(definition) - - if definition.getMetaDataEntry("has_variants") and variant_container: - material_search_criteria["variant"] = self.getQualityVariantId(definition, variant_container) - else: - material_search_criteria["definition"] = "fdmprinter" - material_containers = container_registry.findInstanceContainers(**material_search_criteria) - # Try all materials to see if there is a quality profile available. - for material_container in material_containers: - search_criteria["material"] = material_container.getId() - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - if "name" in search_criteria or "id" in search_criteria: - # If a quality by this name can not be found, try a wider set of search criteria - search_criteria.pop("name", None) - search_criteria.pop("id", None) - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - # Notify user that we were unable to find a matching quality - message = Message(catalog.i18nc("@info:status", "Unable to find a quality profile for this combination. Default settings will be used instead.")) - message.show() - return self._empty_quality_container - - @classmethod - def __setStackMaterial(cls, stack: CuraContainerStack, material_id: str, machine_definition: DefinitionContainer) -> None: - if not machine_definition.getMetaDataEntry("has_materials"): - # Machine does not use materials, never try to set it. - return - - if material_id != "default": - # Specific material ID specified, so use that. - stack.setMaterialById(material_id) - return - - # If material_id is "default", find a default material to use for this stack. - # First add any material. Later, overwrite with preference if the preference is valid. - material = None - search_criteria = { "type": "material" } - if machine_definition.getMetaDataEntry("has_machine_materials"): - search_criteria["definition"] = cls.__findInstanceContainerDefinitionId(machine_definition) - - if machine_definition.getMetaDataEntry("has_variants"): - search_criteria["variant"] = stack.variant.id - else: - search_criteria["definition"] = "fdmprinter" - - preferred_material = machine_definition.getMetaDataEntry("preferred_material") - if preferred_material: - search_criteria["id"] = preferred_material - - materials = cls.__registry.findInstanceContainers(**search_criteria) - if not materials: - Logger.log("w", "The preferred material \"{material}\" could not be found for stack {stack}", material = preferred_material, stack = stack.id) - search_criteria.pop("variant", None) - search_criteria.pop("id", None) - materials = cls.__registry.findInstanceContainers(**search_criteria) - - if materials: - stack.setMaterial(materials[0]) - else: - Logger.log("w", "Could not find a valid material for stack {stack}", stack = stack.id) - - @classmethod - def __setStackVariant(cls, stack: CuraContainerStack, variant_id: str, machine_definition: DefinitionContainer) -> None: - if not machine_definition.getMetaDataEntry("has_variants"): - # If the machine does not use variants, we should never set a variant. - return - - if variant_id != "default": - # If we specify a specific variant ID, use that and do nothing else. - stack.setVariantById(variant_id) - return - - # When the id is "default", look up the variant based on machine definition etc. - # First add any variant. Later, overwrite with preference if the preference is valid. - variant = None - - definition_id = cls.__findInstanceContainerDefinitionId(machine_definition.id) - variants = cls.__registry.findInstanceContainers(definition = definition_id, type = "variant") - if variants: - variant = variants[0] - - preferred_variant_id = machine_definition.getMetaDataEntry("preferred_variant") - if preferred_variant_id: - preferred_variants = cls.__registry.findInstanceContainers(id = preferred_variant_id, definition = definition_id, type = "variant") - if len(preferred_variants) >= 1: - variant = preferred_variants[0] - else: - Logger.log("w", "The preferred variant \"{variant}\" of stack {stack} does not exist or is not a variant.", variant = preferred_variant_id, stack = stack.id) - # And leave it at the default variant. - - if variant: - stack.setVariant(variant) - else: - Logger.log("w", "Could not find a valid default variant for stack {stack}", stack = stack.id) - - ## Find the ID that should be used when searching for instance containers for a specified definition. - # - # This handles the situation where the definition specifies we should use a different definition when - # searching for instance containers. - # - # \param machine_definition The definition to find the "quality definition" for. - # - # \return The ID of the definition container to use when searching for instance containers. - @classmethod - def __findInstanceContainerDefinitionId(cls, machine_definition: DefinitionContainer) -> str: - quality_definition = machine_definition.getMetaDataEntry("quality_definition") - if not quality_definition: - return machine_definition.id - - definitions = cls.__registry.findDefinitionContainers(id = quality_definition) - if not definitions: - Logger.log("w", "Unable to find parent definition {parent} for machine {machine}", parent = quality_definition, machine = machine_definition.id) - return machine_definition.id - - return cls.__findInstanceContainerDefinitionId(definitions[0]) - From 0467a8688ab02b4d97eee2cc3f71a3dfea2d0931 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:42:20 +0200 Subject: [PATCH 374/816] Make the UM3 work properly --- cura/Settings/CuraStackBuilder.py | 44 +++++++++++++++---------------- cura/Settings/ExtruderManager.py | 4 +-- cura/Settings/ExtruderStack.py | 6 +++++ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 897e66e265..27844d895a 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -21,14 +21,14 @@ class CuraStackBuilder: # \return The new global stack or None if an error occurred. @classmethod def createMachine(cls, name: str, definition_id: str) -> GlobalStack: - cls.__registry = ContainerRegistry.getInstance() - definitions = cls.__registry.findDefinitionContainers(id = definition_id) + registry = ContainerRegistry.getInstance() + definitions = registry.findDefinitionContainers(id = definition_id) if not definitions: Logger.log("w", "Definition {definition} was not found!", definition = definition_id) return None machine_definition = definitions[0] - name = cls.__registry.createUniqueName("machine", "", name, machine_definition.name) + name = registry.createUniqueName("machine", "", name, machine_definition.name) new_global_stack = cls.createGlobalStack( new_stack_id = name, @@ -38,14 +38,14 @@ class CuraStackBuilder: variant = "default", ) - for extruder_definition in cls.__registry.findDefinitionContainers(machine = machine_definition.id): + for extruder_definition in registry.findDefinitionContainers(machine = machine_definition.id): position = extruder_definition.getMetaDataEntry("position", None) if not position: Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.id) - new_extruder_id = cls.__registry.uniqueName(extruder_definition.id) + new_extruder_id = registry.uniqueName(extruder_definition.id) new_extruder = cls.createExtruderStack( - new_extruder_id = new_extruder_id, + new_extruder_id, definition = extruder_definition, machine_definition = machine_definition, quality = "default", @@ -66,34 +66,34 @@ class CuraStackBuilder: # \return A new Global stack instance with the specified parameters. @classmethod def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainer, machine_definition: DefinitionContainer, **kwargs) -> ExtruderStack: - cls.__registry = ContainerRegistry.getInstance() - stack = ExtruderStack(new_stack_id) + stack.setName(definition.getName()) stack.setDefinition(definition) stack.addMetaDataEntry("position", definition.getMetaDataEntry("position")) user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("extruder", new_stack_id) + user_container.setDefinition(machine_definition) stack.setUserChanges(user_container) if "next_stack" in kwargs: stack.setNextStack(kwargs["next_stack"]) - # Important! The order here matters, because that allows functions like __setStackQuality to + # Important! The order here matters, because that allows the stack to # assume the material and variant have already been set. if "definition_changes" in kwargs: stack.setDefinitionChangesById(kwargs["definition_changes"]) if "variant" in kwargs: - cls.__setStackVariant(stack, kwargs["variant"]) + stack.setVariantById(kwargs["variant"]) if "material" in kwargs: - cls.__setStackMaterial(stack, kwargs["material"]) + stack.setMaterialById(kwargs["material"]) if "quality" in kwargs: - cls.__setStackQuality(stack, kwargs["quality"]) + stack.setQualityById(kwargs["quality"]) if "quality_changes" in kwargs: stack.setQualityChangesById(kwargs["quality_changes"]) @@ -101,8 +101,9 @@ class CuraStackBuilder: # Only add the created containers to the registry after we have set all the other # properties. This makes the create operation more transactional, since any problems # setting properties will not result in incomplete containers being added. - cls.__registry.addContainer(stack) - cls.__registry.addContainer(user_container) + registry = ContainerRegistry.getInstance() + registry.addContainer(stack) + registry.addContainer(user_container) return stack @@ -115,8 +116,6 @@ class CuraStackBuilder: # \return A new Global stack instance with the specified parameters. @classmethod def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: - cls.__registry = ContainerRegistry.getInstance() - stack = GlobalStack(new_stack_id) stack.setDefinition(definition) @@ -127,24 +126,25 @@ class CuraStackBuilder: stack.setUserChanges(user_container) - # Important! The order here matters, because that allows functions like __setStackQuality to + # Important! The order here matters, because that allows the stack to # assume the material and variant have already been set. if "definition_changes" in kwargs: stack.setDefinitionChangesById(kwargs["definition_changes"]) if "variant" in kwargs: - cls.__setStackVariant(stack, kwargs["variant"]) + stack.setVariantById(kwargs["variant"]) if "material" in kwargs: - cls.__setStackMaterial(stack, kwargs["material"]) + stack.setMaterialById(kwargs["material"]) if "quality" in kwargs: - cls.__setStackQuality(stack, kwargs["quality"]) + stack.setQualityById(kwargs["quality"]) if "quality_changes" in kwargs: stack.setQualityChangesById(kwargs["quality_changes"]) - cls.__registry.addContainer(stack) - cls.__registry.addContainer(user_container) + registry = ContainerRegistry.getInstance() + registry.addContainer(stack) + registry.addContainer(user_container) return stack diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 63d2e2861f..f980bce57d 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -396,7 +396,6 @@ class ExtruderManager(QObject): # \param machine_id The machine to get the extruders of. def getMachineExtruders(self, machine_id): if machine_id not in self._extruder_trains: - Logger.log("w", "Tried to get the extruder trains for machine %s, which doesn't exist.", machine_id) return [] return [self._extruder_trains[machine_id][name] for name in self._extruder_trains[machine_id]] @@ -420,13 +419,12 @@ class ExtruderManager(QObject): global_stack = Application.getInstance().getGlobalContainerStack() result = [] - if global_stack: + if global_stack and 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]) return result def __globalContainerStackChanged(self) -> None: - self._addCurrentMachineExtruders() global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack and global_container_stack.getBottom() and global_container_stack.getBottom().getId() != self._global_container_stack_definition_id: self._global_container_stack_definition_id = global_container_stack.getBottom().getId() diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 2a481863e1..a95ba604e7 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -60,6 +60,12 @@ class ExtruderStack(CuraContainerStack): return super().getProperty(key, property_name) + @override(CuraContainerStack) + def _getMachineDefinition(self) -> ContainerInterface: + if not self.getNextStack(): + raise Exceptions.NoGlobalStackError("Extruder {id} is missing the next stack!".format(id = self.id)) + + return self.getNextStack()._getMachineDefinition() extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", From 7a907aa713243ca398dbf7edaa213f741834fa9f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Apr 2017 17:42:40 +0200 Subject: [PATCH 375/816] Deprecate addMachineExtruders/createExtruderTrain --- cura/Settings/ExtruderManager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index f980bce57d..19d27e0b53 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -6,6 +6,7 @@ from UM.FlameProfiler import pyqtSlot from UM.Application import Application #To get the global container stack to find the current machine. from UM.Logger import Logger +from UM.Decorators import deprecated from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Settings.ContainerRegistry import ContainerRegistry #Finding containers by ID. @@ -147,6 +148,7 @@ class ExtruderManager(QObject): # # \param machine_definition The machine definition to add the extruders for. # \param machine_id The machine_id to add the extruders for. + @deprecated("Use CuraStackBuilder", "2.6") def addMachineExtruders(self, machine_definition: DefinitionContainer, machine_id: str) -> None: changed = False machine_definition_id = machine_definition.getId() @@ -199,6 +201,7 @@ class ExtruderManager(QObject): # \param machine_definition The machine that the extruder train belongs to. # \param position The position of this extruder train in the extruder slots of the machine. # \param machine_id The id of the "global" stack this extruder is linked to. + @deprecated("Use CuraStackBuilder::createExtruderStack", "2.6") def createExtruderTrain(self, extruder_definition: DefinitionContainer, machine_definition: DefinitionContainer, position, machine_id: str) -> None: # Cache some things. From 3c85159b057f1472ce8e1058a0fef2b548671957 Mon Sep 17 00:00:00 2001 From: Filip Goc Date: Tue, 18 Apr 2017 20:44:55 +0200 Subject: [PATCH 376/816] swap M109 for M104 in the start gcode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s necessary to preheat the nozzle before the auto bed leveling procedure to loosen up leftover filament that may had hardened on the nozzle. --- resources/definitions/imade3d_jellybox.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/imade3d_jellybox.def.json b/resources/definitions/imade3d_jellybox.def.json index f8077f2e95..86b34bfd5c 100644 --- a/resources/definitions/imade3d_jellybox.def.json +++ b/resources/definitions/imade3d_jellybox.def.json @@ -32,7 +32,7 @@ "machine_center_is_zero": { "default_value": false }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": ";---------------------------------------\n; ; ; Jellybox Start Script Begin ; ; ;\n;_______________________________________\n; M92 E140 ;optionally adjust steps per mm for your filament\n\n; Print Settings Summary\n; (leave these alone: this is only a list of the slicing settings)\n; (overwriting these values will NOT change your printer's behavior)\n; sliced for : {machine_name}\n; nozzle diameter : {machine_nozzle_size}\n; filament diameter : {material_diameter}\n; layer height : {layer_height}\n; 1st layer height : {layer_height_0}\n; line width : {line_width}\n; outer wall wipe dist. : {wall_0_wipe_dist}\n; infill line width : {infill_line_width}\n; wall thickness : {wall_thickness}\n; top thickness : {top_thickness}\n; bottom thickness : {bottom_thickness}\n; infill density : {infill_sparse_density}\n; infill pattern : {infill_pattern}\n; print temperature : {material_print_temperature}\n; 1st layer print temp. : {material_print_temperature_layer_0}\n; heated bed temperature : {material_bed_temperature}\n; 1st layer bed temp. : {material_bed_temperature_layer_0}\n; regular fan speed : {cool_fan_speed_min}\n; max fan speed : {cool_fan_speed_max}\n; retraction amount : {retraction_amount}\n; retr. retract speed : {retraction_retract_speed}\n; retr. prime speed : {retraction_prime_speed}\n; build plate adhesion : {adhesion_type}\n; support ? {support_enable}\n; spiralized ? {magic_spiralize}\n\nM117 Preparing ;write Preparing\nM140 S{material_bed_temperature_layer_0} ;set bed temperature and move on\nM104 S{material_print_temperature_layer_0} ;set extruder temperature and move on\nM206 X10.0 Y0.0 ;set x homing offset for default bed leveling\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nM82 ;set extruder to absolute mode\nG28 ;home all axes\nM203 Z4 ;slow Z speed down for greater accuracy when probing\nG29 ;auto bed leveling procedure\nM203 Z7 ;pick up z speed again for printing\nM190 S{material_bed_temperature_layer_0} ;wait for the bed to reach desired temperature\nM109 S{material_print_temperature_layer_0} ;wait for the extruder to reach desired temperature\nG92 E0 ;reset the extruder position\nG1 F1500 E15 ;extrude 15mm of feed stock\nG92 E0 ;reset the extruder position again\nM117 Print starting ;write Print starting\n;---------------------------------------------\n; ; ; Jellybox Printer Start Script End ; ; ;\n;_____________________________________________\n" + "default_value": ";---------------------------------------\n; ; ; Jellybox Start Script Begin ; ; ;\n;_______________________________________\n; M92 E140 ;optionally adjust steps per mm for your filament\n\n; Print Settings Summary\n; (leave these alone: this is only a list of the slicing settings)\n; (overwriting these values will NOT change your printer's behavior)\n; sliced for : {machine_name}\n; nozzle diameter : {machine_nozzle_size}\n; filament diameter : {material_diameter}\n; layer height : {layer_height}\n; 1st layer height : {layer_height_0}\n; line width : {line_width}\n; outer wall wipe dist. : {wall_0_wipe_dist}\n; infill line width : {infill_line_width}\n; wall thickness : {wall_thickness}\n; top thickness : {top_thickness}\n; bottom thickness : {bottom_thickness}\n; infill density : {infill_sparse_density}\n; infill pattern : {infill_pattern}\n; print temperature : {material_print_temperature}\n; 1st layer print temp. : {material_print_temperature_layer_0}\n; heated bed temperature : {material_bed_temperature}\n; 1st layer bed temp. : {material_bed_temperature_layer_0}\n; regular fan speed : {cool_fan_speed_min}\n; max fan speed : {cool_fan_speed_max}\n; retraction amount : {retraction_amount}\n; retr. retract speed : {retraction_retract_speed}\n; retr. prime speed : {retraction_prime_speed}\n; build plate adhesion : {adhesion_type}\n; support ? {support_enable}\n; spiralized ? {magic_spiralize}\n\nM117 Preparing ;write Preparing\nM140 S{material_bed_temperature_layer_0} ;set bed temperature and move on\nM109 S{material_print_temperature} ; wait for the extruder to reach desired temperature\nM206 X10.0 Y0.0 ;set x homing offset for default bed leveling\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nM82 ;set extruder to absolute mode\nG28 ;home all axes\nM203 Z4 ;slow Z speed down for greater accuracy when probing\nG29 ;auto bed leveling procedure\nM203 Z7 ;pick up z speed again for printing\nM190 S{material_bed_temperature_layer_0} ;wait for the bed to reach desired temperature\nM109 S{material_print_temperature_layer_0} ;wait for the extruder to reach desired temperature\nG92 E0 ;reset the extruder position\nG1 F1500 E15 ;extrude 15mm of feed stock\nG92 E0 ;reset the extruder position again\nM117 Print starting ;write Print starting\n;---------------------------------------------\n; ; ; Jellybox Printer Start Script End ; ; ;\n;_____________________________________________\n" }, "machine_end_gcode": { "default_value": "\n;---------------------------------\n;;; Jellybox End Script Begin ;;;\n;_________________________________\nM117 Finishing Up ;write Finishing Up\n\nM104 S0 ;extruder heater off\nM140 S0 ;bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG28 X ;home x, so the head is out of the way\nG1 Y100 ;move Y forward, so the print is more accessible\nM84 ;steppers off\n\nM117 Print finished ;write Print finished\n;---------------------------------------\n;;; Jellybox End Script End ;;;\n;_______________________________________" From 06377196221b4a82ad53efb0b9e536321e2ca332 Mon Sep 17 00:00:00 2001 From: Mehmet Sutas Date: Tue, 18 Apr 2017 22:49:50 +0300 Subject: [PATCH 377/816] Resized Rigid3D Zero2 Platform STL Resized Rigid3D Zero2 Platform STL --- resources/meshes/rigid3d_zero2_platform.stl | Bin 2198584 -> 942584 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/meshes/rigid3d_zero2_platform.stl b/resources/meshes/rigid3d_zero2_platform.stl index 08d6e7519b39823ac99f18928d989ec486ef8089..ef81aaf9ec46fa96a78186c0863223a18740023d 100644 GIT binary patch literal 942584 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

@WX1T2Dkulv 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 literal 2198584 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"&!DHWc4;BuanrJI@6Aif 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�U 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 J9PL!$Wka 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

t{7mDk;gK&j^b>=2 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 !4f8tV6%zc76u7%QpO&Ka&=Y_ZlD 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%0DjsF{<1Y1sYC_9}2KR$# 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

>tM1 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�FCG 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 GiT?p10ZP9B From 61c46312707faab26ed8d3cb9ecba9e4c0687a9a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 19 Apr 2017 08:56:08 +0200 Subject: [PATCH 378/816] Put sizes and numbers for toggle button into theme CURA-3574 --- resources/qml/Sidebar.qml | 4 ++-- resources/themes/cura/styles.qml | 12 ++++++------ resources/themes/cura/theme.json | 7 ++++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index aeb86c9dbd..e4ad4ff305 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -423,7 +423,7 @@ Rectangle { id: toggleLeftText anchors.right: modeToggleSwitch.left - anchors.rightMargin: 10 + anchors.rightMargin: UM.Theme.getSize("toggle_button_text_anchoring_margin").width anchors.verticalCenter: parent.verticalCenter text: "" color: UM.Theme.getColor("toggle_active_text") @@ -435,7 +435,7 @@ Rectangle id: modeToggleSwitch checked: false anchors.right: toggleRightText.left - anchors.rightMargin: 10 + anchors.rightMargin: UM.Theme.getSize("toggle_button_text_anchoring_margin").width anchors.verticalCenter: parent.verticalCenter onClicked: diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 9b553236c8..a7c7dcb6cd 100644 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -11,9 +11,9 @@ QtObject { property Component toggle_button: Component { SwitchStyle { groove: Rectangle { - implicitWidth: 30 - implicitHeight: 15 - radius: 9 + implicitWidth: UM.Theme.getSize("toggle_button_background_implicit_size").width + implicitHeight: UM.Theme.getSize("toggle_button_background_implicit_size").height + radius: UM.Theme.getSize("toggle_button_radius").width border.color: { if (control.pressed || (control.checkable && control.checked)) { return UM.Theme.getColor("sidebar_header_active"); @@ -28,9 +28,9 @@ QtObject { } handle: Rectangle { - implicitHeight: 15 - implicitWidth: 15 - radius: 9 + implicitWidth: UM.Theme.getSize("toggle_button_knob_implicit_size").width + implicitHeight: UM.Theme.getSize("toggle_button_knob_implicit_size").height + radius: UM.Theme.getSize("toggle_button_radius").width color: { if (control.pressed || (control.checkable && control.checked)) { diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index fa4bf2ee92..084ee27bb2 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -319,6 +319,11 @@ "infill_button_margin": [0.5, 0.5], - "jobspecs_line": [2.0, 2.0] + "jobspecs_line": [2.0, 2.0], + + "toggle_button_text_anchoring_margin": [1.0, 1.0], + "toggle_button_radius": [1.0, 1.0], + "toggle_button_background_implicit_size": [2.0, 1.0], + "toggle_button_knob_implicit_size": [1.0, 1.0] } } From 232f9750920dbced5305d760df4531fcf9e3f0fb Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 19 Apr 2017 10:28:16 +0200 Subject: [PATCH 379/816] Removed unused code, added ';' to end of lines. CURA-3574 --- resources/qml/Sidebar.qml | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) mode change 100644 => 100755 resources/qml/Sidebar.qml diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml old mode 100644 new mode 100755 index e4ad4ff305..c37b3bf222 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -408,17 +408,6 @@ Rectangle } ExclusiveGroup { id: modeMenuGroup; } - /* - ListView{ - id: modesList - property var index: 0 - model: modesListModel - delegate: wizardDelegate - anchors.top: parent.top - anchors.left: parent.left - width: parent.width - }*/ - Text { id: toggleLeftText @@ -591,11 +580,11 @@ Rectangle }) sidebarContents.push({ "item": modesListModel.get(base.currentModeIndex).item, "immediate": true }); - toggleLeftText.text = modesListModel.get(0).text - toggleRightText.text = modesListModel.get(1).text + toggleLeftText.text = modesListModel.get(0).text; + toggleRightText.text = modesListModel.get(1).text; - var index = parseInt(UM.Preferences.getValue("cura/active_mode")) - if(index) + var index = parseInt(UM.Preferences.getValue("cura/active_mode")); + if (index) { currentModeIndex = index; modeToggleSwitch.checked = index > 0; @@ -621,4 +610,4 @@ Rectangle watchedProperties: [ "value" ] storeIndex: 0 } -} \ No newline at end of file +} From 7db0f0ebb777651154f79b33ee91fd49107086b5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 19 Apr 2017 12:46:25 +0200 Subject: [PATCH 380/816] Make toggle button labels clickable --- resources/qml/Sidebar.qml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index c37b3bf222..ba5106c767 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -417,6 +417,20 @@ Rectangle text: "" color: UM.Theme.getColor("toggle_active_text") font: UM.Theme.getFont("default") + + MouseArea + { + anchors.fill: parent + onClicked: + { + modeToggleSwitch.checked = false; + } + + Component.onCompleted: + { + clicked.connect(modeToggleSwitch.clicked) + } + } } Switch @@ -454,6 +468,20 @@ Rectangle text: "" color: UM.Theme.getColor("toggle_active_text") font: UM.Theme.getFont("default") + + MouseArea + { + anchors.fill: parent + onClicked: + { + modeToggleSwitch.checked = true; + } + + Component.onCompleted: + { + clicked.connect(modeToggleSwitch.clicked) + } + } } } From 50a99eb2b1fd9ec149add0d38a9be675e0261acc Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Wed, 19 Apr 2017 13:50:06 +0200 Subject: [PATCH 381/816] fix: dont err on gradual infill when printing hollow (CURA-3700) --- 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 b4c2859893..b3ee3e4256 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1301,7 +1301,7 @@ "type": "int", "minimum_value": "0", "maximum_value_warning": "4", - "maximum_value": "(20 - math.log(infill_line_distance) / math.log(2)) if infill_line_distance > 0 and not spaghetti_infill_enabled else 0", + "maximum_value": "(20 - math.log(infill_line_distance) / math.log(2)) if infill_line_distance > 0 and not spaghetti_infill_enabled else (0 if spaghetti_infill_enabled else 20)", "enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv' and not spaghetti_infill_enabled", "settable_per_mesh": true }, From ab1044de7b562d09aea6f42dfcea1c3fffa4846a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 19 Apr 2017 14:41:32 +0200 Subject: [PATCH 382/816] Some more documentation --- cura/Settings/CuraContainerRegistry.py | 6 ++++++ cura/Settings/CuraContainerStack.py | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index ae4fd2e5c7..bf8e475c38 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -28,6 +28,11 @@ class CuraContainerRegistry(ContainerRegistry): super().__init__(*args, **kwargs) ## Overridden from ContainerRegistry + # + # Adds a container to the registry. + # + # This will also try to convert a ContainerStack to either Extruder or + # Global stack based on metadata information. @override(ContainerRegistry) def addContainer(self, container): # Note: Intentional check with type() because we want to ignore subclasses @@ -295,6 +300,7 @@ class CuraContainerRegistry(ContainerRegistry): return parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", False)) return False + ## Convert an "old-style" pure ContainerStack to either an Extruder or Global stack. def _convertContainerStack(self, container): assert type(container) == ContainerStack diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index df8cc6078d..2b8a1ebf6d 100644 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -426,8 +426,6 @@ class CuraContainerStack(ContainerStack): # - Otherwise, if the machine definition has a metadata entry "preferred_material", try to find a material that matches the specified ID. # # \return The container that should be used as default, or None if nothing was found or the machine does not use materials. - # - # def findDefaultMaterial(self) -> Optional[ContainerInterface]: definition = self._getMachineDefinition() if not definition.getMetaDataEntry("has_materials"): @@ -467,6 +465,12 @@ class CuraContainerStack(ContainerStack): Logger.log("w", "Could not find a valid material for stack {stack}", stack = self.id) return None + ## Find the quality that should be used as "default" quality. + # + # This will search for qualities that match the current definition and pick the preferred one, + # if specified by the machine definition. + # + # \return The container that should be used as default, or None if nothing was found. def findDefaultQuality(self) -> Optional[ContainerInterface]: definition = self._getMachineDefinition() registry = ContainerRegistry.getInstance() From 26a2fb80dc079f1d61d625bd9842e2a39f91b2bc Mon Sep 17 00:00:00 2001 From: daid Date: Wed, 19 Apr 2017 15:01:47 +0200 Subject: [PATCH 383/816] Only update the target bed temperature, without submitting it to the printer. To prevent race conditions. --- .../UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 0dd31652ce..9b07b2bf0b 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -294,6 +294,15 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") self._manager.put(put_request, data.encode()) + ## Updates the target bed temperature from the printer, and emit a signal if it was changed. + # + # /param temperature The new target temperature of the bed. + def _updateTargetBedTemperature(self, temperature): + if self._target_bed_temperature == temperature: + return + self._target_bed_temperature = temperature + self.targetBedTemperatureChanged.emit() + def _stopCamera(self): self._camera_timer.stop() if self._image_reply: @@ -528,7 +537,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): bed_temperature = self._json_printer_state["bed"]["temperature"]["current"] self._setBedTemperature(bed_temperature) target_bed_temperature = self._json_printer_state["bed"]["temperature"]["target"] - self._setTargetBedTemperature(target_bed_temperature) + self._updateTargetBedTemperature(target_bed_temperature) head_x = self._json_printer_state["heads"][0]["position"]["x"] head_y = self._json_printer_state["heads"][0]["position"]["y"] From 62f2fe062beef3792f8503f225bc83650d884e8d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 18 Apr 2017 17:05:45 +0200 Subject: [PATCH 384/816] Enable settings when machine_extruder_count is set to 1 but multiple extruders are defined --- resources/qml/Settings/SettingView.qml | 2 +- resources/qml/SidebarSimple.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 66f1c19a08..a98775fead 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -179,7 +179,7 @@ Item Behavior on opacity { NumberAnimation { duration: 100 } } enabled: { - if(!ExtruderManager.activeExtruderStackId && ExtruderManager.extruderCount > 0) + if(!ExtruderManager.activeExtruderStackId && machineExtruderCount.properties.value > 1) { // disable all controls on the global tab, except categories return model.type == "category" diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 424c1239af..2234255478 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -19,7 +19,7 @@ Item property Action configureSettings; property variant minimumPrintTime: PrintInformation.minimumPrintTime; property variant maximumPrintTime: PrintInformation.maximumPrintTime; - property bool settingsEnabled: ExtruderManager.activeExtruderStackId || ExtruderManager.extruderCount == 0 + property bool settingsEnabled: ExtruderManager.activeExtruderStackId || machineExtruderCount.properties.value == 1 Component.onCompleted: PrintInformation.enabled = true Component.onDestruction: PrintInformation.enabled = false From 16bc9db06debf4f8776723ba39ae74710a098786 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 19 Apr 2017 16:24:39 +0200 Subject: [PATCH 385/816] Simplify gradual infill steps maximum formula The case where it reaches '20' is incorrect, it should never give an error, so it should've been 999999 or something. This case is also overly complex. Say that P is 'infill_line_distance > 0' and Q is 'spaghetti_enabled'... Then it would be the logarithmic if (P and not Q)... Then it would be 0 or 20 if (not (P and not Q)), which is ((not P) or Q)... Then it would be 20 if (((not P) or Q) and not Q), which is (not P)... And it would be 0 if (((not P) or Q) and Q), which is Q. So therefore it can be simplified to: 20 if (not P) else 0 if Q else logarithmic. But 20 became 999999, hence the above formula. Contributes to issue CURA-3700. --- 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 b3ee3e4256..ca05191185 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1301,7 +1301,7 @@ "type": "int", "minimum_value": "0", "maximum_value_warning": "4", - "maximum_value": "(20 - math.log(infill_line_distance) / math.log(2)) if infill_line_distance > 0 and not spaghetti_infill_enabled else (0 if spaghetti_infill_enabled else 20)", + "maximum_value": "0 if spaghetti_infill_enabled else (999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2)))", "enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv' and not spaghetti_infill_enabled", "settable_per_mesh": true }, From a4449c19165d8c15b396822e55c2adace175d1ef Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:33:48 +0200 Subject: [PATCH 386/816] Update cartesio_0.8_petg_high.inst.cfg --- resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 8fc6fc8398..c26eded7d0 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -18,7 +18,7 @@ wall_0_inset = -0.05 fill_perimeter_gaps = nowhere travel_compensate_overlapping_walls_enabled = -infill_sparse_density = 40 +infill_sparse_density = 50 infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 From 28ef1cc10957a578c91f7aa7e2c9b8095c7c8117 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:39:40 +0200 Subject: [PATCH 387/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 3604f8a824..73d920774d 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -11,6 +11,7 @@ weight = 0 [values] layer_height = 0.4 +layer_height_0 = =layer_height skin_angles = [0,90] From a07559ea534fccc4291f1465038c19d5b74ac9ee Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:40:28 +0200 Subject: [PATCH 388/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index e1e1c3a294..91c2bdf6ee 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -11,6 +11,7 @@ weight = 0 [values] layer_height = 0.6 +layer_height_0 = =layer_height skin_angles = [0,90] From 782c3628d235334bc0b57b69aa868d04ecbd73f7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:40:58 +0200 Subject: [PATCH 389/816] Update cartesio_global_High_Quality.inst.cfg --- resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index d3e4964d75..269420ce0b 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -11,6 +11,7 @@ weight = 0 [values] layer_height = 0.1 +layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0.3 skin_angles = [0,90] From dea3b06de4a4d551f9005bf37c82cf808493322d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:41:25 +0200 Subject: [PATCH 390/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index bcef9b82ac..df1b8d52d2 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -11,6 +11,7 @@ weight = 0 [values] layer_height = 0.2 +layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0.3 skin_angles = [0,90] From 5a4475c7d9a9a8d1ce03ea2ef38f39a395ef8805 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:42:47 +0200 Subject: [PATCH 391/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 60ee386bb4..2c9684ba3b 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -59,7 +59,6 @@ }, "layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, "layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, - "layer_height_0": { "resolve": "0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0.3 "}, "machine_nozzle_heat_up_speed": {"default_value": 20}, "machine_nozzle_cool_down_speed": {"default_value": 20}, "machine_min_cool_heat_time_window": {"default_value": 5} From 5aee2556a1ffb7427c54af2772941411d8cbd983 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:45:48 +0200 Subject: [PATCH 392/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 2c9684ba3b..ef03e3625b 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -45,8 +45,6 @@ "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "material_print_temp_wait": { "default_value": false }, "material_bed_temp_wait": { "default_value": false }, - "infill_pattern": { "default_value": "grid"}, - "infill_before_walls":{ "default_value": false}, "prime_tower_enable": { "default_value": true }, "prime_tower_wall_thickness": { "resolve": 0.7 }, "prime_tower_position_x": { "default_value": 50 }, From f7404a8c10447f1723f2b4ae4a3486bbecd401f6 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:50:51 +0200 Subject: [PATCH 393/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index df1b8d52d2..2fa729111b 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -15,6 +15,8 @@ layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0 skin_angles = [0,90] +infill_pattern = grid +infill_before_walls = False infill_angles = [0,90] speed_slowdown_layers = 1 From 98c8bc19299cc03e26122b736c1693d0b1e1e54d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:50:59 +0200 Subject: [PATCH 394/816] Update cartesio_global_High_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 269420ce0b..c9b729585e 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -15,6 +15,8 @@ layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0 skin_angles = [0,90] +infill_pattern = grid +infill_before_walls = False infill_angles = [0,90] speed_slowdown_layers = 1 From f627f9216847ae7de6b3897f413406856fcf25b4 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:51:15 +0200 Subject: [PATCH 395/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 91c2bdf6ee..66db7abac4 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -15,6 +15,8 @@ layer_height_0 = =layer_height skin_angles = [0,90] +infill_pattern = grid +infill_before_walls = False infill_angles = [0,90] speed_slowdown_layers = 1 From 1e27ba86ac43fa1a76a6dbcd12a1f896f8bcb463 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 08:51:24 +0200 Subject: [PATCH 396/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 73d920774d..95ec972dd9 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -15,6 +15,8 @@ layer_height_0 = =layer_height skin_angles = [0,90] +infill_pattern = grid +infill_before_walls = False infill_angles = [0,90] speed_slowdown_layers = 1 From 50acaaf91f20b396b4df573b5ca09a69605b2954 Mon Sep 17 00:00:00 2001 From: daid Date: Thu, 20 Apr 2017 09:35:48 +0200 Subject: [PATCH 397/816] Some minor changes on review. --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 9b07b2bf0b..459de3248d 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -283,10 +283,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): # # /param temperature The new target temperature of the bed. def _setTargetBedTemperature(self, temperature): - if self._target_bed_temperature == temperature: + if not self._updateTargetBedTemperature(temperature): return - self._target_bed_temperature = temperature - self.targetBedTemperatureChanged.emit() url = QUrl("http://" + self._address + self._api_prefix + "printer/bed/temperature/target") data = str(temperature) @@ -297,11 +295,13 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): ## Updates the target bed temperature from the printer, and emit a signal if it was changed. # # /param temperature The new target temperature of the bed. + # /return boolean, True if the temperature was changed, false if the new temperature has the same value as the already stored temperature def _updateTargetBedTemperature(self, temperature): if self._target_bed_temperature == temperature: - return + return False self._target_bed_temperature = temperature self.targetBedTemperatureChanged.emit() + return True def _stopCamera(self): self._camera_timer.stop() From ebcf1baae8e4c1211fb4f10903a535a4b4d245e7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:13:21 +0200 Subject: [PATCH 398/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index ef03e3625b..9b1aa1f89c 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -53,7 +53,7 @@ "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S600 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, "machine_end_gcode": { - "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" + "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\nG91\nG1 Z1 F900\nG90\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" }, "layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, "layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, From 91e0ab8fded441e7d6ffc7d46102127397c0b29d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:16:04 +0200 Subject: [PATCH 399/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 9b1aa1f89c..dff60c0d6b 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -53,7 +53,7 @@ "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S600 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, "machine_end_gcode": { - "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\nG91\nG1 Z1 F900\nG90\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" + "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\nG91\nG1 Z1 F900\nG90\n\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" }, "layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, "layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, From 4c9b8bdf0adb7adb931b1f3d2ae558efd21b5a51 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:18:30 +0200 Subject: [PATCH 400/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index dff60c0d6b..d1343b46f7 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -53,7 +53,7 @@ "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S600 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, "machine_end_gcode": { - "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\nG91\nG1 Z1 F900\nG90\n\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" + "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\n\nG91\nG1 Z1 F900\nG90\n\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" }, "layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, "layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, From 4836bd88637f940d6ecd6914b7a72469d6e2a26f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:57:07 +0200 Subject: [PATCH 401/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 95ec972dd9..9be6ceadf0 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -15,7 +15,6 @@ layer_height_0 = =layer_height skin_angles = [0,90] -infill_pattern = grid infill_before_walls = False infill_angles = [0,90] From d7897376df46df97eabd74459b5f9fbd2abe6344 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:57:11 +0200 Subject: [PATCH 402/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 66db7abac4..f06970c928 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -15,7 +15,6 @@ layer_height_0 = =layer_height skin_angles = [0,90] -infill_pattern = grid infill_before_walls = False infill_angles = [0,90] From b6cc11d02be8226a5cad99218e0f9d03ba022a5c Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:57:16 +0200 Subject: [PATCH 403/816] Update cartesio_global_High_Quality.inst.cfg --- resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index c9b729585e..a486d6f2f5 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -15,7 +15,6 @@ layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0 skin_angles = [0,90] -infill_pattern = grid infill_before_walls = False infill_angles = [0,90] From d7b4a4ab087f81c80028f286d5a14bbccf0555ce Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 10:57:20 +0200 Subject: [PATCH 404/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 2fa729111b..85dcdbcfd5 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -15,7 +15,6 @@ layer_height_0 = =0.2 if min(extruderValues('machine_nozzle_size')) < 0.3 else 0 skin_angles = [0,90] -infill_pattern = grid infill_before_walls = False infill_angles = [0,90] From 47aa044f7c844d159885718a430fc7fc2c16fd6c Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 11:33:36 +0200 Subject: [PATCH 405/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index d1343b46f7..98e2d85c9e 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -50,7 +50,7 @@ "prime_tower_position_x": { "default_value": 50 }, "prime_tower_position_y": { "default_value": 71 }, "machine_start_gcode": { - "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S600 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" + "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S1200 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, "machine_end_gcode": { "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\n\nG91\nG1 Z1 F900\nG90\n\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" From 10233b2c0297f178fd055c5307b2183fbf468344 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 11:53:05 +0200 Subject: [PATCH 406/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 98e2d85c9e..1d2712ae7b 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -50,7 +50,7 @@ "prime_tower_position_x": { "default_value": 50 }, "prime_tower_position_y": { "default_value": 71 }, "machine_start_gcode": { - "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S1200 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" + "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S1200 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\nG1 Z10 F900\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, "machine_end_gcode": { "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nM104 S5 T2\nM104 S5 T3\n\nG91\nG1 Z1 F900\nG90\n\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\nT0\n; -- end of GCODE --" From f6d96d2dd8fc16158ab98071a1e8d9551c98b06b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 14:44:01 +0200 Subject: [PATCH 407/816] Update cartesio_extruder_3.def.json --- resources/extruders/cartesio_extruder_3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_3.def.json b/resources/extruders/cartesio_extruder_3.def.json index 691ef5935b..dea3467daa 100644 --- a/resources/extruders/cartesio_extruder_3.def.json +++ b/resources/extruders/cartesio_extruder_3.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_3\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T3 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_3\n" + "default_value": "\nM104 T3 S160\nG91\nG1 Z5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_3\n" } } } From 8e6eb1430a01931c7f07fd7ff779f8d3594cad72 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 14:44:23 +0200 Subject: [PATCH 408/816] Update cartesio_extruder_2.def.json --- resources/extruders/cartesio_extruder_2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_2.def.json b/resources/extruders/cartesio_extruder_2.def.json index 0a2cc072f9..ce07502943 100644 --- a/resources/extruders/cartesio_extruder_2.def.json +++ b/resources/extruders/cartesio_extruder_2.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_2\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T2 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_2\n" + "default_value": "\nM104 T2 S160\nG91\nG1 Z5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_2\n" } } } From 0405e3eac01c2ac42148d401385999973d316dbe Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 14:44:31 +0200 Subject: [PATCH 409/816] Update cartesio_extruder_1.def.json --- resources/extruders/cartesio_extruder_1.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_1.def.json b/resources/extruders/cartesio_extruder_1.def.json index a6f353cf73..939b1fd7c8 100644 --- a/resources/extruders/cartesio_extruder_1.def.json +++ b/resources/extruders/cartesio_extruder_1.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_1\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T1 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_1\n" + "default_value": "\nM104 T1 S160\nG91\nG1 Z5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_1\n" } } } From ec866fde10f361921aad02312ac51b7573e4c0e3 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 14:44:41 +0200 Subject: [PATCH 410/816] Update cartesio_extruder_0.def.json --- resources/extruders/cartesio_extruder_0.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/extruders/cartesio_extruder_0.def.json b/resources/extruders/cartesio_extruder_0.def.json index 65db56403c..9b25b366f7 100644 --- a/resources/extruders/cartesio_extruder_0.def.json +++ b/resources/extruders/cartesio_extruder_0.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_0\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S160\nG91\nG1 Z0.5 F900\nG90\nG1 X10 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" + "default_value": "\nM104 T0 S160\nG91\nG1 Z5 F900\nG90\nG1 X1 Y260 F9000\n;end extruder_0\nM117 temp is {material_print_temp}" } } } From 6ecd780bea1d235b4534937973df14c347893c0b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 20 Apr 2017 14:47:43 +0200 Subject: [PATCH 411/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 1d2712ae7b..bf32a33515 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -48,7 +48,7 @@ "prime_tower_enable": { "default_value": true }, "prime_tower_wall_thickness": { "resolve": 0.7 }, "prime_tower_position_x": { "default_value": 50 }, - "prime_tower_position_y": { "default_value": 71 }, + "prime_tower_position_y": { "default_value": 150 }, "machine_start_gcode": { "default_value": "\nM104 S120 T1\nM104 S120 T2\nM104 S120 T3\n\nM92 E159\n\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 Heating for 50 sec.\nG4 S20\nM117 Heating for 30 sec.\nG4 S20\nM117 Heating for 10 sec.\nM300 S1200 P1000\nG4 S9\n\nM117 purging nozzle....\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-1 F600\n\nM117 wiping nozzle....\nG1 X1 Y24 F3000\nG1 X70 F9000\nG1 Z10 F900\n\nM104 S21 T1\nM104 S21 T2\nM104 S21 T3\n\nM117 Printing .....\n" }, From 06cc0e9a63ffcb9eaf208f27e8afef8aef85972e Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:39:43 +0200 Subject: [PATCH 412/816] Move the ContextMenu to its own file Contributes to CURA-3609 --- resources/qml/Cura.qml | 98 +---------------------------- resources/qml/Menus/ContextMenu.qml | 96 ++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 96 deletions(-) create mode 100644 resources/qml/Menus/ContextMenu.qml diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index b0e6d09080..0a48725011 100755 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -594,102 +594,8 @@ UM.MainWindow } } - Menu - { - id: objectContextMenu; - - property variant objectId: -1; - MenuItem { action: Cura.Actions.centerObject; } - MenuItem { action: Cura.Actions.deleteObject; } - MenuItem { action: Cura.Actions.multiplyObject; } - MenuSeparator { } - MenuItem { action: Cura.Actions.selectAll; } - MenuItem { action: Cura.Actions.arrangeAll; } - MenuItem { action: Cura.Actions.deleteAll; } - MenuItem { action: Cura.Actions.reloadAll; } - MenuItem { action: Cura.Actions.resetAllTranslation; } - MenuItem { action: Cura.Actions.resetAll; } - MenuSeparator { } - MenuItem { action: Cura.Actions.groupObjects; } - MenuItem { action: Cura.Actions.mergeObjects; } - MenuItem { action: Cura.Actions.unGroupObjects; } - - Connections - { - target: Cura.Actions.deleteObject - onTriggered: - { - if(objectContextMenu.objectId != 0) - { - CuraApplication.deleteObject(objectContextMenu.objectId); - objectContextMenu.objectId = 0; - } - } - } - - MultiplyObjectOptions - { - id: multiplyObjectOptions - } - - Connections - { - target: Cura.Actions.multiplyObject - onTriggered: - { - if(objectContextMenu.objectId != 0) - { - multiplyObjectOptions.objectId = objectContextMenu.objectId; - multiplyObjectOptions.visible = true; - multiplyObjectOptions.reset(); - objectContextMenu.objectId = 0; - } - } - } - - Connections - { - target: Cura.Actions.centerObject - onTriggered: - { - if(objectContextMenu.objectId != 0) - { - CuraApplication.centerObject(objectContextMenu.objectId); - objectContextMenu.objectId = 0; - } - } - } - } - - Menu - { - id: contextMenu; - MenuItem { action: Cura.Actions.selectAll; } - MenuItem { action: Cura.Actions.arrangeAll; } - MenuItem { action: Cura.Actions.deleteAll; } - MenuItem { action: Cura.Actions.reloadAll; } - MenuItem { action: Cura.Actions.resetAllTranslation; } - MenuItem { action: Cura.Actions.resetAll; } - MenuSeparator { } - MenuItem { action: Cura.Actions.groupObjects; } - MenuItem { action: Cura.Actions.mergeObjects; } - MenuItem { action: Cura.Actions.unGroupObjects; } - } - - Connections - { - target: UM.Controller - onContextMenuRequested: - { - if(objectId == 0) - { - contextMenu.popup(); - } else - { - objectContextMenu.objectId = objectId; - objectContextMenu.popup(); - } - } + ContextMenu { + id: contextMenu } Connections diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml new file mode 100644 index 0000000000..fdb1ef6817 --- /dev/null +++ b/resources/qml/Menus/ContextMenu.qml @@ -0,0 +1,96 @@ +// Copyright (c) 2016 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Dialogs 1.2 +import QtQuick.Window 2.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Menu +{ + id: base + + // Selection-related actions. + MenuItem { action: Cura.Actions.centerSelection; } + MenuItem { action: Cura.Actions.deleteSelection; } + MenuItem { action: Cura.Actions.multiplySelection; } + + // Global actions + MenuSeparator { } + MenuItem { action: Cura.Actions.selectAll; } + MenuItem { action: Cura.Actions.arrangeAll; } + MenuItem { action: Cura.Actions.deleteAll; } + MenuItem { action: Cura.Actions.reloadAll; } + MenuItem { action: Cura.Actions.resetAllTranslation; } + MenuItem { action: Cura.Actions.resetAll; } + + // Group actions + MenuSeparator { } + MenuItem { action: Cura.Actions.groupObjects; } + MenuItem { action: Cura.Actions.mergeObjects; } + MenuItem { action: Cura.Actions.unGroupObjects; } + + Connections + { + target: UM.Controller + onContextMenuRequested: base.popup(); + } + + Connections + { + target: Cura.Actions.multiplySelection + onTriggered: multiplyDialog.open() + } + + Dialog + { + id: multiplyDialog + + title: catalog.i18ncp("@title:window", "Multiply Selected Model", "Multiply Selected Models", UM.Selection.selectionCount) + + width: 400 * Screen.devicePixelRatio + height: 80 * Screen.devicePixelRatio + + signal reset() + onReset: + { + copiesField.value = 1; + copiesField.focus = true; + } + + standardButtons: StandardButton.Ok | StandardButton.Cancel + + Row + { + spacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Number of Copies") + anchors.verticalCenter: copiesField.verticalCenter + } + + SpinBox + { + id: copiesField + minimumValue: 1 + maximumValue: 99 + } + } + } + + function findItemIndex(item) + { + for(var i in base.items) + { + if(base.items[i] == item) + return i; + } + return -1; + } + + UM.I18nCatalog { id: catalog; name: "cura" } +} From dd73c53eceaf76b8b9f1ccbe80a2a4cdcbb760bf Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:18:12 +0200 Subject: [PATCH 413/816] Introduce center and multiply actions that work on the entire selection Instead of working on a single object. Contributes to CURA-3609 --- resources/qml/Actions.qml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index b5f5823ece..e0d9060ee2 100755 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -18,6 +18,8 @@ Item property alias redo: redoAction; property alias deleteSelection: deleteSelectionAction; + property alias centerSelection: centerSelectionAction; + property alias multiplySelection: multiplySelectionAction; property alias deleteObject: deleteObjectAction; property alias centerObject: centerObjectAction; @@ -181,13 +183,29 @@ Item Action { id: deleteSelectionAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Delete &Selection"); - enabled: UM.Controller.toolsEnabled; + 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: CuraApplication.deleteSelection(); } + Action + { + id: centerSelectionAction; + text: catalog.i18ncp("@action:inmenu menubar:edit", "Center Selected Model", "Center Selected Models", UM.Selection.selectionCount); + enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; + iconName: "align-vertical-center"; + } + + Action + { + id: multiplySelectionAction; + text: catalog.i18ncp("@action:inmenu menubar:edit", "Multiply Selected Model", "Multiply Selected Models", UM.Selection.selectionCount); + enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; + iconName: "edit-duplicate"; + } + Action { id: deleteObjectAction; From 8e95c894fbb73de7207f90ba6147965d43b9922f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:18:55 +0200 Subject: [PATCH 414/816] Add material and variant names to ExtruderModel Contributes to CURA-3609 --- cura/Settings/ExtrudersModel.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 7f4a77eb5f..26e425c116 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -1,12 +1,12 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, pyqtSlot import UM.Qt.ListModel from UM.Application import Application -from cura.Settings.ExtruderManager import ExtruderManager +from .ExtruderManager import ExtruderManager ## Model that holds extruders. # @@ -33,6 +33,12 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # The ID of the definition of the extruder. DefinitionRole = Qt.UserRole + 5 + # The material of the extruder. + MaterialRole = Qt.UserRole + 6 + + # The variant of the extruder. + VariantRole = Qt.UserRole + 7 + ## List of colours to display if there is no material or the material has no known # colour. defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"] @@ -49,6 +55,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.ColorRole, "color") self.addRoleName(self.IndexRole, "index") self.addRoleName(self.DefinitionRole, "definition") + self.addRoleName(self.MaterialRole, "material") + self.addRoleName(self.VariantRole, "variant") self._add_global = False self._simple_names = False @@ -140,6 +148,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): for extruder in manager.getMachineExtruders(global_container_stack.getId()): extruder_name = extruder.getName() material = extruder.findContainer({ "type": "material" }) + variant = extruder.findContainer({"type": "variant"}) position = extruder.getMetaDataEntry("position", default = "0") # Get the position try: position = int(position) @@ -152,7 +161,9 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): "name": extruder_name, "color": color, "index": position, - "definition": extruder.getBottom().getId() + "definition": extruder.getBottom().getId(), + "material": material.getName() if material else "", + "variant": variant.getName() if variant else "", } items.append(item) changed = True From 97fd35c21d2d8e90c0f078f4e9529b03383760e8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:22:39 +0200 Subject: [PATCH 415/816] Add a centerSelection method to CuraActions Can be used to center all selected objects. Contributes to CURA-3609 --- cura/CuraActions.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index df26a9a9a6..7e9cbebd94 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -1,9 +1,16 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + from PyQt5.QtCore import QObject, QUrl from PyQt5.QtGui import QDesktopServices from UM.FlameProfiler import pyqtSlot from UM.Event import CallFunctionEvent from UM.Application import Application +from UM.Math.Vector import Vector +from UM.Scene.Selection import Selection +from UM.Operations.GroupedOperation import GroupedOperation +from UM.Operations.SetTransformOperation import SetTransformOperation class CuraActions(QObject): @@ -23,5 +30,18 @@ class CuraActions(QObject): event = CallFunctionEvent(self._openUrl, [QUrl("http://github.com/Ultimaker/Cura/issues")], {}) Application.getInstance().functionEvent(event) + ## Center all objects in the selection + @pyqtSlot() + def centerSelection(self) -> None: + operation = GroupedOperation() + for node in Selection.getAllSelectedObjects(): + current_node = node + while current_node.getParent() and current_node.getParent().callDecoration("isGroup"): + current_node = current_node.getParent() + + center_operation = SetTransformOperation(current_node, Vector()) + operation.addOperation(center_operation) + operation.push() + def _openUrl(self, url): - QDesktopServices.openUrl(url) \ No newline at end of file + QDesktopServices.openUrl(url) From 905e59354b314db9806374111616c8ba775d3136 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:25:05 +0200 Subject: [PATCH 416/816] Change MultiplyObjectsJob to work on a list of objects This makes MultiplyObjectsJob able to handle a list of objects instead of a single object ID. Contributes to CURA-3609 --- cura/CuraApplication.py | 9 +++++- cura/MultiplyObjectsJob.py | 58 ++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index ce2d029ae4..65f1ae5631 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -855,7 +855,14 @@ class CuraApplication(QtApplication): # \param min_offset minimum offset to other objects. @pyqtSlot("quint64", int) def multiplyObject(self, object_id, count, min_offset = 8): - job = MultiplyObjectsJob(object_id, count, min_offset) + node = self.getController().getScene().findObject(object_id) + if not node: + node = Selection.getSelectedObject(0) + + while node.getParent() and node.getParent().callDecoration("isGroup"): + node = node.getParent() + + job = MultiplyObjectsJob([node], count, min_offset) job.start() return diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index 40dbc221d6..a795e0bc10 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -24,9 +24,9 @@ from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation class MultiplyObjectsJob(Job): - def __init__(self, object_id, count, min_offset = 8): + def __init__(self, objects, count, min_offset = 8): super().__init__() - self._object_id = object_id + self._objects = objects self._count = count self._min_offset = min_offset @@ -35,38 +35,42 @@ class MultiplyObjectsJob(Job): dismissable=False, progress=0) status_message.show() scene = Application.getInstance().getController().getScene() - node = scene.findObject(self._object_id) - if not node and self._object_id != 0: # Workaround for tool handles overlapping the selected object - node = Selection.getSelectedObject(0) - - # If object is part of a group, multiply group - current_node = node - while current_node.getParent() and current_node.getParent().callDecoration("isGroup"): - current_node = current_node.getParent() + total_progress = len(self._objects) * self._count + current_progress = 0 root = scene.getRoot() arranger = Arrange.create(scene_root=root) - node_too_big = False - if node.getBoundingBox().width < 300 or node.getBoundingBox().depth < 300: - offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset) - else: - node_too_big = True nodes = [] - found_solution_for_all = True - for i in range(self._count): - # We do place the nodes one by one, as we want to yield in between. - if not node_too_big: - node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) - if node_too_big or not solution_found: - found_solution_for_all = False - new_location = node.getPosition() - new_location = new_location.set(z = 100 - i * 20) - node.setPosition(new_location) + for node in self._objects: + # If object is part of a group, multiply group + current_node = node + while current_node.getParent() and current_node.getParent().callDecoration("isGroup"): + current_node = current_node.getParent() + + node_too_big = False + if node.getBoundingBox().width < 300 or node.getBoundingBox().depth < 300: + offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(current_node, min_offset=self._min_offset) + else: + node_too_big = True + + found_solution_for_all = True + for i in range(self._count): + # We do place the nodes one by one, as we want to yield in between. + if not node_too_big: + node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) + if node_too_big or not solution_found: + found_solution_for_all = False + new_location = node.getPosition() + new_location = new_location.set(z = 100 - i * 20) + node.setPosition(new_location) + + nodes.append(node) + current_progress += 1 + status_message.setProgress((current_progress / total_progress) * 100) + Job.yieldThread() - nodes.append(node) Job.yieldThread() - status_message.setProgress((i + 1) / self._count * 100) if nodes: op = GroupedOperation() From c21895de978c79edf177b6162da50a095bca1740 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:25:53 +0200 Subject: [PATCH 417/816] Add a multiplySelection method to CuraActions Contributes to CURA-3609 --- cura/CuraActions.py | 9 +++++++++ resources/qml/Menus/ContextMenu.qml | 2 ++ 2 files changed, 11 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 7e9cbebd94..4fd51a8513 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -12,6 +12,7 @@ from UM.Scene.Selection import Selection from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.SetTransformOperation import SetTransformOperation +from .MultiplyObjectsJob import MultiplyObjectsJob class CuraActions(QObject): def __init__(self, parent = None): @@ -43,5 +44,13 @@ class CuraActions(QObject): operation.addOperation(center_operation) operation.push() + ## Multiply all objects in the selection + # + # \param count The number of times to multiply the selection. + @pyqtSlot(int) + def multiplySelection(self, count: int) -> None: + job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, 8) + job.start() + return def _openUrl(self, url): QDesktopServices.openUrl(url) diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index fdb1ef6817..be3713be6c 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -54,6 +54,8 @@ Menu width: 400 * Screen.devicePixelRatio height: 80 * Screen.devicePixelRatio + onAccepted: CuraActions.multiplySelection(copiesField.value) + signal reset() onReset: { From b56802a52305ed1edc1588dfb51d3d16e99314f5 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:26:49 +0200 Subject: [PATCH 418/816] Add a deleteSelection method to CuraActions It does the same as CuraApplication::deleteSelection but this is a better place for it. Contributes to CURA-3609 --- cura/CuraActions.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 4fd51a8513..c617980bc5 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -10,8 +10,10 @@ from UM.Application import Application from UM.Math.Vector import Vector from UM.Scene.Selection import Selection from UM.Operations.GroupedOperation import GroupedOperation +from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Operations.SetTransformOperation import SetTransformOperation +from .SetParentOperation import SetParentOperation from .MultiplyObjectsJob import MultiplyObjectsJob class CuraActions(QObject): @@ -52,5 +54,25 @@ class CuraActions(QObject): job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, 8) job.start() return + + ## Delete all selected objects. + @pyqtSlot() + def deleteSelection(self) -> None: + if not Application.getInstance().getController().getToolsEnabled(): + return + + removed_group_nodes = [] + op = GroupedOperation() + nodes = Selection.getAllSelectedObjects() + for node in nodes: + op.addOperation(RemoveSceneNodeOperation(node)) + group_node = node.getParent() + if group_node and group_node.callDecoration("isGroup") and group_node not in removed_group_nodes: + remaining_nodes_in_group = list(set(group_node.getChildren()) - set(nodes)) + if len(remaining_nodes_in_group) == 1: + removed_group_nodes.append(group_node) + op.addOperation(SetParentOperation(remaining_nodes_in_group[0], group_node.getParent())) + op.addOperation(RemoveSceneNodeOperation(group_node)) + op.push() def _openUrl(self, url): QDesktopServices.openUrl(url) From 03ccdec861dfe2f1962724bec5442c1316edd96b Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:27:28 +0200 Subject: [PATCH 419/816] Call the right methods of CuraActions in Actions.qml Contributes to CURA-3609 --- resources/qml/Actions.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index e0d9060ee2..b9eef11a55 100755 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -187,7 +187,7 @@ Item enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-delete"; shortcut: StandardKey.Delete; - onTriggered: CuraApplication.deleteSelection(); + onTriggered: CuraActions.deleteSelection(); } Action @@ -196,6 +196,7 @@ Item text: catalog.i18ncp("@action:inmenu menubar:edit", "Center Selected Model", "Center Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "align-vertical-center"; + onTriggered: CuraActions.centerSelection(); } Action From 61f542c215c0b45bf8b4121bc4705c760c334aa9 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:28:52 +0200 Subject: [PATCH 420/816] Add a SetObjectExtruderOperation class It handles setting an extruder for an object. Contributes to CURA-3609 --- cura/Settings/SetObjectExtruderOperation.py | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 cura/Settings/SetObjectExtruderOperation.py diff --git a/cura/Settings/SetObjectExtruderOperation.py b/cura/Settings/SetObjectExtruderOperation.py new file mode 100644 index 0000000000..31c996529a --- /dev/null +++ b/cura/Settings/SetObjectExtruderOperation.py @@ -0,0 +1,27 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.Scene.SceneNode import SceneNode +from UM.Operations.Operation import Operation + +from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator + +## Simple operation to set the extruder a certain object should be printed with. +class SetObjectExtruderOperation(Operation): + def __init__(self, node: SceneNode, extruder_id: str) -> None: + self._node = node + self._extruder_id = extruder_id + self._previous_extruder_id = None + self._decorator_added = False + + def undo(self): + if self._previous_extruder_id: + self._node.callDecoration("setActiveExtruder", self._previous_extruder_id) + + def redo(self): + stack = self._node.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. + if not stack: + self._node.addDecorator(SettingOverrideDecorator()) + + self._previous_extruder_id = self._node.callDecoration("getActiveExtruder") + self._node.callDecoration("setActiveExtruder", self._extruder_id) From 5f65cb25c60513e539c2e0bf4407f7fbe578b1f7 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:29:41 +0200 Subject: [PATCH 421/816] Add a setSelectionExtruder method to CuraActions Can be used to set the extruder used for the selection Contributes to CURA-3609 --- cura/CuraActions.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index c617980bc5..0a1657e512 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -16,6 +16,8 @@ from UM.Operations.SetTransformOperation import SetTransformOperation from .SetParentOperation import SetParentOperation from .MultiplyObjectsJob import MultiplyObjectsJob +from cura.Settings.SetObjectExtruderOperation import SetObjectExtruderOperation + class CuraActions(QObject): def __init__(self, parent = None): super().__init__(parent) @@ -74,5 +76,15 @@ class CuraActions(QObject): op.addOperation(SetParentOperation(remaining_nodes_in_group[0], group_node.getParent())) op.addOperation(RemoveSceneNodeOperation(group_node)) op.push() + + @pyqtSlot(str) + def setSelectionExtruder(self, extruder_id: str) -> None: + operation = GroupedOperation() + for node in Selection.getAllSelectedObjects(): + if node.callDecoration("getActiveExtruder") == extruder_id: + continue + operation.addOperation(SetObjectExtruderOperation(node, extruder_id)) + operation.push() + def _openUrl(self, url): QDesktopServices.openUrl(url) From 9fd0239cd53b4e270ff4d5fb7691ad0715c14b2a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:33:32 +0200 Subject: [PATCH 422/816] Add a selectedObjectExtruders property to ExtruderManager It exposes a list of the extruders used by the current selection. Contributes to CURA-3609 --- cura/Settings/ExtruderManager.py | 36 ++++++++++++++++++++++- cura/Settings/SettingOverrideDecorator.py | 1 + 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index d21480b11b..75fa1ece3a 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -8,12 +8,13 @@ from UM.Application import Application #To get the global container stack to fin from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode +from UM.Scene.Selection import Selection from UM.Settings.ContainerRegistry import ContainerRegistry #Finding containers by ID. from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer -from typing import Optional +from typing import Optional, List ## Manages all existing extruder stacks. # @@ -34,10 +35,13 @@ class ExtruderManager(QObject): super().__init__(parent) self._extruder_trains = { } #Per machine, a dictionary of extruder container stack IDs. self._active_extruder_index = 0 + self._selected_object_extruders = [] Application.getInstance().globalContainerStackChanged.connect(self.__globalContainerStackChanged) self._global_container_stack_definition_id = None self._addCurrentMachineExtruders() + Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) + ## Gets the unique identifier of the currently active extruder stack. # # The currently active extruder stack is the stack that is currently being @@ -117,6 +121,34 @@ class ExtruderManager(QObject): except IndexError: return "" + ## Emitted whenever the selectedObjectExtruders property changes. + selectedObjectExtrudersChanged = pyqtSignal() + + ## Provides a list of extruder IDs used by the current selected objects. + @pyqtProperty("QVariantList", notify = selectedObjectExtrudersChanged) + def selectedObjectExtruders(self) -> List[str]: + if not self._selected_object_extruders: + object_extruders = set() + for node in Selection.getAllSelectedObjects(): + extruder = node.callDecoration("getActiveExtruder") + if extruder: + object_extruders.add(extruder) + else: + global_stack = Application.getInstance().getGlobalContainerStack() + object_extruders.add(self._extruder_trains[global_stack.getId()]["0"].getId()) + + self._selected_object_extruders = list(object_extruders) + + return self._selected_object_extruders + + ## Reset the internal list used for the selectedObjectExtruders property + # + # This will trigger a recalculation of the extruders used for the + # selection. + def resetSelectedObjectExtruders(self) -> None: + self._selected_object_extruders = [] + self.selectedObjectExtrudersChanged.emit() + def getActiveExtruderStack(self) -> ContainerStack: global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -444,6 +476,8 @@ class ExtruderManager(QObject): self.globalContainerStackDefinitionChanged.emit() self.activeExtruderChanged.emit() + self.resetSelectedObjectExtruders() + ## Adds the extruders of the currently active machine. def _addCurrentMachineExtruders(self) -> None: global_stack = Application.getInstance().getGlobalContainerStack() diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index 76c155cb99..d754b6bc6d 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -109,6 +109,7 @@ class SettingOverrideDecorator(SceneNodeDecorator): def setActiveExtruder(self, extruder_stack_id): self._extruder_stack = extruder_stack_id self._updateNextStack() + ExtruderManager.getInstance().resetSelectedObjectExtruders() self.activeExtruderChanged.emit() def getStack(self): From e108bd062709ea96703b8794c0deae36e5f46875 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:40:50 +0200 Subject: [PATCH 423/816] Add extruder selection to Context menu Contributes to CURA-3609 --- resources/qml/Menus/ContextMenu.qml | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index be3713be6c..a4285f1621 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -13,11 +13,32 @@ Menu { id: base + property bool shouldShowExtruders: machineExtruderCount.properties.value > 1; + // Selection-related actions. MenuItem { action: Cura.Actions.centerSelection; } MenuItem { action: Cura.Actions.deleteSelection; } MenuItem { action: Cura.Actions.multiplySelection; } + // Extruder selection - only visible if there is more than 1 extruder + MenuSeparator { visible: base.shouldShowExtruders } + MenuItem { id: extruderHeader; text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount); enabled: false; visible: base.shouldShowExtruders } + Instantiator + { + model: Cura.ExtrudersModel { id: extrudersModel } + MenuItem { + text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant) + visible: base.shouldShowExtruders + enabled: UM.Selection.hasSelection + checkable: true + checked: ExtruderManager.selectedObjectExtruders.indexOf(model.id) != -1 + onTriggered: CuraActions.setSelectionExtruder(model.id) + shortcut: "Ctrl+" + (model.index + 1) + } + onObjectAdded: base.insertItem(base.findItemIndex(extruderHeader) + index, object) + onObjectRemoved: base.removeItem(object) + } + // Global actions MenuSeparator { } MenuItem { action: Cura.Actions.selectAll; } @@ -45,6 +66,15 @@ Menu onTriggered: multiplyDialog.open() } + UM.SettingPropertyProvider + { + id: machineExtruderCount + + containerStackId: Cura.MachineManager.activeMachineId + key: "machine_extruder_count" + watchedProperties: [ "value" ] + } + Dialog { id: multiplyDialog From 05e1de2fb39dd2c0bf2fe6c1946a5869e0deb65b Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:34:31 +0200 Subject: [PATCH 424/816] Deprecate the delete/multiply/center methods in CuraApplication Since they should no longer be used by the UI. Contributes to CURA-3609 --- cura/CuraApplication.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 65f1ae5631..e7a6ac07c1 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -26,6 +26,7 @@ from UM.Message import Message from UM.i18n import i18nCatalog from UM.Workspace.WorkspaceReader import WorkspaceReader from UM.Platform import Platform +from UM.Decorators import deprecated from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation @@ -807,6 +808,7 @@ class CuraApplication(QtApplication): # Remove all selected objects from the scene. @pyqtSlot() + @deprecated("Moved to CuraActions", "2.6") def deleteSelection(self): if not self.getController().getToolsEnabled(): return @@ -827,6 +829,7 @@ class CuraApplication(QtApplication): ## Remove an object from the scene. # Note that this only removes an object if it is selected. @pyqtSlot("quint64") + @deprecated("Use deleteSelection instead", "2.6") def deleteObject(self, object_id): if not self.getController().getToolsEnabled(): return @@ -854,6 +857,7 @@ class CuraApplication(QtApplication): # \param count number of copies # \param min_offset minimum offset to other objects. @pyqtSlot("quint64", int) + @deprecated("Use CuraActions::multiplySelection", "2.6") def multiplyObject(self, object_id, count, min_offset = 8): node = self.getController().getScene().findObject(object_id) if not node: @@ -868,6 +872,7 @@ class CuraApplication(QtApplication): ## Center object on platform. @pyqtSlot("quint64") + @deprecated("Use CuraActions::centerSelection", "2.6") def centerObject(self, object_id): node = self.getController().getScene().findObject(object_id) if not node and object_id != 0: # Workaround for tool handles overlapping the selected object From 3d5e535b6985ce77aa61fec476e0b545a6dd0f99 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 20 Apr 2017 17:53:05 +0200 Subject: [PATCH 425/816] Select the object underneath the cursor on context menu request Contributes to CURA-3609 --- cura/CuraApplication.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index e7a6ac07c1..0ab3c1c1cf 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -219,6 +219,7 @@ class CuraApplication(QtApplication): self.getController().getScene().sceneChanged.connect(self.updatePlatformActivity) self.getController().toolOperationStopped.connect(self._onToolOperationStopped) + self.getController().contextMenuRequested.connect(self._onContextMenuRequested) Resources.addType(self.ResourceTypes.QmlFiles, "qml") Resources.addType(self.ResourceTypes.Firmware, "firmware") @@ -1332,3 +1333,10 @@ class CuraApplication(QtApplication): except Exception as e: Logger.log("e", "Could not check file %s: %s", file_url, e) return False + + def _onContextMenuRequested(self, x, y): + # Ensure we select the object if we request a context menu over an object without having a selection. + if not Selection.hasSelection(): + node = self.getController().getScene().findObject(self.getRenderer().getRenderPass("selection").getIdAtPosition(x, y)) + if node: + Selection.add(node) From c75a2941be3142027d3929bcaaa178db3ca75457 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:07:25 +0200 Subject: [PATCH 426/816] Add files via upload --- .../cartesio_0.4_arnitel2045_high.inst.cfg | 63 +++++++++++++++++++ .../cartesio_0.4_arnitel2045_normal.inst.cfg | 63 +++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg create mode 100644 resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg new file mode 100644 index 0000000000..954d6fd5d2 --- /dev/null +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 2 +name = High Quality +definition = cartesio + +[metadata] +type = quality +quality_type = high +material = dsm_arnitel2045_cartesio_0.4_mm +weight = 1 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 2 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom +speed_equalize_flow_enabled = True +speed_equalize_flow_max = =speed_print + +acceleration_enabled = True +acceleration_print = 100 +acceleration_travel = 300 +jerk_print = 5 + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg new file mode 100644 index 0000000000..fdf4e354fc --- /dev/null +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 2 +name = Normal Quality +definition = cartesio + +[metadata] +type = quality +quality_type = normal +material = dsm_arnitel2045_cartesio_0.4_mm +weight = 2 + +[values] +infill_line_width = 0.5 + +wall_thickness = 1.2 +top_bottom_thickness = 0.8 +wall_0_inset = -0.05 +fill_perimeter_gaps = nowhere +travel_compensate_overlapping_walls_enabled = + +infill_sparse_density = 40 +infill_pattern = grid + +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +material_diameter = 1.75 +retraction_min_travel = =round(line_width * 10) +retraction_prime_speed = 2 +switch_extruder_retraction_amount = 2 +switch_extruder_retraction_speeds = =retraction_speed +switch_extruder_prime_speed = =retraction_prime_speed + +speed_print = 25 +speed_infill = =speed_print +speed_layer_0 = =round(speed_print / 5 * 4) +speed_wall = =round(speed_print / 2) +speed_wall_0 = =10 if speed_wall < 11 else (speed_print / 5 *3) +speed_topbottom = =round(speed_print / 5 * 4) +speed_slowdown_layers = 1 +speed_travel = =round(speed_print if magic_spiralize else 150) +speed_travel_layer_0 = =speed_travel +speed_support_interface = =speed_topbottom +speed_equalize_flow_enabled = True +speed_equalize_flow_max = =speed_print + +acceleration_enabled = True +acceleration_print = 100 +acceleration_travel = 300 +jerk_print = 5 + +retraction_hop_enabled = True +retraction_hop = 1 + +cool_min_layer_time_fan_speed_max = =cool_min_layer_time +cool_min_layer_time = 20 + +skirt_brim_minimal_length = 50 + +coasting_enable = True +coasting_volume = 0.1 +coasting_min_volume = 0.17 +coasting_speed = 90 From ea568308809266b345cea7afd2e5a5fced55c7ad Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:19:21 +0200 Subject: [PATCH 427/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 85dcdbcfd5..4605820f59 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -26,6 +26,7 @@ support_z_distance = 0 support_xy_distance = 0.5 support_join_distance = 10 support_interface_enable = True +support_interface_pattern = Lines adhesion_type = skirt skirt_gap = 0.5 From 633c4b87e4cdbb86fad4293982fcf824f071ddde Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:19:30 +0200 Subject: [PATCH 428/816] Update cartesio_global_High_Quality.inst.cfg --- resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index a486d6f2f5..35e376e605 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -26,6 +26,7 @@ support_z_distance = 0 support_xy_distance = 0.5 support_join_distance = 10 support_interface_enable = True +support_interface_pattern = Lines adhesion_type = skirt skirt_gap = 0.5 From c160e4c5d69ef96260429f6718b2481f10eda39b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:19:38 +0200 Subject: [PATCH 429/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index f06970c928..274b6b8c50 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -26,6 +26,7 @@ support_z_distance = 0 support_xy_distance = 0.5 support_join_distance = 10 support_interface_enable = True +support_interface_pattern = Lines adhesion_type = skirt skirt_gap = 0.5 From 17408a299f311848d408a045b520679a8ba56739 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:19:44 +0200 Subject: [PATCH 430/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 9be6ceadf0..000c92fe6c 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -26,6 +26,7 @@ support_z_distance = 0 support_xy_distance = 0.5 support_join_distance = 10 support_interface_enable = True +support_interface_pattern = Lines adhesion_type = skirt skirt_gap = 0.5 From 081505e9679e7f843a20857ae0ea22db925cb582 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:26:02 +0200 Subject: [PATCH 431/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 000c92fe6c..7235cde230 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -23,7 +23,7 @@ speed_slowdown_layers = 1 retraction_combing = off support_z_distance = 0 -support_xy_distance = 0.5 +support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True support_interface_pattern = Lines From c80b51ddc9f0c1d474d703dc5553e104f15fc81f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:26:28 +0200 Subject: [PATCH 432/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 4605820f59..010411e9ff 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -23,7 +23,7 @@ speed_slowdown_layers = 1 retraction_combing = off support_z_distance = 0 -support_xy_distance = 0.5 +support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True support_interface_pattern = Lines From 7e426f96fbaa639352ad2672b693bf49e23d9ad7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:26:39 +0200 Subject: [PATCH 433/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 274b6b8c50..b74acc5c0a 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -23,7 +23,7 @@ speed_slowdown_layers = 1 retraction_combing = off support_z_distance = 0 -support_xy_distance = 0.5 +support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True support_interface_pattern = Lines From 319690baa6181c8ecc12a29b8fe4bd8e6d5487a3 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:27:05 +0200 Subject: [PATCH 434/816] Update cartesio_global_High_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 35e376e605..1ff2dd96cc 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -23,9 +23,10 @@ speed_slowdown_layers = 1 retraction_combing = off support_z_distance = 0 -support_xy_distance = 0.5 +support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True +support_interface_height = 0.5 support_interface_pattern = Lines adhesion_type = skirt From d756ea50212f4aa6a016d981c7bdaeb336b351a1 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:33:21 +0200 Subject: [PATCH 435/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 010411e9ff..b01491b6fe 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -26,7 +26,7 @@ support_z_distance = 0 support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True -support_interface_pattern = Lines +support_interface_pattern = lines adhesion_type = skirt skirt_gap = 0.5 From 25ff28041fd98f519ec0a494b4211aa5d17c7a76 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:33:30 +0200 Subject: [PATCH 436/816] Update cartesio_global_High_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 1ff2dd96cc..dc995080d2 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -27,7 +27,7 @@ support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True support_interface_height = 0.5 -support_interface_pattern = Lines +support_interface_pattern = lines adhesion_type = skirt skirt_gap = 0.5 From 2b31aab28c3e50c1c3cb7b9d572fcea1142d288a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:33:38 +0200 Subject: [PATCH 437/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index b74acc5c0a..f0a17284bb 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -26,7 +26,7 @@ support_z_distance = 0 support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True -support_interface_pattern = Lines +support_interface_pattern = lines adhesion_type = skirt skirt_gap = 0.5 From d5190b7cf77934283ff036108fcbbac2b2167afb Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 10:33:45 +0200 Subject: [PATCH 438/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 7235cde230..3c43560cb4 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -26,7 +26,7 @@ support_z_distance = 0 support_xy_distance = 1 support_join_distance = 10 support_interface_enable = True -support_interface_pattern = Lines +support_interface_pattern = lines adhesion_type = skirt skirt_gap = 0.5 From 39ac11df59b589b3708592b76219abfb5fd2d050 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 11:30:09 +0200 Subject: [PATCH 439/816] Update cartesio_global_Extra_Coarse_Quality.inst.cfg --- .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index f0a17284bb..a6b9aae464 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -29,4 +29,4 @@ support_interface_enable = True support_interface_pattern = lines adhesion_type = skirt -skirt_gap = 0.5 +skirt_gap = 1 From d2a948fb5c93966ebe2b3e60fa6785318064c7a9 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 11:30:15 +0200 Subject: [PATCH 440/816] Update cartesio_global_Coarse_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 3c43560cb4..4ed6a3a28b 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -29,4 +29,4 @@ support_interface_enable = True support_interface_pattern = lines adhesion_type = skirt -skirt_gap = 0.5 +skirt_gap = 1 From ad4c6962020bb00f1915e33b207b1a19db2b6dfd Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 11:30:39 +0200 Subject: [PATCH 441/816] Update cartesio_global_Normal_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index b01491b6fe..56c7db0f4a 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -29,4 +29,4 @@ support_interface_enable = True support_interface_pattern = lines adhesion_type = skirt -skirt_gap = 0.5 +skirt_gap = 1 From 36eb3579a9ae77dd9c9dcbb8b82da21cf3b1e467 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Fri, 21 Apr 2017 11:30:49 +0200 Subject: [PATCH 442/816] Update cartesio_global_High_Quality.inst.cfg --- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index dc995080d2..17638b0e9b 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -30,4 +30,4 @@ support_interface_height = 0.5 support_interface_pattern = lines adhesion_type = skirt -skirt_gap = 0.5 +skirt_gap = 1 From 2fda85a6aab614005a488ba019dc33a4ae86f26b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 21 Apr 2017 14:29:40 +0200 Subject: [PATCH 443/816] Hide estimated time left if print is aborted or completed In fact, only show it if a time estimate is meaningful. We keep showing the estimate while a print is paused though. Contributes to issue TRI-1550. --- resources/qml/PrintMonitor.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 1b500d5b20..eacdc17883 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -649,6 +649,7 @@ Column sourceComponent: monitorItem property string label: catalog.i18nc("@label", "Estimated time left") property string value: connectedPrinter != null ? getPrettyTime(connectedPrinter.timeTotal - connectedPrinter.timeElapsed) : "" + visible: connectedPrinter != null && (connectedPrinter.jobState == "printing" || connectedPrinter.jobState == "resuming" || connectedPrinter.jobState == "pausing" || connectedPrinter.jobState == "paused") } Component From ba229444b77c4da08aa6a2a65b3a502edfd35f20 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 21 Apr 2017 21:05:28 +0200 Subject: [PATCH 444/816] Pause autoslicing while the MachineSettingsAction is open Each setting-change would cause a reslice, which is unnecessary. --- .../MachineSettingsAction/MachineSettingsAction.py | 11 +++++++++++ .../MachineSettingsAction/MachineSettingsAction.qml | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 6e37ae9ae0..0bdf0006ed 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -34,6 +34,8 @@ class MachineSettingsAction(MachineAction): Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) + self._backend = Application.getInstance().getBackend() + def _reset(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if not global_container_stack: @@ -50,6 +52,15 @@ class MachineSettingsAction(MachineAction): self._container_index = container_index self.containerIndexChanged.emit() + # Disable autoslicing while the machineaction is showing + self._backend.disableTimer() + + @pyqtSlot() + def onFinishAction(self): + # Restore autoslicing when the machineaction is dismissed + if self._backend.determineAutoSlicing(): + self._backend.tickle() + def _onActiveExtruderStackChanged(self): global_container_stack = Application.getInstance().getGlobalContainerStack() extruder_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 314265e1c1..626f62dbd9 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -32,6 +32,18 @@ Cura.MachineAction onTriggered: base.extruderTabsCount = (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 } + Connections + { + target: dialog ? dialog : null + ignoreUnknownSignals: true + // Any which way this action dialog is dismissed, make sure it is properly finished + onNextClicked: manager.onFinishAction() + onBackClicked: manager.onFinishAction() + onAccepted: manager.onFinishAction() + onRejected: manager.onFinishAction() + onClosing: manager.onFinishAction() + } + anchors.fill: parent; Item { From 656e7a804680a297a4676a127919b2b6f236c3bc Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 21 Apr 2017 21:27:15 +0200 Subject: [PATCH 445/816] Change the scope of the head polygon functions to be inside the main tab --- .../MachineSettingsAction.qml | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 626f62dbd9..c63391f624 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -494,6 +494,36 @@ Cura.MachineAction } } } + + function getHeadPolygonCoord(axis, minMax) + { + var polygon = JSON.parse(machineHeadPolygonProvider.properties.value); + var item = (axis == "x") ? 0 : 1 + var result = polygon[0][item]; + for(var i = 1; i < polygon.length; i++) { + if (minMax == "min") { + result = Math.min(result, polygon[i][item]); + } else { + result = Math.max(result, polygon[i][item]); + } + } + return Math.abs(result); + } + + function setHeadPolygon() + { + var polygon = []; + polygon.push([-parseFloat(printheadXMinField.text), parseFloat(printheadYMaxField.text)]); + polygon.push([-parseFloat(printheadXMinField.text),-parseFloat(printheadYMinField.text)]); + polygon.push([ parseFloat(printheadXMaxField.text), parseFloat(printheadYMaxField.text)]); + polygon.push([ parseFloat(printheadXMaxField.text),-parseFloat(printheadYMinField.text)]); + var polygon_string = JSON.stringify(polygon); + if(polygon != machineHeadPolygonProvider.properties.value) + { + machineHeadPolygonProvider.setPropertyValue("value", polygon_string); + manager.forceUpdate(); + } + } } } @@ -635,36 +665,6 @@ Cura.MachineAction } } - function getHeadPolygonCoord(axis, minMax) - { - var polygon = JSON.parse(machineHeadPolygonProvider.properties.value); - var item = (axis == "x") ? 0 : 1 - var result = polygon[0][item]; - for(var i = 1; i < polygon.length; i++) { - if (minMax == "min") { - result = Math.min(result, polygon[i][item]); - } else { - result = Math.max(result, polygon[i][item]); - } - } - return Math.abs(result); - } - - function setHeadPolygon() - { - var polygon = []; - polygon.push([-parseFloat(printheadXMinField.text), parseFloat(printheadYMaxField.text)]); - polygon.push([-parseFloat(printheadXMinField.text),-parseFloat(printheadYMinField.text)]); - polygon.push([ parseFloat(printheadXMaxField.text), parseFloat(printheadYMaxField.text)]); - polygon.push([ parseFloat(printheadXMaxField.text),-parseFloat(printheadYMinField.text)]); - var polygon_string = JSON.stringify(polygon); - if(polygon != machineHeadPolygonProvider.properties.value) - { - machineHeadPolygonProvider.setPropertyValue("value", polygon_string); - manager.forceUpdate(); - } - } - Component { id: numericTextFieldWithUnit From 0966ef5338ccdb6fd9c9916090bb8e893312509c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 21 Apr 2017 21:48:20 +0200 Subject: [PATCH 446/816] Fix QML warnings when switching to an extruder tab --- .../MachineSettingsAction.qml | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index c63391f624..c02971d8dd 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -450,6 +450,7 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "Start Gcode") + font.bold: true } TextArea { @@ -457,7 +458,6 @@ Cura.MachineAction width: parent.width height: parent.height - y font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap text: machineStartGcodeProvider.properties.value onActiveFocusChanged: { @@ -466,6 +466,10 @@ Cura.MachineAction machineStartGcodeProvider.setPropertyValue("value", machineStartGcodeField.text) } } + Component.onCompleted: + { + wrapMode = TextEdit.NoWrap; + } } } @@ -475,6 +479,7 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "End Gcode") + font.bold: true } TextArea { @@ -482,7 +487,6 @@ Cura.MachineAction width: parent.width height: parent.height - y font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap text: machineEndGcodeProvider.properties.value onActiveFocusChanged: { @@ -491,6 +495,10 @@ Cura.MachineAction machineEndGcodeProvider.setPropertyValue("value", machineEndGcodeField.text) } } + Component.onCompleted: + { + wrapMode = TextEdit.NoWrap; + } } } } @@ -552,7 +560,7 @@ Cura.MachineAction Label { - text: catalog.i18nc("@label", "Printer Settings") + text: catalog.i18nc("@label", "Nozzle Settings") font.bold: true } @@ -616,6 +624,7 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "Extruder Start Gcode") + font.bold: true } TextArea { @@ -623,8 +632,7 @@ Cura.MachineAction width: parent.width height: parent.height - y font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap - text: extruderStartGcodeProvider.properties.value + text: (extruderStartGcodeProvider.properties.value) ? extruderStartGcodeProvider.properties.value : "" onActiveFocusChanged: { if(!activeFocus) @@ -632,6 +640,10 @@ Cura.MachineAction extruderStartGcodeProvider.setPropertyValue("value", extruderStartGcodeField.text) } } + Component.onCompleted: + { + wrapMode = TextEdit.NoWrap; + } } } Column { @@ -640,6 +652,7 @@ Cura.MachineAction Label { text: catalog.i18nc("@label", "Extruder End Gcode") + font.bold: true } TextArea { @@ -647,8 +660,7 @@ Cura.MachineAction width: parent.width height: parent.height - y font: UM.Theme.getFont("fixed") - wrapMode: TextEdit.NoWrap - text: extruderEndGcodeProvider.properties.value + text: (extruderEndGcodeProvider.properties.value) ? extruderEndGcodeProvider.properties.value : "" onActiveFocusChanged: { if(!activeFocus) @@ -656,6 +668,10 @@ Cura.MachineAction extruderEndGcodeProvider.setPropertyValue("value", extruderEndGcodeField.text) } } + Component.onCompleted: + { + wrapMode = TextEdit.NoWrap; + } } } } @@ -674,7 +690,7 @@ Cura.MachineAction TextField { id: textField - text: propertyProvider.properties.value + text: (propertyProvider.properties.value) ? propertyProvider.properties.value : "" validator: RegExpValidator { regExp: /[0-9\.]{0,6}/ } onEditingFinished: { From 933ee408e457c727d47f92ad01f14a51c1223471 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 22 Apr 2017 09:47:00 +0200 Subject: [PATCH 447/816] Code style --- .../MachineSettingsAction.py | 73 ++++++++++--------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 0bdf0006ed..4c66773d05 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -26,6 +26,7 @@ class MachineSettingsAction(MachineAction): super().__init__("MachineSettingsAction", catalog.i18nc("@action", "Machine Settings")) self._qml_url = "MachineSettingsAction.qml" + self._global_container_stack = None self._container_index = 0 self._extruder_container_index = 0 @@ -37,17 +38,16 @@ class MachineSettingsAction(MachineAction): self._backend = Application.getInstance().getBackend() def _reset(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() - if not global_container_stack: + if not self._global_container_stack: return # Make sure there is a definition_changes container to store the machine settings - definition_changes_container = global_container_stack.findContainer({"type": "definition_changes"}) + definition_changes_container = self._global_container_stack.findContainer({"type": "definition_changes"}) if not definition_changes_container: - definition_changes_container = self._createDefinitionChangesContainer(global_container_stack, global_container_stack.getName() + "_settings") + definition_changes_container = self._createDefinitionChangesContainer(self._global_container_stack, self._global_container_stack.getName() + "_settings") # Notify the UI in which container to store the machine settings data - container_index = global_container_stack.getContainerIndex(definition_changes_container) + container_index = self._global_container_stack.getContainerIndex(definition_changes_container) if container_index != self._container_index: self._container_index = container_index self.containerIndexChanged.emit() @@ -62,9 +62,8 @@ class MachineSettingsAction(MachineAction): self._backend.tickle() def _onActiveExtruderStackChanged(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() extruder_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() - if not global_container_stack or not extruder_container_stack: + if not self._global_container_stack or not extruder_container_stack: return # Make sure there is a definition_changes container to store the machine settings @@ -109,18 +108,19 @@ class MachineSettingsAction(MachineAction): Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) def _onGlobalContainerChanged(self): - # This stub is needed because we cannot connect a UM.Signal directly to a pyqtSignal + self._global_container_stack = Application.getInstance().getGlobalContainerStack() + + # This additional emit is needed because we cannot connect a UM.Signal directly to a pyqtSignal self.globalContainerChanged.emit() globalContainerChanged = pyqtSignal() @pyqtProperty(int, notify = globalContainerChanged) def definedExtruderCount(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() - if not global_container_stack: + if not self._global_container_stack: return 0 - return len(global_container_stack.getMetaDataEntry("machine_extruder_trains")) + return len(self._global_container_stack.getMetaDataEntry("machine_extruder_trains")) @pyqtSlot() def forceUpdate(self): @@ -131,34 +131,35 @@ class MachineSettingsAction(MachineAction): @pyqtSlot() def updateHasMaterialsMetadata(self): # Updates the has_materials metadata flag after switching gcode flavor - global_container_stack = Application.getInstance().getGlobalContainerStack() - if global_container_stack: - definition = global_container_stack.getBottom() - if definition.getProperty("machine_gcode_flavor", "value") == "UltiGCode" and not definition.getMetaDataEntry("has_materials", False): - has_materials = global_container_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode" + if not self._global_container_stack: + return - material_container = global_container_stack.findContainer({"type": "material"}) - material_index = global_container_stack.getContainerIndex(material_container) + definition = self._global_container_stack.getBottom() + if definition.getProperty("machine_gcode_flavor", "value") == "UltiGCode" and not definition.getMetaDataEntry("has_materials", False): + has_materials = self._global_container_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode" - if has_materials: - if "has_materials" in global_container_stack.getMetaData(): - global_container_stack.setMetaDataEntry("has_materials", True) - else: - global_container_stack.addMetaDataEntry("has_materials", True) + material_container = self._global_container_stack.findContainer({"type": "material"}) + material_index = self._global_container_stack.getContainerIndex(material_container) - # Set the material container to a sane default - if material_container.getId() == "empty_material": - search_criteria = { "type": "material", "definition": "fdmprinter", "id": "*pla*" } - containers = self._container_registry.findInstanceContainers(**search_criteria) - if containers: - global_container_stack.replaceContainer(material_index, containers[0]) + if has_materials: + if "has_materials" in self._global_container_stack.getMetaData(): + self._global_container_stack.setMetaDataEntry("has_materials", True) else: - # The metadata entry is stored in an ini, and ini files are parsed as strings only. - # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. - if "has_materials" in global_container_stack.getMetaData(): - global_container_stack.removeMetaDataEntry("has_materials") + self._global_container_stack.addMetaDataEntry("has_materials", True) - empty_material = self._container_registry.findInstanceContainers(id = "empty_material")[0] - global_container_stack.replaceContainer(material_index, empty_material) + # Set the material container to a sane default + if material_container.getId() == "empty_material": + search_criteria = { "type": "material", "definition": "fdmprinter", "id": "*pla*" } + containers = self._container_registry.findInstanceContainers(**search_criteria) + if containers: + self._global_container_stack.replaceContainer(material_index, containers[0]) + else: + # The metadata entry is stored in an ini, and ini files are parsed as strings only. + # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. + if "has_materials" in self._global_container_stack.getMetaData(): + self._global_container_stack.removeMetaDataEntry("has_materials") - Application.getInstance().globalContainerStackChanged.emit() + empty_material = self._container_registry.findInstanceContainers(id = "empty_material")[0] + self._global_container_stack.replaceContainer(material_index, empty_material) + + Application.getInstance().globalContainerStackChanged.emit() From 8d42f9c187875a517d1520fe4c457e4c11397321 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 22 Apr 2017 10:13:58 +0200 Subject: [PATCH 448/816] Move some convoluted logic from QML into Python --- .../MachineSettingsAction.py | 34 ++++++++++++++++ .../MachineSettingsAction.qml | 39 +------------------ 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 4c66773d05..e8aec896c1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -122,6 +122,40 @@ class MachineSettingsAction(MachineAction): return len(self._global_container_stack.getMetaDataEntry("machine_extruder_trains")) + @pyqtSlot(int) + def setMachineExtruderCount(self, extruder_count): + machine_manager = Application.getInstance().getMachineManager() + extruder_manager = ExtruderManager.getInstance() + + definition_changes_container = self._global_container_stack.findContainer({"type": "definition_changes"}) + if not self._global_container_stack or not definition_changes_container: + return + + if extruder_count == self._global_container_stack.getProperty("machine_extruder_count", "value"): + return + + extruder_material = None + if extruder_count == 1 and machine_manager.hasMaterials: + extruder_material = machine_manager.allActiveMaterialIds[machine_manager.activeStackId] + + definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) + self.forceUpdate() + + if extruder_count > 1: + # multiextrusion; make sure one of these extruder stacks is active + if extruder_manager.activeExtruderIndex == -1: + extruder_manager.setActiveExtruderIndex(0) + else: + # single extrusion; make sure the machine stack is active + if extruder_manager.activeExtruderIndex > -1: + extruder_manager.setActiveExtruderIndex(-1); + + if extruder_material: + # restore material on global stack + # MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines + machine_manager.setActiveMaterial(extruder_material); + + @pyqtSlot() def forceUpdate(self): # Force rebuilding the build volume by reloading the global container stack. diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index c02971d8dd..abe05d5654 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -377,48 +377,11 @@ Cura.MachineAction currentIndex: machineExtruderCountProvider.properties.value - 1 onActivated: { - if(machineExtruderCountProvider.properties.value == index + 1) - { - return; - } - - var extruder_material; - if(index == 0 && Cura.MachineManager.hasMaterials) - { - // setting back to single extrusion - extruder_material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeStackId]; - } - - machineExtruderCountProvider.setPropertyValue("value", index + 1); - manager.forceUpdate(); + manager.setMachineExtruderCount(index + 1); base.extruderTabsCount = (index > 0) ? index + 1 : 0; - - if(index > 0) - { - // multiextrusion; make sure one of these extruder stacks is active - if(ExtruderManager.activeExtruderIndex == -1) - { - ExtruderManager.setActiveExtruderIndex(0); - } - } - else - { - // single extrusion; make sure the machine stack is active - if(ExtruderManager.activeExtruderIndex != -1) - { - ExtruderManager.setActiveExtruderIndex(-1); - } - if(extruder_material) - { - // restore material on global stack - // MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines - Cura.MachineManager.setActiveMaterial(extruder_material); - } - } } } - Label { text: catalog.i18nc("@label", "Nozzle size") From 2ca24ba7e6094b6304a07545d8f672c3c98bb588 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 22 Apr 2017 11:20:55 +0200 Subject: [PATCH 449/816] Restore both material and variant to match 1st extruder when switching to single extrusion --- cura/Settings/MachineManager.py | 11 ++++++++++ .../MachineSettingsAction.py | 21 ++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 493f8fcf07..8deaca3b5e 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -505,6 +505,17 @@ class MachineManager(QObject): return result + @pyqtProperty("QVariantList", notify = activeVariantChanged) + def activeMaterialIds(self): + result = [] + if ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() is not None: + for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): + variant_container = stack.findContainer({"type": "variant"}) + if variant_container and variant_container != self._empty_variant_container: + result.append(variant_container.getId()) + + return result + @pyqtProperty("QVariantList", notify = activeMaterialChanged) def activeMaterialNames(self): result = [] diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index e8aec896c1..17e4362f2c 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -134,9 +134,14 @@ class MachineSettingsAction(MachineAction): if extruder_count == self._global_container_stack.getProperty("machine_extruder_count", "value"): return - extruder_material = None - if extruder_count == 1 and machine_manager.hasMaterials: - extruder_material = machine_manager.allActiveMaterialIds[machine_manager.activeStackId] + extruder_material_id = None + extruder_variant_id = None + if extruder_count == 1: + # Get the material and variant of the first extruder before setting the number extruders to 1 + if machine_manager.hasMaterials: + extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]] + if machine_manager.hasVariants: + extruder_variant_id = machine_manager.activeVariantIds[0] definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) self.forceUpdate() @@ -150,10 +155,12 @@ class MachineSettingsAction(MachineAction): if extruder_manager.activeExtruderIndex > -1: extruder_manager.setActiveExtruderIndex(-1); - if extruder_material: - # restore material on global stack - # MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines - machine_manager.setActiveMaterial(extruder_material); + # Restore material and variant on global stack + # MachineManager._onGlobalContainerChanged removes the global material and vaiant of multiextruder machines + if extruder_material_id: + machine_manager.setActiveMaterial(extruder_material_id); + if extruder_variant_id: + machine_manager.setActiveVariant(extruder_variant_id); @pyqtSlot() From d2d36b8c98f167c98ab33342a3343845973730ea Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 22 Apr 2017 12:13:23 +0200 Subject: [PATCH 450/816] Lower extruder_nr settings when they exceed the number of extruders --- .../MachineSettingsAction.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 17e4362f2c..7f5dabe8d1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -10,6 +10,7 @@ from UM.Application import Application from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Logger import Logger from cura.Settings.CuraContainerRegistry import CuraContainerRegistry @@ -143,6 +144,21 @@ class MachineSettingsAction(MachineAction): if machine_manager.hasVariants: extruder_variant_id = machine_manager.activeVariantIds[0] + # Check to see if any features are set to print with an extruder that will no longer exist + for setting_name in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: + if int(self._global_container_stack.getProperty(setting_name, "value")) > extruder_count -1: + Logger.log("i", "Lowering %s setting to match number of extruders", setting_name) + self._global_container_stack.getTop().setProperty(setting_name, "value", extruder_count -1) + + # Check to see if any objects are set to print with an extruder that will no longer exist + root_node = Application.getInstance().getController().getScene().getRoot() + for node in DepthFirstIterator(root_node): + if node.getMeshData(): + extruder_nr = node.callDecoration("getActiveExtruderPosition") + + if extruder_nr is not None and extruder_nr > extruder_count - 1: + node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count -1).getId()) + definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) self.forceUpdate() From c1fa92711817b3956f5ef9aa225c60e231bbd0ae Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 22 Apr 2017 23:07:13 +0200 Subject: [PATCH 451/816] Make the general settings page options draggable only in the vertical direction ... to match other scrollviews. Fixes #1723 --- resources/qml/Preferences/GeneralPage.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index bb397baf08..214e5aea8f 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -95,6 +95,8 @@ UM.PreferencesPage width: parent.width height: parent.height + flickableItem.flickableDirection: Flickable.VerticalFlick; + Column { //: Model used to check if a plugin exists From dff23b0e824e9f1dce07dad349d5707220450ccd Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 24 Apr 2017 11:06:34 +0200 Subject: [PATCH 452/816] Update cartesio_0.8.inst.cfg --- resources/variants/cartesio_0.8.inst.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index d84a45e615..0f6fda119a 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -10,3 +10,5 @@ type = variant [values] machine_nozzle_size = 0.8 machine_nozzle_tip_outer_diameter = 1.05 + +prime_tower_line_width = 0.69 From fab0fa1dde9a6cb073fc3ceed305f23864c61d03 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Apr 2017 12:58:20 +0200 Subject: [PATCH 453/816] Move setting values that are settable per extruder from/to global stack when setting extruder count --- .../MachineSettingsAction.py | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 7f5dabe8d1..f2194e356b 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -132,7 +132,8 @@ class MachineSettingsAction(MachineAction): if not self._global_container_stack or not definition_changes_container: return - if extruder_count == self._global_container_stack.getProperty("machine_extruder_count", "value"): + previous_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") + if extruder_count == previous_extruder_count: return extruder_material_id = None @@ -144,11 +145,29 @@ class MachineSettingsAction(MachineAction): if machine_manager.hasVariants: extruder_variant_id = machine_manager.activeVariantIds[0] + # Copy any settable_per_extruder setting value from the extruders to the global stack + extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + extruder_stacks.reverse() # make sure the first extruder is done last, so its settings override any higher extruder settings + + global_user_container = self._global_container_stack.getTop() + for extruder_stack in extruder_stacks: + extruder_index = extruder_stack.getMetaDataEntry("position") + extruder_user_container = extruder_stack.getTop() + for setting_instance in extruder_user_container.findInstances(): + setting_key = setting_instance.definition.key + settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") + if settable_per_extruder: + limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") + + if limit_to_extruder == "-1" or limit_to_extruder == extruder_index: + global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value")) + extruder_user_container.removeInstance(setting_key) + # Check to see if any features are set to print with an extruder that will no longer exist - for setting_name in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: - if int(self._global_container_stack.getProperty(setting_name, "value")) > extruder_count -1: - Logger.log("i", "Lowering %s setting to match number of extruders", setting_name) - self._global_container_stack.getTop().setProperty(setting_name, "value", extruder_count -1) + for setting_key in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: + if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count -1: + Logger.log("i", "Lowering %s setting to match number of extruders", setting_key) + self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count -1) # Check to see if any objects are set to print with an extruder that will no longer exist root_node = Application.getInstance().getController().getScene().getRoot() @@ -163,11 +182,29 @@ class MachineSettingsAction(MachineAction): self.forceUpdate() if extruder_count > 1: - # multiextrusion; make sure one of these extruder stacks is active + # Multiextrusion + + # Make sure one of the extruder stacks is active if extruder_manager.activeExtruderIndex == -1: extruder_manager.setActiveExtruderIndex(0) + + # Move settable_per_extruder values out of the global container + if previous_extruder_count == 1: + extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + global_user_container = self._global_container_stack.getTop() + + for setting_instance in global_user_container.findInstances(): + setting_key = setting_instance.definition.key + settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") + if settable_per_extruder: + limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder")) + extruder_stack = extruder_stacks[max(0, limit_to_extruder)] + extruder_stack.getTop().setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value")) + global_user_container.removeInstance(setting_key) else: - # single extrusion; make sure the machine stack is active + # Single extrusion + + # Make sure the machine stack is active if extruder_manager.activeExtruderIndex > -1: extruder_manager.setActiveExtruderIndex(-1); From 2297a6e80ba9345b1a6426ffc7bcae8f92e61cf2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 24 Apr 2017 13:05:39 +0200 Subject: [PATCH 454/816] Fixed inhertiance manager crashing if there is no parent --- cura/Settings/SettingInheritanceManager.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 2f81526813..49cf5c7c83 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -109,8 +109,11 @@ class SettingInheritanceManager(QObject): self._settings_with_inheritance_warning.remove(key) settings_with_inheritance_warning_changed = True - # Find the topmost parent (Assumed to be a category) parent = definitions[0].parent + if parent is None: + return + + # Find the topmost parent (Assumed to be a category) while parent.parent is not None: parent = parent.parent From fb0df3109c4d050cf623a4551cb7b6ac467cb46f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 24 Apr 2017 13:10:33 +0200 Subject: [PATCH 455/816] Fixed inhertiance manager getting update from a Category setting --- cura/Settings/SettingInheritanceManager.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 49cf5c7c83..ff0d1d81c0 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -110,12 +110,12 @@ class SettingInheritanceManager(QObject): settings_with_inheritance_warning_changed = True parent = definitions[0].parent - if parent is None: - return - # Find the topmost parent (Assumed to be a category) - while parent.parent is not None: - parent = parent.parent + if parent is not None: + while parent.parent is not None: + parent = parent.parent + else: + parent = definitions[0] # Already at a category if parent.key not in self._settings_with_inheritance_warning and has_overwritten_inheritance: # Category was not in the list yet, so needs to be added now. From 49bdb78219a4f1655c07f45c4acd87d8eb938f7a Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:11:04 +0200 Subject: [PATCH 456/816] Use cura. for imports instead of relative imports` Matches the style of the rest of the file. --- cura/CuraActions.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 0a1657e512..6c2aea5de1 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -13,9 +13,8 @@ from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Operations.SetTransformOperation import SetTransformOperation -from .SetParentOperation import SetParentOperation -from .MultiplyObjectsJob import MultiplyObjectsJob - +from cura.SetParentOperation import SetParentOperation +from cura.MultiplyObjectsJob import MultiplyObjectsJob from cura.Settings.SetObjectExtruderOperation import SetObjectExtruderOperation class CuraActions(QObject): From 3e9fdb5db1e68928da676e5752f7b7421fe5ef3f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Apr 2017 13:11:10 +0200 Subject: [PATCH 457/816] Prevent the DiscardOrKeepProfileChangesDialog from popping up (twice) if there are user changes --- .../MachineSettingsAction.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index f2194e356b..33854302a9 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -7,6 +7,7 @@ from UM.FlameProfiler import pyqtSlot from cura.MachineAction import MachineAction from UM.Application import Application +from UM.Preferences import Preferences from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.DefinitionContainer import DefinitionContainer @@ -209,11 +210,20 @@ class MachineSettingsAction(MachineAction): extruder_manager.setActiveExtruderIndex(-1); # Restore material and variant on global stack - # MachineManager._onGlobalContainerChanged removes the global material and vaiant of multiextruder machines - if extruder_material_id: - machine_manager.setActiveMaterial(extruder_material_id); - if extruder_variant_id: - machine_manager.setActiveVariant(extruder_variant_id); + # MachineManager._onGlobalContainerChanged removes the global material and variant of multiextruder machines + if extruder_material_id or extruder_variant_id: + # Prevent the DiscardOrKeepProfileChangesDialog from popping up (twice) if there are user changes + # The dialog is not relevant here, since we're restoring the previous situation as good as possible + preferences = Preferences.getInstance() + choice_on_profile_override = preferences.getValue("cura/choice_on_profile_override") + preferences.setValue("cura/choice_on_profile_override", "always_keep") + + if extruder_material_id: + machine_manager.setActiveMaterial(extruder_material_id); + if extruder_variant_id: + machine_manager.setActiveVariant(extruder_variant_id); + + preferences.setValue("cura/choice_on_profile_override", choice_on_profile_override) @pyqtSlot() From e571b8aeac6349131b9c9b8420b44de5a975e693 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:11:16 +0200 Subject: [PATCH 458/816] Remove superfluous return statement --- cura/CuraActions.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 6c2aea5de1..79c7679120 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -54,7 +54,6 @@ class CuraActions(QObject): def multiplySelection(self, count: int) -> None: job = MultiplyObjectsJob(Selection.getAllSelectedObjects(), count, 8) job.start() - return ## Delete all selected objects. @pyqtSlot() From 78603bed635354b0907cf397dcd3e787e58161c8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:12:00 +0200 Subject: [PATCH 459/816] Rename setSelectionExtruder to setExtruderForSelection This matches more closely with the naming of the other selection actions. --- cura/CuraActions.py | 5 ++++- resources/qml/Menus/ContextMenu.qml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 79c7679120..5c89232639 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -75,8 +75,11 @@ class CuraActions(QObject): op.addOperation(RemoveSceneNodeOperation(group_node)) op.push() + ## Set the extruder that should be used to print the selection. + # + # \param extruder_id The ID of the extruder stack to use for the selected objects. @pyqtSlot(str) - def setSelectionExtruder(self, extruder_id: str) -> None: + def setExtruderForSelection(self, extruder_id: str) -> None: operation = GroupedOperation() for node in Selection.getAllSelectedObjects(): if node.callDecoration("getActiveExtruder") == extruder_id: diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index a4285f1621..14395aba6c 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -32,7 +32,7 @@ Menu enabled: UM.Selection.hasSelection checkable: true checked: ExtruderManager.selectedObjectExtruders.indexOf(model.id) != -1 - onTriggered: CuraActions.setSelectionExtruder(model.id) + onTriggered: CuraActions.setExtruderForSelection(model.id) shortcut: "Ctrl+" + (model.index + 1) } onObjectAdded: base.insertItem(base.findItemIndex(extruderHeader) + index, object) From 8c4ec804e7c09dfbd78ea10ca2680fff7e6c7a87 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:12:21 +0200 Subject: [PATCH 460/816] Add type hinting to _onContextMenuRequested --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 0ab3c1c1cf..5f71495f77 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1334,7 +1334,7 @@ class CuraApplication(QtApplication): Logger.log("e", "Could not check file %s: %s", file_url, e) return False - def _onContextMenuRequested(self, x, y): + def _onContextMenuRequested(self, x: float, y: float) -> None: # Ensure we select the object if we request a context menu over an object without having a selection. if not Selection.hasSelection(): node = self.getController().getScene().findObject(self.getRenderer().getRenderPass("selection").getIdAtPosition(x, y)) From 27256cae9e8c65689688aade431368194dcc6c86 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:12:36 +0200 Subject: [PATCH 461/816] Revert import change --- cura/Settings/ExtrudersModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 26e425c116..62b1f0af2c 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -6,7 +6,7 @@ from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, pyqtSlot import UM.Qt.ListModel from UM.Application import Application -from .ExtruderManager import ExtruderManager +from cura.Settings.ExtruderManager import ExtruderManager ## Model that holds extruders. # From bca27ad11fc34fbd2872d14da3dfc942d9052fec Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 13:13:00 +0200 Subject: [PATCH 462/816] Document findItemIndex function in ContextMenu --- resources/qml/Menus/ContextMenu.qml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index 14395aba6c..43867a4cc1 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -114,12 +114,22 @@ Menu } } + // Find the index of an item in the list of child items of this menu. + // + // This is primarily intended as a helper function so we do not have to + // hard-code the position of the extruder selection actions. + // + // \param item The item to find the index of. + // + // \return The index of the item or -1 if it was not found. function findItemIndex(item) { for(var i in base.items) { if(base.items[i] == item) + { return i; + } } return -1; } From 8b5ac81404186321493d659d88458a487e010f92 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Apr 2017 13:20:20 +0200 Subject: [PATCH 463/816] Fix extruder_stack global values are moved to ExtruderManager.getMachineExtruders() result is not sorted, the result of getActiveExtruderStacks() is --- plugins/MachineSettingsAction/MachineSettingsAction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 33854302a9..f25d454dac 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -147,7 +147,7 @@ class MachineSettingsAction(MachineAction): extruder_variant_id = machine_manager.activeVariantIds[0] # Copy any settable_per_extruder setting value from the extruders to the global stack - extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() extruder_stacks.reverse() # make sure the first extruder is done last, so its settings override any higher extruder settings global_user_container = self._global_container_stack.getTop() @@ -191,7 +191,7 @@ class MachineSettingsAction(MachineAction): # Move settable_per_extruder values out of the global container if previous_extruder_count == 1: - extruder_stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() global_user_container = self._global_container_stack.getTop() for setting_instance in global_user_container.findInstances(): From 57f936e5fffb54b14df5415137b519ee14fb4e8a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 24 Apr 2017 13:56:37 +0200 Subject: [PATCH 464/816] Remove definition_changes containers when a stack is removed --- .../MachineSettingsAction.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index f25d454dac..995a07eac4 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -34,11 +34,26 @@ class MachineSettingsAction(MachineAction): self._container_registry = ContainerRegistry.getInstance() self._container_registry.containerAdded.connect(self._onContainerAdded) + self._container_registry.containerRemoved.connect(self._onContainerRemoved) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) self._backend = Application.getInstance().getBackend() + def _onContainerAdded(self, container): + # Add this action as a supported action to all machine definitions + if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine": + Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) + + def _onContainerRemoved(self, container): + # Remove definition_changes containers when a stack is removed + if container.getMetaDataEntry("type") in ["machine", "extruder_train"]: + definition_changes_container = container.findContainer({"type": "definition_changes"}) + if not definition_changes_container: + return + + self._container_registry.removeContainer(definition_changes_container.getId()) + def _reset(self): if not self._global_container_stack: return @@ -104,11 +119,6 @@ class MachineSettingsAction(MachineAction): return self._extruder_container_index - def _onContainerAdded(self, container): - # Add this action as a supported action to all machine definitions - if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine": - Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) - def _onGlobalContainerChanged(self): self._global_container_stack = Application.getInstance().getGlobalContainerStack() From 765ddefd7f0a9eeac6725063aa8b6aaa34f1b96a Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 24 Apr 2017 16:09:00 +0200 Subject: [PATCH 465/816] Reverse lookup TypeIndexMap is now also a dict. CURA-3497 --- cura/Settings/CuraContainerStack.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) mode change 100644 => 100755 cura/Settings/CuraContainerStack.py diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py old mode 100644 new mode 100755 index 2b8a1ebf6d..c78247bafc --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -9,7 +9,6 @@ from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from UM.Decorators import override from UM.Logger import Logger -from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.DefinitionContainer import DefinitionContainer @@ -280,7 +279,7 @@ class CuraContainerStack(ContainerStack): # \param new_value The new value to set the property to. # \param target_container The type of the container to set the property of. Defaults to "user". def setProperty(self, key: str, property_name: str, new_value: Any, target_container: str = "user") -> None: - container_index = _ContainerIndexes.indexForType(target_container) + container_index = _ContainerIndexes.TypeIndexMap.get(target_container, -1) if container_index != -1: self._containers[container_index].setProperty(key, property_name, new_value) else: @@ -605,12 +604,5 @@ class _ContainerIndexes: Definition: "definition", } - # Perform reverse lookup (type name -> index) - @classmethod - def indexForType(cls, type_name: str) -> int: - for key, value in cls.IndexTypeMap.items(): - if value == type_name: - return key - - return -1 - + # Reverse lookup: type -> index + TypeIndexMap = dict([(v, k) for k, v in IndexTypeMap.items()]) From b4c557679cdbc95b8ed9ee7ea357245328cb8ab0 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 17:08:19 +0200 Subject: [PATCH 466/816] Change the selected extruder for all child nodes of a group Instead of setting the extruder for the group node, go through all children and set their extruders instead. Fixes extruder selection on groups. Contributes to CURA-3609 --- cura/CuraActions.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 5c89232639..64db7c9372 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -9,6 +9,7 @@ from UM.Event import CallFunctionEvent from UM.Application import Application from UM.Math.Vector import Vector from UM.Scene.Selection import Selection +from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Operations.SetTransformOperation import SetTransformOperation @@ -81,9 +82,31 @@ class CuraActions(QObject): @pyqtSlot(str) def setExtruderForSelection(self, extruder_id: str) -> None: operation = GroupedOperation() + + nodes_to_change = [] for node in Selection.getAllSelectedObjects(): + # Do not change any nodes that already have the right extruder set. if node.callDecoration("getActiveExtruder") == extruder_id: continue + + # If the node is a group, apply the active extruder to all children of the group. + if node.callDecoration("isGroup"): + for grouped_node in BreadthFirstIterator(node): + if grouped_node.callDecoration("getActiveExtruder") == extruder_id: + continue + + if grouped_node.callDecoration("isGroup"): + continue + + nodes_to_change.append(grouped_node) + continue + + nodes_to_change.append(node) + + if not nodes_to_change: + return + + for node in nodes_to_change: operation.addOperation(SetObjectExtruderOperation(node, extruder_id)) operation.push() From 86d3cbadca3e0254aee754f7dcbf1e32c29b02a9 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 17:09:18 +0200 Subject: [PATCH 467/816] Also search through groups when figuring out the extruders of the selection Contributes to CURA-3609 --- cura/Settings/ExtruderManager.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 75fa1ece3a..43d580001f 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -9,6 +9,7 @@ from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection +from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Settings.ContainerRegistry import ContainerRegistry #Finding containers by ID. from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction @@ -129,7 +130,21 @@ class ExtruderManager(QObject): def selectedObjectExtruders(self) -> List[str]: if not self._selected_object_extruders: object_extruders = set() + + # First, build a list of the actual selected objects (including children of groups, excluding group nodes) + selected_nodes = [] for node in Selection.getAllSelectedObjects(): + if node.callDecoration("isGroup"): + for grouped_node in BreadthFirstIterator(node): + if grouped_node.callDecoration("isGroup"): + continue + + selected_nodes.append(grouped_node) + else: + selected_nodes.append(node) + + # Then, figure out which nodes are used by those selected nodes. + for node in selected_nodes: extruder = node.callDecoration("getActiveExtruder") if extruder: object_extruders.add(extruder) From 89310cb41e669ff3adad1600e443a90f1a71b97f Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 17:10:00 +0200 Subject: [PATCH 468/816] Select the group when right clicking an object that is part of a group Instead of selecting the individual object. Contributes to CURA-3609 --- cura/CuraApplication.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 5f71495f77..5786c82147 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1339,4 +1339,7 @@ class CuraApplication(QtApplication): if not Selection.hasSelection(): node = self.getController().getScene().findObject(self.getRenderer().getRenderPass("selection").getIdAtPosition(x, y)) if node: + while(node.getParent() and node.getParent().callDecoration("isGroup")): + node = node.getParent() + Selection.add(node) From ada614e413dbaaa9b40bd60ca58c2c0ebd59bb12 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Mon, 24 Apr 2017 17:11:37 +0200 Subject: [PATCH 469/816] Workaround a tiny display issue with checkable MenuItems If there are no changes to make, we still need to reset the selected extruders. This is a workaround for checked menu items being deselected while they actually should still be selected. Contributes to CURA-3609 --- cura/CuraActions.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 64db7c9372..eeebd3b6b2 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -17,6 +17,7 @@ from UM.Operations.SetTransformOperation import SetTransformOperation from cura.SetParentOperation import SetParentOperation from cura.MultiplyObjectsJob import MultiplyObjectsJob from cura.Settings.SetObjectExtruderOperation import SetObjectExtruderOperation +from cura.Settings.ExtruderManager import ExtruderManager class CuraActions(QObject): def __init__(self, parent = None): @@ -104,6 +105,10 @@ class CuraActions(QObject): nodes_to_change.append(node) if not nodes_to_change: + # If there are no changes to make, we still need to reset the selected extruders. + # This is a workaround for checked menu items being deselected while still being + # selected. + ExtruderManager.getInstance().resetSelectedObjectExtruders() return for node in nodes_to_change: From c91bc015e45491f5b00d6af5361f1975bb0657a6 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 25 Apr 2017 08:43:44 +0200 Subject: [PATCH 470/816] Removed unused variables. CURA-3497 --- cura/Settings/CuraContainerStack.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index c78247bafc..babf760b35 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -431,7 +431,6 @@ class CuraContainerStack(ContainerStack): # Machine does not use materials, never try to set it. return None - material = None search_criteria = {"type": "material"} if definition.getMetaDataEntry("has_machine_materials"): search_criteria["definition"] = self._findInstanceContainerDefinitionId(definition) @@ -475,7 +474,6 @@ class CuraContainerStack(ContainerStack): registry = ContainerRegistry.getInstance() material_container = self.material if self.material != self._empty_instance_container else None - quality = None search_criteria = {"type": "quality"} if definition.getMetaDataEntry("has_machine_quality"): From 163929196d84ac3d41c67bcc639c2a246c67a9f7 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 25 Apr 2017 08:50:22 +0200 Subject: [PATCH 471/816] Removed commented out code. CURA-3497 --- cura/Settings/ExtruderManager.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 19d27e0b53..b0cbee7915 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -512,18 +512,6 @@ class ExtruderManager(QObject): @staticmethod def getResolveOrValue(key): global_stack = Application.getInstance().getGlobalContainerStack() - resolved_value = global_stack.getProperty(key, "value") - #if resolved_value is not None: - #user_container = global_stack.findContainer({"type": "user"}) - #quality_changes_container = global_stack.findContainer({"type": "quality_changes"}) - #if user_container.hasProperty(key, "value") or quality_changes_container.hasProperty(key, "value"): - ## Normal case - #value = global_stack.getProperty(key, "value") - #else: - ## We have a resolved value and we're using it because of no user and quality_changes value - #value = resolved_value - #else: - #value = global_stack.getRawProperty(key, "value") return resolved_value From ed23e6f5b2171d62321636912e10f084f91846c6 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 25 Apr 2017 08:56:28 +0200 Subject: [PATCH 472/816] Removed more commented out code. CURA-3497 --- cura/Settings/MachineManager.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 83f8fe9f0f..7c884ae134 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -47,10 +47,6 @@ class MachineManager(QObject): self.globalContainerChanged.connect(self.activeQualityChanged) self._stacks_have_errors = None - #self._empty_variant_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_variant")[0] - #self._empty_material_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_material")[0] - #self._empty_quality_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality")[0] - #self._empty_quality_changes_container = ContainerRegistry.getInstance().findInstanceContainers(id="empty_quality_changes")[0] self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() From 74059a82a5c5035f1523c768cbf8ac1e1cd4738f Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 25 Apr 2017 11:18:55 +0200 Subject: [PATCH 473/816] Added some smoketests. CURA-3297 --- tests/Settings/TestCuraContainerRegistry.py | 2 +- tests/Settings/TestGlobalStack.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) mode change 100644 => 100755 tests/Settings/TestCuraContainerRegistry.py mode change 100644 => 100755 tests/Settings/TestGlobalStack.py diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py old mode 100644 new mode 100755 index 31348753f4..f6c1eeb9a5 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -75,4 +75,4 @@ def test_loadLegacyFileRenamed(container_registry): assert not os.path.isfile(temp_file) new_filename = os.path.splitext(os.path.splitext(temp_file)[0])[0] + ".global.cfg" - assert os.path.isfile(new_filename) \ No newline at end of file + assert os.path.isfile(new_filename) diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py old mode 100644 new mode 100755 index c8f4d5dfaf..539de4929e --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -544,3 +544,15 @@ def test_setVariantByIdExists(global_stack, container_registry): def test_setVariantByIdDoesntExist(global_stack): with pytest.raises(InvalidContainerError): global_stack.setVariantById("some_variant") #Container registry is empty now. + +## Smoke test for findDefaultVariant +def test_smoke_findDefaultVariant(global_stack): + global_stack.findDefaultVariant() + +## Smoke test for findDefaultMaterial +def test_smoke_findDefaultMaterial(global_stack): + global_stack.findDefaultMaterial() + +## Smoke test for findDefaultQuality +def test_smoke_findDefaultQuality(global_stack): + global_stack.findDefaultQuality() From 8a227c02695aaa9f74067aa18f35b645799c2de9 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 25 Apr 2017 11:19:37 +0200 Subject: [PATCH 474/816] Revert permissions --- tests/Settings/TestCuraContainerRegistry.py | 0 tests/Settings/TestGlobalStack.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 tests/Settings/TestCuraContainerRegistry.py mode change 100755 => 100644 tests/Settings/TestGlobalStack.py diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py old mode 100755 new mode 100644 diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py old mode 100755 new mode 100644 From 09f23f5f91070fd7d24673b98bcaec12f4817ef7 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 11:31:59 +0200 Subject: [PATCH 475/816] Styling fixes in Toolbar QML --- resources/qml/Toolbar.qml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index 60fc6fd723..6363aa4e42 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -8,26 +8,30 @@ import QtQuick.Layouts 1.1 import UM 1.0 as UM -Item { +Item +{ id: base; width: buttons.width; height: buttons.height property int activeY - ColumnLayout { + Column + { id: buttons; anchors.bottom: parent.bottom; anchors.left: parent.left; spacing: UM.Theme.getSize("button_lining").width - Repeater { + Repeater + { id: repeat model: UM.ToolModel { } - Button { + Button + { text: model.name iconSource: UM.Theme.getIcon(model.icon); @@ -45,9 +49,11 @@ Item { } //Workaround since using ToolButton"s onClicked would break the binding of the checked property, instead //just catch the click so we do not trigger that behaviour. - MouseArea { + MouseArea + { anchors.fill: parent; - onClicked: { + onClicked: + { forceActiveFocus() //First grab focus, so all the text fields are updated if(parent.checked) { @@ -63,7 +69,8 @@ Item { } } - UM.PointingRectangle { + UM.PointingRectangle + { id: panelBorder; anchors.left: parent.right; @@ -75,7 +82,8 @@ Item { target: Qt.point(parent.right, base.activeY + UM.Theme.getSize("button").height/2) arrowSize: UM.Theme.getSize("default_arrow").width - width: { + width: + { if (panel.item && panel.width > 0){ return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width) } @@ -90,7 +98,8 @@ Item { color: UM.Theme.getColor("lining"); - UM.PointingRectangle { + UM.PointingRectangle + { id: panelBackground; color: UM.Theme.getColor("tool_panel_background"); @@ -105,7 +114,8 @@ Item { } } - Loader { + Loader + { id: panel x: UM.Theme.getSize("default_margin").width; @@ -116,6 +126,8 @@ Item { } } + // This rectangle displays the information about the current angle etc. when + // dragging a tool handle. Rectangle { x: -base.x + base.mouseX + UM.Theme.getSize("default_margin").width From 268a9c9bac001de91016a1ec30e4dd537733300d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 21 Apr 2017 12:38:44 +0200 Subject: [PATCH 476/816] Add priming_enabled option into fdm_printer CURA-3634 --- resources/definitions/fdmprinter.def.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ca05191185..5e9e692851 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3290,6 +3290,16 @@ "description": "Adhesion", "children": { + "prime_enable": + { + "label": "Enable Prime", + "description": "Whether to prime the filament before printing.", + "type": "bool", + "resolve": "any(extruderValues('prime_enable'))", + "default_value": true, + "settable_per_mesh": false, + "settable_per_extruder": true + }, "extruder_prime_pos_x": { "label": "Extruder Prime X Position", From c85f63512500e47c0888ec5bc02bfc33cf826d37 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 16:09:51 +0200 Subject: [PATCH 477/816] Add support for overriding the background color of a Tool button Contributes to CURA-3577 --- resources/themes/cura/styles.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index a7c7dcb6cd..625ca4996c 100644 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -206,7 +206,10 @@ QtObject { property bool down: control.pressed || (control.checkable && control.checked); color: { - if(control.checkable && control.checked && control.hovered) { + if(control.customColor !== undefined && control.customColor !== null) { + return control.customColor + } + else if(control.checkable && control.checked && control.hovered) { return Theme.getColor("button_active_hover"); } else if(control.pressed || (control.checkable && control.checked)) { return Theme.getColor("button_active"); From 48baf272b4caaaf6c99dcec1302a341a77629fca Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 16:10:44 +0200 Subject: [PATCH 478/816] Fix the extruder icons to have a proper square aspect ratio Contributes to CURA-3577 --- .../cura/icons/material_not_selected.svg | 90 +++++++++++++++--- .../themes/cura/icons/material_selected.svg | 91 ++++++++++++++++--- 2 files changed, 153 insertions(+), 28 deletions(-) diff --git a/resources/themes/cura/icons/material_not_selected.svg b/resources/themes/cura/icons/material_not_selected.svg index 2d4fb7cfd3..9b3cad88bd 100644 --- a/resources/themes/cura/icons/material_not_selected.svg +++ b/resources/themes/cura/icons/material_not_selected.svg @@ -1,15 +1,77 @@ - - - - Artboard 3 - Created with Sketch. - - - - - - - - + + + + + + image/svg+xml + + Artboard 3 + + + + + + Artboard 3 + Created with Sketch. + + + + + + + - \ No newline at end of file + + diff --git a/resources/themes/cura/icons/material_selected.svg b/resources/themes/cura/icons/material_selected.svg index 87ffdf55da..6589eac416 100644 --- a/resources/themes/cura/icons/material_selected.svg +++ b/resources/themes/cura/icons/material_selected.svg @@ -1,15 +1,78 @@ - - - - Artboard 3 Copy - Created with Sketch. - - - - - - - - + + + + + + image/svg+xml + + Artboard 3 Copy + + + + + + Artboard 3 Copy + Created with Sketch. + + + + + + + - \ No newline at end of file + + From 89e6313143589500a6f9cd77475ee79de0f2d845 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 16:11:31 +0200 Subject: [PATCH 479/816] Add buttons to select the extruder for the selection to the toolbar Contributes to CURA-3577 --- resources/qml/ExtruderButton.qml | 86 ++++++++++++++++++++++++++++++++ resources/qml/Toolbar.qml | 22 +++++++- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 resources/qml/ExtruderButton.qml diff --git a/resources/qml/ExtruderButton.qml b/resources/qml/ExtruderButton.qml new file mode 100644 index 0000000000..8a088890a9 --- /dev/null +++ b/resources/qml/ExtruderButton.qml @@ -0,0 +1,86 @@ +// Copyright (c) 2017 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Button +{ + id: base + + property var extruder; + + text: catalog.i18ncp("@label", "Print Selected Model with %1", "Print Selected Models With %1", UM.Selection.selectionCount).arg(extruder.name) + + style: UM.Theme.styles.tool_button; + iconSource: checked ? UM.Theme.getIcon("material_selected") : UM.Theme.getIcon("material_not_selected"); + + checkable: true; + checked: ExtruderManager.selectedObjectExtruders.indexOf(extruder.id) != -1 + enabled: UM.Selection.hasSelection + + property color customColor: base.hovered ? UM.Theme.getColor("button_hover") : UM.Theme.getColor("button"); + + Rectangle + { + anchors.fill: parent + anchors.margins: UM.Theme.getSize("default_lining").width; + + color: "transparent" + + border.width: base.checked ? UM.Theme.getSize("default_lining").width : 0; + border.color: UM.Theme.getColor("button_text") + } + + Item + { + anchors + { + right: parent.right; + top: parent.top; + margins: UM.Theme.getSize("default_lining").width * 3 + } + width: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("default_margin").height + + Text + { + anchors.centerIn: parent; + text: index + 1; + color: parent.enabled ? UM.Theme.getColor("button_text") : UM.Theme.getColor("button_disabled_text") + font: UM.Theme.getFont("default_bold"); + } + } + + Rectangle + { + anchors + { + left: parent.left; + top: parent.top; + margins: UM.Theme.getSize("default_lining").width * 3 + } + + color: model.color + + width: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("default_margin").height + + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining"); + } + + // See line 51, same workaround + MouseArea + { + anchors.fill: parent; + onClicked: + { + forceActiveFocus() //First grab focus, so all the text fields are updated + CuraActions.setExtruderForSelection(extruder.id); + } + } +} diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index 6363aa4e42..0f930d532b 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -6,7 +6,8 @@ import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 -import UM 1.0 as UM +import UM 1.2 as UM +import Cura 1.0 as Cura Item { @@ -67,6 +68,14 @@ Item } } } + + Item { height: UM.Theme.getSize("default_margin").height; width: 1; visible: machineExtruderCount.properties.value > 1 } + + Repeater + { + model: Cura.ExtrudersModel { id: extrudersModel } + ExtruderButton { extruder: model } + } } UM.PointingRectangle @@ -147,4 +156,15 @@ Item visible: toolHint.text != ""; } + + UM.SettingPropertyProvider + { + id: machineExtruderCount + + containerStackId: Cura.MachineManager.activeMachineId + key: "machine_extruder_count" + watchedProperties: [ "value" ] + } + + UM.I18nCatalog { id: catalog; name: "cura" } } From 78221738817dbc5b19873cbc1156cf157317f8cf Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 16:12:03 +0200 Subject: [PATCH 480/816] Remove extruder selection from per-object settings tool Contributes to CURA-3577 --- .../PerObjectSettingsPanel.qml | 123 ------------------ 1 file changed, 123 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index cb65da635b..c3c7249155 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -26,129 +26,6 @@ Item { spacing: UM.Theme.getSize("default_margin").height - Row - { - spacing: UM.Theme.getSize("default_margin").width - Label - { - text: catalog.i18nc("@label Followed by extruder selection drop-down.", "Print model with") - anchors.verticalCenter: extruderSelector.verticalCenter - - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - visible: extruderSelector.visible - } - ComboBox - { - id: extruderSelector - - model: Cura.ExtrudersModel - { - id: extrudersModel - onModelChanged: extruderSelector.color = extrudersModel.getItem(extruderSelector.currentIndex).color - } - property string color: extrudersModel.getItem(extruderSelector.currentIndex).color - visible: machineExtruderCount.properties.value > 1 - textRole: "name" - width: UM.Theme.getSize("setting_control").width - height: UM.Theme.getSize("section").height - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.NoButton - onWheel: wheel.accepted = true; - } - - style: ComboBoxStyle - { - background: Rectangle - { - color: - { - if(extruderSelector.hovered || base.activeFocus) - { - return UM.Theme.getColor("setting_control_highlight"); - } - else - { - return UM.Theme.getColor("setting_control"); - } - } - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("setting_control_border") - } - label: Item - { - Rectangle - { - id: swatch - height: UM.Theme.getSize("setting_control").height / 2 - width: height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width - anchors.verticalCenter: parent.verticalCenter - - color: extruderSelector.color - border.width: UM.Theme.getSize("default_lining").width - border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : UM.Theme.getColor("setting_control_border") - } - Label - { - anchors.left: swatch.right - anchors.leftMargin: UM.Theme.getSize("default_lining").width - anchors.right: downArrow.left - anchors.rightMargin: UM.Theme.getSize("default_lining").width - anchors.verticalCenter: parent.verticalCenter - - text: extruderSelector.currentText - font: UM.Theme.getFont("default") - color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") - - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - UM.RecolorImage - { - id: downArrow - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 - anchors.verticalCenter: parent.verticalCenter - - source: UM.Theme.getIcon("arrow_bottom") - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width + 5 - sourceSize.height: width + 5 - - color: UM.Theme.getColor("setting_control_text") - } - } - } - - onActivated: - { - UM.ActiveTool.setProperty("SelectedActiveExtruder", extrudersModel.getItem(index).id); - extruderSelector.color = extrudersModel.getItem(index).color; - } - onModelChanged: updateCurrentIndex(); - - function updateCurrentIndex() - { - for(var i = 0; i < extrudersModel.rowCount(); ++i) - { - if(extrudersModel.getItem(i).id == UM.ActiveTool.properties.getValue("SelectedActiveExtruder")) - { - extruderSelector.currentIndex = i; - extruderSelector.color = extrudersModel.getItem(i).color; - return; - } - } - extruderSelector.currentIndex = -1; - } - } - } - Column { // This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar. From 0fad973181209d2f8680cf434de21d465d40f0fd Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 25 Apr 2017 16:12:36 +0200 Subject: [PATCH 481/816] Never enable the per-object tool when in simple mode Contributes to CURA-3577 --- plugins/PerObjectSettingsTool/PerObjectSettingsTool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index 865401804c..b2d14942ba 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -112,4 +112,4 @@ class PerObjectSettingsTool(Tool): self._single_model_selected = False # Group is selected, so tool needs to be disabled else: self._single_model_selected = True - Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, (self._advanced_mode or self._multi_extrusion) and self._single_model_selected) \ No newline at end of file + Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode and self._single_model_selected) From 0b9f451103cd26abbd05c6e9c509f6755c4e16b9 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 25 Apr 2017 18:15:04 +0200 Subject: [PATCH 482/816] Apply color to layerview legend labels directly The Label style property should not be confused with e TextField style property --- plugins/LayerView/LayerView.qml | 8 ++++---- resources/themes/cura/styles.qml | 7 ------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 0453e3468e..5652637c99 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -58,7 +58,7 @@ Item anchors.left: parent.left text: catalog.i18nc("@label","View Mode: Layers") font.bold: true - style: UM.Theme.styles.text + color: UM.Theme.getColor("text") } Label @@ -76,7 +76,7 @@ Item text: catalog.i18nc("@label","Color scheme") visible: !UM.LayerView.compatibilityMode Layout.fillWidth: true - style: UM.Theme.styles.text + color: UM.Theme.getColor("text") } ListModel // matches LayerView.py @@ -307,7 +307,7 @@ Item Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width visible: view_settings.show_legend - style: UM.Theme.styles.text + color: UM.Theme.getColor("text") } Label @@ -330,7 +330,7 @@ Item Layout.preferredHeight: UM.Theme.getSize("layerview_row").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width visible: view_settings.show_legend - style: UM.Theme.styles.text + color: UM.Theme.getColor("text") } } diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 51e6501d29..a7c7dcb6cd 100755 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -632,13 +632,6 @@ QtObject { } } - property Component text: Component { - TextFieldStyle { - textColor: Theme.getColor("text"); - font: Theme.getFont("default"); - } - } - property Component sidebar_action_button: Component { ButtonStyle { From 49880d54adde69176d503100f0d6dfc55c328a9e Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 25 Apr 2017 18:45:43 +0200 Subject: [PATCH 483/816] Remove code repetition while touching up layout --- plugins/LayerView/LayerView.qml | 210 +++++++++++++------------------- 1 file changed, 83 insertions(+), 127 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 5652637c99..8a78e751b5 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -175,100 +175,67 @@ Item visible: !UM.LayerView.compatibilityMode enabled: index + 1 <= 4 Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width style: UM.Theme.styles.checkbox } } - CheckBox { - checked: view_settings.show_travel_moves - onClicked: { - UM.Preferences.setValue("layerview/show_travel_moves", checked); + Repeater { + model: ListModel { + id: typesLegenModel + Component.onCompleted: + { + typesLegenModel.append({ + label: catalog.i18nc("@label", "Show Travels"), + initialValue: view_settings.show_travel_moves, + preference: "layerview/show_travel_moves", + colorId: "layerview_move_combing" + }); + typesLegenModel.append({ + label: catalog.i18nc("@label", "Show Helpers"), + initialValue: view_settings.show_helpers, + preference: "layerview/show_helpers", + colorId: "layerview_support" + }); + typesLegenModel.append({ + label: catalog.i18nc("@label", "Show Shell"), + initialValue: view_settings.show_skin, + preference: "layerview/show_skin", + colorId: "layerview_inset_0" + }); + typesLegenModel.append({ + label: catalog.i18nc("@label", "Show Infill"), + initialValue: view_settings.show_infill, + preference: "layerview/show_infill", + colorId: "layerview_infill" + }); + } } - text: catalog.i18nc("@label", "Show Travels") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_move_combing") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend + + CheckBox { + checked: model.initialValue + onClicked: { + UM.Preferences.setValue(model.preference, checked); + } + text: label + Rectangle { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + color: UM.Theme.getColor(model.colorId) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + visible: view_settings.show_legend + } + Layout.fillWidth: true + Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + style: UM.Theme.styles.checkbox } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - } - CheckBox { - checked: view_settings.show_helpers - onClicked: { - UM.Preferences.setValue("layerview/show_helpers", checked); - } - text: catalog.i18nc("@label", "Show Helpers") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_support") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - } - CheckBox { - checked: view_settings.show_skin - onClicked: { - UM.Preferences.setValue("layerview/show_skin", checked); - } - text: catalog.i18nc("@label", "Show Shell") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_inset_0") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - } - CheckBox { - checked: view_settings.show_infill - onClicked: { - UM.Preferences.setValue("layerview/show_infill", checked); - } - text: catalog.i18nc("@label", "Show Infill") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_infill") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox } + CheckBox { checked: view_settings.only_show_top_layers onClicked: { @@ -288,51 +255,40 @@ Item style: UM.Theme.styles.checkbox } - Label - { - id: topBottomLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Top / Bottom") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_skin") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") + Repeater { + model: ListModel { + id: typesLegenModelNoCheck + Component.onCompleted: + { + typesLegenModelNoCheck.append({ + label: catalog.i18nc("@label", "Top / Bottom"), + colorId: "layerview_skin" + }); + typesLegenModelNoCheck.append({ + label: catalog.i18nc("@label", "Inner Wall"), + colorId: "layerview_inset_x" + }); + } } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - visible: view_settings.show_legend - color: UM.Theme.getColor("text") - } - Label - { - id: innerWallLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Inner Wall") - Rectangle { - anchors.top: parent.top - anchors.topMargin: 2 - anchors.right: parent.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor("layerview_inset_x") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend + Label { + text: label + Rectangle { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + color: UM.Theme.getColor(model.colorId) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + visible: view_settings.show_legend + } + Layout.fillWidth: true + Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + Layout.preferredWidth: UM.Theme.getSize("layerview_row").width + color: UM.Theme.getColor("text") } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - visible: view_settings.show_legend - color: UM.Theme.getColor("text") } - } Item From 9371b28cb3096edc48c20ee8009ac701045be111 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 25 Apr 2017 18:55:25 +0200 Subject: [PATCH 484/816] Add color swatch for "by material" view style and show proper extruder names --- plugins/LayerView/LayerView.qml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 8a78e751b5..3078b278df 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -7,6 +7,7 @@ import QtQuick.Layouts 1.1 import QtQuick.Controls.Styles 1.1 import UM 1.0 as UM +import Cura 1.0 as Cura Item { @@ -164,16 +165,26 @@ Item } Repeater { - model: UM.LayerView.extruderCount + model: Cura.ExtrudersModel{} CheckBox { checked: view_settings.extruder_opacities[index] > 0.5 || view_settings.extruder_opacities[index] == undefined || view_settings.extruder_opacities[index] == "" onClicked: { view_settings.extruder_opacities[index] = checked ? 1.0 : 0.0 UM.Preferences.setValue("layerview/extruder_opacities", view_settings.extruder_opacities.join("|")); } - text: catalog.i18nc("@label", "Extruder %1").arg(index + 1) + text: model.name visible: !UM.LayerView.compatibilityMode enabled: index + 1 <= 4 + Rectangle { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + color: model.color + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + visible: !view_settings.show_legend + } Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height Layout.preferredWidth: UM.Theme.getSize("layerview_row").width From f573802e8db0ef16afae527cd307cd4931d7bae5 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 26 Apr 2017 13:01:14 +0200 Subject: [PATCH 485/816] Fix to make the extruders line up below the label CURA-3609 --- resources/qml/Menus/ContextMenu.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index 43867a4cc1..d5a30a7875 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -35,12 +35,12 @@ Menu onTriggered: CuraActions.setExtruderForSelection(model.id) shortcut: "Ctrl+" + (model.index + 1) } - onObjectAdded: base.insertItem(base.findItemIndex(extruderHeader) + index, object) + onObjectAdded: base.insertItem( index, object) onObjectRemoved: base.removeItem(object) } // Global actions - MenuSeparator { } + MenuSeparator {} MenuItem { action: Cura.Actions.selectAll; } MenuItem { action: Cura.Actions.arrangeAll; } MenuItem { action: Cura.Actions.deleteAll; } @@ -49,7 +49,7 @@ Menu MenuItem { action: Cura.Actions.resetAll; } // Group actions - MenuSeparator { } + MenuSeparator {} MenuItem { action: Cura.Actions.groupObjects; } MenuItem { action: Cura.Actions.mergeObjects; } MenuItem { action: Cura.Actions.unGroupObjects; } From d0a95426cb797503aa347d4aa43c5a2bbfbae156 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 26 Apr 2017 13:19:01 +0200 Subject: [PATCH 486/816] Remove space.. --- resources/qml/Menus/ContextMenu.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index d5a30a7875..8d1a6dc02c 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -35,7 +35,7 @@ Menu onTriggered: CuraActions.setExtruderForSelection(model.id) shortcut: "Ctrl+" + (model.index + 1) } - onObjectAdded: base.insertItem( index, object) + onObjectAdded: base.insertItem(index, object) onObjectRemoved: base.removeItem(object) } From b4f27f0af7c1fd640638e77f773a84b4a9781f47 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 26 Apr 2017 16:17:54 +0200 Subject: [PATCH 487/816] Remove checkable property and MouseArea in favor of onClicked on the button It turns out, setting checkable: true causes binding breakage. Without checkable, checked still works and we can use onClicked of the button directly. --- resources/qml/ExtruderButton.qml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/resources/qml/ExtruderButton.qml b/resources/qml/ExtruderButton.qml index 8a088890a9..ba503dba2b 100644 --- a/resources/qml/ExtruderButton.qml +++ b/resources/qml/ExtruderButton.qml @@ -18,7 +18,6 @@ Button style: UM.Theme.styles.tool_button; iconSource: checked ? UM.Theme.getIcon("material_selected") : UM.Theme.getIcon("material_not_selected"); - checkable: true; checked: ExtruderManager.selectedObjectExtruders.indexOf(extruder.id) != -1 enabled: UM.Selection.hasSelection @@ -73,14 +72,9 @@ Button border.color: UM.Theme.getColor("lining"); } - // See line 51, same workaround - MouseArea + onClicked: { - anchors.fill: parent; - onClicked: - { - forceActiveFocus() //First grab focus, so all the text fields are updated - CuraActions.setExtruderForSelection(extruder.id); - } + forceActiveFocus() //First grab focus, so all the text fields are updated + CuraActions.setExtruderForSelection(extruder.id); } } From 80bf6988caed91b082a644084929a775fe412eee Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 26 Apr 2017 16:18:14 +0200 Subject: [PATCH 488/816] Remove unnecessary Catalog and SettingPropertyProvider --- resources/qml/Toolbar.qml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index 0f930d532b..5100a0dacb 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -69,10 +69,11 @@ Item } } - Item { height: UM.Theme.getSize("default_margin").height; width: 1; visible: machineExtruderCount.properties.value > 1 } + Item { height: UM.Theme.getSize("default_margin").height; width: 1; visible: extruders.count > 0 } Repeater { + id: extruders model: Cura.ExtrudersModel { id: extrudersModel } ExtruderButton { extruder: model } } @@ -156,15 +157,4 @@ Item visible: toolHint.text != ""; } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - } - - UM.I18nCatalog { id: catalog; name: "cura" } } From 60339eb44bced2362277623c749faad84999a6c8 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 26 Apr 2017 16:18:23 +0200 Subject: [PATCH 489/816] Minor codestyle fix --- resources/themes/cura/styles.qml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 625ca4996c..899ea3cf79 100644 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -208,8 +208,7 @@ QtObject { color: { if(control.customColor !== undefined && control.customColor !== null) { return control.customColor - } - else if(control.checkable && control.checked && control.hovered) { + } else if(control.checkable && control.checked && control.hovered) { return Theme.getColor("button_active_hover"); } else if(control.pressed || (control.checkable && control.checked)) { return Theme.getColor("button_active"); From 02b978272f2b76aba61ebde5a5ecc31978675bbb Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 27 Apr 2017 11:19:46 +0200 Subject: [PATCH 490/816] Add "Create" button to create a new, unique material. The new custom material is still based on generic_pla, but it gets a new GUID and uses itself as base_file so it is not conjoined to another material. --- cura/Settings/ContainerManager.py | 28 +++++++++++++++++++++ resources/qml/Preferences/MaterialsPage.qml | 17 +++++++++++++ 2 files changed, 45 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index bac11f78cf..912129e822 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -3,6 +3,7 @@ import os.path import urllib +import uuid from typing import Dict, Union from PyQt5.QtCore import QObject, QUrl, QVariant @@ -694,6 +695,33 @@ class ContainerManager(QObject): duplicated_container.setDirty(True) self._container_registry.addContainer(duplicated_container) + @pyqtSlot(result = str) + def createMaterial(self) -> str: + # Ensure all settings are saved. + Application.getInstance().saveSettings() + + containers = self._container_registry.findInstanceContainers(id="generic_pla") + if not containers: + Logger.log("d", "Unable to creata a new material by cloning generic_pla, because it doesn't exist.") + return "" + + # Create a new ID & container to hold the data. + new_id = self._container_registry.uniqueName("custom_material") + container_type = type(containers[0]) # Could be either a XMLMaterialProfile or a InstanceContainer + duplicated_container = container_type(new_id) + + # Instead of duplicating we load the data from the basefile again. + # This ensures that the inheritance goes well and all "cut up" subclasses of the xmlMaterial profile + # are also correctly created. + with open(containers[0].getPath(), encoding="utf-8") as f: + duplicated_container.deserialize(f.read()) + + duplicated_container.setMetaDataEntry("base_file", new_id) + duplicated_container.setMetaDataEntry("GUID", str(uuid.uuid4())) + duplicated_container.setName(catalog.i18nc("@label", "Custom Material")) + + self._container_registry.addContainer(duplicated_container) + ## Get the singleton instance for this class. @classmethod def getInstance(cls) -> "ContainerManager": diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 08cb6d4d13..7d7b647969 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -135,6 +135,23 @@ UM.ManagementPage } }, Button + { + text: catalog.i18nc("@action:button", "Create") + iconName: "list-add" + onClicked: + { + var material_id = Cura.ContainerManager.createMaterial() + if(material_id == "") + { + return + } + if(Cura.MachineManager.hasMaterials) + { + Cura.MachineManager.setActiveMaterial(material_id) + } + } + }, + Button { text: catalog.i18nc("@action:button", "Duplicate"); iconName: "list-add"; From 58a857403ce68ace7ccc3537a712b736d8b5f384 Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Thu, 27 Apr 2017 16:37:01 +0600 Subject: [PATCH 491/816] Added resetting of theme --- resources/qml/Preferences/GeneralPage.qml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 0cba617456..b135b31419 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -25,6 +25,17 @@ UM.PreferencesPage } } + function setDefaultTheme(defaultThemeCode) + { + for(var i = 0; i < themeList.count; i++) + { + if (themeComboBox.model.get(i).code == defaultThemeCode) + { + themeComboBox.currentIndex = i + } + } + } + function setDefaultDiscardOrKeepProfile(code) { for (var i = 0; i < choiceOnProfileOverrideDropDownButton.model.count; i++) @@ -55,6 +66,10 @@ UM.PreferencesPage var defaultLanguage = UM.Preferences.getValue("general/language") setDefaultLanguage(defaultLanguage) + UM.Preferences.resetPreference("general/theme") + var defaultTheme = UM.Preferences.getValue("general/theme") + setDefaultTheme(defaultTheme) + UM.Preferences.resetPreference("physics/automatic_push_free") pushFreeCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_push_free")) UM.Preferences.resetPreference("physics/automatic_drop_down") From 4f446bfcbc95c510a29b1c103bdc606c968c76fd Mon Sep 17 00:00:00 2001 From: Victor Larchenko Date: Thu, 27 Apr 2017 16:44:43 +0600 Subject: [PATCH 492/816] Added filament cost keyword replacement --- 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 4a1d280aeb..f32993fd20 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -446,8 +446,7 @@ class CuraEngineBackend(QObject, Backend): replaced = line.replace("{print_time}", str(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) replaced = replaced.replace("{filament_amount}", str(Application.getInstance().getPrintInformation().materialLengths)) replaced = replaced.replace("{filament_weight}", str(Application.getInstance().getPrintInformation().materialWeights)) - # TODO: calculate filament cost - replaced = replaced.replace("{filament_cost}", "Not yet implemented") + replaced = replaced.replace("{filament_cost}", str(Application.getInstance().getPrintInformation().materialCosts)) replaced = replaced.replace("{jobname}", str(Application.getInstance().getPrintInformation().jobName)) self._scene.gcode_list[self._scene.gcode_list.index(line)] = replaced From 23cd6b1c2c800669425c388c7b99037fdf85fe9c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 29 Apr 2017 16:43:26 +0200 Subject: [PATCH 493/816] Fix rendering of readonly description/adhesion info --- resources/qml/Preferences/ReadOnlyTextArea.qml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/resources/qml/Preferences/ReadOnlyTextArea.qml b/resources/qml/Preferences/ReadOnlyTextArea.qml index 1c457eb5d2..db92c7d2b0 100644 --- a/resources/qml/Preferences/ReadOnlyTextArea.qml +++ b/resources/qml/Preferences/ReadOnlyTextArea.qml @@ -45,17 +45,4 @@ Item } } } - - Label - { - visible: base.readOnly - text: textArea.text - - anchors.fill: parent - anchors.margins: textArea.__style ? textArea.__style.textMargin : 4 - - color: palette.buttonText - } - - SystemPalette { id: palette } } From 67b8302d40af45ce989d51ebb7bf11edf80b65c9 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 29 Apr 2017 19:49:12 +0200 Subject: [PATCH 494/816] Add a notice to linked materials and allow "unlinking" a material. --- cura/Settings/ContainerManager.py | 36 +++++++++++++++++++++- resources/qml/Preferences/MaterialView.qml | 27 ++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 912129e822..e9b3518fa3 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -695,6 +695,7 @@ class ContainerManager(QObject): duplicated_container.setDirty(True) self._container_registry.addContainer(duplicated_container) + # Create a new material by cloning Generic PLA and setting the GUID to something unqiue @pyqtSlot(result = str) def createMaterial(self) -> str: # Ensure all settings are saved. @@ -702,7 +703,7 @@ class ContainerManager(QObject): containers = self._container_registry.findInstanceContainers(id="generic_pla") if not containers: - Logger.log("d", "Unable to creata a new material by cloning generic_pla, because it doesn't exist.") + Logger.log("d", "Unable to create a new material by cloning generic_pla, because it doesn't exist.") return "" # Create a new ID & container to hold the data. @@ -722,6 +723,39 @@ class ContainerManager(QObject): self._container_registry.addContainer(duplicated_container) + @pyqtSlot(str, result = "QStringList") + def getLinkedMaterials(self, material_id: str): + containers = self._container_registry.findInstanceContainers(id=material_id) + if not containers: + Logger.log("d", "Unable to find materials linked to material with id %s, because it doesn't exist.", material_id) + return [] + + material_container = containers[0] + material_guid = material_container.getMetaDataEntry("GUID", "") + if not material_guid: + Logger.log("d", "Unable to find materials linked to material with id %s, because it doesn't have a GUID.", material_id) + return [] + + containers = self._container_registry.findInstanceContainers(type = "material", GUID = material_guid) + linked_material_names = [] + for container in containers: + if container.getId() == material_id or container.getMetaDataEntry("base_file") != container.getId(): + continue + + linked_material_names.append(container.getName()) + return linked_material_names + + @pyqtSlot(str) + def unlinkMaterial(self, material_id: str): + containers = self._container_registry.findInstanceContainers(id=material_id) + if not containers: + Logger.log("d", "Unable to make the material with id %s unique, because it doesn't exist.", material_id) + return "" + + containers[0].setMetaDataEntry("base_file", material_id) + containers[0].setMetaDataEntry("GUID", str(uuid.uuid4())) + + ## Get the singleton instance for this class. @classmethod def getInstance(cls) -> "ContainerManager": diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index 226fd349bf..956af88139 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -24,6 +24,16 @@ TabView property double spoolLength: calculateSpoolLength() property real costPerMeter: calculateCostPerMeter() + property string linkedMaterialNames: + { + if(!base.containerId || !base.editingEnabled) + { + return "" + } + var linkedMaterials = Cura.ContainerManager.getLinkedMaterials(base.containerId); + return linkedMaterials.join(", "); + } + Tab { title: catalog.i18nc("@title","Information") @@ -196,6 +206,23 @@ TabView height: parent.rowHeight } + Item { width: parent.width; height: UM.Theme.getSize("default_margin").height; visible: unlinkMaterialButton.visible } + Label + { + width: parent.width + verticalAlignment: Qt.AlignVCenter + text: catalog.i18nc("@label", "This material is linked to %1 and shares some of its properties.").arg(base.linkedMaterialNames) + wrapMode: Text.WordWrap + visible: unlinkMaterialButton.visible + } + Button + { + id: unlinkMaterialButton + text: catalog.i18nc("@label", "Unlink Material") + visible: base.linkedMaterialNames != "" + onClicked: Cura.ContainerManager.unlinkMaterial(base.containerId) + } + Item { width: parent.width; height: UM.Theme.getSize("default_margin").height } Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Description") } From a1d9b1a37f33c86396a1e90c31b100f6d75ffddd Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sat, 29 Apr 2017 21:19:54 +0200 Subject: [PATCH 495/816] Force update after unlinking material. --- resources/qml/Preferences/MaterialView.qml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index 956af88139..ec92e8cbcd 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -24,8 +24,13 @@ TabView property double spoolLength: calculateSpoolLength() property real costPerMeter: calculateCostPerMeter() + property bool reevaluateLinkedMaterials: false property string linkedMaterialNames: { + if (reevaluateLinkedMaterials) + { + reevaluateLinkedMaterials = false; + } if(!base.containerId || !base.editingEnabled) { return "" @@ -220,7 +225,11 @@ TabView id: unlinkMaterialButton text: catalog.i18nc("@label", "Unlink Material") visible: base.linkedMaterialNames != "" - onClicked: Cura.ContainerManager.unlinkMaterial(base.containerId) + onClicked: + { + Cura.ContainerManager.unlinkMaterial(base.containerId) + base.reevaluateLinkedMaterials = true + } } Item { width: parent.width; height: UM.Theme.getSize("default_margin").height } From 577a8d0a3efe52f1ed85f49f58fd0765e60e68b0 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 10:28:03 +0200 Subject: [PATCH 496/816] Fix MaterialView layout issues Make scrollview look more in line with the scrollview on the profiles page --- resources/qml/Preferences/MaterialView.qml | 67 +++++++++++----------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index ec92e8cbcd..a44b8a0f08 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -43,62 +43,62 @@ TabView { title: catalog.i18nc("@title","Information") - anchors - { - leftMargin: UM.Theme.getSize("default_margin").width - topMargin: UM.Theme.getSize("default_margin").height - bottomMargin: UM.Theme.getSize("default_margin").height - rightMargin: 0 - } + anchors.margins: UM.Theme.getSize("default_margin").width ScrollView { + id: scrollView anchors.fill: parent horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff flickableItem.flickableDirection: Flickable.VerticalFlick + frameVisible: true + + property real columnWidth: Math.floor(viewport.width * 0.5) - UM.Theme.getSize("default_margin").width Flow { id: containerGrid - width: base.width; + x: UM.Theme.getSize("default_margin").width + y: UM.Theme.getSize("default_lining").height - property real rowHeight: textField.height; + width: base.width + property real rowHeight: textField.height + UM.Theme.getSize("default_lining").height - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Display Name") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Display Name") } ReadOnlyTextField { id: displayNameTextField; - width: base.secondColumnWidth; + width: scrollView.columnWidth; text: properties.name; readOnly: !base.editingEnabled; onEditingFinished: base.setName(properties.name, text) } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Brand") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Brand") } ReadOnlyTextField { id: textField; - width: base.secondColumnWidth; + width: scrollView.columnWidth; text: properties.supplier; readOnly: !base.editingEnabled; onEditingFinished: base.setMetaDataEntry("brand", properties.supplier, text) } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") } ReadOnlyTextField { - width: base.secondColumnWidth; + width: scrollView.columnWidth; text: properties.material_type; readOnly: !base.editingEnabled; onEditingFinished: base.setMetaDataEntry("material", properties.material_type, text) } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") } Row { - width: base.secondColumnWidth; + width: scrollView.columnWidth; height: parent.rowHeight; spacing: UM.Theme.getSize("default_margin").width/2 @@ -130,11 +130,11 @@ TabView Label { width: parent.width; height: parent.rowHeight; font.bold: true; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Properties") } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Density") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Density") } ReadOnlySpinBox { id: densitySpinBox - width: base.secondColumnWidth + width: scrollView.columnWidth value: properties.density decimals: 2 suffix: " g/cm³" @@ -145,11 +145,11 @@ TabView onValueChanged: updateCostPerMeter() } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Diameter") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Diameter") } ReadOnlySpinBox { id: diameterSpinBox - width: base.secondColumnWidth + width: scrollView.columnWidth value: properties.diameter decimals: 2 suffix: " mm" @@ -160,11 +160,11 @@ TabView onValueChanged: updateCostPerMeter() } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") } SpinBox { id: spoolCostSpinBox - width: base.secondColumnWidth + width: scrollView.columnWidth value: base.getMaterialPreferenceValue(properties.guid, "spool_cost") prefix: base.currency + " " decimals: 2 @@ -176,11 +176,11 @@ TabView } } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament weight") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament weight") } SpinBox { id: spoolWeightSpinBox - width: base.secondColumnWidth + width: scrollView.columnWidth value: base.getMaterialPreferenceValue(properties.guid, "spool_weight") suffix: " g" stepSize: 100 @@ -193,19 +193,19 @@ TabView } } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament length") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament length") } Label { - width: base.secondColumnWidth + width: scrollView.columnWidth text: "~ %1 m".arg(Math.round(base.spoolLength)) verticalAlignment: Qt.AlignVCenter height: parent.rowHeight } - Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Cost per Meter") } + Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Cost per Meter") } Label { - width: base.secondColumnWidth + width: scrollView.columnWidth text: "~ %1 %2/m".arg(base.costPerMeter.toFixed(2)).arg(base.currency) verticalAlignment: Qt.AlignVCenter height: parent.rowHeight @@ -214,7 +214,7 @@ TabView Item { width: parent.width; height: UM.Theme.getSize("default_margin").height; visible: unlinkMaterialButton.visible } Label { - width: parent.width + width: 2 * scrollView.columnWidth verticalAlignment: Qt.AlignVCenter text: catalog.i18nc("@label", "This material is linked to %1 and shares some of its properties.").arg(base.linkedMaterialNames) wrapMode: Text.WordWrap @@ -239,7 +239,7 @@ TabView ReadOnlyTextArea { text: properties.description; - width: base.firstColumnWidth + base.secondColumnWidth + width: 2 * scrollView.columnWidth wrapMode: Text.WordWrap readOnly: !base.editingEnabled; @@ -252,13 +252,15 @@ TabView ReadOnlyTextArea { text: properties.adhesion_info; - width: base.firstColumnWidth + base.secondColumnWidth + width: 2 * scrollView.columnWidth wrapMode: Text.WordWrap readOnly: !base.editingEnabled; onEditingFinished: base.setMetaDataEntry("adhesion_info", properties.adhesion_info, text) } + + Item { width: parent.width; height: UM.Theme.getSize("default_margin").height } } function updateCostPerMeter() @@ -304,6 +306,7 @@ TabView width: base.firstColumnWidth; height: spinBox.height text: model.label + elide: Text.ElideRight } ReadOnlySpinBox { From d12e3238539764e86b66d0824a52d255143910a5 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 10:53:23 +0200 Subject: [PATCH 497/816] Add definition for Alya 3d printer See https://github.com/Ultimaker/Cura/issues/1759 --- resources/definitions/alya3dp.def.json | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 resources/definitions/alya3dp.def.json diff --git a/resources/definitions/alya3dp.def.json b/resources/definitions/alya3dp.def.json new file mode 100644 index 0000000000..a0e9f03fbb --- /dev/null +++ b/resources/definitions/alya3dp.def.json @@ -0,0 +1,61 @@ +{ + "id": "alya3dp", + "name": "ALYA", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "ALYA", + "manufacturer": "ALYA", + "category": "Other", + "file_formats": "text/x-gcode" + }, + + "overrides": { + "machine_width": { + "default_value": 100 + }, + "machine_height": { + "default_value": 133 + }, + "machine_depth": { + "default_value": 100 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_head_shape_min_x": { + "default_value": 75 + }, + "machine_head_shape_min_y": { + "default_value": 18 + }, + "machine_head_shape_max_x": { + "default_value": 18 + }, + "machine_head_shape_max_y": { + "default_value": 35 + }, + "machine_nozzle_gantry_distance": { + "default_value": 55 + }, + "machine_nozzle_offset_x_1": { + "default_value": 18 + }, + "machine_nozzle_offset_y_1": { + "default_value": 0 + }, + "machine_gcode_flavor": { + "default_value": "RepRap" + }, + "machine_start_gcode": { + "default_value": ";Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\n;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line\n;M109 S{print_temperature} ;Uncomment to add your own temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to max endstops\nG1 Z115.0 F{travel_speed} ;move th e platform up 20mm\nG28 Z0 ;move Z to max endstop\nG1 Z15.0 F{travel_speed} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{travel_speed}\nM301 H1 P26.38 I2.57 D67.78\n;Put printing message on LCD screen\nM117 Printing..." + }, + "machine_end_gcode": { + "default_value": ";End GCode\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG28 Z0\nM84 ;steppers off\nG90 ;absolute positioning\n;{profile_string}" + } + } +} \ No newline at end of file From c9039bb6fc609859f4a371e77e292db71bf51a42 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 11:08:24 +0200 Subject: [PATCH 498/816] Add a field to set the material diameter for the printer This is used to filter the list of available materials, see https://github.com/Ultimaker/Cura/pull/1685 --- .../MachineSettingsAction.qml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index abe05d5654..b7cf86ef58 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -382,6 +382,18 @@ Cura.MachineAction } } + Label + { + text: catalog.i18nc("@label", "Material Diameter") + } + Loader + { + id: materialDiameterField + sourceComponent: numericTextFieldWithUnit + property var propertyProvider: materialDiameterProvider + property string unit: catalog.i18nc("@label", "mm") + property bool forceUpdateOnChange: false + } Label { text: catalog.i18nc("@label", "Nozzle size") @@ -753,6 +765,16 @@ Cura.MachineAction storeIndex: manager.containerIndex } + UM.SettingPropertyProvider + { + id: materialDiameterProvider + + containerStackId: Cura.MachineManager.activeMachineId + key: "material_diameter" + watchedProperties: [ "value" ] + storeIndex: manager.containerIndex + } + UM.SettingPropertyProvider { id: machineNozzleSizeProvider From 4dea518c72f31b832d3a3595e322901cfa06d535 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 12:38:46 +0200 Subject: [PATCH 499/816] Add Upgraded Parts action for UM2 to add support for Olsson block This adds a set of variants that just set the nozzle diameter and nozzle tip diameter. These variants are not used until the machine action sets the has_variants metadata entry. --- .../UM2UpgradeSelection.py | 64 +++++++++++++++++++ .../UM2UpgradeSelectionMachineAction.qml | 52 +++++++++++++++ plugins/UltimakerMachineActions/__init__.py | 9 ++- resources/definitions/ultimaker2.def.json | 3 +- .../definitions/ultimaker2_plus.def.json | 1 + resources/variants/ultimaker2_0.25.inst.cfg | 12 ++++ resources/variants/ultimaker2_0.4.inst.cfg | 12 ++++ resources/variants/ultimaker2_0.6.inst.cfg | 12 ++++ resources/variants/ultimaker2_0.8.inst.cfg | 12 ++++ 9 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 plugins/UltimakerMachineActions/UM2UpgradeSelection.py create mode 100644 plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml create mode 100644 resources/variants/ultimaker2_0.25.inst.cfg create mode 100644 resources/variants/ultimaker2_0.4.inst.cfg create mode 100644 resources/variants/ultimaker2_0.6.inst.cfg create mode 100644 resources/variants/ultimaker2_0.8.inst.cfg diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py new file mode 100644 index 0000000000..991ddd4ecd --- /dev/null +++ b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py @@ -0,0 +1,64 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Uranium is released under the terms of the AGPLv3 or higher. + +from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.InstanceContainer import InstanceContainer +from cura.MachineAction import MachineAction +from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty + +from UM.i18n import i18nCatalog +from UM.Application import Application +catalog = i18nCatalog("cura") + +import UM.Settings.InstanceContainer + + +## The Ultimaker 2 can have a few revisions & upgrades. +class UM2UpgradeSelection(MachineAction): + def __init__(self): + super().__init__("UM2UpgradeSelection", catalog.i18nc("@action", "Select upgrades")) + self._qml_url = "UM2UpgradeSelectionMachineAction.qml" + + self._container_registry = ContainerRegistry.getInstance() + + def _reset(self): + self.hasVariantsChanged.emit() + + hasVariantsChanged = pyqtSignal() + + @pyqtProperty(bool, notify = hasVariantsChanged) + def hasVariants(self): + global_container_stack = Application.getInstance().getGlobalContainerStack() + if global_container_stack: + return global_container_stack.getMetaDataEntry("has_variants", "false") == "True" + + @pyqtSlot(bool) + def setHasVariants(self, has_variants = True): + global_container_stack = Application.getInstance().getGlobalContainerStack() + if global_container_stack: + variant_container = global_container_stack.findContainer({"type": "variant"}) + variant_index = global_container_stack.getContainerIndex(variant_container) + + if has_variants: + if "has_variants" in global_container_stack.getMetaData(): + global_container_stack.setMetaDataEntry("has_variants", True) + else: + global_container_stack.addMetaDataEntry("has_variants", True) + + # Set the variant container to a sane default + if variant_container.getId() == "empty_variant": + search_criteria = { "type": "variant", "definition": "ultimaker2", "id": "*0.4*" } + containers = self._container_registry.findInstanceContainers(**search_criteria) + if containers: + global_container_stack.replaceContainer(variant_index, containers[0]) + else: + # The metadata entry is stored in an ini, and ini files are parsed as strings only. + # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. + if "has_variants" in global_container_stack.getMetaData(): + global_container_stack.removeMetaDataEntry("has_variants") + + # Set the variant container to an empty variant + if variant_container.getId() == "empty_variant": + global_container_stack.replaceContainer(variant_index, self._container_registry.findInstanceContainers(id="empty_variant")[0]) + + Application.getInstance().globalContainerStackChanged.emit() diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml b/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml new file mode 100644 index 0000000000..d59686e34e --- /dev/null +++ b/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml @@ -0,0 +1,52 @@ +// Copyright (c) 2016 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +Cura.MachineAction +{ + anchors.fill: parent; + Item + { + id: upgradeSelectionMachineAction + anchors.fill: parent + + Label + { + id: pageTitle + width: parent.width + text: catalog.i18nc("@title", "Select Printer Upgrades") + wrapMode: Text.WordWrap + font.pointSize: 18; + } + + Label + { + id: pageDescription + anchors.top: pageTitle.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + width: parent.width + wrapMode: Text.WordWrap + text: catalog.i18nc("@label","Please select any upgrades made to this Ultimaker 2"); + } + + CheckBox + { + anchors.top: pageDescription.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + + text: catalog.i18nc("@label", "Olsson Block") + checked: manager.hasVariants + onClicked: manager.setHasVariants(checked) + } + + UM.I18nCatalog { id: catalog; name: "cura"; } + } +} \ No newline at end of file diff --git a/plugins/UltimakerMachineActions/__init__.py b/plugins/UltimakerMachineActions/__init__.py index fb0b2b1f64..996026ace2 100644 --- a/plugins/UltimakerMachineActions/__init__.py +++ b/plugins/UltimakerMachineActions/__init__.py @@ -5,6 +5,7 @@ from . import BedLevelMachineAction from . import UpgradeFirmwareMachineAction from . import UMOCheckupMachineAction from . import UMOUpgradeSelection +from . import UM2UpgradeSelection from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -21,4 +22,10 @@ def getMetaData(): } def register(app): - return { "machine_action": [BedLevelMachineAction.BedLevelMachineAction(), UpgradeFirmwareMachineAction.UpgradeFirmwareMachineAction(), UMOCheckupMachineAction.UMOCheckupMachineAction(), UMOUpgradeSelection.UMOUpgradeSelection()]} + return { "machine_action": [ + BedLevelMachineAction.BedLevelMachineAction(), + UpgradeFirmwareMachineAction.UpgradeFirmwareMachineAction(), + UMOCheckupMachineAction.UMOCheckupMachineAction(), + UMOUpgradeSelection.UMOUpgradeSelection(), + UM2UpgradeSelection.UM2UpgradeSelection() + ]} diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index a52075fe5e..5b2f339589 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -15,7 +15,8 @@ "platform_texture": "Ultimaker2backplate.png", "platform_offset": [9, 0, 0], "has_materials": false, - "supported_actions":["UpgradeFirmware"] + "first_start_actions": ["UM2UpgradeSelection"], + "supported_actions":["UM2UpgradeSelection", "UpgradeFirmware"] }, "overrides": { "machine_name": { "default_value": "Ultimaker 2" }, diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json index 5b1c7909ba..d8169b9abb 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -16,6 +16,7 @@ "has_materials": true, "has_machine_materials": true, "has_machine_quality": true, + "first_start_actions": [], "supported_actions":["UpgradeFirmware"] }, diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_0.25.inst.cfg new file mode 100644 index 0000000000..9d59e47b89 --- /dev/null +++ b/resources/variants/ultimaker2_0.25.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.25 mm +version = 2 +definition = ultimaker2 + +[metadata] +author = Ultimaker +type = variant + +[values] +machine_nozzle_size = 0.25 +machine_nozzle_tip_outer_diameter = 0.8 diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_0.4.inst.cfg new file mode 100644 index 0000000000..7ebcbb69b7 --- /dev/null +++ b/resources/variants/ultimaker2_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4 mm +version = 2 +definition = ultimaker2 + +[metadata] +author = Ultimaker +type = variant + +[values] +machine_nozzle_size = 0.4 +machine_nozzle_tip_outer_diameter = 1.05 diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_0.6.inst.cfg new file mode 100644 index 0000000000..accf507750 --- /dev/null +++ b/resources/variants/ultimaker2_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6 mm +version = 2 +definition = ultimaker2 + +[metadata] +author = Ultimaker +type = variant + +[values] +machine_nozzle_size = 0.6 +machine_nozzle_tip_outer_diameter = 1.25 diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_0.8.inst.cfg new file mode 100644 index 0000000000..97452046cb --- /dev/null +++ b/resources/variants/ultimaker2_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8 mm +version = 2 +definition = ultimaker2 + +[metadata] +author = Ultimaker +type = variant + +[values] +machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 1.35 From 98aca201977a6760ded9dffc6524e8f79409c8d1 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 22:27:07 +0200 Subject: [PATCH 500/816] Fix hover effect on "enable support" checkbox --- resources/qml/SidebarSimple.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 8f43e411ff..915530bbaf 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -240,6 +240,8 @@ Item CheckBox { id: enableSupportCheckBox + property alias _hovered: enableSupportMouseArea.containsMouse + anchors.top: parent.top anchors.left: enableSupportLabel.right anchors.leftMargin: UM.Theme.getSize("default_margin").width From 0c6a5328c8a1e1f4fcc986d8d904b4023de7e939 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 22:52:54 +0200 Subject: [PATCH 501/816] Add hover effect to mode switch control While simplifying theme additions --- resources/qml/Sidebar.qml | 14 ++++++++++++-- resources/themes/cura/styles.qml | 30 ++++++++++++++++++------------ resources/themes/cura/theme.json | 17 +++++++++++------ 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index ba5106c767..68427cad8c 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -412,7 +412,7 @@ Rectangle { id: toggleLeftText anchors.right: modeToggleSwitch.left - anchors.rightMargin: UM.Theme.getSize("toggle_button_text_anchoring_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter text: "" color: UM.Theme.getColor("toggle_active_text") @@ -438,9 +438,19 @@ Rectangle id: modeToggleSwitch checked: false anchors.right: toggleRightText.left - anchors.rightMargin: UM.Theme.getSize("toggle_button_text_anchoring_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter + property alias _hovered: enableSupportMouseArea.containsMouse + + MouseArea + { + id: enableSupportMouseArea + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.NoButton + } + onClicked: { var index = 0; diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 899ea3cf79..9d302c3494 100755 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -11,16 +11,22 @@ QtObject { property Component toggle_button: Component { SwitchStyle { groove: Rectangle { - implicitWidth: UM.Theme.getSize("toggle_button_background_implicit_size").width - implicitHeight: UM.Theme.getSize("toggle_button_background_implicit_size").height - radius: UM.Theme.getSize("toggle_button_radius").width - border.color: { - if (control.pressed || (control.checkable && control.checked)) { - return UM.Theme.getColor("sidebar_header_active"); - } else if(control.hovered) { - return UM.Theme.getColor("sidebar_header_hover"); + implicitWidth: UM.Theme.getSize("toggle_button").width + implicitHeight: UM.Theme.getSize("toggle_button").height + radius: implicitHeight / 2 + color: { + if(control.hovered || control._hovered) { + return UM.Theme.getColor("toggle_button_hover"); } else { - return UM.Theme.getColor("sidebar_header_bar"); + return UM.Theme.getColor("toggle_button"); + } + } + Behavior on color { ColorAnimation { duration: 50; } } + border.color: { + if(control.hovered || control._hovered) { + return UM.Theme.getColor("toggle_button_border_hover"); + } else { + return UM.Theme.getColor("toggle_button_border"); } } Behavior on border.color { ColorAnimation { duration: 50; } } @@ -28,9 +34,9 @@ QtObject { } handle: Rectangle { - implicitWidth: UM.Theme.getSize("toggle_button_knob_implicit_size").width - implicitHeight: UM.Theme.getSize("toggle_button_knob_implicit_size").height - radius: UM.Theme.getSize("toggle_button_radius").width + implicitWidth: implicitHeight + implicitHeight: UM.Theme.getSize("toggle_button").height + radius: implicitHeight / 2 color: { if (control.pressed || (control.checkable && control.checked)) { diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index 084ee27bb2..531b233fec 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -175,6 +175,15 @@ "checkbox_mark": [24, 41, 77, 255], "checkbox_text": [24, 41, 77, 255], + "toggle_button": [255, 255, 255, 255], + "toggle_button_hover": [255, 255, 255, 255], + "toggle_button_border": [127, 127, 127, 255], + "toggle_button_border_hover": [12, 169, 227, 255], + "toggle_button_handle": [24, 41, 77, 255], + "toggle_button_text": [24, 41, 77, 255], + "toggle_button_text_hover": [24, 41, 77, 255], + "toggle_button_text_selected": [24, 41, 77, 255], + "tooltip": [12, 169, 227, 255], "tooltip_text": [255, 255, 255, 255], @@ -301,6 +310,7 @@ "layerview_row_spacing": [0.0, 0.5], "checkbox": [2.0, 2.0], + "toggle_button": [2.0, 1.0], "tooltip": [20.0, 10.0], "tooltip_margins": [1.0, 1.0], @@ -319,11 +329,6 @@ "infill_button_margin": [0.5, 0.5], - "jobspecs_line": [2.0, 2.0], - - "toggle_button_text_anchoring_margin": [1.0, 1.0], - "toggle_button_radius": [1.0, 1.0], - "toggle_button_background_implicit_size": [2.0, 1.0], - "toggle_button_knob_implicit_size": [1.0, 1.0] + "jobspecs_line": [2.0, 2.0] } } From 93197cd173cd095821c4c8781bf50c1665821fae Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 23:21:49 +0200 Subject: [PATCH 502/816] Add hover effect to mode switch text labels --- resources/qml/Sidebar.qml | 44 +++++++++++++++++++++++++++----- resources/themes/cura/theme.json | 2 +- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 68427cad8c..f4d264b12c 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -408,18 +408,34 @@ Rectangle } ExclusiveGroup { id: modeMenuGroup; } - Text + Label { id: toggleLeftText anchors.right: modeToggleSwitch.left anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter text: "" - color: UM.Theme.getColor("toggle_active_text") + color: + { + if(toggleLeftTextMouseArea.containsMouse) + { + return UM.Theme.getColor("toggle_button_text_hover"); + } + else if(!modeToggleSwitch.checked) + { + return UM.Theme.getColor("toggle_button_text_checked"); + } + else + { + return UM.Theme.getColor("toggle_button_text"); + } + } font: UM.Theme.getFont("default") MouseArea { + id: toggleLeftTextMouseArea + hoverEnabled: true anchors.fill: parent onClicked: { @@ -441,11 +457,11 @@ Rectangle anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter - property alias _hovered: enableSupportMouseArea.containsMouse + property bool _hovered: modeToggleSwitchMouseArea.containsMouse || toggleLeftTextMouseArea.containsMouse || toggleRightTextMouseArea.containsMouse MouseArea { - id: enableSupportMouseArea + id: modeToggleSwitchMouseArea anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.NoButton @@ -470,17 +486,33 @@ Rectangle style: UM.Theme.styles.toggle_button } - Text + Label { id: toggleRightText anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter text: "" - color: UM.Theme.getColor("toggle_active_text") + color: + { + if(toggleRightTextMouseArea.containsMouse) + { + return UM.Theme.getColor("toggle_button_text_hover"); + } + else if(modeToggleSwitch.checked) + { + return UM.Theme.getColor("toggle_button_text_checked"); + } + else + { + return UM.Theme.getColor("toggle_button_text"); + } + } font: UM.Theme.getFont("default") MouseArea { + id: toggleRightTextMouseArea + hoverEnabled: true anchors.fill: parent onClicked: { diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index 531b233fec..37267046b0 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -182,7 +182,7 @@ "toggle_button_handle": [24, 41, 77, 255], "toggle_button_text": [24, 41, 77, 255], "toggle_button_text_hover": [24, 41, 77, 255], - "toggle_button_text_selected": [24, 41, 77, 255], + "toggle_button_text_checked": [12, 169, 227, 255], "tooltip": [12, 169, 227, 255], "tooltip_text": [255, 255, 255, 255], From f18947681a6ba9eefd24ddd024c41231057c07f6 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 30 Apr 2017 23:25:14 +0200 Subject: [PATCH 503/816] Disambiguate theme name --- resources/qml/Sidebar.qml | 14 +++++++------- resources/themes/cura/styles.qml | 16 ++++++++-------- resources/themes/cura/theme.json | 18 +++++++++--------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index f4d264b12c..132d1d2f41 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -419,15 +419,15 @@ Rectangle { if(toggleLeftTextMouseArea.containsMouse) { - return UM.Theme.getColor("toggle_button_text_hover"); + return UM.Theme.getColor("mode_switch_text_hover"); } else if(!modeToggleSwitch.checked) { - return UM.Theme.getColor("toggle_button_text_checked"); + return UM.Theme.getColor("mode_switch_text_checked"); } else { - return UM.Theme.getColor("toggle_button_text"); + return UM.Theme.getColor("mode_switch_text"); } } font: UM.Theme.getFont("default") @@ -483,7 +483,7 @@ Rectangle UM.Preferences.setValue("cura/active_mode", index); } - style: UM.Theme.styles.toggle_button + style: UM.Theme.styles.mode_switch } Label @@ -496,15 +496,15 @@ Rectangle { if(toggleRightTextMouseArea.containsMouse) { - return UM.Theme.getColor("toggle_button_text_hover"); + return UM.Theme.getColor("mode_switch_text_hover"); } else if(modeToggleSwitch.checked) { - return UM.Theme.getColor("toggle_button_text_checked"); + return UM.Theme.getColor("mode_switch_text_checked"); } else { - return UM.Theme.getColor("toggle_button_text"); + return UM.Theme.getColor("mode_switch_text"); } } font: UM.Theme.getFont("default") diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml index 9d302c3494..ffe866f2c6 100755 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura/styles.qml @@ -8,25 +8,25 @@ import QtQuick.Controls.Styles 1.1 import UM 1.1 as UM QtObject { - property Component toggle_button: Component { + property Component mode_switch: Component { SwitchStyle { groove: Rectangle { - implicitWidth: UM.Theme.getSize("toggle_button").width - implicitHeight: UM.Theme.getSize("toggle_button").height + implicitWidth: UM.Theme.getSize("mode_switch").width + implicitHeight: UM.Theme.getSize("mode_switch").height radius: implicitHeight / 2 color: { if(control.hovered || control._hovered) { - return UM.Theme.getColor("toggle_button_hover"); + return UM.Theme.getColor("mode_switch_hover"); } else { - return UM.Theme.getColor("toggle_button"); + return UM.Theme.getColor("mode_switch"); } } Behavior on color { ColorAnimation { duration: 50; } } border.color: { if(control.hovered || control._hovered) { - return UM.Theme.getColor("toggle_button_border_hover"); + return UM.Theme.getColor("mode_switch_border_hover"); } else { - return UM.Theme.getColor("toggle_button_border"); + return UM.Theme.getColor("mode_switch_border"); } } Behavior on border.color { ColorAnimation { duration: 50; } } @@ -35,7 +35,7 @@ QtObject { handle: Rectangle { implicitWidth: implicitHeight - implicitHeight: UM.Theme.getSize("toggle_button").height + implicitHeight: UM.Theme.getSize("mode_switch").height radius: implicitHeight / 2 color: { diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index 37267046b0..da58af4c14 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -175,14 +175,14 @@ "checkbox_mark": [24, 41, 77, 255], "checkbox_text": [24, 41, 77, 255], - "toggle_button": [255, 255, 255, 255], - "toggle_button_hover": [255, 255, 255, 255], - "toggle_button_border": [127, 127, 127, 255], - "toggle_button_border_hover": [12, 169, 227, 255], - "toggle_button_handle": [24, 41, 77, 255], - "toggle_button_text": [24, 41, 77, 255], - "toggle_button_text_hover": [24, 41, 77, 255], - "toggle_button_text_checked": [12, 169, 227, 255], + "mode_switch": [255, 255, 255, 255], + "mode_switch_hover": [255, 255, 255, 255], + "mode_switch_border": [127, 127, 127, 255], + "mode_switch_border_hover": [12, 169, 227, 255], + "mode_switch_handle": [24, 41, 77, 255], + "mode_switch_text": [24, 41, 77, 255], + "mode_switch_text_hover": [24, 41, 77, 255], + "mode_switch_text_checked": [12, 169, 227, 255], "tooltip": [12, 169, 227, 255], "tooltip_text": [255, 255, 255, 255], @@ -310,7 +310,7 @@ "layerview_row_spacing": [0.0, 0.5], "checkbox": [2.0, 2.0], - "toggle_button": [2.0, 1.0], + "mode_switch": [2.0, 1.0], "tooltip": [20.0, 10.0], "tooltip_margins": [1.0, 1.0], From be21cd7f7d4c2c8e7c1716dcdf7c59339cb81a4a Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 1 May 2017 13:25:13 +0200 Subject: [PATCH 504/816] Fix preference category double name --- resources/qml/Preferences/GeneralPage.qml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index b22f2300e7..85039b3c32 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -277,19 +277,6 @@ UM.PreferencesPage font.italic: true } - Item - { - //: Spacer - height: UM.Theme.getSize("default_margin").height - width: UM.Theme.getSize("default_margin").width - } - - Label - { - font.bold: true - text: catalog.i18nc("@label","Viewport behavior") - } - Item { //: Spacer @@ -313,7 +300,7 @@ UM.PreferencesPage text: catalog.i18nc("@option:check","Slice automatically"); } } - + Item { //: Spacer From 5b8e1f25b7895b976796fb178e4eb321dde62d38 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 1 May 2017 14:24:49 +0200 Subject: [PATCH 505/816] Don't add prime tower area if single extrusion Simple papercut fix. --- cura/BuildVolume.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index fbf4ba5080..9c22d5ae3a 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -600,20 +600,21 @@ class BuildVolume(SceneNode): result_areas[extruder_id].append(polygon) #Don't perform the offset on these. # Add prime tower location as disallowed area. - prime_tower_collision = False - prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) - for extruder_id in prime_tower_areas: - for prime_tower_area in prime_tower_areas[extruder_id]: - for area in result_areas[extruder_id]: - if prime_tower_area.intersectsPolygon(area) is not None: - prime_tower_collision = True + if len(used_extruders) > 1: #No prime tower in single-extrusion. + prime_tower_collision = False + prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) + for extruder_id in prime_tower_areas: + for prime_tower_area in prime_tower_areas[extruder_id]: + for area in result_areas[extruder_id]: + if prime_tower_area.intersectsPolygon(area) is not None: + prime_tower_collision = True + break + if prime_tower_collision: #Already found a collision. break - if prime_tower_collision: #Already found a collision. - break - if not prime_tower_collision: - result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) - else: - self._error_areas.extend(prime_tower_areas[extruder_id]) + if not prime_tower_collision: + result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) + else: + self._error_areas.extend(prime_tower_areas[extruder_id]) self._has_errors = len(self._error_areas) > 0 From e6e442348b0940a71bf76c8d1e7cdc9c388ff76b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 1 May 2017 16:10:05 +0200 Subject: [PATCH 506/816] Fixed one of the tests The test failed due to it not creating the right application CURA-3497 --- tests/Settings/TestExtruderStack.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index c49448b030..b52f71e02d 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -11,6 +11,8 @@ from UM.Settings.InstanceContainer import InstanceContainer #To check against th import cura.Settings.ExtruderStack #The module we're testing. from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. +from cura.CuraApplication import CuraApplication + ## Fake container registry that always provides all containers you ask of. @pytest.yield_fixture() def container_registry(): @@ -239,6 +241,7 @@ def test_deserializeMoveDefinitionContainer(extruder_stack): ## Tests whether getProperty properly applies the stack-like behaviour on its # containers. def test_getPropertyFallThrough(extruder_stack): + CuraApplication.getInstance() # To ensure that we have the right Application #A few instance container mocks to put in the stack. mock_layer_heights = {} #For each container type, a mock container that defines layer height to something unique. mock_no_settings = {} #For each container type, a mock container that has no settings at all. From c81507727889d84272b6c7a43a258a3f2b410722 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 1 May 2017 17:28:55 +0200 Subject: [PATCH 507/816] Fixed the upgraderFileRename test CURA-3479 --- tests/Settings/TestCuraContainerRegistry.py | 23 ++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index f6c1eeb9a5..d225fe0371 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -5,6 +5,7 @@ import os #To find the directory with test files and find the test files. import pytest #This module contains unit tests. import shutil #To copy files to make a temporary file. import unittest.mock #To mock and monkeypatch stuff. +import urllib.parse from cura.Settings.CuraContainerRegistry import CuraContainerRegistry #The class we're testing. from cura.Settings.ExtruderStack import ExtruderStack #Testing for returning the correct types of stacks. @@ -59,20 +60,32 @@ def test_loadTypes(filename, output_class, container_registry): ## Tests whether loading a legacy file moves the upgraded file properly. def test_loadLegacyFileRenamed(container_registry): #Create a temporary file for the registry to load. - temp_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "temporary.stack.cfg") - temp_file_source = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "MachineLegacy.stack.cfg") + stacks_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks") + temp_file = os.path.join(stacks_folder, "temporary.stack.cfg") + temp_file_source = os.path.join(stacks_folder, "MachineLegacy.stack.cfg") shutil.copyfile(temp_file_source, temp_file) #Mock some dependencies. UM.Settings.ContainerStack.setContainerRegistry(container_registry) Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [temp_file]) #Return a temporary file that we'll make for this test. - def findContainers(id, container_type = 0): + + def findContainers(container_type = 0, id = None): + if id == "MachineLegacy": + return None return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + + old_find_containers = container_registry.findContainers container_registry.findContainers = findContainers with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): container_registry.load() + container_registry.findContainers = old_find_containers + + container_registry.saveAll() + print("all containers in registry", container_registry._containers) assert not os.path.isfile(temp_file) - new_filename = os.path.splitext(os.path.splitext(temp_file)[0])[0] + ".global.cfg" - assert os.path.isfile(new_filename) + mime_type = container_registry.getMimeTypeForContainer(GlobalStack) + file_name = urllib.parse.quote_plus("MachineLegacy") + "." + mime_type.preferredSuffix + path = Resources.getStoragePath(Resources.ContainerStacks, file_name) + assert os.path.isfile(path) From f612a535636749f055cd54ca18f9db90c1c1b93b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 2 May 2017 09:52:12 +0200 Subject: [PATCH 508/816] Detect more temperature settings in start g-code Other settings such as the layer 0 temperatures are now also properly detected. --- plugins/CuraEngineBackend/StartSliceJob.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index c8cbbe8040..279112051c 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -247,8 +247,11 @@ class StartSliceJob(Job): Job.yieldThread() start_gcode = settings["machine_start_gcode"] - settings["material_bed_temp_prepend"] = "{material_bed_temperature}" not in start_gcode #Pre-compute material material_bed_temp_prepend and material_print_temp_prepend - settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode + #Pre-compute material material_bed_temp_prepend and material_print_temp_prepend + bed_temperature_settings = {"material_bed_temperature", "material_bed_temperature_layer_0"} + settings["material_bed_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in bed_temperature_settings)) + print_temperature_settings = {"material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature"} + settings["material_print_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in print_temperature_settings)) for key, value in settings.items(): #Add all submessages for each individual setting. setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") From 69c3baf87fe35eb61f5edb6322df8f8e7943a3d8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 2 May 2017 11:06:25 +0200 Subject: [PATCH 509/816] Fixed unit test CURA-3497 --- cura/Settings/CuraContainerStack.py | 2 +- tests/Settings/TestCuraContainerRegistry.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index babf760b35..c010bc7c1e 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -351,7 +351,7 @@ class CuraContainerStack(ContainerStack): if type_name == "definition": if not container or not isinstance(container, DefinitionContainer): - definition = self.findContainer(container_type = DefinitionContainer, category = "*") + definition = self.findContainer(container_type = DefinitionContainer) if not definition: raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self._id)) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index d225fe0371..9cdad7c306 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -13,6 +13,7 @@ from cura.Settings.GlobalStack import GlobalStack #Testing for returning the cor from UM.Resources import Resources #Mocking some functions of this. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. +from UM.Settings.DefinitionContainer import DefinitionContainer ## Gives a fresh CuraContainerRegistry instance. @pytest.fixture() @@ -37,11 +38,15 @@ def test_loadTypes(filename, output_class, container_registry): #Mock some dependencies. UM.Settings.ContainerStack.setContainerRegistry(container_registry) Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. - def findContainers(id, container_type = 0): - if id == "some_instance" or id == "some_definition": + + def findContainers(container_type = 0, id = None): + if id == "some_instance": return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + elif id == "some_definition": + return [DefinitionContainer(container_id = id)] else: return [] + container_registry.findContainers = findContainers with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): From 4bdbe42dcbc8764f0708514d4a46532dd11f33a8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 2 May 2017 11:21:17 +0200 Subject: [PATCH 510/816] Fixed type hinting issues CURA-3497 --- cura/Settings/CuraContainerStack.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index c010bc7c1e..733d981732 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -17,6 +17,7 @@ from UM.Settings.Interfaces import ContainerInterface from . import Exceptions + ## Base class for Cura related stacks that want to enforce certain containers are available. # # This class makes sure that the stack has the following containers set: user changes, quality @@ -306,7 +307,7 @@ class CuraContainerStack(ContainerStack): # Since we have a fixed order of containers in the stack and this method would modify the container # ordering, we disallow this operation. @override(ContainerStack) - def removeContainer(self, index: int) -> None: + def removeContainer(self, index: int = 0) -> None: raise Exceptions.InvalidOperationError("Cannot remove a container from Global stack") ## Overridden from ContainerStack @@ -339,7 +340,7 @@ class CuraContainerStack(ContainerStack): super().deserialize(contents) new_containers = self._containers.copy() - while(len(new_containers) < len(_ContainerIndexes.IndexTypeMap)): + while len(new_containers) < len(_ContainerIndexes.IndexTypeMap): new_containers.append(self._empty_instance_container) # Validate and ensure the list of containers matches with what we expect @@ -555,7 +556,7 @@ class CuraContainerStack(ContainerStack): # 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. - def _getMachineDefinition(self) -> ContainerInterface: + def _getMachineDefinition(self) -> DefinitionContainer: return self.definition ## Find the ID that should be used when searching for instance containers for a specified definition. From 3dae6b4bbfbe2db463582c7334b0ae317d9a6337 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 2 May 2017 11:58:48 +0200 Subject: [PATCH 511/816] Fixed machine not being set --- cura/Settings/ExtruderStack.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index a95ba604e7..519e09cb42 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -33,10 +33,7 @@ class ExtruderStack(CuraContainerStack): def setNextStack(self, stack: ContainerStack) -> None: super().setNextStack(stack) stack.addExtruder(self) - if not self.getMetaDataEntry("machine"): - self.addMetaDataEntry("machine", stack.id) - else: - self.setMetaDataEntry("machine", stack.id) + self.addMetaDataEntry("machine", stack.id) # For backward compatibility: Register the extruder with the Extruder Manager ExtruderManager.getInstance().registerExtruder(self, stack.id) From bb0e9c3fdc7c1ee98313d0cc60d1f81970d1c539 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 2 May 2017 12:36:25 +0200 Subject: [PATCH 512/816] Split interface line distance into two in user's profiles This hasn't been deep-tested yet, but I assume that'll happen when the plug-in is reactivated in the source code. Contributes to issue CURA-3491. --- .../VersionUpgrade24to25.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py b/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py index 99a0f95a77..9e27759285 100644 --- a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py +++ b/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py @@ -10,6 +10,10 @@ _removed_settings = { #Settings that were removed in 2.5. "start_layers_at_same_position" } +_split_settings = { #These settings should be copied to all settings it was split into. + "support_interface_line_distance": {"support_roof_line_distance", "support_bottom_line_distance"} +} + ## A collection of functions that convert the configuration of the user in Cura # 2.4 to a configuration for Cura 2.5. # @@ -42,7 +46,15 @@ class VersionUpgrade24to25(VersionUpgrade): #Remove settings from the visible_settings. if parser.has_section("general") and "visible_settings" in parser["general"]: visible_settings = parser["general"]["visible_settings"].split(";") - visible_settings = filter(lambda setting: setting not in _removed_settings, visible_settings) + new_visible_settings = [] + for setting in visible_settings: + if setting in _removed_settings: + continue #Skip. + if setting in _split_settings: + for replaced_setting in _split_settings[setting]: + new_visible_settings.append(replaced_setting) + continue #Don't add the original. + new_visible_settings.append(setting) #No special handling, so just add the original visible setting back. parser["general"]["visible_settings"] = ";".join(visible_settings) #Change the version number in the file. @@ -66,6 +78,10 @@ class VersionUpgrade24to25(VersionUpgrade): if parser.has_section("values"): for removed_setting in (_removed_settings & parser["values"].keys()): #Both in keys that need to be removed and in keys present in the file. del parser["values"][removed_setting] + for replaced_setting in (_split_settings.keys() & parser["values"].keys()): + for replacement in _split_settings[replaced_setting]: + parser["values"][replacement] = parser["values"][replaced_setting] #Copy to replacement before removing the original! + del replaced_setting #Change the version number in the file. if parser.has_section("general"): From 0e1748b705709e5940babae9abdf5065535797da Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 2 May 2017 12:55:37 +0200 Subject: [PATCH 513/816] Small layout fix so the comboboxes are aligned --- resources/qml/Preferences/GeneralPage.qml | 133 ++++++++++------------ 1 file changed, 60 insertions(+), 73 deletions(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 85039b3c32..689f7aafa9 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -126,9 +126,11 @@ UM.PreferencesPage text: catalog.i18nc("@label","Interface") } - Row + GridLayout { - spacing: UM.Theme.getSize("default_margin").width + id: interfaceGrid + columns: 4 + Label { id: languageLabel @@ -189,94 +191,79 @@ UM.PreferencesPage { id: currencyLabel text: catalog.i18nc("@label","Currency:") - anchors.verticalCenter: languageComboBox.verticalCenter + anchors.verticalCenter: currencyField.verticalCenter } + TextField { id: currencyField text: UM.Preferences.getValue("cura/currency") onTextChanged: UM.Preferences.setValue("cura/currency", text) } + + Label + { + id: themeLabel + text: catalog.i18nc("@label","Theme:") + anchors.verticalCenter: themeComboBox.verticalCenter + } + + ComboBox + { + id: themeComboBox + + model: ListModel + { + id: themeList + + Component.onCompleted: { + append({ text: catalog.i18nc("@item:inlistbox", "Ultimaker"), code: "cura" }) + } + } + + currentIndex: + { + var code = UM.Preferences.getValue("general/theme"); + for(var i = 0; i < themeList.count; ++i) + { + if(model.get(i).code == code) + { + return i + } + } + } + onActivated: UM.Preferences.setValue("general/theme", model.get(index).code) + + Component.onCompleted: + { + // Because ListModel is stupid and does not allow using qsTr() for values. + for(var i = 0; i < themeList.count; ++i) + { + themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text)); + } + + // Glorious hack time. ComboBox does not update the text properly after changing the + // model. So change the indices around to force it to update. + currentIndex += 1; + currentIndex -= 1; + } + + } } - Label + + + + Label { id: languageCaption //: Language change warning - text: catalog.i18nc("@label", "You will need to restart the application for language changes to have effect.") + text: catalog.i18nc("@label", "You will need to restart the application for these changes to have effect.") wrapMode: Text.WordWrap font.italic: true } - Item - { - //: Spacer - height: UM.Theme.getSize("default_margin").height - width: UM.Theme.getSize("default_margin").width - } - - Row - { - spacing: UM.Theme.getSize("default_margin").width - Label - { - id: themeLabel - text: catalog.i18nc("@label","Theme:") - anchors.verticalCenter: themeComboBox.verticalCenter - } - - ComboBox - { - id: themeComboBox - model: ListModel - { - id: themeList - - Component.onCompleted: { - append({ text: catalog.i18nc("@item:inlistbox", "Ultimaker"), code: "cura" }) - } - } - - currentIndex: - { - var code = UM.Preferences.getValue("general/theme"); - for(var i = 0; i < themeList.count; ++i) - { - if(model.get(i).code == code) - { - return i - } - } - } - onActivated: UM.Preferences.setValue("general/theme", model.get(index).code) - - Component.onCompleted: - { - // Because ListModel is stupid and does not allow using qsTr() for values. - for(var i = 0; i < themeList.count; ++i) - { - themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text)); - } - - // Glorious hack time. ComboBox does not update the text properly after changing the - // model. So change the indices around to force it to update. - currentIndex += 1; - currentIndex -= 1; - } - } - } - - Label - { - id: themeCaption - - //: Theme change warning - text: catalog.i18nc("@label", "You will need to restart the application for theme changes to have effect.") - wrapMode: Text.WordWrap - font.italic: true - } - Item { //: Spacer From 7a9a4ae290ac873f9fa33de640b5debab488b214 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 2 May 2017 12:57:44 +0200 Subject: [PATCH 514/816] Revert "Change Label to Text because of ugle font rendering" This reverts commit 8c9eccd1f4f49a0d0584b3f56985f4fa16e48915. This element is in a modal window, where the fonts should get the system themeing. --- resources/qml/AddMachineDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml index ba3f40260d..756badc4d2 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/AddMachineDialog.qml @@ -180,7 +180,7 @@ UM.Dialog anchors.bottom:parent.bottom spacing: UM.Theme.getSize("default_margin").width - Text + Label { text: catalog.i18nc("@label", "Printer Name:") anchors.verticalCenter: machineName.verticalCenter From d006db5b2c961bd2d517eb656163c255c62d1737 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 2 May 2017 13:38:28 +0200 Subject: [PATCH 515/816] Slightly reduce minimum window size This should make it possible to work with Cura on 1024x768 screens. I interpolated this from the 800p screens, since it seems to render smaller on my computer anyway. --- resources/themes/cura/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index da58af4c14..5f0b3656c8 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -247,7 +247,7 @@ }, "sizes": { - "window_minimum_size": [70, 54], + "window_minimum_size": [70, 50], "window_margin": [1.0, 1.0], "default_margin": [1.0, 1.0], "default_lining": [0.08, 0.08], From 5176b98f6e3a54ac31924307568c63245bfc21c7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 2 May 2017 13:58:11 +0200 Subject: [PATCH 516/816] Set the correct result in visible settings Oops. Contributes to issue CURA-3491. --- .../VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py b/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py index 9e27759285..1af2e7405a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py +++ b/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py @@ -55,7 +55,7 @@ class VersionUpgrade24to25(VersionUpgrade): new_visible_settings.append(replaced_setting) continue #Don't add the original. new_visible_settings.append(setting) #No special handling, so just add the original visible setting back. - parser["general"]["visible_settings"] = ";".join(visible_settings) + parser["general"]["visible_settings"] = ";".join(new_visible_settings) #Change the version number in the file. if parser.has_section("general"): #It better have! From 58ab9dcd094240d797a9c8044e95c7b788dd5d0b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 2 May 2017 17:00:26 +0200 Subject: [PATCH 517/816] Fixed wrong typehinting --- cura/Settings/CuraStackBuilder.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 27844d895a..a85bae76af 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -10,6 +10,8 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from .GlobalStack import GlobalStack from .ExtruderStack import ExtruderStack from .CuraContainerStack import CuraContainerStack +from typing import Optional + ## Contains helper functions to create new machines. class CuraStackBuilder: @@ -20,7 +22,7 @@ class CuraStackBuilder: # # \return The new global stack or None if an error occurred. @classmethod - def createMachine(cls, name: str, definition_id: str) -> GlobalStack: + def createMachine(cls, name: str, definition_id: str) -> Optional[GlobalStack]: registry = ContainerRegistry.getInstance() definitions = registry.findDefinitionContainers(id = definition_id) if not definitions: From b6a5e5a1af8769ade8a11521f659343f7d76cdb5 Mon Sep 17 00:00:00 2001 From: Robert Colbert Date: Tue, 2 May 2017 12:51:34 -0500 Subject: [PATCH 518/816] Added VCP serial device support for USB Printing on Windows. --- .vs/ProjectSettings.json | 3 +++ .vs/slnx.sqlite | Bin 0 -> 335872 bytes .../USBPrinterOutputDeviceManager.py | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/slnx.sqlite diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000000..38c5f003cf --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "x86-Debug" +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..31a77ac752aa276a7389c0748f61ff783c65b065 GIT binary patch literal 335872 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 jNzDsUdWwuHOOFZQ6~(gfh&WMDwh&bw5XNOWK literal 0 HcmV?d00001 diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 5b1d0b8dac..7a62a59a45 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -259,7 +259,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): i = 0 while True: values = winreg.EnumValue(key, i) - if not only_list_usb or "USBSER" in values[0]: + if not only_list_usb or "USBSER" or "VCP" in values[0]: base_list += [values[1]] i += 1 except Exception as e: From 0452cffff9e1504e832fc95bf81dc4b42b488feb Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 3 May 2017 09:37:12 +0200 Subject: [PATCH 519/816] Fix setting active extruder when changing Custom FDM printer extruders. CURA-3299 --- plugins/MachineSettingsAction/MachineSettingsAction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 plugins/MachineSettingsAction/MachineSettingsAction.py diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py old mode 100644 new mode 100755 index 995a07eac4..32053d32ab --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -186,8 +186,8 @@ class MachineSettingsAction(MachineAction): if node.getMeshData(): extruder_nr = node.callDecoration("getActiveExtruderPosition") - if extruder_nr is not None and extruder_nr > extruder_count - 1: - node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count -1).getId()) + if extruder_nr is not None and int(extruder_nr) > extruder_count - 1: + node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count - 1).getId()) definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) self.forceUpdate() From 8d80f20db7acb21bc3ec25979c2c1b6702607d52 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 09:54:00 +0200 Subject: [PATCH 520/816] Added way to dynamicly set loading order This is to ensure that Global stacks are loaded before extruders, so once the extruders are deseralized, they can always find the next (global) stack CURA-3497 --- cura/Settings/ExtruderStack.py | 11 +++++++++++ cura/Settings/GlobalStack.py | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 519e09cb42..18a9969828 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -38,6 +38,10 @@ class ExtruderStack(CuraContainerStack): # For backward compatibility: Register the extruder with the Extruder Manager ExtruderManager.getInstance().registerExtruder(self, stack.id) + @classmethod + def getLoadingPriority(cls) -> int: + return 3 + ## Overridden from ContainerStack # # It will perform a few extra checks when trying to get properties. @@ -64,6 +68,13 @@ class ExtruderStack(CuraContainerStack): return self.getNextStack()._getMachineDefinition() + @override(CuraContainerStack) + def deserialize(self, contents: str) -> None: + super().deserialize(contents) + stacks = ContainerRegistry.getInstance().findContainerStacks(id=self.getMetaDataEntry("machine", "")) + if stacks: + self.setNextStack(stacks[0]) + extruder_stack_mime = MimeType( name = "application/x-cura-extruderstack", comment = "Cura Extruder Stack", diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index c86c496516..0e2c2db5e8 100644 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -40,6 +40,10 @@ class GlobalStack(CuraContainerStack): def extruders(self) -> list: return self._extruders + @classmethod + def getLoadingPriority(cls) -> int: + return 2 + ## Add an extruder to the list of extruders of this stack. # # \param extruder The extruder to add. From a028297cb23da57ded1e39467b065b7bd80a0465 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 10:15:18 +0200 Subject: [PATCH 521/816] Machine manager now uses the new specific setters to switch instanceContainers CURA-3497 --- cura/Settings/MachineManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4670059ddf..57b1f5f976 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -266,11 +266,11 @@ class MachineManager(QObject): # that did not specify a value in the extruder. global_variant = self._global_container_stack.findContainer(type = "variant") if global_variant != self._empty_variant_container: - self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_variant), self._empty_variant_container) + self._global_container_stack.setVariant(self._empty_variant_container) global_material = self._global_container_stack.findContainer(type = "material") if global_material != self._empty_material_container: - self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_material), self._empty_material_container) + self._global_container_stack.setMaterial(self._empty_material_container) for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): #Listen for changes on all extruder stacks. extruder_stack.propertyChanged.connect(self._onPropertyChanged) From 0b57fa0bcb164d9062eb509fa981e0bea30ac311 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 1 May 2017 10:38:38 +0200 Subject: [PATCH 522/816] Hide Top/Bottom and Inner Wall legends in "Material Color" CURA-3730 --- plugins/LayerView/LayerView.qml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 3078b278df..7bdc425edf 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -273,17 +273,20 @@ Item { typesLegenModelNoCheck.append({ label: catalog.i18nc("@label", "Top / Bottom"), - colorId: "layerview_skin" + colorId: "layerview_skin", + visible: UM.Preferences.getValue("layerview/layer_view_type") != 0 }); typesLegenModelNoCheck.append({ label: catalog.i18nc("@label", "Inner Wall"), - colorId: "layerview_inset_x" + colorId: "layerview_inset_x", + visible: UM.Preferences.getValue("layerview/layer_view_type") != 0 }); } } Label { text: label + visible: model.visible && view_settings.show_legend Rectangle { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right @@ -292,7 +295,7 @@ Item color: UM.Theme.getColor(model.colorId) border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") - visible: view_settings.show_legend + visible: model.visible && view_settings.show_legend } Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height From ab6240bd312d7669e9a5b482000842ff885d6e00 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 10:38:31 +0200 Subject: [PATCH 523/816] Replace quality(changes) in machine manager now uses new API as well CURA-3497 --- cura/Settings/MachineManager.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 57b1f5f976..8e106c8360 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -906,18 +906,15 @@ class MachineManager(QObject): def _replaceQualityOrQualityChangesInStack(self, stack, container, postpone_emit = False): # Disconnect the signal handling from the old container. - old_container = stack.findContainer(type=container.getMetaDataEntry("type")) - if old_container: - old_container.nameChanged.disconnect(self._onQualityNameChanged) - else: - Logger.log("e", "Could not find container of type %s in stack %s while replacing quality (changes) with container %s", container.getMetaDataEntry("type"), stack.getId(), container.getId()) - return - - # Swap in the new container into the stack. - stack.replaceContainer(stack.getContainerIndex(old_container), container, postpone_emit = postpone_emit) - - # Attach the needed signal handling. - container.nameChanged.connect(self._onQualityNameChanged) + container_type = container.getMetaDataEntry("type") + if container_type == "quality": + stack.quality.nameChanged.disconnect(self._onQualityNameChanged) + stack.setQuality(container) + stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) + elif container_type == "quality_changes": + stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) + stack.setQualityChanges(container) + stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) def _askUserToKeepOrClearCurrentSettings(self): Application.getInstance().discardOrKeepProfileChanges() From ac560229a1190b8b9e51a8be50c2b4e42e6f1bb9 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 3 May 2017 10:45:39 +0200 Subject: [PATCH 524/816] Fix TypeError in JobSpec.qml due to material cost being undefined --- resources/qml/JobSpecs.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 54b559f794..6013117728 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -212,8 +212,9 @@ Item { { lengths.push(base.printMaterialLengths[index].toFixed(2)); weights.push(String(Math.floor(base.printMaterialWeights[index]))); - costs.push(base.printMaterialCosts[index].toFixed(2)); - if(base.printMaterialCosts[index] > 0) + var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); + costs.push(cost); + if(cost > 0) { someCostsKnown = true; } From f062322ebf60d561be355c7dbbc370b490515227 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 10:59:07 +0200 Subject: [PATCH 525/816] Switching from dual extrusion to single extrusion machine is now possible again CURA-3497 --- cura/PrintInformation.py | 5 ++++- cura/Settings/MachineManager.py | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 1eb7aaa7dd..cdb558b77c 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -183,7 +183,10 @@ class PrintInformation(QObject): def _onActiveMaterialChanged(self): if self._active_material_container: - self._active_material_container.metaDataChanged.disconnect(self._onMaterialMetaDataChanged) + try: + self._active_material_container.metaDataChanged.disconnect(self._onMaterialMetaDataChanged) + except TypeError: + pass active_material_id = Application.getInstance().getMachineManager().activeMaterialId active_material_containers = ContainerRegistry.getInstance().findInstanceContainers(id=active_material_id) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 8e106c8360..2567d76972 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -234,14 +234,16 @@ class MachineManager(QObject): def _onGlobalContainerChanged(self): if self._global_container_stack: - self._global_container_stack.nameChanged.disconnect(self._onMachineNameChanged) - self._global_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) - self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) - - material = self._global_container_stack.findContainer({"type": "material"}) + try: + self._global_container_stack.nameChanged.disconnect(self._onMachineNameChanged) + self._global_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) + self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) + except: + pass + material = self._global_container_stack.material material.nameChanged.disconnect(self._onMaterialNameChanged) - quality = self._global_container_stack.findContainer({"type": "quality"}) + quality = self._global_container_stack.quality quality.nameChanged.disconnect(self._onQualityNameChanged) if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: @@ -264,11 +266,11 @@ class MachineManager(QObject): # For multi-extrusion machines, we do not want variant or material profiles in the stack, # because these are extruder specific and may cause wrong values to be used for extruders # that did not specify a value in the extruder. - global_variant = self._global_container_stack.findContainer(type = "variant") + global_variant = self._global_container_stack.variant if global_variant != self._empty_variant_container: self._global_container_stack.setVariant(self._empty_variant_container) - global_material = self._global_container_stack.findContainer(type = "material") + global_material = self._global_container_stack.material if global_material != self._empty_material_container: self._global_container_stack.setMaterial(self._empty_material_container) @@ -277,10 +279,10 @@ class MachineManager(QObject): extruder_stack.containersChanged.connect(self._onInstanceContainersChanged) else: - material = self._global_container_stack.findContainer({"type": "material"}) + material = self._global_container_stack.material material.nameChanged.connect(self._onMaterialNameChanged) - quality = self._global_container_stack.findContainer({"type": "quality"}) + quality = self._global_container_stack.quality quality.nameChanged.connect(self._onQualityNameChanged) self._updateStacksHaveErrors() From c8f823154cb9a901e34bcb3e6db386cf4c92a109 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 11:10:39 +0200 Subject: [PATCH 526/816] Instead of searching for a container with type, we now use the newly introduced properties CURA-3497 --- cura/Settings/MachineManager.py | 58 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2567d76972..fd74c2e13c 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -472,7 +472,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeMaterialChanged) def activeMaterialName(self) -> str: if self._active_container_stack: - material = self._active_container_stack.findContainer({"type":"material"}) + material = self._active_container_stack.material if material: return material.getName() @@ -483,7 +483,7 @@ class MachineManager(QObject): result = [] if ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() is not None: for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): - variant_container = stack.findContainer({"type": "variant"}) + variant_container = stack.variant if variant_container and variant_container != self._empty_variant_container: result.append(variant_container.getName()) @@ -494,7 +494,7 @@ class MachineManager(QObject): result = [] if ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() is not None: for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): - material_container = stack.findContainer(type="material") + material_container = stack.material if material_container and material_container != self._empty_material_container: result.append(material_container.getName()) return result @@ -502,7 +502,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify=activeMaterialChanged) def activeMaterialId(self) -> str: if self._active_container_stack: - material = self._active_container_stack.findContainer({"type": "material"}) + material = self._active_container_stack.material if material: return material.getId() @@ -516,7 +516,7 @@ class MachineManager(QObject): result = {} for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): - material_container = stack.findContainer(type = "material") + material_container = stack.material if not material_container: continue @@ -535,13 +535,13 @@ class MachineManager(QObject): if not self._global_container_stack: return 0 - quality_changes = self._global_container_stack.findContainer({"type": "quality_changes"}) + quality_changes = self._global_container_stack.qualityChanges if quality_changes: value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality_changes.getId()) if isinstance(value, SettingFunction): value = value(self._global_container_stack) return value - quality = self._global_container_stack.findContainer({"type": "quality"}) + quality = self._global_container_stack.quality if quality: value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality.getId()) if isinstance(value, SettingFunction): @@ -555,7 +555,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify=activeQualityChanged) def activeQualityMaterialId(self) -> str: if self._active_container_stack: - quality = self._active_container_stack.findContainer({"type": "quality"}) + quality = self._active_container_stack.quality if quality: material_id = quality.getMetaDataEntry("material") if material_id: @@ -572,10 +572,10 @@ class MachineManager(QObject): @pyqtProperty(str, notify=activeQualityChanged) def activeQualityName(self): if self._active_container_stack and self._global_container_stack: - quality = self._global_container_stack.findContainer({"type": "quality_changes"}) + quality = self._global_container_stack.qualityChanges if quality and quality != self._empty_quality_changes_container: return quality.getName() - quality = self._active_container_stack.findContainer({"type": "quality"}) + quality = self._active_container_stack.quality if quality: return quality.getName() return "" @@ -583,10 +583,10 @@ class MachineManager(QObject): @pyqtProperty(str, notify=activeQualityChanged) def activeQualityId(self): if self._active_container_stack: - quality = self._active_container_stack.findContainer({"type": "quality_changes"}) + quality = self._active_container_stack.qualityChanges if quality and quality != self._empty_quality_changes_container: return quality.getId() - quality = self._active_container_stack.findContainer({"type": "quality"}) + quality = self._active_container_stack.quality if quality: return quality.getId() return "" @@ -594,10 +594,10 @@ class MachineManager(QObject): @pyqtProperty(str, notify=activeQualityChanged) def globalQualityId(self): if self._global_container_stack: - quality = self._global_container_stack.findContainer({"type": "quality_changes"}) + quality = self._global_container_stack.qualityChanges if quality and quality != self._empty_quality_changes_container: return quality.getId() - quality = self._global_container_stack.findContainer({"type": "quality"}) + quality = self._global_container_stack.quality if quality: return quality.getId() return "" @@ -605,7 +605,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeQualityChanged) def activeQualityType(self): if self._active_container_stack: - quality = self._active_container_stack.findContainer(type = "quality") + quality = self._active_container_stack.quality if quality: return quality.getMetaDataEntry("quality_type") return "" @@ -613,7 +613,7 @@ class MachineManager(QObject): @pyqtProperty(bool, notify = activeQualityChanged) def isActiveQualitySupported(self): if self._active_container_stack: - quality = self._active_container_stack.findContainer(type = "quality") + quality = self._active_container_stack.quality if quality: return Util.parseBool(quality.getMetaDataEntry("supported", True)) return False @@ -628,7 +628,7 @@ class MachineManager(QObject): def activeQualityContainerId(self): # We're using the active stack instead of the global stack in case the list of qualities differs per extruder if self._global_container_stack: - quality = self._active_container_stack.findContainer(type = "quality") + quality = self._active_container_stack.quality if quality: return quality.getId() return "" @@ -636,7 +636,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeQualityChanged) def activeQualityChangesId(self): if self._active_container_stack: - changes = self._active_container_stack.findContainer(type = "quality_changes") + changes = self._active_container_stack.qualityChanges if changes: return changes.getId() return "" @@ -674,9 +674,9 @@ class MachineManager(QObject): Logger.log("d", "Attempting to change the active material to %s", material_id) - old_material = self._active_container_stack.findContainer({"type": "material"}) - old_quality = self._active_container_stack.findContainer({"type": "quality"}) - old_quality_changes = self._active_container_stack.findContainer({"type": "quality_changes"}) + old_material = self._active_container_stack.material + old_quality = self._active_container_stack.quality + old_quality_changes = self._active_container_stack.qualityChanges if not old_material: Logger.log("w", "While trying to set the active material, no material was found to replace it.") return @@ -737,8 +737,8 @@ class MachineManager(QObject): if not containers or not self._active_container_stack: return Logger.log("d", "Attempting to change the active variant to %s", variant_id) - old_variant = self._active_container_stack.findContainer({"type": "variant"}) - old_material = self._active_container_stack.findContainer({"type": "material"}) + old_variant = self._active_container_stack.variant + old_material = self._active_container_stack.material if old_variant: self.blurSettings.emit() variant_index = self._active_container_stack.getContainerIndex(old_variant) @@ -829,7 +829,7 @@ class MachineManager(QObject): stacks = [global_container_stack] for stack in stacks: - material = stack.findContainer(type="material") + material = stack.material quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) if not quality: #No quality profile is found for this quality type. quality = self._empty_quality_container @@ -866,7 +866,7 @@ class MachineManager(QObject): else: Logger.log("e", "Could not find the global quality changes container with name %s", quality_changes_name) return None - material = global_container_stack.findContainer(type="material") + material = global_container_stack.material # For the global stack, find a quality which matches the quality_type in # the quality changes profile and also satisfies any material constraints. @@ -889,7 +889,7 @@ class MachineManager(QObject): else: quality_changes = global_quality_changes - material = stack.findContainer(type="material") + material = stack.material quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) if not quality: #No quality profile found for this quality type. quality = self._empty_quality_container @@ -924,7 +924,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self): if self._active_container_stack: - variant = self._active_container_stack.findContainer({"type": "variant"}) + variant = self._active_container_stack.variant if variant: return variant.getName() @@ -933,7 +933,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeVariantChanged) def activeVariantId(self): if self._active_container_stack: - variant = self._active_container_stack.findContainer({"type": "variant"}) + variant = self._active_container_stack.variant if variant: return variant.getId() @@ -979,7 +979,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeVariantChanged) def activeQualityVariantId(self): if self._active_container_stack: - variant = self._active_container_stack.findContainer({"type": "variant"}) + variant = self._active_container_stack.variant if variant: return self.getQualityVariantId(self._global_container_stack.getBottom(), variant) return "" From d83b4daf78b7f773598966a0b90f34779ad34f67 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 11:23:59 +0200 Subject: [PATCH 527/816] Switching from quality_changes to quality profile is now possible again CURA-3497 --- cura/Settings/MachineManager.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index fd74c2e13c..ef16142ca7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -912,11 +912,14 @@ class MachineManager(QObject): if container_type == "quality": stack.quality.nameChanged.disconnect(self._onQualityNameChanged) stack.setQuality(container) - stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) - elif container_type == "quality_changes": + stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) + elif container_type == "quality_changes" or container_type is None: + # If the container is an empty container, we need to change the quality_changes. + # Quality can never be set to empty. stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) stack.setQualityChanges(container) - stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) + stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) + self._onQualityNameChanged() def _askUserToKeepOrClearCurrentSettings(self): Application.getInstance().discardOrKeepProfileChanges() From 9a46a24b199e647b8d8a4bbd3fac851f9b232d81 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 3 May 2017 13:13:09 +0200 Subject: [PATCH 528/816] Profile menu now correctly marks active qualties as checked CURA-3497 --- cura/Settings/MachineManager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ef16142ca7..e01c16849a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -573,7 +573,7 @@ class MachineManager(QObject): def activeQualityName(self): if self._active_container_stack and self._global_container_stack: quality = self._global_container_stack.qualityChanges - if quality and quality != self._empty_quality_changes_container: + if quality and not isinstance(quality, type(self._empty_quality_changes_container)): return quality.getName() quality = self._active_container_stack.quality if quality: @@ -584,7 +584,7 @@ class MachineManager(QObject): def activeQualityId(self): if self._active_container_stack: quality = self._active_container_stack.qualityChanges - if quality and quality != self._empty_quality_changes_container: + if quality and not isinstance(quality, type(self._empty_quality_changes_container)): return quality.getId() quality = self._active_container_stack.quality if quality: @@ -595,7 +595,7 @@ class MachineManager(QObject): def globalQualityId(self): if self._global_container_stack: quality = self._global_container_stack.qualityChanges - if quality and quality != self._empty_quality_changes_container: + if quality and not isinstance(quality, type(self._empty_quality_changes_container)): return quality.getId() quality = self._global_container_stack.quality if quality: @@ -637,7 +637,7 @@ class MachineManager(QObject): def activeQualityChangesId(self): if self._active_container_stack: changes = self._active_container_stack.qualityChanges - if changes: + if changes and changes.getId() != "empty": return changes.getId() return "" From aad623fab657c09101acc768b7b82e813b89d904 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 3 May 2017 13:16:19 +0200 Subject: [PATCH 529/816] Correct a typo in CuraContainerStack::findDefaultQuality Contributes to CURA-3497 --- 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 733d981732..6f475a5ff9 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -516,7 +516,7 @@ class CuraContainerStack(ContainerStack): # Try to find qualities for a generic version of the material. material_search_criteria = {"type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} if definition.getMetaDataEntry("has_machine_quality"): - if self.material != self._em: + if self.material != self._empty_instance_container: material_search_criteria["definition"] = material_container.getDefinition().id if definition.getMetaDataEntry("has_variants"): From d95488a9401ec5f9ac20512583797ef007efa051 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Wed, 3 May 2017 13:16:57 +0200 Subject: [PATCH 530/816] Use the new stack properties so we can properly create quality changes Contributes to CURA-3497 --- cura/Settings/ContainerManager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index bac11f78cf..817df7e46e 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -429,7 +429,7 @@ class ContainerManager(QObject): for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): # Find the quality_changes container for this stack and merge the contents of the top container into it. - quality_changes = stack.findContainer(type = "quality_changes") + quality_changes = stack.qualityChanges if not quality_changes or quality_changes.isReadOnly(): Logger.log("e", "Could not update quality of a nonexistant or read only quality profile in stack %s", stack.getId()) continue @@ -482,8 +482,8 @@ class ContainerManager(QObject): # Go through the active stacks and create quality_changes containers from the user containers. for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): user_container = stack.getTop() - quality_container = stack.findContainer(type = "quality") - quality_changes_container = stack.findContainer(type = "quality_changes") + quality_container = stack.quality + quality_changes_container = stack.qualityChanges if not quality_container or not quality_changes_container: Logger.log("w", "No quality or quality changes container found in stack %s, ignoring it", stack.getId()) continue @@ -604,7 +604,7 @@ class ContainerManager(QObject): machine_definition = global_stack.getBottom() active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() - material_containers = [stack.findContainer(type="material") for stack in active_stacks] + material_containers = [stack.material for stack in active_stacks] result = self._duplicateQualityOrQualityChangesForMachineType(quality_name, base_name, QualityManager.getInstance().getParentMachineDefinition(machine_definition), From 155f01356a3294f4e00bb878a7374763b68c9b17 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 3 May 2017 13:30:49 +0200 Subject: [PATCH 531/816] Set job name when opening a file from CLI CURA-3711 --- cura/CuraApplication.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index f099c4db77..69990ceb4b 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1277,6 +1277,8 @@ class CuraApplication(QtApplication): arranger = Arrange.create(scene_root = root) min_offset = 8 + self.fileLoaded.emit(filename) + for node in nodes: node.setSelectable(True) node.setName(os.path.basename(filename)) From a5033bae54c8061eece264f6e272c8924284b3aa Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 3 May 2017 13:40:33 +0200 Subject: [PATCH 532/816] Enable Support settings that are applicable to support meshes. CURA-2747 --- resources/definitions/fdmprinter.def.json | 50 +++++++++++------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index b9c43fac2f..99cfede396 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2989,7 +2989,7 @@ "description": "The extruder train to use for printing the support. This is used in multi-extrusion.", "type": "extruder", "default_value": "0", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": { @@ -3000,7 +3000,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3011,7 +3011,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3022,7 +3022,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": @@ -3034,7 +3034,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3045,7 +3045,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "support_enable and machine_extruder_count > 1", + "enabled": "machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false } @@ -3098,7 +3098,7 @@ "zigzag": "Zig Zag" }, "default_value": "zigzag", - "enabled": "support_enable", + "enabled": true, "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3109,7 +3109,7 @@ "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.", "type": "bool", "default_value": true, - "enabled": "support_enable and (support_pattern == 'zigzag')", + "enabled": "support_pattern == 'zigzag'", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3123,7 +3123,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "default_value": 15, - "enabled": "support_enable", + "enabled": true, "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3138,7 +3138,7 @@ "minimum_value": "0", "minimum_value_warning": "support_line_width", "default_value": 2.66, - "enabled": "support_enable", + "enabled": true, "value": "(support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -3291,7 +3291,7 @@ "type": "bool", "default_value": false, "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_enable", + "enabled": true, "settable_per_mesh": true, "children": { @@ -3303,7 +3303,7 @@ "default_value": false, "value": "support_interface_enable", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_enable", + "enabled": true, "settable_per_mesh": true }, "support_bottom_enable": @@ -3314,7 +3314,7 @@ "default_value": false, "value": "support_interface_enable", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_enable", + "enabled": true, "settable_per_mesh": true } } @@ -3330,7 +3330,7 @@ "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "maximum_value_warning": "10", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", "settable_per_mesh": true, "children": { @@ -3346,7 +3346,7 @@ "maximum_value_warning": "10", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", "settable_per_mesh": true }, "support_bottom_height": @@ -3361,7 +3361,7 @@ "minimum_value_warning": "min(0.2 + resolveOrValue('layer_height'), extruderValue(support_bottom_extruder_nr, 'support_bottom_stair_step_height'))", "maximum_value_warning": "10", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", "settable_per_mesh": true } } @@ -3375,7 +3375,7 @@ "minimum_value": "0", "maximum_value_warning": "support_interface_height", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", "settable_per_mesh": true }, "support_interface_density": @@ -3388,7 +3388,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3403,7 +3403,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3419,7 +3419,7 @@ "minimum_value_warning": "support_roof_line_width - 0.0001", "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", "settable_per_mesh": false, "settable_per_extruder": true } @@ -3435,7 +3435,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3451,7 +3451,7 @@ "minimum_value_warning": "support_bottom_line_width - 0.0001", "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", "settable_per_mesh": false, "settable_per_extruder": true } @@ -3475,7 +3475,7 @@ }, "default_value": "concentric", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3497,7 +3497,7 @@ "default_value": "concentric", "value": "support_interface_pattern", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -3518,7 +3518,7 @@ "default_value": "concentric", "value": "support_interface_pattern", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", "settable_per_mesh": false, "settable_per_extruder": true } From c2dff9fcd93922bf4aca53c81f5a4025037debb5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 3 May 2017 13:58:58 +0200 Subject: [PATCH 533/816] Accept Enter key on UM3 Add Printer Dialog --- plugins/UM3NetworkPrinting/DiscoverUM3Action.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml index a80ed1d179..f424dbf523 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml @@ -342,6 +342,8 @@ Cura.MachineAction { regExp: /[a-zA-Z0-9\.\-\_]*/ } + + onAccepted: btnOk.click() } } @@ -355,6 +357,7 @@ Cura.MachineAction } }, Button { + id: btnOk text: catalog.i18nc("@action:button", "Ok") onClicked: { From 163543b86b33edd6812c23bfd9ed596a2a675958 Mon Sep 17 00:00:00 2001 From: Randall Wessel Date: Wed, 3 May 2017 14:26:44 +0200 Subject: [PATCH 534/816] Make background color of toggle button themeable Background of toggle button gets same color as toolbar surrounding the button. --- resources/qml/Sidebar.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 132d1d2f41..8a6e44b784 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -348,6 +348,7 @@ Rectangle Rectangle { id: settingsModeSelection + color: UM.Theme.getColor("tool_panel_background") width: parent.width * 0.55 height: UM.Theme.getSize("sidebar_header_mode_toggle").height anchors.right: parent.right From 86f1a0559f678d471d374c69397e6b3fbadc5031 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 14:56:52 +0200 Subject: [PATCH 535/816] Add documentation and further specify except around disconnecting signals Catch just a TypeError instead of all exceptions. Added documentation to say why we catch a TypeError there. Also splitted up the try-except block for the 3 disconnects, just so that if the first fails we still try to disconnect from the other two. Contributes to issue CURA-3497. --- cura/PrintInformation.py | 2 +- cura/Settings/MachineManager.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index cdb558b77c..ab63e4034d 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -185,7 +185,7 @@ class PrintInformation(QObject): if self._active_material_container: try: self._active_material_container.metaDataChanged.disconnect(self._onMaterialMetaDataChanged) - except TypeError: + except TypeError: #pyQtSignal gives a TypeError when disconnecting from something that is already disconnected. pass active_material_id = Application.getInstance().getMachineManager().activeMaterialId diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e01c16849a..f94bffc643 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -236,9 +236,15 @@ class MachineManager(QObject): if self._global_container_stack: try: self._global_container_stack.nameChanged.disconnect(self._onMachineNameChanged) + except TypeError: #pyQtSignal gives a TypeError when disconnecting from something that was already disconnected. + pass + try: self._global_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) + except TypeError: + pass + try: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) - except: + except TypeError: pass material = self._global_container_stack.material material.nameChanged.disconnect(self._onMaterialNameChanged) From 687d326fae0f2e7474560219934e87304a64571a Mon Sep 17 00:00:00 2001 From: Randall Wessel Date: Wed, 3 May 2017 15:34:56 +0200 Subject: [PATCH 536/816] Changed color to transparancy and spaces instead of tabs --- resources/qml/Sidebar.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 8a6e44b784..dbb15028cb 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -348,7 +348,7 @@ Rectangle Rectangle { id: settingsModeSelection - color: UM.Theme.getColor("tool_panel_background") + color: "transparent" width: parent.width * 0.55 height: UM.Theme.getSize("sidebar_header_mode_toggle").height anchors.right: parent.right From 337be1b9be508f235d13a6df8308d545b5af27c0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 15:38:20 +0200 Subject: [PATCH 537/816] Fix setting machine changes profile with new specified container stacks Don't need to insert it, because there's already a slot for it on the stack. In fact, you're not allowed to insert anything. Contributes to issue CURA-3497. --- plugins/MachineSettingsAction/MachineSettingsAction.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 32053d32ab..32b6ed6e06 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. from PyQt5.QtCore import pyqtProperty, pyqtSignal @@ -101,8 +101,7 @@ class MachineSettingsAction(MachineAction): definition_changes_container.addMetaDataEntry("type", "definition_changes") self._container_registry.addContainer(definition_changes_container) - # Insert definition_changes between the definition and the variant - container_stack.insertContainer(-1, definition_changes_container) + container_stack.definitionChanges = definition_changes_container return definition_changes_container From 177875139762c2a3fd25592e1c4ca9f442bbf0e8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 15:39:20 +0200 Subject: [PATCH 538/816] Fix travel speed override Was a typo by the contributor of this definition. --- resources/definitions/rigid3d_zero2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/rigid3d_zero2.def.json b/resources/definitions/rigid3d_zero2.def.json index 73b50f0950..41cd2c18db 100644 --- a/resources/definitions/rigid3d_zero2.def.json +++ b/resources/definitions/rigid3d_zero2.def.json @@ -54,7 +54,7 @@ "speed_layer_0": { "value": 15 }, - "speed_tarvel": { + "speed_travel": { "value": 100 }, "support_enable": { From cee0539146aec1ddb20824471c6c4feb4601ed6a Mon Sep 17 00:00:00 2001 From: awhiemstra Date: Wed, 3 May 2017 15:54:09 +0200 Subject: [PATCH 539/816] Remove version field from Desktop file Apparently, it is not required and we are specifying an invalid version. Fixes #1784 --- cura.desktop.in | 1 - 1 file changed, 1 deletion(-) diff --git a/cura.desktop.in b/cura.desktop.in index ceb5c99f08..1f6d295dd2 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -1,5 +1,4 @@ [Desktop Entry] -Version=1 Name=Cura Name[de]=Cura GenericName=3D Printing Software From cd78ab850d3e703efada5939bc05bcf7b31a56b2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 16:03:47 +0200 Subject: [PATCH 540/816] Remove semicolons Semicolons, a relic of the past. Contributes to issue CURA-3497. --- plugins/MachineSettingsAction/MachineSettingsAction.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 32b6ed6e06..dc1fc828b9 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -216,7 +216,7 @@ class MachineSettingsAction(MachineAction): # Make sure the machine stack is active if extruder_manager.activeExtruderIndex > -1: - extruder_manager.setActiveExtruderIndex(-1); + extruder_manager.setActiveExtruderIndex(-1) # Restore material and variant on global stack # MachineManager._onGlobalContainerChanged removes the global material and variant of multiextruder machines @@ -228,9 +228,9 @@ class MachineSettingsAction(MachineAction): preferences.setValue("cura/choice_on_profile_override", "always_keep") if extruder_material_id: - machine_manager.setActiveMaterial(extruder_material_id); + machine_manager.setActiveMaterial(extruder_material_id) if extruder_variant_id: - machine_manager.setActiveVariant(extruder_variant_id); + machine_manager.setActiveVariant(extruder_variant_id) preferences.setValue("cura/choice_on_profile_override", choice_on_profile_override) From 41e444714f2e5c1df435917f26f3186865dd2d85 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 16:54:20 +0200 Subject: [PATCH 541/816] Fix spacing Minor code style stuff. --- .../MachineSettingsAction/MachineSettingsAction.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index dc1fc828b9..28cd8ba2f3 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -151,9 +151,9 @@ class MachineSettingsAction(MachineAction): if extruder_count == 1: # Get the material and variant of the first extruder before setting the number extruders to 1 if machine_manager.hasMaterials: - extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]] + extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]] if machine_manager.hasVariants: - extruder_variant_id = machine_manager.activeVariantIds[0] + extruder_variant_id = machine_manager.activeVariantIds[0] # Copy any settable_per_extruder setting value from the extruders to the global stack extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() @@ -167,7 +167,7 @@ class MachineSettingsAction(MachineAction): setting_key = setting_instance.definition.key settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") if settable_per_extruder: - limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") + limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") if limit_to_extruder == "-1" or limit_to_extruder == extruder_index: global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value")) @@ -175,9 +175,9 @@ class MachineSettingsAction(MachineAction): # Check to see if any features are set to print with an extruder that will no longer exist for setting_key in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: - if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count -1: + if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count - 1: Logger.log("i", "Lowering %s setting to match number of extruders", setting_key) - self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count -1) + self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count - 1) # Check to see if any objects are set to print with an extruder that will no longer exist root_node = Application.getInstance().getController().getScene().getRoot() @@ -262,7 +262,7 @@ class MachineSettingsAction(MachineAction): # Set the material container to a sane default if material_container.getId() == "empty_material": - search_criteria = { "type": "material", "definition": "fdmprinter", "id": "*pla*" } + search_criteria = { "type": "material", "definition": "fdmprinter", "id": "*pla*"} containers = self._container_registry.findInstanceContainers(**search_criteria) if containers: self._global_container_stack.replaceContainer(material_index, containers[0]) From b69f337ddb50bb8e5dc39107f75d4112b14527d1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 17:01:08 +0200 Subject: [PATCH 542/816] Set machine_extruder_count in sync with defined extruders The registry checks if they are in sync and complains if they aren't. The extruder count is set back to default to 1 upon adding the machine. Contributes to issue CURA-3497. --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 4 ++++ resources/definitions/custom.def.json | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index b7cf86ef58..a717ee6fa6 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -375,6 +375,10 @@ Cura.MachineAction } } currentIndex: machineExtruderCountProvider.properties.value - 1 + Component.onCompleted: + { + manager.setMachineExtruderCount(1); + } onActivated: { manager.setMachineExtruderCount(index + 1); diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index 8f15f00a0f..80e01916bb 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -22,5 +22,12 @@ "7": "custom_extruder_8" }, "first_start_actions": ["MachineSettingsAction"] + }, + "overrides": + { + "machine_extruder_count": + { + "default_value": 8 + } } } From b590e7b86caa7602e0e4bf543444c92a864bfbfc Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 3 May 2017 17:05:56 +0200 Subject: [PATCH 543/816] [WIP] Add place for the extra gradual infill icon CURA-3732 --- resources/qml/SidebarSimple.qml | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 86185727b2..eaa303819f 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -30,6 +30,7 @@ Item id: infillCellLeft anchors.top: parent.top anchors.left: parent.left + anchors.topMargin: UM.Theme.getSize("default_margin").height width: base.width * .45 - UM.Theme.getSize("default_margin").width height: childrenRect.height @@ -47,7 +48,7 @@ Item } } - Flow + Row { id: infillCellRight @@ -85,7 +86,7 @@ Item { id: infillIconLining - width: (infillCellRight.width - 3 * UM.Theme.getSize("default_margin").width) / 4; + width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("default_margin").width)) / (infillModel.count); height: width border.color: @@ -181,16 +182,18 @@ Item Component.onCompleted: { infillModel.append({ - name: catalog.i18nc("@label", "Hollow"), + name: catalog.i18nc("@label", "Empty"), percentage: 0, + steps: 0, percentageMin: -1, percentageMax: 0, - text: catalog.i18nc("@label", "No (0%) infill will leave your model hollow at the cost of low strength"), + text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength"), icon: "hollow" }) infillModel.append({ name: catalog.i18nc("@label", "Light"), percentage: 20, + steps: 0, percentageMin: 0, percentageMax: 30, text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength"), @@ -199,6 +202,7 @@ Item infillModel.append({ name: catalog.i18nc("@label", "Dense"), percentage: 50, + steps: 0, percentageMin: 30, percentageMax: 70, text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength"), @@ -207,11 +211,20 @@ Item infillModel.append({ name: catalog.i18nc("@label", "Solid"), percentage: 100, + steps: 0, percentageMin: 70, percentageMax: 100, text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid"), icon: "solid" }) + infillModel.append({ + name: catalog.i18nc("@label", "Gradual"), + percentage: 90, + steps: 5, + infill_layer_height: 1.5, + text: catalog.i18nc("@label", "This will gradually fill your model towards the top"), + icon: "gradual" + }) } } } @@ -220,7 +233,7 @@ Item { id: helpersCell anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: parent.left anchors.right: parent.right height: childrenRect.height @@ -392,7 +405,7 @@ Item property alias _hovered: adhesionMouseArea.containsMouse anchors.top: supportExtruderCombobox.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: adhesionHelperLabel.right anchors.leftMargin: UM.Theme.getSize("default_margin").width @@ -467,7 +480,7 @@ Item { id: tipsCell anchors.top: helpersCell.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: parent.left width: parent.width height: childrenRect.height @@ -480,7 +493,7 @@ Item anchors.rightMargin: UM.Theme.getSize("default_margin").width wrapMode: Text.WordWrap //: Tips label - text: catalog.i18nc("@label", "Need help improving your prints? Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting"); + text: catalog.i18nc("@label", "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting"); font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); linkColor: UM.Theme.getColor("text_link") From ea9e0e2e9ce8941ff8873983ea9d700f3c8fabc3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 3 May 2017 17:09:33 +0200 Subject: [PATCH 544/816] Replace material without needing to find its index We have an easy setter for this. Contributes to issue CURA-3497. --- cura/Settings/MachineManager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 400b320542..66aee70f14 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -704,8 +704,7 @@ class MachineManager(QObject): self.blurSettings.emit() old_material.nameChanged.disconnect(self._onMaterialNameChanged) - material_index = self._active_container_stack.getContainerIndex(old_material) - self._active_container_stack.replaceContainer(material_index, material_container) + self._active_container_stack.material = material_container Logger.log("d", "Active material changed") material_container.nameChanged.connect(self._onMaterialNameChanged) From c5bcaf2d72ca9e6514157f62afc0ea5d258c07bb Mon Sep 17 00:00:00 2001 From: Robert Colbert Date: Wed, 3 May 2017 14:58:27 -0500 Subject: [PATCH 545/816] Delete ProjectSettings.json --- .vs/ProjectSettings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vs/ProjectSettings.json diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json deleted file mode 100644 index 38c5f003cf..0000000000 --- a/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": "x86-Debug" -} \ No newline at end of file From 7d7b0eaabb0b012bb451aedf925e3bd1a979e77c Mon Sep 17 00:00:00 2001 From: Robert Colbert Date: Wed, 3 May 2017 14:58:35 -0500 Subject: [PATCH 546/816] Delete slnx.sqlite --- .vs/slnx.sqlite | Bin 335872 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .vs/slnx.sqlite diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 31a77ac752aa276a7389c0748f61ff783c65b065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335872 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 jNzDsUdWwuHOOFZQ6~(gfh&WMDwh&bw5XNOWK From a1f32b74e5b4a30e892a87deb3f7e052e94bbf54 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 4 May 2017 09:48:54 +0200 Subject: [PATCH 547/816] Include recommended/custom switch in theme Otherwise it stays white. --- resources/qml/Sidebar.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 132d1d2f41..e4f5c424e2 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -354,6 +354,7 @@ Rectangle anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.top: headerSeparator.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height + color: UM.Theme.getColor("sidebar") visible: !monitoringPrint && !hideSettings Component{ id: wizardDelegate From 53b7e1a8ca9bdde6cc156b9e8b56bd643d07c5c6 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Thu, 4 May 2017 09:02:38 +0100 Subject: [PATCH 548/816] Add smooth_spiralized_contours setting to control smoothing of contours when spiralizing. Smoothing the contours minimises the visibility of the z-seam and for most models is probably a good idea. Where it is less good is when the model has a fine surface details which will get mangled by the smoothing. So we should let the user decide whether they want to smooth or not. The default is true as most of the time it's a good thing. # Conflicts: # resources/definitions/fdmprinter.def.json --- resources/definitions/fdmprinter.def.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 99cfede396..1a10e69008 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4565,7 +4565,17 @@ "type": "bool", "default_value": false, "settable_per_mesh": false, - "settable_per_extruder": false + "settable_per_extruder": false, + "children": + { + "smooth_spiralized_contours": + { + "label": "Smooth Spiralized Contours", + "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", + "type": "bool", + "default_value": true + } + } } } }, From 68f5995b19d7f37bc884ca18e37cb95187eba18e Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 3 May 2017 17:05:56 +0200 Subject: [PATCH 549/816] [WIP] Add place for the extra gradual infill icon CURA-3732 --- resources/qml/SidebarSimple.qml | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 86185727b2..eaa303819f 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -30,6 +30,7 @@ Item id: infillCellLeft anchors.top: parent.top anchors.left: parent.left + anchors.topMargin: UM.Theme.getSize("default_margin").height width: base.width * .45 - UM.Theme.getSize("default_margin").width height: childrenRect.height @@ -47,7 +48,7 @@ Item } } - Flow + Row { id: infillCellRight @@ -85,7 +86,7 @@ Item { id: infillIconLining - width: (infillCellRight.width - 3 * UM.Theme.getSize("default_margin").width) / 4; + width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("default_margin").width)) / (infillModel.count); height: width border.color: @@ -181,16 +182,18 @@ Item Component.onCompleted: { infillModel.append({ - name: catalog.i18nc("@label", "Hollow"), + name: catalog.i18nc("@label", "Empty"), percentage: 0, + steps: 0, percentageMin: -1, percentageMax: 0, - text: catalog.i18nc("@label", "No (0%) infill will leave your model hollow at the cost of low strength"), + text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength"), icon: "hollow" }) infillModel.append({ name: catalog.i18nc("@label", "Light"), percentage: 20, + steps: 0, percentageMin: 0, percentageMax: 30, text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength"), @@ -199,6 +202,7 @@ Item infillModel.append({ name: catalog.i18nc("@label", "Dense"), percentage: 50, + steps: 0, percentageMin: 30, percentageMax: 70, text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength"), @@ -207,11 +211,20 @@ Item infillModel.append({ name: catalog.i18nc("@label", "Solid"), percentage: 100, + steps: 0, percentageMin: 70, percentageMax: 100, text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid"), icon: "solid" }) + infillModel.append({ + name: catalog.i18nc("@label", "Gradual"), + percentage: 90, + steps: 5, + infill_layer_height: 1.5, + text: catalog.i18nc("@label", "This will gradually fill your model towards the top"), + icon: "gradual" + }) } } } @@ -220,7 +233,7 @@ Item { id: helpersCell anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: parent.left anchors.right: parent.right height: childrenRect.height @@ -392,7 +405,7 @@ Item property alias _hovered: adhesionMouseArea.containsMouse anchors.top: supportExtruderCombobox.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: adhesionHelperLabel.right anchors.leftMargin: UM.Theme.getSize("default_margin").width @@ -467,7 +480,7 @@ Item { id: tipsCell anchors.top: helpersCell.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 anchors.left: parent.left width: parent.width height: childrenRect.height @@ -480,7 +493,7 @@ Item anchors.rightMargin: UM.Theme.getSize("default_margin").width wrapMode: Text.WordWrap //: Tips label - text: catalog.i18nc("@label", "Need help improving your prints? Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting"); + text: catalog.i18nc("@label", "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting"); font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); linkColor: UM.Theme.getColor("text_link") From c25e2b9b95c15c81be89ce6699426bdaf7243786 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 4 May 2017 12:53:05 +0200 Subject: [PATCH 550/816] Revert "Include recommended/custom switch in theme" This reverts commit a1f32b74e5b4a30e892a87deb3f7e052e94bbf54. The fix was correct but we allow the honour for Randyxxl. --- resources/qml/Sidebar.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index e4f5c424e2..132d1d2f41 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -354,7 +354,6 @@ Rectangle anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.top: headerSeparator.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height - color: UM.Theme.getColor("sidebar") visible: !monitoringPrint && !hideSettings Component{ id: wizardDelegate From 25be8d9abbde7c7a38bf474ace61d4b2bfbacdd1 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 4 May 2017 12:55:37 +0200 Subject: [PATCH 551/816] Fix default Line Width float value representation for UM3 --- resources/definitions/ultimaker3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index ad8b08dfa1..e17316a80b 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -103,7 +103,7 @@ "layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" }, "layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" }, "layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" }, - "line_width": { "value": "machine_nozzle_size * 0.875" }, + "line_width": { "value": "round(machine_nozzle_size * 0.875, 3)" }, "machine_min_cool_heat_time_window": { "value": "15" }, "default_material_print_temperature": { "value": "200" }, "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, From fe112d5d81f82d89859387494e33c7e742486204 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 4 May 2017 13:04:21 +0200 Subject: [PATCH 552/816] Fix extruderstack test on CI We do not need a complete CuraApplication just so registerExtruder can work. Instead, we just mock away the extruder manager so the rest of the test can proceed. --- tests/Settings/TestExtruderStack.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index b52f71e02d..4e55411d9d 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -11,7 +11,7 @@ from UM.Settings.InstanceContainer import InstanceContainer #To check against th import cura.Settings.ExtruderStack #The module we're testing. from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. -from cura.CuraApplication import CuraApplication +from cura.Settings.ExtruderManager import ExtruderManager ## Fake container registry that always provides all containers you ask of. @pytest.yield_fixture() @@ -241,7 +241,9 @@ def test_deserializeMoveDefinitionContainer(extruder_stack): ## Tests whether getProperty properly applies the stack-like behaviour on its # containers. def test_getPropertyFallThrough(extruder_stack): - CuraApplication.getInstance() # To ensure that we have the right Application + # ExtruderStack.setNextStack calls registerExtruder for backward compatibility, but we do not need a complete extruder manager + ExtruderManager._ExtruderManager__instance = unittest.mock.MagicMock() + #A few instance container mocks to put in the stack. mock_layer_heights = {} #For each container type, a mock container that defines layer height to something unique. mock_no_settings = {} #For each container type, a mock container that has no settings at all. From 3c4d3779b167ef766ccc8e2524900b425b93eb0d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 4 May 2017 13:47:14 +0200 Subject: [PATCH 553/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index bf32a33515..5dc8232dd3 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -35,7 +35,7 @@ }, "overrides": { - "machine_extruder_count": { "default_value": 4 }, + "machine_extruder_count": { "default_value": 2 }, "machine_heated_bed": { "default_value": true }, "machine_center_is_zero": { "default_value": false }, "gantry_height": { "default_value": 35 }, From 7ee1498962a5f3541fa328dbc46767773fb3640b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Thu, 4 May 2017 14:11:00 +0200 Subject: [PATCH 554/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 5dc8232dd3..30ffbe28ae 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -17,9 +17,9 @@ "has_variants": true, "variants_name": "Nozzle size", - "preferred_variant": "*0.4*", + "preferred_variant": "*0.8*", "preferred_material": "*pla*", - "preferred_quality": "*normal*", + "preferred_quality": "*high*", "machine_extruder_trains": { From f06562bc6e37352ed6064f10a17474a7fa1d5aa4 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 4 May 2017 14:32:32 +0200 Subject: [PATCH 555/816] Remove kitten image and related text from CrashDialog --- cura/CrashHandler.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index b658f88824..4048b409a7 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -48,35 +48,32 @@ def show(exception_type, value, tb): dialog = QDialog() dialog.setMinimumWidth(640) dialog.setMinimumHeight(640) - dialog.setWindowTitle(catalog.i18nc("@title:window", "Oops!")) + dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report")) layout = QVBoxLayout(dialog) - label = QLabel(dialog) - pixmap = QPixmap() - - try: - data = urllib.request.urlopen("http://www.randomkittengenerator.com/cats/rotator.php").read() - pixmap.loadFromData(data) - except: - try: - from UM.Resources import Resources - path = Resources.getPath(Resources.Images, "kitten.jpg") - pixmap.load(path) - except: - pass - - pixmap = pixmap.scaled(150, 150) - label.setPixmap(pixmap) - label.setAlignment(Qt.AlignCenter) - layout.addWidget(label) + #label = QLabel(dialog) + #pixmap = QPixmap() + #try: + # data = urllib.request.urlopen("http://www.randomkittengenerator.com/cats/rotator.php").read() + # pixmap.loadFromData(data) + #except: + # try: + # from UM.Resources import Resources + # path = Resources.getPath(Resources.Images, "kitten.jpg") + # pixmap.load(path) + # except: + # pass + #pixmap = pixmap.scaled(150, 150) + #label.setPixmap(pixmap) + #label.setAlignment(Qt.AlignCenter) + #layout.addWidget(label) label = QLabel(dialog) layout.addWidget(label) #label.setScaledContents(True) label.setText(catalog.i18nc("@label", """

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

-

We hope this picture of a kitten helps you recover from the shock.

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

""")) From 0171d9637ce9399b81ef72f18d3099a85efa086d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 4 May 2017 15:15:35 +0200 Subject: [PATCH 556/816] Fix mode switching issue in LayerView CURA-3730 --- plugins/LayerView/LayerView.qml | 44 +++++++++++++++------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 7bdc425edf..9dc038fe70 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -43,7 +43,8 @@ Item property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") property bool show_skin: UM.Preferences.getValue("layerview/show_skin") property bool show_infill: UM.Preferences.getValue("layerview/show_infill") - property bool show_legend: UM.LayerView.compatibilityMode || UM.Preferences.getValue("layerview/layer_view_type") == 1 + // if we are in compatibility mode, we only show the "line type" + property bool show_legend: UM.LayerView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type") == 1 property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") @@ -107,27 +108,23 @@ Item visible: !UM.LayerView.compatibilityMode style: UM.Theme.styles.combobox - property int layer_view_type: UM.Preferences.getValue("layerview/layer_view_type") - currentIndex: layer_view_type // index matches type_id - onActivated: { - // Combobox selection - var type_id = index; - UM.Preferences.setValue("layerview/layer_view_type", type_id); - updateLegend(type_id); - } - onModelChanged: { - updateLegend(UM.Preferences.getValue("layerview/layer_view_type")); + onActivated: + { + UM.Preferences.setValue("layerview/layer_view_type", index); } - // Update visibility of legend. - function updateLegend(type_id) { - if (UM.LayerView.compatibilityMode || (type_id == 1)) { - // Line type - view_settings.show_legend = true; - } else { - view_settings.show_legend = false; - } + Component.onCompleted: + { + currentIndex = UM.LayerView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); + updateLegends(currentIndex); } + + function updateLegends(type_id) + { + // update visibility of legends + view_settings.show_legend = UM.LayerView.compatibilityMode || (type_id == 1); + } + } Label @@ -153,7 +150,8 @@ Item target: UM.Preferences onPreferenceChanged: { - layerTypeCombobox.layer_view_type = UM.Preferences.getValue("layerview/layer_view_type"); + layerTypeCombobox.currentIndex = UM.LayerView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); + layerTypeCombobox.updateLegends(layerTypeCombobox.currentIndex); view_settings.extruder_opacities = UM.Preferences.getValue("layerview/extruder_opacities").split("|"); view_settings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves"); view_settings.show_helpers = UM.Preferences.getValue("layerview/show_helpers"); @@ -274,19 +272,17 @@ Item typesLegenModelNoCheck.append({ label: catalog.i18nc("@label", "Top / Bottom"), colorId: "layerview_skin", - visible: UM.Preferences.getValue("layerview/layer_view_type") != 0 }); typesLegenModelNoCheck.append({ label: catalog.i18nc("@label", "Inner Wall"), colorId: "layerview_inset_x", - visible: UM.Preferences.getValue("layerview/layer_view_type") != 0 }); } } Label { text: label - visible: model.visible && view_settings.show_legend + visible: view_settings.show_legend Rectangle { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right @@ -295,7 +291,7 @@ Item color: UM.Theme.getColor(model.colorId) border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") - visible: model.visible && view_settings.show_legend + visible: view_settings.show_legend } Layout.fillWidth: true Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height From 314fa8b1c8db6e799c1887806ab2e45d3ac8c39d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 4 May 2017 15:26:57 +0200 Subject: [PATCH 557/816] Fix Enter key trigger for UM3 Add Printer dialog --- plugins/UM3NetworkPrinting/DiscoverUM3Action.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml index f424dbf523..27271f0d15 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml @@ -343,7 +343,7 @@ Cura.MachineAction regExp: /[a-zA-Z0-9\.\-\_]*/ } - onAccepted: btnOk.click() + onAccepted: btnOk.clicked() } } From 230740ed64b0bc7ff401e4cb6b15545e87678363 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 4 May 2017 15:43:56 +0200 Subject: [PATCH 558/816] Fixup extruders that were converted from ContainerStack on load We need to make sure the extruder stacks get the proper next stack set, even when converting them from ContainerStack. Since the conversion can make no guarantees about the loading order, we need to add an extra step to post-process the extruders. Contributes to CURA-3497 --- cura/Settings/CuraContainerRegistry.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index bf8e475c38..2dc341e71b 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -227,6 +227,11 @@ class CuraContainerRegistry(ContainerRegistry): # If it hasn't returned by now, none of the plugins loaded the profile successfully. return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type or is corrupted.", file_name)} + @override(ContainerRegistry) + def load(self): + super().load() + self._fixupExtruders() + def _configureProfile(self, profile, id_seed, new_name): profile.setReadOnly(False) profile.setDirty(True) # Ensure the profiles are correctly saved @@ -309,6 +314,8 @@ class CuraContainerRegistry(ContainerRegistry): # It is not an extruder or machine, so do nothing with the stack return container + Logger.log("d", "Converting ContainerStack {stack} to {type}", stack = container.getId(), type = container_type) + new_stack = None if container_type == "extruder_train": new_stack = ExtruderStack.ExtruderStack(container.getId()) @@ -323,3 +330,21 @@ class CuraContainerRegistry(ContainerRegistry): os.remove(container.getPath()) return new_stack + + # Fix the extruders that were upgraded to ExtruderStack instances during addContainer. + # The stacks are now responsible for setting the next stack on deserialize. However, + # due to problems with loading order, some stacks may not have the proper next stack + # set after upgrading, because the proper global stack was not yet loaded. This method + # makes sure those extruders also get the right stack set. + def _fixupExtruders(self): + extruder_stacks = self.findContainers(ExtruderStack.ExtruderStack) + for extruder_stack in extruder_stacks: + if extruder_stack.getNextStack(): + # Has the right next stack, so ignore it. + continue + + machines = ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack.getMetaDataEntry("machine", "")) + if machines: + extruder_stack.setNextStack(machines[0]) + else: + Logger.log("w", "Could not find machine {machine} for extruder {extruder}", machine = extruder_stack.getMetaDataEntry("machine"), extruder = extruder_stack.getId()) From 51b76acc6d094c8a10ed0b433e80d1a60601b9a6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 4 May 2017 15:57:47 +0200 Subject: [PATCH 559/816] Fix unit test CuraContainerRegistry::load now has a dependency on the ContainerStack so we need to account for it in our mocks. --- tests/Settings/TestCuraContainerRegistry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 9cdad7c306..7b191a8376 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -77,7 +77,10 @@ def test_loadLegacyFileRenamed(container_registry): def findContainers(container_type = 0, id = None): if id == "MachineLegacy": return None - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] + + container = UM.Settings.ContainerRegistry._EmptyInstanceContainer(id) + container.getNextStack = unittest.mock.MagicMock() + return [container] old_find_containers = container_registry.findContainers container_registry.findContainers = findContainers From 91b22edb068adfca824923c46112f2a528c5afee Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 4 May 2017 16:19:15 +0200 Subject: [PATCH 560/816] Fix missing imports in CuraContainerRegistry CURA-3497 --- cura/Settings/CuraContainerRegistry.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 2dc341e71b..72b94a6f8d 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -19,6 +19,8 @@ from UM.Util import parseBool from . import ExtruderStack from . import GlobalStack +from .ContainerManager import ContainerManager +from .ExtruderManager import ExtruderManager from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") From 0b0011fc8840ac34616b4219e8ebf4fc193e9538 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 4 May 2017 16:31:33 +0200 Subject: [PATCH 561/816] Multiply dialog now has focus on #, added shortcut Ctrl-M --- resources/qml/Actions.qml | 1 + resources/qml/Menus/ContextMenu.qml | 6 ++++++ 2 files changed, 7 insertions(+) mode change 100644 => 100755 resources/qml/Menus/ContextMenu.qml diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index b9eef11a55..3169f4f170 100755 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -205,6 +205,7 @@ Item text: catalog.i18ncp("@action:inmenu menubar:edit", "Multiply Selected Model", "Multiply Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-duplicate"; + shortcut: "Ctrl+M" } Action diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml old mode 100644 new mode 100755 index 8d1a6dc02c..0c0dbc39ca --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -93,6 +93,11 @@ Menu copiesField.focus = true; } + onVisibleChanged: + { + copiesField.forceActiveFocus(); + } + standardButtons: StandardButton.Ok | StandardButton.Cancel Row @@ -108,6 +113,7 @@ Menu SpinBox { id: copiesField + focus: true minimumValue: 1 maximumValue: 99 } From 81ea9556ebb01606788e5ae6eb637aea208102bc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 4 May 2017 17:56:38 +0200 Subject: [PATCH 562/816] Fix showing layer view if there is no material The layer view would request the colour of the material. If there is no material, that would give an error. Contributes to issue CURA-3497. --- plugins/CuraEngineBackend/ProcessSlicedLayersJob.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 0d706f59b8..f7be2edc04 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -179,9 +179,10 @@ class ProcessSlicedLayersJob(Job): # Single extruder via global stack. material_color_map = numpy.zeros((1, 4), dtype=numpy.float32) material = global_container_stack.findContainer({"type": "material"}) - color_code = material.getMetaDataEntry("color_code") - if color_code is None: # not all stacks have a material color - color_code = "#e0e000" + color_code = "#e0e000" + if material: + if material.getMetaDataEntry("color_code") is not None: + color_code = material.getMetaDataEntry("color_code") color = colorCodeToRGBA(color_code) material_color_map[0, :] = color From eb52e4fb7e873c33cfdcc579bfa25c3b6b22b248 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 4 May 2017 17:57:55 +0200 Subject: [PATCH 563/816] Ignore default name of ProfileFlattener too It already ignored FlatProfileExporter, but that's just a renamed version of what is now called ProfileFlattener. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 52d888f465..bb6bd49add 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ plugins/GodMode plugins/PostProcessingPlugin plugins/X3GWriter plugins/FlatProfileExporter +plugins/ProfileFlattener plugins/cura-god-mode-plugin #Build stuff From f15aa667510bb6ffe472fa7fd1801d060555b142 Mon Sep 17 00:00:00 2001 From: 14bitVoid <14bitvoid@protonmail.com> Date: Fri, 5 May 2017 00:05:17 +0200 Subject: [PATCH 564/816] Receive time estimates per feature --- cura/PrintInformation.py | 14 +++++---- plugins/CuraEngineBackend/Cura.proto | 20 +++++++++--- .../CuraEngineBackend/CuraEngineBackend.py | 31 +++++++++++++++++-- 3 files changed, 52 insertions(+), 13 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index ab63e4034d..cd1a194254 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -111,12 +111,14 @@ class PrintInformation(QObject): def materialCosts(self): return self._material_costs - def _onPrintDurationMessage(self, total_time, material_amounts): - if total_time != total_time: # Check for NaN. Engine can sometimes give us weird values. - Logger.log("w", "Received NaN for print duration message") - self._current_print_time.setDuration(0) - else: - self._current_print_time.setDuration(total_time) + def _onPrintDurationMessage(self, time_per_feature, material_amounts): + total_time = 0 + for feature, time in time_per_feature.items(): + if time != time: # Check for NaN. Engine can sometimes give us weird values. + Logger.log("w", "Received NaN for print duration message") + continue + total_time += time + self._current_print_time.setDuration(total_time) self.currentPrintTimeChanged.emit() diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 4eab500f0a..c2e4e5bb5f 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -90,9 +90,21 @@ message GCodeLayer { } -message PrintTimeMaterialEstimates { // The print time for the whole print and material estimates for the extruder - float time = 1; // Total time estimate - repeated MaterialEstimates materialEstimates = 2; // materialEstimates data +message PrintTimeMaterialEstimates { // The print time for each feature and material estimates for the extruder + // Time estimate in each feature + float time_none = 1; + float time_inset_0 = 2; + float time_inset_x = 3; + float time_skin = 4; + float time_support = 5; + float time_skirt = 6; + float time_infill = 7; + float time_support_infill = 8; + float time_travel = 9; + float time_retract = 10; + float time_support_interface = 11; + + repeated MaterialEstimates materialEstimates = 12; // materialEstimates data } message MaterialEstimates { @@ -121,4 +133,4 @@ message GCodePrefix { } message SlicingFinished { -} \ No newline at end of file +} diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index f32993fd20..c13cb72864 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -187,7 +187,19 @@ class CuraEngineBackend(QObject, Backend): Logger.log("w", "Slice unnecessary, nothing has changed that needs reslicing.") return - self.printDurationMessage.emit(0, [0]) + self.printDurationMessage.emit({ + "none": 0, + "inset_0": 0, + "inset_x": 0, + "skin": 0, + "support": 0, + "skirt": 0, + "infill": 0, + "support_infill": 0, + "travel": 0, + "retract": 0, + "support_interface": 0 + }, [0]) self._stored_layer_data = [] self._stored_optimized_layer_data = [] @@ -475,13 +487,26 @@ class CuraEngineBackend(QObject, Backend): ## Called when a print time message is received from the engine. # - # \param message The protobuff message containing the print time and + # \param message The protobuf message containing the print time per feature and # material amount per extruder def _onPrintTimeMaterialEstimates(self, message): material_amounts = [] for index in range(message.repeatedMessageCount("materialEstimates")): material_amounts.append(message.getRepeatedMessage("materialEstimates", index).material_amount) - self.printDurationMessage.emit(message.time, material_amounts) + feature_times = { + "none": message.time_none, + "inset_0": message.time_inset_0, + "inset_x": message.time_inset_x, + "skin": message.time_skin, + "support": message.time_support, + "skirt": message.time_skirt, + "infill": message.time_infill, + "support_infill": message.time_support_infill, + "travel": message.time_travel, + "retract": message.time_retract, + "support_interface": message.time_support_interface + } + self.printDurationMessage.emit(feature_times, material_amounts) ## Creates a new socket connection. def _createSocket(self): From 69a95e37a5ec05ca63321abe8acf53283ea49350 Mon Sep 17 00:00:00 2001 From: 14bitVoid <14bitvoid@protonmail.com> Date: Fri, 5 May 2017 01:34:09 +0200 Subject: [PATCH 565/816] Show time estimates per feature in tooltip --- cura/PrintInformation.py | 19 ++++++++++++++++ resources/qml/JobSpecs.qml | 46 +++++++++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index cd1a194254..c6412e2f6f 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -52,6 +52,19 @@ class PrintInformation(QObject): super().__init__(parent) self._current_print_time = Duration(None, self) + self._print_times_per_feature = { + "none": Duration(None, self), + "inset_0": Duration(None, self), + "inset_x": Duration(None, self), + "skin": Duration(None, self), + "support": Duration(None, self), + "skirt": Duration(None, self), + "infill": Duration(None, self), + "support_infill": Duration(None, self), + "travel": Duration(None, self), + "retract": Duration(None, self), + "support_interface": Duration(None, self) + } self._material_lengths = [] self._material_weights = [] @@ -93,6 +106,10 @@ class PrintInformation(QObject): def currentPrintTime(self): return self._current_print_time + @pyqtProperty("QVariantMap", notify = currentPrintTimeChanged) + def printTimesPerFeature(self): + return self._print_times_per_feature + materialLengthsChanged = pyqtSignal() @pyqtProperty("QVariantList", notify = materialLengthsChanged) @@ -115,9 +132,11 @@ class PrintInformation(QObject): total_time = 0 for feature, time in time_per_feature.items(): if time != time: # Check for NaN. Engine can sometimes give us weird values. + self._print_times_per_feature[feature].setDuration(0) Logger.log("w", "Received NaN for print duration message") continue total_time += time + self._print_times_per_feature[feature].setDuration(time) self._current_print_time.setDuration(total_time) self.currentPrintTimeChanged.emit() diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 6013117728..c702cb1ac2 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -24,6 +24,7 @@ Item { UM.I18nCatalog { id: catalog; name:"cura"} property variant printDuration: PrintInformation.currentPrintTime + property variant printDurationPerFeature: PrintInformation.printTimesPerFeature property variant printMaterialLengths: PrintInformation.materialLengths property variant printMaterialWeights: PrintInformation.materialWeights property variant printMaterialCosts: PrintInformation.materialCosts @@ -159,7 +160,7 @@ Item { UM.RecolorImage { id: timeIcon - anchors.right: timeSpec.left + anchors.right: timeSpecPerFeatureTooltipArea.left anchors.rightMargin: UM.Theme.getSize("default_margin").width/2 anchors.verticalCenter: parent.verticalCenter width: UM.Theme.getSize("save_button_specs_icons").width @@ -169,15 +170,48 @@ Item { color: UM.Theme.getColor("text_subtext") source: UM.Theme.getIcon("print_time") } - Text + UM.TooltipArea { - id: timeSpec + id: timeSpecPerFeatureTooltipArea + text: { + var result = ""; + if(base.printDurationPerFeature["inset_0"] && base.printDurationPerFeature["inset_0"].totalSeconds > 0) + result += "Outer Walls: " + base.printDurationPerFeature["inset_0"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["inset_x"] && base.printDurationPerFeature["inset_x"].totalSeconds > 0) + result += "
Inner Walls: " + base.printDurationPerFeature["inset_x"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["skin"] && base.printDurationPerFeature["skin"].totalSeconds > 0) + result += "
Skin: " + base.printDurationPerFeature["skin"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["infill"] && base.printDurationPerFeature["infill"].totalSeconds > 0) + result += "
Infill: " + base.printDurationPerFeature["infill"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["support_infill"] && base.printDurationPerFeature["support_infill"].totalSeconds > 0) + result += "
Support: " + base.printDurationPerFeature["support_infill"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["support_interface"] && base.printDurationPerFeature["support_interface"].totalSeconds > 0) + result += "
Support Interface: " + base.printDurationPerFeature["support_interface"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["support"] && base.printDurationPerFeature["support"].totalSeconds > 0) + result += "
Helper Structures: " + base.printDurationPerFeature["support"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["travel"] && base.printDurationPerFeature["travel"].totalSeconds > 0) + result += "
Travel: " + base.printDurationPerFeature["travel"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["retract"] && base.printDurationPerFeature["retract"].totalSeconds > 0) + result += "
Retractions: " + base.printDurationPerFeature["retract"].getDisplayString(UM.DurationFormat.Short) + if(base.printDurationPerFeature["none"] && base.printDurationPerFeature["none"].totalSeconds > 0) + result += "
Other: " + base.printDurationPerFeature["none"].getDisplayString(UM.DurationFormat.Short) + return result; + } + width: childrenRect.width + height: childrenRect.height anchors.right: lengthIcon.left anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter - font: UM.Theme.getFont("small") - color: UM.Theme.getColor("text_subtext") - text: (!base.printDuration || !base.printDuration.valid) ? catalog.i18nc("@label", "00h 00min") : base.printDuration.getDisplayString(UM.DurationFormat.Short) + + Text + { + id: timeSpec + anchors.left: parent.left + anchors.top: parent.top + font: UM.Theme.getFont("small") + color: UM.Theme.getColor("text_subtext") + text: (!base.printDuration || !base.printDuration.valid) ? catalog.i18nc("@label", "00h 00min") : base.printDuration.getDisplayString(UM.DurationFormat.Short) + } } UM.RecolorImage { From 05f46c47f72d0a520e74ee779791989a25e25227 Mon Sep 17 00:00:00 2001 From: 14bitVoid <14bitvoid@protonmail.com> Date: Fri, 5 May 2017 02:31:16 +0200 Subject: [PATCH 566/816] Dynamically fill tooltip with time estimates --- resources/qml/JobSpecs.qml | 42 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index c702cb1ac2..849d9f43da 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -174,27 +174,29 @@ Item { { id: timeSpecPerFeatureTooltipArea text: { + var order = ["inset_0", "inset_x", "skin", "infill", "support_infill", "support_interface", "support", "travel", "retract", "none"]; + var visible_names = { + "inset_0": "Outer Wall", + "inset_x": "Inner Walls", + "skin": "Skin", + "infill": "Infill", + "support_infill": "Support", + "support_interface": "Support Interface", + "support": "Helper Structures", + "travel": "Travel", + "retract": "Retractions", + "none": "Other" + }; var result = ""; - if(base.printDurationPerFeature["inset_0"] && base.printDurationPerFeature["inset_0"].totalSeconds > 0) - result += "Outer Walls: " + base.printDurationPerFeature["inset_0"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["inset_x"] && base.printDurationPerFeature["inset_x"].totalSeconds > 0) - result += "
Inner Walls: " + base.printDurationPerFeature["inset_x"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["skin"] && base.printDurationPerFeature["skin"].totalSeconds > 0) - result += "
Skin: " + base.printDurationPerFeature["skin"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["infill"] && base.printDurationPerFeature["infill"].totalSeconds > 0) - result += "
Infill: " + base.printDurationPerFeature["infill"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["support_infill"] && base.printDurationPerFeature["support_infill"].totalSeconds > 0) - result += "
Support: " + base.printDurationPerFeature["support_infill"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["support_interface"] && base.printDurationPerFeature["support_interface"].totalSeconds > 0) - result += "
Support Interface: " + base.printDurationPerFeature["support_interface"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["support"] && base.printDurationPerFeature["support"].totalSeconds > 0) - result += "
Helper Structures: " + base.printDurationPerFeature["support"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["travel"] && base.printDurationPerFeature["travel"].totalSeconds > 0) - result += "
Travel: " + base.printDurationPerFeature["travel"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["retract"] && base.printDurationPerFeature["retract"].totalSeconds > 0) - result += "
Retractions: " + base.printDurationPerFeature["retract"].getDisplayString(UM.DurationFormat.Short) - if(base.printDurationPerFeature["none"] && base.printDurationPerFeature["none"].totalSeconds > 0) - result += "
Other: " + base.printDurationPerFeature["none"].getDisplayString(UM.DurationFormat.Short) + for(var feature in order) + { + feature = order[feature]; + if(base.printDurationPerFeature[feature] && base.printDurationPerFeature[feature].totalSeconds > 0) + { + result += "
" + visible_names[feature] + ": " + base.printDurationPerFeature[feature].getDisplayString(UM.DurationFormat.Short); + } + } + result = result.replace(/^\/, ""); // remove newline before first item return result; } width: childrenRect.width From e9d70a8a70290d7c5af0b60a430c39765f68f9c5 Mon Sep 17 00:00:00 2001 From: 14bitVoid <14bitvoid@protonmail.com> Date: Fri, 5 May 2017 02:36:22 +0200 Subject: [PATCH 567/816] Translate features for time estimates --- resources/qml/JobSpecs.qml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 849d9f43da..8e89dc6dbc 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -176,16 +176,16 @@ Item { text: { var order = ["inset_0", "inset_x", "skin", "infill", "support_infill", "support_interface", "support", "travel", "retract", "none"]; var visible_names = { - "inset_0": "Outer Wall", - "inset_x": "Inner Walls", - "skin": "Skin", - "infill": "Infill", - "support_infill": "Support", - "support_interface": "Support Interface", - "support": "Helper Structures", - "travel": "Travel", - "retract": "Retractions", - "none": "Other" + "inset_0": catalog.i18nc("@tooltip", "Outer Wall"), + "inset_x": catalog.i18nc("@tooltip", "Inner Walls"), + "skin": catalog.i18nc("@tooltip", "Skin"), + "infill": catalog.i18nc("@tooltip", "Infill"), + "support_infill": catalog.i18nc("@tooltip", "Support"), + "support_interface": catalog.i18nc("@tooltip", "Support Interface"), + "support": catalog.i18nc("@tooltip", "Helper Structures"), + "travel": catalog.i18nc("@tooltip", "Travel"), + "retract": catalog.i18nc("@tooltip", "Retractions"), + "none": catalog.i18nc("@tooltip", "Other") }; var result = ""; for(var feature in order) From ce3b0d9fe488bba225a3d2723726c12daf23cf39 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 May 2017 14:26:01 +0200 Subject: [PATCH 568/816] Convert Kossel platform to binary STL There were reportedly some errors in the file format. I've opened it and re-saved it in CloudCompare to fix these. And I also converted it to binary STL to reduce the file size somewhat. --- resources/meshes/kossel_platform.stl | Bin 1494168 -> 418884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/meshes/kossel_platform.stl b/resources/meshes/kossel_platform.stl index c06cd3a1c646f0213c8da29d9e22cf938ce2acbc..f6503be5e3fda2a9cfe1a7e5fe472c1daa4826f2 100644 GIT binary patch literal 418884 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ඟ&+uaY0CY;>@BOGaZOL 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�$`1px7-=k*@l|WCJnIdu7I>Y@q1J9xo=$|u_5Pi1tqaTE}nI_^nm~<37w3iGQ#EH9z9T zUyc$Ojbf%qy!PcsHH?Mv*Qo?XyqGBxhfM9RVZ4o303|e2B!->$ObugtMb|6M6p7LI zKT^ZEA+MsUp_wAF?oM-S7@Pc`aHUp4Gex3rdQ}bMpKMtwp_wA_jlMsqVT_fnS0yx4 zB$91<*EC9LH!rJs=f`{a?^`6EoqX~lw_0R#gI^r#J#N*@=GrU9dE2c)*~Ds?_=ZMe z-mpWvlyGZtHjm!mpdNH2#;^5Oj=;ziS0q(B65WgTt*Hja%eYRe(vcXpsxwDm6pyR7 zDjkXGb6&|27+d6;vPwsyvE9JB9u-DBxzerDkx169 zs{$(>iB+H9kR#kmz)h}ItaK#it$Z*?xb=yfTtQiBA$EE`N4Qm!n_Smf=|~KF=A#_p z)^cugwP~dzvFh`_Sm`wTCb|`-n^-{`-#(=?B0ccv-_$iqX}30Z^UVu)3g6v+6K<{U z_vUU*uzUuEr(yckincu^Q-U5GiPE(5zmH_QBd{k@_Ee934&-I;&NNt)?w1CX+ zbAV7f65~%>J4dkp0Yd3WJlk*m9Kl`+2&E&@cxFhBV2=fa(ve8-7?va0=K!H}B<_3h z_6l3Vh;nPA`Vk%2ZY|bkX^&(4EP_Zp@YYs24faw%s9q#0w``Xq*yjMDbR?1iJLd@Y zIY1~KiD8p=%Mt8zfKWOTm7ngJBiQEvp|lW(?o!tC!#)QHr6cjcFGl1DJ=01@;?4ti zD(iV?p9307dm_c(A+>oGw=!?@e}8(N~pFc{GZSMwRKselx80XdOkSC-(5GlrQ+6BZVsGo z`^0IK(w^{t7JafQcEa@SbL3K*y`oIR6O&Kc0{e6NK0qtMUQtG*K#sZlhKgHNI-8fF zQL5+D`#;~jXDId=^*s~hQkwm!yvAD>O|Q7sv9o)WMkyUNKG|Ui_Dl8sCFD|?J+Dl| zV~t}r#xAbDPu5DX=amsDkWp^;Y_~3WlPipClum=H;MyZ}p@Bd8sNk8mU?faG>lx7by)9}QE8`s6|*}iYtO0Wl+5h;)d{+w3W z&wxjxRL`gPfA(ox2fKj#-Y5vA+2_nOJaN%i>tLsG->+>Y*yqfM6vzvYTvB0Q1|E%4 zJ)hqH8P>NCc1-s@VGv5QmzrsK;(-_YU>|qi6K*BgOU;NB$kmrzSYdw&9*t5xpWgqu z{=(kakKXs4K`70BZKmOgOTX-0R*w?w*JeZt3s2874NvrX zdCjtVl)$VojFIPw?hDo|tB3teL}BI`#^Ey}g~%p%o>$Q*rB%-#kSD@^kbce`a>`9#fLdUqugrKP44a*iS(`aa)d^?HL$a`L?p(o`bUn? zD7P|qb7g1~MPfzo6*)qq+MV?r3%pY@vM!D7h{d18#apQ^4<_L{)yA}9n zFL`3rf@L{EqqIjBKf%L~ySt*TZH>~_c_dP|@2h@awHJ@?bkBWXlU3Cmp;3JLny*LV z_I*_ijY9vt=f1D0+xJxojY9vNySv7EB##cw5gLX5IcAHr9F^_woV61*3jK4;#?2F9 z59y51DD=-UuQyMGeX27;quhFZ*)_)3BgNmB_ZV40Kb*T{>(!^2*u?F(jea=h??PP( z&Ez%wpI6*&v>K%}$9=MTq(JWZc=rl=?%W?-qm=gPJ+YD7X&gOw?oF=}sp@)n)w|Qcm+nZcJ4~^nH%RI5;$h3?e*0QOI&!ti5?_xe|o=8u+ zsO)xSZl1aB>fWPK=)GcgYYS02zl@&ANB6GbJsQP1sd*xK^~|!{F}XSPq%}REQRs{I z)MyO)QQ7TH+_X2W7N`F+&+1jp97y zJW;v&$TC`~m^TfNMxmdGnb~v_FuOxmf8CnLA5X73Vd6#7?u zA1i9i+j!eDo{Tha9_BSP3jM2|*WK}M&n+c13caPC*Y@#mZ(YVSmMwSP+-qnQdP_a; zA7SVB?5?K2dA-BMdJJ2>Y1!>r>c)+?^ctF%Z>6++f;ViDBQy%VCEih^#;OHF%Wk*U z=4Y2~<25vjZ`b5Ch7BE3c6-P+uiAQBPiPe1;K>uyPuVy}XcXTP$`g(L8~UT-&bAuG zH<9whsyDx$BQ%O{JLQR&cih0AE9`O$k4ACsaGqG}mjiQzMse%Cp|qDHU7 zdX+VoYH((DUgO!{K3~zhzP1Kb&ugUkd*I*;Dtvm6T$)$)JmLRbP+eBhc7nDaR4)?S zy#3pXwiC4dpmZdT`>=Oek3^4R+7{6^iXLG+s#_*@ zRkSUlZ4{+Fk>c-JmtR=nOb4jzk?0Y6!v9(Q)jnm7Qkw4wUvas*CBsY-CtX)tR5wbuZh#&SXj}P7tRmcT6%>3 zs8akr>VZouoD~9f&8vEz@PBsS^sb7wsSw4smg+^~iI>ufUe8sJ^GotI|Kd-#SF{zT ztuxh&8ozsLUPW7B+SXD!5}UP8uIQaikA!nu@<(;vmp`fK{Z*sTisF4fYCQbdtcteV zv^}Rs7>Na&TvO3@g62glitUw195LjUiniOdJ*Rq+xcc^~72I(+ilce8-4%(Ucim9Y zcAK{6R4)=2TsXa=?KaJ;bdtCo3(H}T!;~YN@<%R)G>8p zIqcP#l7L4?omp-gLST2tYy_K8N(YTw#+1XJlPL*!bex*yK_e2_r7|1yW|Y#V;da6- zhrKgX67cBAHp@*z2<*0*jgm7;Y12p!DVMmTr_SbAnzj+yUcWDYHi90gE3G5x?ptzl zt;C&4)l)>62KM?5`=zEN;L-7RmRrq*zz(a~94|&GZ5p!IZ%P6l9ieA=_ypsA!q_P` z8zpCy(m})R^&9rDO-aC`WBM!)8j-+`x7pY|qm&LBZm-|4t8PjH9(@YH@}Ln3?Dgy4 zkAR0!N@p5f*iRV0coOjFa|4zKjnbqp>?e#Jh;^oH5n&o`m*Xe6%dtik(c!4v?!aO1 zW$dJ!z5k)lCRm=G-Ha%TLSB{!4cQ%7J^D0*?@pcDBymyVIv6 zEH@1$ilUI0<))GC_3J)C_2|qamYaqWMN!Dha?@~olh?!EXkXG zSKQYsApsA1znovha??`e?8f5 zFR!8Vo0X<*MBj^_sE_IOVL2K1>k;%oUFrN>oH56rSRZ@lO}2Y>nDhVN2-6tz=~MOO z^A$M)9-U3oq9H_4l+vbg?%5AvQ24}Zu z6!J1tPl6sqDNWms%AKcr$0xS`Ip?Y%mqyVx4JGJ7E~RM)jrBjQw_W{&uLozIAeTnb z4jMwxgIr3}HjT!VFY505>oqtl1i3VdwrMCq4{|9@+cexSwvi5+=QTJMhFls&+ccD* z2f37{Z5os2_G%2-?Ru}lF(l;DDB7l>1U<;5G;Pyp8@+bpA=jh8)rVs*$fZ%VO+yKK zkV|RWrqO+MzeeXzCwdKzKp>Y!(KZbw=s_-}X@`1D9MEw0DX+nPIC5ze?NARP=s_-} zX`9BOZ?50yOt$wL?2{vxM$tA6CFnserD>bSkdFp7l1=)14fe2+OQUF;h7$B3m(sLN z!?lzeOLu$2uR+H?IdW+fZPQSK9^_J*wrOm&`i6@}(Kd~?FHfnrjsCY^ zWm9|cO0(REVQ+rD(e@v=pYVlujwp)KBebKs@{z%f4%a`xx1GIsk(X?8PIOM$tA6CFnserD>bS3DZ!59%v{{+v;(oeS%&C-v&IpLoSV?Z5m3@gIr3}HjVpc z`)|9~z;_qVAdyR>Xq$!-^dOhgv`u69XZ}}P$GO695Kl&tOQUF;h7$B3m(sLN!}SYr z_3;|GmS7AKxipHlX(&Mtaw$#QG+e&`S5dElYa+%%kxQd!n}!nfAeYj#O(R^}y#}uB z7zIWyjiPNDO3;H`O4Bxt)9kM1HE@r@*fer!6m8Q`f*#~jnzm_ltbTb{GN7;j4eF{h z8b#YQ&;scE(=>NfGj_$@nd{jx3VAhCk{o)6Zvo`$fheVE+fnthc8Mp@%HVo-8b#ZV zN(p+9OKIAs(RY$>UwI9*mbjjsM$tA6CFnserD>bSRzrO|(QBa9$Mx(qineJeK@V~% zP1`iayyx4yUIVRHu4kuFv`s?^dXP(L+NP1Leq+7uH{iug} zt@Ik|(Px`1Hx2aF0+AL)Aur2K!}TQUZ@c~huDj~dr@AaR4I$E^C|{2-FUvHJbbaT} z3%;;=hzI>;&iB$xNg_mA6otGjH;sOS{1`w3^-vG`{hUF`a;t|BX;BpNvfMPTX%1?* z6??sgu4v0BHIvIK?_GUcX;xbO;?RnJw=3RU}vDV ze@ydtXU=toN8d|ixz${Vv?xkx)4+}-Sjik`m+vCNqj_0w8bYK+QA(SJ>^_w6sNm5z zGFfgKLZn4eN}C2&o93RAB;e8aL|GorRV31)D5Xuq?S$#}g1Fe9D-!VN+p8=$4I$E^ zD5Xuqtw)~iS409HeW#Y?rXfUH6s2^~aQh+2UZ&Z~6iUy{vxh@u@d++IR$Zk2KTKKMp= zYZQr~Ap||hr8MoJ;a2(YSbcl1!S~FOOQUE94I$`3E~ROkhVCWAx8IRVqiCCk67(RK z(zHzjdkM+j%h`Hl8b#YQl%NN>_(ngXXq$%LV>Ip|ovo6lQM64%33`x=>kJ@@wrS|j zKwQ6|HHw63C_xW$DNQ@n1AB}WF*AXKMm#6z!lP1U<;b zH8~JPJ7~C_fv|rje&>9{tu=~7&=7(ihrfnMG7v<}LUliB!)hODg zp#(k1r8I5R2v-KLfhz-dSI{Wh;au6(CwElHr8I5RXxqW>ujUC|u~VaHn?}b|eh)YQ znd6$scgB=vc{san_o1D!U(xuxb}fq1BebK^y@dGA7;-T$qG*SslKqP4L6p+8O+)t* z!aXY6Z$jQ`BVig!(1Tn`(>4v=O9=N`?ogpow8OcQ{fg*8E~ROQdRUvG#Fh;Aw9qKp zp&mlegIs8Fkft5#;r0@8ttGF4whwo~&?wrW9zxKATuRdp8lU)9pVvSe4sXjLmqyVJ z8bZ*6TuRe6jgBi%>RLMWJO10QYj$fCZPQqK+~`{8YFn3*TNXZo)+_hsU=;FdrX&gN z-CR8or8I3jD(pVw+U=e|E1bJ|XcTQbDkbPaE~ROkhVEBH4|1W;!8cJ@-jgVbQaYR~ zx5udKNBMe?fCqgizB9;j)4;BzB#NSxHVyO(Tz}AOkbnn$K)$uZa??`eFU&ix|+kG`GBa??I7 zC{Yxpbfz&fXrv_I(YIh&o@tOsilUS@4OjD#op1Vcm6Cu*--2OzcCJVyMNvwdhWpIh zJGL?n67c9-Ff2C>A(EmfrA@Jf>gC`xJ5a94(Q*FW$YB;e8aW>{_-LL@~|N}Gne!nJq&WwzHK0gt`~!}4&h zB9RnDDQz0=+TPywq`$VOB;e8aW>_B1RV0$4D5Xuq-Em57Bm6xoB>|7V1;cXF5F#mx zQra}!owMXx`*yCv8_V$MyU3c!-)l)EMNvwdhHEpFmi=p**B}9pzG=g9tA`LtQIyiA zfmXiTYt(CyfJfi7VR`sGB9RnDDQz0qW3+8c--b&`z@zWxusqZw5=l{%(x%~d!Yn0w zU*hXQ0v>&*n&qJ$kw}W7lr|05rY?m&KvNR%=-WIjHw__@q9~Ku?Lz{&=F6Un zv`s?^dRmW!nXDf8-pU@i*?Z=E#|TlhO+yKK5JkP#BXkG3z zf}YkRQEj(dv%8MqdV+IB0=f7;7HHa`9zxL5dL+z*a+i3I870|!IeX8GZ>%GVcBqFC z^t2v{YP+8Bep5;d-NFW#9wdMFFZPQSKp4KB_ zCX~B#weYr5$KmIA4HC%3HyjZ~+ccD*2T@AXHVw4dWv}>bWh}nkk0{!vp#(jxN21!U z9_zdIblmgak5eNT-ya1{JJdr6dRmV}wcYPy)PhpS+r9lLCkf=@yRV>Wn}!nfv>pjF zq1=71T))6+EOKfI3D$%Aoq>RD8cNX9dL+zb8g5J<=gMo4KrYmldoa;94JGJdJ$NL{ z6f|6$-F@a=s0Rt;!l%Yvn`j3OA?QIarD+EZ*WYyCU9Uj`x$y1dK2NlRh7j~1m(sLN zBmAPg1_|WCuZTNC(KZbw=s_-}X`4p4GI$LV$c3u`_mZM*8cNWETuRe6jka~JZSUxK z#((Cxl5yn*-5ZYOfp~Q`u8CdAxap5j1L{SD9o5pE&n|U7eUGn)Mk!4@)ZC5WxVwQT zsE%B?o^yvQ+M(t`(1Tn`(>4wF+!=SZ8or4nkPG)E?ukX)G?btRxs;}D8t(Zy?#^C= z1ajg2iq$(2McXu#pa)S((>9IJ%J3Q_kPGbu?z=_XG?bvH^+=d0XdL2OOJ0Kna-r?R zeFA9*4I$`3E~RM)jn5{d)#o)xAQ#$g+#8T~&=7(i=Svy43O6R$c>bPVC2m zT)LwQ%L7rl1nu2ga_YcGsPW&3a8wtZ)ZTg5ckH_>JGCfHJJkGK-)`@5RA_l~j~UuQ zLkN11i^q;A+NRMt*7rZWh7#y=VCNeUEH@1$ilUI0OtQL`|%(z%Y%jx zMN!Dha?=R?L9d}6^Z~I;5c0CzG?XZcLSB}KdQ9;BTCbrV^kuPk5%RJ;)I*4(DCA{% zsE75>y@q?8cGyJAur2KBaEuqxe9sV!Ppyi{X$+6rlCYpl+vb=yf72viC%*QJQzd7 zUS!D2a??;K5iZc1S~BmIn&ba(@>%)N@>$rc5iQto_h@v@L-G`d)y%}%S}Ux zq9~;^4LmpS8YJMsvjWzG<(USFv?xkx)4;qa_x!_akbnozJotIAJUdq;(xND(O~ZYH zc#h*WNWg<xoHTI7DXv-8kld#-yjKi zbWanOn}!f+QIyiAfq8?jweRae0vp&pS)i=vb^4R?jZb55^80vb}RC=uMn)NWUdX_dU)Y*R1`Z|B}z9-Qn!+MzqJd|0@waZhZ!!qm40u zwNCp}^OEKoOQ11g|FxD}*Z)^uW5LmDE_r;}lU^g1w-9M@)VO9W$5HX$xx>$F{`SJt znx9R((`&51J+{`|_Jg2$i+H-t)B=$OW@ZxXp`C#VJsP&i3Y@YGKtu4eg_mviF-hrDeY!0~V zW*>FvqwamqX*aeIpNxF3G5*nqniE1U&8u~aM|Htgd*w8=PO2A)#qF0j51936c78Ok zp2J9-KWCrCT3bB}suziu4=F9yW7j$<9f^HAHdw4jqDQE7Bp++sc6@sB?4&ZvFn zN=KsiC1)>r=kxbmlzp$1&`h34@%MzKH#9X$=}C9Jp6PkQ{~3J#R}GDt{p&ZgGhIyl z{<19>D>3P=zh&PgrK84|Z||BTmT&n^vpsxYm5#)okMEEp4qtbrJ9hi#D;2+|J3^_{~gsMgk5{~w=Lh@_qTbosZrJOpEW<;c#@A&y{K{IgbB@o3;)wR{jeoH zG*mkhpUgYHdB)DGFPXNY-hzviEsr*HlZuc3r$N8+AA+b-^V#Y@c(4jJ5o&`gnd z>X)U(D?9$u9R2Q~9)xC!M7s4}PUAKAUFu0_rbx`(_RJ=ZedUOzukEz&FKb?N#z1fP znfO%mlrwhmb|j8@Y`;cr?u*Uio>|s|&`h34@%NNFhAr0fqeqBLmD}HL(HL^uK8tsl z)1B2^qm+&sZI=#StWiooyw*$Z)BH<|#(&0@+__rb?0cwv9vY=|)EL+Qy@p09t!Km& z{?ERXHdy@QFW<_(B^sr4)Ofjcc~hg5*3TwtRPG$NxZ~}2+-Gjzc8yXx61V;ShUN*M ze{IQMHvX~yUMX!?q6xk{5~Du7uzB8xYcDzB$p^hhuMGP8kM;QC(zBOnUe(hhjKq`+ zzG{4M{pZd5-|FxhO7u9Y6x{oha5wne{mxJ8L1-qg;s2bvY)Uh>)$-RXtzRS_oHtF{ zhIv9Wc_PK%?UwJl80y0gIj6@_>Ct+^|M}_NJ1o{afYw|yMdHfWx5?d|mC#I)IPSpz zo0ir1(4K&f{~0>Oq6FC;Xo?KRCKN zdy76x=3Rqtdv_zApYBFHyXZ}1|F&5)GS<+o6jB?}UHX!X9M z;_>DQ%@m1|S8ZOsYQw%u{$EV>)9U841OMYZ6YNmZ*}Y_c&v?sylkE2_2N;v z7C<%LxAS?mevue_+dess*m}w9MdFKbrBSgZgDAFxx*JMIV!ufncnxdybvN_~m5zjK zmyFWmjje$^9f{@~V4?pbfLyAgYkdamxgd9@r7`+#{mYW#lt{-aeR z_UPRDPFY`6HCzvJv|dY;&`eRo^&oRspV$ZNZYUjzrDOh6(QB0I=`|)2yIeYWl>VMI zN`L>6aJ|&rQR#J1k1!H$1hN{(4ZCG*kv7Je^jx*?uzw|vUoi^fOm1FZHhvk16iRM% za8w+jb8pvVBar{?Gk0TsqvCj5p3qFO9&VH~_bpL6j_7GU{-3b(0F$D4{(f_ugd<1> zQIHIROVMRbeNs1CgKmQpb;xtkHe8C+_8A~AxjY?g zW1s1ve(3ZxFT`nE$KRgcQ@IqUd9B-oJWp(6p91EExD=;tLY|AJaVbvQr-Qs4o3EwI za?q)x-sYUPb;$F?G}v}^0x93H!D#z*khe#|gjd>fDNg6hm8t0McmGSZ&kd25t$(#FgZFc5Te5SUE3Ua-RI-$}!YvJaUux;Ud;1-_yMS7XqZGiI< zq7k;+hO~g-Qk>?xO?e;w{ra_)rVi2$TAeiKMNidPu1suhk>YK*6w)PHFH`ZK%SUee z@qS5pgXOwkmL7ZB-kB42jM|^kZre@?ec|C91tTY)KPYQX2z%B~XXi6~|A9L%PPp%D z(%C5$be#X9T6n>c^5#vPT|#w=Lv>~U?jU@;u52kzBUiES#AP-4bZC|+wPN$-4zZDW z%>&`L%H7P}*fBP;wpk#2yVA|v8&AYWQfmdmkw0(BQ^+?yZfPvq`GFx`Y9C+sN=!st zF{D5E_1xIaF_AsqV0h@rKXOz4EEuW2AP}B#;hH2qda;)=E%>z|{+f~CFIO;fA#8+i z4!e=dX`L9eD$m$<>_PKwZ=B##6h>}kU%0j{`<06K7>#DQQVWj)8e(Dm%PvVHG#Sv3mc;Q>V$Wz6^u;VV3>8nX`T2crI~T0{v<=> z1~NI}Rwh-B7ZdIez0~Y=+4@3IS}%L!!knhxReLbP=O)EzgoQZ!NzttI`UA5>sC!GQ zpKA-^!qsJ66?`BNUb7@FOga=XYh7bwN{9Chkrk6Y|FMFR25+Fvi&?pXluit(wLQCY zkBT{>LiY@wF4gXU(@x^qXX^UT9vbZI;aDP^}8DD0J_s(qYR2(30d zXMdkFIpViR<7*}rjFgyRgx8fSrb+3!ntQHP)_otg&l2lTw0ii#f|2HnjW9~f)1A?< zVC02GhV-LHd%Rn}u(7Rfy5ZYoWbwT7boFxl{O;Q9f`dxrEZp8Mlc&XX@Z1Vf$rqQk zY^FZWuh-jVjq?!=w^`%d8@FAKsJz-=7`3kbWr!;c6S_Sg6KVG~ZsJ0@G+&ily}=su zXFd$w!7?;&9@eC2tRN*J?)LRE?%JzchUMe7Se5~_PPkbH5L}AFD4!7Xu5Qa7T0yrA zC@uB;j?Xzu{$f(VFC3NuX;B|TnA$_t)vR@E0#iEZmH{z5Cpyu(X)|N~{kmlUL6(7+ zNtJ_*bIUUHnwFPKeHXN@gAtZx;8L7MScsRV%Gn_214Fj$1ku(Pw>Q zqi#ptGF*K8S1VVLqFgDWR_*QCha8px=~C@>Jnq!dpl4lw?W4M7IQ86dO$Ut?=oaGV zwC*_vi|UpE>C)(el%A_%MzyR$&n(s~14>S{i@ek5f^NBjxqo)ffZn=g__^h;nv|Za zPNH6QU`=jrO@sP9{wU4MXX8ITs&L6!lz72^B) zsiDo+Kh|cP`zNfjO5XAKOslTCW=@sFk2&{*E(L~yu=*93;xxkY(WR0f=I-BkC|4}= zW_SNPHq!P{fB5*Qk(MpN-dR7B89%vp@U2y2%oPBY5ZZ|zFkqY&R=G-+?+|)s@KHmo zU6)Di3@bxp5MiQWyM*}XhuOyVtrrZj@!f%`(4D*}tV7Bqd; zIKibT42vPee>>kbUj25LNl=Yqbw_n|eAHPhtX6%4cTF;$t$xrDzV0olw5vOu&K-6p zHnO?DKRo~U6IKqf8kFDNIkwK%DeCyDQJ?yK2=pxKJ7YkUHJXC#u|}V6UhJ74hzm zll+^0*>4hDJB86U)W>>1f?N$h+SO>0BE47(Ot$(iVmLv$RV_Fsax!P`V-J`*cnpP6 zChBkNKS!I7&dLasc&fNravsA8y&T~sJ%c|~``WY&WCxo!FBzuR+ftsDGHsua_DB4Q|4n-1FHa~&&4!mTGB zy;#D^6>`FJD8!g&CL57(^T#89hYO-Tf8Y zd^)f7rNDweTjnb{FRfmV-mz1R(o>EY;&N4M-9C3tJ*z$HJW(&a`*>{R))0UA;^U2^ zj;{4H167)qFhtitJddGP13@|zF>K%*WBMXFM`aeX<|s%}T?t=Z2hk#nh!9H4ygiI9p12tw*r%yswZeA8FU6 zY+8-;Y?-TERdS0!jGeAcp#6n-U)JtcRl62}7&k(VkNqS18iit4p_f<$V%&(hLrtZQ zT{2gD9l1h`8!>lIvLtrMp7^HfiIxt;xDn;#yZ40{asP$T(YssbiiO@p+AqT!lj;pp zoEDs2u=%;T;+}2alU{?IM>ufsPVBmr)g;Ak@rJl=*&dErY0SH zL?JB1TXCgBH~RGniNysHX(xo0J|}oea_w`VTX4-ii-Y3it69T8iisQ;5)3;Do|4>0 zl}Qc89s1bp?UXKd4H_LyN$n<{Dzz-wpjQFeC*{2BqQj)4cj>AeR>`Lat+PHM_XDJl zk8?F@U(EPA*ne3}NEA7cKqs5n8*qZw!AMDn`!1vz{bsA@KS;`{gP)^FpYuUYv+i3p zB}-HfZC*ApCgOc77{*?I{a9Ss@zB-8Y)yOOHR6?wfX|2Uq`Unfr@ye{=l&kU^ zBNyMZ>I&;!PVkiEsq?q27#mjy z4Dr)*SzN04qL|3Or-R|*F();Bvcrza^YlC)i48aT8PM{_QC9`bJU26jt@u?jrJ#6^^y_KtPig0P!uD|=O)Ez zRl9C|7bn=%cX8fMy|QI*oX~H&n44YY554b#;8K(;HAhwHAM$^cr1xDA)OQiqiLRcj z!C~VQWjVfUP36GKoBC4zy+O%p8w}%M(V*ztjJ06dF!cJbE`e_6I=Ui z3syc*DI|)2k~sH>w6%8!!!LVVSp;ZZ$D7w)3*}7qn>uJt#R`CCvWt%=ShI6jbTpj4 zw>5gng6Wx|u8~Y}`*bU+Q6VaZ>Fl*@e8n)`o|R0-UTs_RUOCUazbr?T`=m7|xD>4b z)T+<$ZqM$~sgiaRhqUOteZ`oH)?JYz7M1?Q_-xuKxsU2jaUOG#g3iG%Gl;^k)xL_W<8g<~q;%;mHY zYf~3xzwk%Z9Fe}h71!}^w*nFGu8?`}%xNJiPum>qTD-Yg4kBRBDU7*K&sAE@wBWk- zMo?5Onbm%Cfk^3rA@gpN2tI$Pa+LaSj=#n?6#~AR`&-98RUp!JXDGZ+-lcMarzFJf zPm5&Ldv`&WSUF-dPdS)oTxt(@Ma-4rx!{1|}-mh>=#-(%}?)~aoE=ggRLM2zL zSNDEp6UaLes^r6DzuM>MS6m9|a((Xo3Iz2Ml!*vcSGiN}3m%-R*6q|2ojXX%mD+Qz zxc~EDtvZ!M!q+E(Y82;GWP`E$B|`0l?@g*4+SPWJHlna!=Cn?{*zKp_x{BRF_}rv8 zt@h_*uLXiH4U?;ImaDi!&8=J^OgeD$C&Y8*UJGUR`(4Ww&MZh@eqzbEKZBQdzNF=f zOL1DAek{EAY^ZDC`CQRtVFJ|;2=4u-=W6S%qCwx#_ssPb5zgAB9IDg7mDC! zcQpz`#{3g9Z!NhFo{|vNs=R01{3bRi4*Zn4HBZjYsk!E@B`0`FLOj~#3B!orX9(}7 z8Ozs+$hwzu%{xd=@RWp@@cG=p;s-05t5=eO#i20D!Bdj&Wn9|R7?XC$B&dWKMHI%U zrSYN88B*&n@$VD0%v%{MVe;QPL9`m@H6BSdrj7I)zNzgqIg$N9fyk)qq43ySXEc36 zoOz{-QKq)M=UlupgX#n)6P(~F2{HZp8h@|H8=AS|1ch;y!D;D#HM^^EqqMAD`A1UF zK{bk#3Hn{#D3%cujDuU{&P$F#Hz`i58^tC~l8r@^vP~US@3^DmG=&wh_TiDn{E630 zf?|*pPE#1C6hbVhvm}uDW_6RGcE;+3OHo+e4}SN<{=kCTU9?=O6A!g!1WhSn_7S4A zY{4;(7JTk%*)Y}UxN9ZC)aF<}+^Juc)ugCjDZ;H^K?hHl!fIXe{qQbE$r^eu!Mz&K z74;INB(3%3HU2Lj(R&F9YG<4?a9W5zW^^@b6w`YN2x=Sb$vG{ATQA{KoL0Ae=p|o7 zdkLkB7-}_~Ezs}k4B*u(ql_NauA>EgZc?09H*uBEFAdabUQ=sx#85k9^~zHc;?JLt z1TtfvG+_7<5t}>+EUFop9$O+Nd4{}=WysDQ99qTtGBu4khA}O2{9NQ-%g}Ua3 z7fonpt*O2s>7B_ zw`!MLQH(C>S<|mW=ZoSk2(72eqU z3mLL|qTU|q>|Hikz4o~o3Dtf$HCI$ynB`WE{HGs%FRTxo9Mjkk{Y%Ev3KBI+vkcCC zXhb0_?pZ+icZUQ^^4OoQy)B$DY~}H;8L{zz*!&HC&czj zi?Y|uxL-TVfDYPo;^dB}Bt%(xmho`(EQ9Bl%7iwjFj5lY$-utgOyd!=CsGWgI89-7 ze#Po4lk$rgH(C+zPcM=c`?h|Tfzv@w&~CC-37nBVQny7;_0QJkh_yR5QvKkpj}u(C z+_BVJlzn_ml^l`wR4bkqCwNLiv?}vz_^HRLnoo1^USdC+;e6_s5k7Y*{mo4>R~0Ho z!vD-M`>y?DdOCX(27lWE&fz%W{#?8Mb~z!oJo!MR$>9>F6}8`GAfJ4(-Z_CMa_#p| z=!6}Ekwb4LKu#!(->bY;H?l15KpSEH(OVVdsiXBYkN#|qPH-vv-3dyEdNT!djN4T+ za(h){v##v76eu0)jUN2{44^py9VEqRI}9C7yHt(L{O=W0hh4kr>^&p=JrmHu37!_G z?J#tleadVPv##vgb(YqyL!GeeM{hMdCFrQ9+QV#fyW~oTdY1{Ls0HymC+rx#M(vb9 zix+RE%74v2{_GOMH>Yd~@7>cm`ew5&s85-fwCC5QDtWnYb4bziQS|%VIqyi~pJBQV zq>C6geL^ggL@EEzZJas~<4#nPIeX3jQ5q-c{b`gF`7DO{rZLK)d#-dTdUMYfxo>YE zbv)!!a>UrVvWdNW;w3R-%(-Nqs|lmGgwJLCWjYmJbNL8LNr-#i&(VmRQzGH)PABsbl#;Y1h2PSM(Pbjx9u<%0BPb;y zZm!Sp%98s~db@tqQ-++TX9TmKy zxZn6xQ=Adh!_U>rv3mQ=x`FV30f|z_p7m|Dp2(#rCnz6&SG~PnuarCLpmaficGtnn zLFp2qO5WX34yP22F6i642mWSN9J!(xN|y*#CJ=x9Hw`1oC;yAKM_Bg6wdNR9&!v_# zd%g;vomoFLsoJicbg9SP8_Cn+673*qVguts3y)LOPGS`M2a-O@75>~co}^rZ&n zqi;r3v=EElsj3lbJg+o$aDsFTAu?;+kx+C6QwPzKn7t=O{%iiBXTZu7Dzn_w!3okW zM2*P)I})J(xvq2&EyTs2@74&6PO|NsAl(h&6avpw}u%cVGtFlgx)u5?&+h3B&=-R(!$So-k0(vjpCgH9<< zD;=+|)2$EB71w9$XsN8IYp$F$Mzi#R6rIyd@n~HkEq$D;F|U5dh;kB0mqsc{q1M&! z(D8qj1NB3Msw=m0@LW+{**Yq_l$>(q%;A6m=p{}9QiwrLP!0+cEpOZ%?ctOn0>2mC zRY&S@5?lwukRpAGxZ>!E=y7}Z)G(zut$HQO(ZSIZol=}uItq#DX|lO}Xm`?1wX5Ep zKvooQSW&&iBmhKhJ7ScSYIA2Vc}Vqk9}&E+(DNx*Y80Rx?>NfAr8sTZZnOn09k2kj zB2zP2yjgDut2Lan&AAk(5msxshaGb*rGxjLb^n#k~_=clp;c{QM|Go&RkIprAq{K4;TQ#*@9@PxpN*-IgxGN zym=cljNkui2_o7{&`HdGg*N9>oJQDvM3EHNXX|hqgPcH4P$rBUl`Cg2;psw()5^2P zNk9rQNEbAPi8c#t{X^PGir%2jX-n7)AV#f zz#6Cg&yShq&XF2!kt)%bAEoQf!5&abK;+hOGg@P84IqFgD$IiK@%o%(9kOS;1fVD221 z6A+Ms4y2@rlP>e1v}D#gfoN6o0#Zj?$Na%_qUy?~m5$afa}=ekERiA*#_#!8eO!vy zf?bY=4js?^u}Y?;X8ne_%dGhWVP)GVIaV25>c6Y7kLt_;zoWlN-zZ1PIl=W2E#Hpj z(1950yOb{4!zP#xpXv>(OskKulTf*emfW%>Tnf3uoI$jjKlYbhjdKQje6ad~O{5$m ztY)<+Vd>yfycS5eyz_Et5A4G!Cv+YFLha8dIODM2Wpyhs9MLF zOq9^tgQR%9k!~T{#qIEz;_@Hl{gHb%gd3G=YW9q_4L5{8`k=WPZh7~HaKH3svbW#; z-A6cEGXFsQ`0$2s;bV>S5tNdA_BExXc7DZ)=`U{x=dEg?(Q>z4>v@gXzi>mi+_#NP zDNayILWGCQFZZ%sapI>#8^UFlwA5%JGA4ho5s~s6!!Q2P(3Ii?r6f<)-iXn5!kqZ3 z$Hwrw=UQpBe2%5{JsQz-(Z=xE9!du%C?z2RA3S(RV$Y?G;qW1)gJ>a=o=(z;pm$Ta zW}MQ&3DPaS4d=DHBXM)eCfUZV&2kVe--M9S0fY|~j5e?Li>-qbq+8CnAL=?dac{%T zRyl~a%3vI{5TUHWXpNS3 z*Twp{5wJe^UCwGQ)`tjK11bmUv&v!hc31!^IVWI!l#X9rtPc^e2Gkxz%YBrK^`REz z1nHLNqAu2l2v`H^S40bO+Qs@%Pviuwk7{!_>q7*r0gVr$t?^;i6)XUaC{DoosJ`nQ zgPeespm9#Le5%dG`jBPd1f?XzV=mT*(uMUQ8rDbIlFGe)Pnp~1u~Z>vHv9em>0x@a zKX!EVyV~6`LQo9$;Y9GTB4pa?FK=BoC+x2|=roDT|NAy2aw$&tXWxRsxle5B^e+EP z1w&Fi@7T-Et5qaYa^G<3^}lJ=`xg^~0x7SGVGa)h!h% z`Pj4OUgq5C67u^G{meaJcF_`%i$3VUy>n4n@)1E*axTSb3e)LeB=yH}X6^bY274z8 zBVAp`zV#L%ND2g(qOjWCv7TtPInKYS=W?N)EMYL`oK8e!Z)-kp{?2Q&j;Qw?BZ?EaC86Gqn=Rb2L{i&2MiiuYPDqEkV@ZR!i) zf)1W8g;hD24r@dqhNsK*;k?8uhgEWDCjvB$8&wXTD<0!Us9g1xBWj&vL}8aoV+Ff- zyYFI`T2GezBgcq>l-=_?TVZtuut$!M!;TS!eJv++9gMI>6bLRwVf-%r;nuYFF0HV@ zE8;)OjvG-b(qmRH)60Ut8`-wU@ZR|{=9c&84n2}ZsnLlKuPi0M&eO~E|&1hpXAfC&7q5ta_8 z6sP4W&a+KZlNQd=as|RIS4zi8S&pWTa^N=HjZnR$kgzPAH3nf5X?!@X9qwyOkrlPZ zpl)%>$tUsAd!CiGuB@m<`0N;6%GL*)nD_FHl+ZsKioZQ^hK{4>&pfIF3Eq&&A9v>^E4)N`x6w$f3sl$$`phNW^#M8W5dOL1C= zlN+CH)3HdXjU)t@vcr|ae5^=9j;JPTLIjUT?U;3QF7l$6uyxPq2GK7meU4srh57oIgad8rF=1+di&?rzAudIY*Ux zP0mr`A!}B{jUp$gw<9IF=aKW^CzuEC9&OE>xV7X2jX|U&XU^5Fz2((htL9ZkQhHMQGb4PGH`1X6O}t065SK+|lXbhz!joKl?DcV4vWgLa-Sg_REr zE4ekRK|7}@ta8P6URHbH-ic}&BZ}HXjX}Qi;!@NeoK`njtz`>VRBLLhJ>=N7R^hls zr1qd2MQep@?Qw8BN%g}Cq~yNRhZGT@sjid`w{^QyiqrbKooW%R(n7@ zrzxy*#dbwj$q_^8;;xx;rS6>>Vd>yfoK`yamu-|h|MgksjI+G-U6HTOzG2=XQW$oZ zc8~}Q!3aT8=nY(o!m5`PUmHn1_?kM)AOdMo7*h8(E)qGh8K)o6;YM&N9##Z;;+U1{ z4B+D9h2<9{UpDVgxef}eo;b8`Z0bjC^{M?W!9^i?G@Q1ec<)S|Jye?Xlm{9!QsT zK#FpuR^e_0m*QbXz*0|lvB;3>&Bd6qokt+}aPvPkcl#fi65ibVonzL1ZWYs0?PliPgrL9)1fIR4zW zqLG3{hnja@oZu-*;)5rW6Psk1s|-$De7RU;Poo#|(L!u}b6j%D-^Y{1%rCNbe^E5@ zTkoOfofju~NQMaK3e*oPhXk5?UnK=B6L^A!ygun z%$h#byz}A&Pf3XQ9y!V3wlz{jYUeCY>|I$b693h}e6%dbr(2RgZC5`<%s$)t@_X{@ zz;lP1w_%*%DamIcv$rRA{0DcPXEQiacU`eaD}K2GqI50C zIl*Xv_T8AZS#cHPB8}3Am^a6q z;3>&D>cJDdGE{%`Dl4}*KDe{ODBxMWARg-j+1XZ8EoEwbAs!Z zyVL_^yuHiIaX$XT1Wt539v8_PJt!Y7#N=M018Y=bxB zxmh3FV3GB~Jr`LYb?4<~eL#>caniD`;-`9tbM2KDhJZ1X&-@vhPakv&3P2K#(nQ((cv= zw^p1W>jT=|`hXx?;-sZNgS0+b4(o&4Fiw#50WIHwEv?UBhxGwLw!}%hTOZuSae}Om zx`}hMJ|M`JIB7Y~rS)mxus*n{$* zr601iK4%=(2L#y_CoSI>-ngS@bxYm)K#Hsn!nXApEp^~;Y?UtNv*GY5BHuy!?k85P z^t)QUGQ#I3g>^LjuGZ8bT0i;x7W|*m!f7o@;k?!U9cQojixQR&U5e8dj&fiH zNjk97BOPkh#|TRYm*TWqi~c*dS>%N(-=u-0)iz2<-`Ga|P*|0m6BGj}PE%Ob?u}#Z zwp4lYL|d){bwxC4!49M3oUmi``#RF0PPT8!a`bnU10^IHwLoE2a!ybTq$piTQCQXP z!Z|%sWf^=Z2eko8sKQIl{U?Q0$)f~-D8Z$auPddbYS(wWtmO}fnCBNPHJ{X@baAR` zhw)5x;kWGP?wkZ@oYvX|ZeOF%_W3ARllCu_zpga<6(>lylw;2iA}vm+u+l-aB)+YY zD*yG#|ICtKsri-pOfix&0g@q&R^vPR}`QJ!@&{xH;u3^9fL*iJ+9ECm?&C z6H=T&7`FhNmhU8=Z9X$<=@?pcnfW9u(L_*6LezcNel8VKoIn`28Jw19$ScfeUo9Q5 zSLoG56G15nkviFazE-7W6N*+kNT2*}pG)6GuU7O@)8m)Is<%f8*?xB4#h4&{Hcj5q z0|yLfV~R7vmRcywMBjQwf5Y9~vNs+xZ!$osbZsg0B|KA4xl)Aa+~tmh>PweRf@rz3 z@g?4oK+nK4_0U1I5c5aLy+`!VnJct2o~g(0L<{ljvUTxUfw8g} z5kAD|Qg$t<*2JA~%jPxn)vnzhoPdqN2}^&M_P~9OGlw^)sP;$p3!7FNAvYM!;IyIka^syX&R{cPVa!vb!PG z6D=L+Ke#b*Bh;)#_2=pJ^b2xQSO7d%hswY|mdLQmNoCKvL z-!q|lqD7!z;hw`uP)b4?eyb-&TM)K{YSeBIN=d#;Z^Z}R7tdbtifV6U{d{sycG7%qh|Pc^N^`O;=zrVe_d#2s~j z;3>&3fXQ6#`v2q#b1oz) z)QMYNftIIH|4mF=xbK|V6YUCu%&+BqTU382n%oC&oGXT}Dnm;f;c1Ont zNujsf>Du}f@wFU-L!x7l2*kJ%YQ}NXffzSJ%{YHZ>+_VdKFnUFTYU-h73o&Q`_jU- zQx=Zdt8~@|T{K#=qM8osC77@57Q`L>AZe-pQkGiNL467H6{m%GMa~Aj)NGK&OH2I~ z^A)G%TcG5OGyRM?m-CI%1X%5un%{OZPlqv5u{!6wN!d5$|2zSCu9RP&b2{YCa)=y>?E z%~rqayE#kN8~RvY$o?HVIN>gp9=3mnj+`}p(h5z+-MbJ2PM?wGP;D^c-&5fiYu+b+ zPY>H+=-`AMlOE=@9fl6M8f|ys=sxp2QPtve^4Gi&m$Jjq!3jHt+C$NHO3;DvC)?Z{ z=k}=03vnqs3>}=XW0WmXmO=FxvJyf}m38%EW`i{3??ml0VQ<{$W;ysMvcu592|Fe| z%xOD}a@=0tC)_vM9(Hd}4==jwV6;8*LU!0m*fDt_PTOJRO7@aAu%xmWzBj-ACEAyy z51eJY@X*;T;!_-Koal-{v@ny^`;$y?=GM)Yr3QSiWD>3OflqCNIQk zJB(bRt`fgc?NL8*UAT$a9_e8&WrwM*h_GYwLY%h4&>_o^E6akq5`8ys2tQ}q^Ykzu zclPg2!d;5f$QAyE9eS*t{GX4HPTmIg@6dt2C?V$$YQemaErt1meuoZeN5U^Wrsi6^ zcGJU8Y+fbXf2P?UcGyYSF?y@nDIr&TmNW>r3-mEdWX}eA-?e{t5I){_Z7EJ8S7^QY zQ61d+6d!jYT>J?&N7=ta2PfR6Fh>y$9m{u^^Lex!c1+{X^P+QNUdSe(gA?vj>0$f# zXgR{N|E9@?6n2k;b*4VXdu6m77U3?%Y3RUQj{XZBh2>Z~^vVqRYr6DXqIp-JMRkHp zaoP?eS2JaM$Tmkgq%EQKj&9-X-yMWzMQtfgqa2uLF|(l@c27(X^PJdWCt=6rg*a`8 zkt;bn!zM~?LhzR2bGZGxlW>_cn6oQ-iVM%7&)$DLZkl^k|3ys7n7 zS-$kJ9fl50*fHs0PTOIW{61;dFV9iq+*t5KICb%9nQmTaW06Br$5B&<9fl50*fH`w z%Z#?e(1F!!)F%4s{W8m1mz0Ujwbr}#@6f>r;VzXPwtt5Xk@`{6^<(u+o5;`J%0y;{ ze~Yet?BAh-5mJYn6m-z<(D86;nRYjhFEiIAsNHj|!)9Iaosb=d4o=uHs?~_LQ-Y3@ zY+Zs{?7e%hse?<|Vd&t59i!TVXgejQqm8Ts0Ydeqyby0SJIr*LgdL;zK077ofUR0K zPtCPYrFT3l>dj1{Exbn2D z1L-FfO&4iV7*e^rVk5^_<^(~MIS~^ncMR|7v!!@gWj@0{SdMS0aN@T@*&#>-T8+|0m~y4soV2WIJxe2~v`(7jh40*k!3LM&`tWTQ#c2wImQR2_858_u+o#F5%QQ{lU(TVDqctgq>Z?8Na(V~nwG=6` zh7(-3eA43NgGQ5^+q~yD3{K{0aVb4lk1d%P=$~`1cj2F#y;SeqG9b)zE5wzY zRmS~SI%-yw6BrXbhdMzqkmC9%tVR^IVVNVH0z8KIcAgT+%QLv|9}aLSPV=us2@yB8 zP|AsObB)9m-XJHq6xE^n8tpF!KS)>ea$PAitT=KBiQ-eH)r>lS2dhED5!MwSl9;R%m% zesX{lTuT3@H`Q<5s&xW1p3zdA&PVt_{j{{Eri0UDB~+WYjGdZ%?qBtlF*hmnu{#qK z11U~Z7{ALEz>4-MAMQG3Y`!rug@5^*<`0ZiomhIZLQ0X8)yCAnI;U_cH+@RSI#2PG zDJ|p|)8(I=4%iQ#k`SDr7)WuN!piy}ZTxMzF)>K_<>_)-CuBK-TnDGAOp56E-pFJz z_HMHrZc?!4cP1zXQk12q7Ei$?AzJD|}(#qpE%Orh8XYDiY-rYPXPEJhVF&Z%?Hqzm0 zP8i?5lQ+C0Y6n|BGA$_j56S+X#c*P2PHbdMASaA(-^uTPoM>QNIWyBpUHNVTkD(mm z3sBU1)OX2dCx0HS+^|T3o`%F;dl9w(XvQV*BOqFkY8kPgtgO}w#crvH-{L_jQRV9f^TKb+Qy z+aLesuUABtyv3GyN*8TT1ZqJq`SGrQ2WA)RZmt=4{ZJTfz%8l}Ij_wVUNao_1w>`+q3>pO;Hf zPB6N3qJEWSfs*agygg4BPTm^*-Zrccw?urT$YG#=_|AQ zR-k3&8QyC}0$$CkMeRKF>EC_rds!Hb{+sFjwME#=V|cE3ZsoJD!>Smk%Wd{fYINJf zZ7tVFJ0#VwV%AqR2A$dLy*&1ohsSV&>y{sVd*$=s;>xX3Fa|k6`p{|=RysIAF_7Xk zg;kr68BxU;Q_U=gpK^kc<3=l@iodFH_cgN|8o|@0a;Py_KI2wkT1m4#0#u`zYq>t1 zD12HN3D?Z_&LvJH-jX$27C7C@?1=`?6(@K~ z@(Jlfi8(|6Ih2@LX0)GMIQ}(jT3ITaSnBAv{+e4~_AH+kr{#+0gwsM~Z@c7gl{Lvz zb!}CH>)<)j3G@#9$(6oAyI*MMw4N&^FT@9Df3?niK+p(w(j+f@a-|>SQd}Qd3{`T^ zq3xdH#sGh}^RWgexD;6i)gHZf2R#oM&%%}j$bKM((>n3wKhwMo->eh(^{ulS!KGRn zv5}a$esgUn-{n1Mve&cm{=gdxjs>`V<@$8ut@gsRtH8{h_@<#8PH?G7xv`ODpZLSG ztDq-VUi-cGcE#5M_kXbgnkhBy3ZufTyS(=~!i<(`j?4C?DQSDf-@&R@xs zx@2um=-8QTu7gW$zYrTK+(!}v;Ah$WSb^l3F`ou{j^69%R-e;4F>B%_uP<{_pxX?; zMsO+Gb1KVlW`i%K%7Sv{>XpZkKG-M<=O-uzQk>ftz)vdwC2exNiA|@$=KXr=K^+hnL0#W@PH^2=kQWy?pn{-u(;A z@!{oCJcl|_`rifqH*(@Va_j7;k&3ksjdO%AcZijz_3|5saup?g&wrWkfBI4@PyGRz zep>G!hSNGh_J>5W{tF+9EUy2ZAgd!n{oK4k~Axf7`+So^KK- z`)Lh_wIMH)UXDFeH~C*I@VKXAr_mb0rK+dLMhZR<2$wHzmSdC1InZ`yVruQIY_5Y# zosvYwdI7Z;5l0%w1zv5uz*BtaiX2)YV;pc=CyJjd8d!L9f#=(KIU2#GZafhiNv#zy z&j#fB>fF?zvAwprF41D5dv$Yc^L@KUP_7`wX$mXLko9C-pnOlW97&XStdKcPIW&J4 zhfBr<-mJ6Gvvpohk`}{qrRzxVz0KcuYJX4p7Lz^HYFK%5eH%N*M%Fe9gi9u4&-qq| zP5!~(r+eD<9PQyToX~WO(E|(Qlq&E^VyIenBDFJgaD6-_`R>o?h+5Pl(?dNDJ0a@3 z2=kP*5#`}hT!&6jf9I!zNSAs$!Ze}~CVBmI&`HpU(g}V#h!~zjUOss<`i0?Hl-JWg z^p_(Zw_Pe|`ffPtP_B6*K~H$qv;Ie#{p{f}JSTcN(r#b$TnoML_xD-i;rnH-kAKr$ z&b7yX@T3kM;U9eOOpg{5-S;CW`j_9E1QL>Jcz(#vUR*3mi(v%Mtq^U0sqLM!Ip}}# z`Ja;bzMtoizMiheN6*T2yyG_n{co%|l*D5=q2*TmyM9H=g;(2~voj}1AFKq0l@3l& z45TMs@Ig}IFL^oOyc^7MY3y%%@eJc)W1W%XBVeZ?->mz>iboET~ zUz)JQPpyXegX`m8otMu?c@BBXrj7LXZ8B3MxD>UAnxn@26`zzh@?dtg<8fN9cuqL2 zdSb5ZiJhDMZ0!v&XYh2XC*pUlw`&A16Q}JlSgB>5r$~Tpjv_>kz)bkOx zi3Q6WB$IZ;aJv2G0+G@KLuN|SPrpIqoJu=(X(#kYFP5;*5D}(x_;J@tNF7zGpY`wg zKtG{J4DDDz=(&ph>9D`VI{kzm1efBumG8#QOz>a1w$LxmmbOmlQ4X$ymq~to=+GFW z$hM!%^Ab0y%&Nt-T99uexqUHk>$yh_slz(6y<#GNzG;Lv9YpP>SNquLQuRN>*R_8pkKx3mcVZ%$k4e9r zd(abe7Z(inKJ|Q1^cs@MV>mIwh>3J9YJ^oeDqN~(od576L!>8V@R-`CVWSykGRqkdk?O1LOyWz-H_Zl&QxBmAW zPHU|*OXQcN8s#9l3 zjW7yEzC7*^J98+%8~)fc{*xmDe&0*iWDCYbKKj6rdzqWL^V-Eks(xyi#LgdLA`ko) z2%}8$esJ}@M(G0bKI-8}rq;HsuBaANZ~t`Bc>mN&dH#ig<<^O?vIgp$8a1l7d6#Eu z8pXy(m)Nj`tXyXqmLr-=k^cfX|zfNhODkqS}Q%o#;60VBql9ctfNXled<3 z$$4q%&Rey|;FMGT>+?GV#K6ARZ6Eq8*Qe|FesjgZ{x`;(cM~K2jfp%T420K}0-?s8 zqWKv7VSA$g@XAGg5mzgNkJMhj$3(<;0r~8YbJQ-MxyRq2xh#3Dr{lSln?5yaeeKEw z7fpUUD8`q`;+BEi60Tc_Ifak;|GkzP5ce!;&82v~>2>A%p_V^X|9!uhy*!>1B!xED zb(9HC48Bw6oN0aB2($sGg}D0FI3s5AuhQ;zNThiQJv`<0n8==IjWF!|@bxi~0TqpK zX4UJm@9r9zYBYIgsUg-rA;+M)83Q4z#YB3Aj4RT^cQxt%@_AX#J9Q!;8}LSxqM@9&Q<|HsN!#uIPLhCFBH!)ok!d zTH#>EbAz-SUW{iqS`qVC4>8{Bx>vj5MXu;%+oYrS6pFYcZ+JI4Zg|nobl%R(q=?~t zmjp5v>NmWw8AO2A%kk;B?f&QA)^B(*vrw);>%{Uml8vF2mdG}5oxtrN*)G%@*(+t? zuAFIL{CjMsA({j-H6rTufPTekAsTinVytL7RC<4wlyj|ZYiYJbzaq;3TCU+L#Tak; zo-@}BoS-lWP7Bd(STW<#H(oZx%C8f+b>_X2+b$uD;-49b4GRTD->0*=6dw~h(Rt&l zQ`m=+zNc$wot& zSCG<)C;MIqT>SSv+*)b`m!kGiw!MLUmulTdVXSc}>LqFnvin-=mJDfef^3N*PM=K7 zsbAu-!3M{%6G^# z72ZhVOnHZ5C!ZaS*wg-YaXK47}2# zq(*S5x>w}N=?bj?l16Rt{(PZJVD`Il2DgJ;pH4j9>6Z7}(dmJD|11u0YsqPy_~-C- z@Ab0N0y(dIsS#YtU#?)}LfD9|sXHYUPTrY2FR*dxQ9rG5FxI#}oftZ}Q1Zc%p9RME zJERd@io8G7sJ-j8uTv)c*VbG!@EFnu`$6IS1jRs#(-cA^E_VQJ%5YPB0pd6a(&O#Di~R^ zTJE-&!tOrWXus!y4_@&%nKE4?xYWZB7K}7sY?$k7A(}L9p0qFLo9u-zl+bd;bHZu) zJkEA`YW_}X|4Zfn)O5^fSTOR!A|w32^Ks#tNd+S%W*FuUK%R?End~{;r<#B9v#|lb zR_A5XiRSeuk`oJE}y0(_UkbEp%_F37LB&MO$CGjG1HLD-$By6?2Xb#R*2J}OsqZ@_Qj z5W@+&1;7qTyEm|I;t<2r)rneJ+x!#v>vvx2j706DLF>fL4>tKz{!Q2Jyg+a%y3Ja% z1i2C}cU~a46y34lcln&K%bgcS4&T@6gxj4L2rfl;MQRLom3LlS9Cu!3Oms(YS_8Jb zm+!`91V3Tn=~7tPlI^j-`NxlcA9r`wofmdOoTeO_zl*0nxaiMqHc7klauT|Ztq+v( z?|pMw(z3|g)(zI}O8R+;uA_0ms{XqQZB9Blc9L~VhP@iqF7)X{jrNaZ-?;mH0>ASD zL1zF6)14P|)98>kWnQ&p>KTxtmA;dk#{mH*|TJ=2?UB%=gPW(V|wsD+WKKdDej7QsnibEW<_V zSyR*DS%Vll*@PvcaDIYfAjQ+Au(EJ&o;5Xl+Uasy5ogX8NUq@UtigVe>!W&8JIK|G zE_qL#(>-gP1bNm#x4UP}jNgh`eljK<^{i1kZb{FYj30H+8tg`?Js?GWOzl#SNza-c z4$m4VL7p|xEx&1Tdz$z8k-BFMcGc9|5!Q8-lAdRyHt3!;CJ}wI1NwA=Jm|PLE=~t% z)FMpdQSIpAL04aS&{^KNkm9-032Ast>vR9U)0W3C2wHJC^}$l9Ke>`g;ZkIMK+sAC zVfjY6t-tw;b)Dqt)i^cz((M>|#;$H(_^GN+w7+%2e^>Q)J%5afm$u!$ui^T1VxEx^ zIC@VvZ^wZpl6U9IGvr3{X(w5u{1%Aome0}q)(3Vq>f()iqG&Rg;`(%=a5_S)^h zYyZyhmWi7!pBc5&;>2!NJ|PmmY-y~E`_4PC&?yg{2xD||ee_(a8nuU)wJ_c({GIpF z(&s!ph7-Je@@t!4ZwekL{dfvmo)e@G7Kg%02PY^7QkX8?;Km>SvD~y;(aSUWXUpwneQu8gVJzR?G z(23}P60Pnzo2;EcHj9Z&kx!+V>!98RBFjUe=t_o&VMAJ`a2<5cV6I;H$vpw$*aMGQ zPcK7?)4Y7r4m8E?nK;97M@8Z6*4Lm3R+M2`tWSj(f!^BiZ3x2rb zlf>g+JgE7}m@zExMTxqf z4EASKSCAqfmVHYx*Sh)1fZ$Tp9{64QSN;^Aw5^BkCxdi(PB`uECxcxoPnXW&)V`K^ zg;{Toa3X; zS|^(blMaOKTyb9<#E?FONrxhyKh-p6@bCK5vNwM_W1Vs$Oujf{Z=I1kE`EB}e`1pE zi-QDt9W+h=rN9G-VhAS_Gn@@yXnvZx)8AGgY+h_%~y`v2&y`{ID0@$pHw;~FjB zFy3#1f5$=H7Y785+FsN0blTMy2U1j5XFd#Bv^Q?MEXP+D3j|k8*L`ug6sOJdi5r`@ zXZO3P`{HzbZkv`awWbgusl&||2kFwxiJZ`CpmOMhB=%JQ*f>^A_r*aBCuohbx&z+v zHF8P8;M~)?FAicjL2E5lj_#-H8OQ zVqt-*M$SIn7su2dJ-I_q3Tg7;*sqTwowiGJ|=}^S?YYG^#lXYL5>-Dx-yVT|5wm5S2arKx$ z?f$wi4su23KImhlLzUwx>5DVk;fn()I`@G-owz--MxaP>-4_Q^bQ0psp)6aJM)fw| z`$A1))>PdW$JrBgqRM?c{evp#zBsT^RJ+ip6ICZ13{>B&`{JPFytH(OpxR?p!YTib zIl3AcAjp`nm5PW|J;0WK+s(w>^Z01eQ`i&GeGpN zP|XHzzBuM6iaz6xy3%MdQ~KgGarok(w0u_6i5iDm20M?}eQ{7iPEc4`(WBBAr)fXk z7YE~+JRmr&h^kA681){}eQ}U0x<5DRsLzBV+cKfz2QS zv|f%ABjwu`UekSXV0|c8pmn0;yU9k~nz}Cz+JojLl$`99vT$y`I3^MG#X-N~w7V}3 z2%0U?GsrT4cK5{rL6#Z>r-eAwvzSq^yY7nvf>vY*bK51qcw6Z+V{vQU7Y9;&Oz1=t z=~=Vf;fn(sMJr3#4+`UVdBea6ih&fZydgzlWqp_jg!TM6T9A688P@uh+Y{?fDe`Sl z{fa#yZ9TDW_Kc`64rub~P;*pa`Gj=5dP3TIV%jr!t%mhZW5J(0Xq zl)Yk4dRtGdI|)5k+_Q$KMdJe_io!|0cuqL&?u&!8cusVJ z_QKp32LzupXwRu~B?%uW?u&yMI`J~4v{?<(_~X7fPJ+B_lnysv9K>)b@|jV!>*kAN z#;}|?2p3-*5L}8pU{o)0^Tk07pY?U(V4qvw%V%_79Q0RiMRlU;@7KLMtLeTtAh;Cy z%&75Euum_r%>{-A-XRP2rfnbENaxc`QjjkugEBzpP(368J;eM zmG${+T}|(lr*vN&tX|z{MN}A4(_8-o-4_Q0PnSGk@Vk67euZ-$&!LH$FAmnbd^Jga zGN+ycajo%wPpK)oFAfMUMgA=KU4Fs-?IuY>7w*=4aiE>&gwsL{+%?+c8?XD~AT9EZ zX?N~;E_uLUMJ`W2KA7w&&|CM#K@4B%>%@Sa`x9#=>%KV9!Sl}b2~p%wMpAgU?u!E* zJYBl^QSEbQ==M}RVtBeb(dy-G{*7aGUmUbK-`(lNx*41N?_bq@aX@e>^0GP72mLDV= z=#JjB25fil?u!E{PE%OflD-9h^KW`r_r<|Zh@aw64$a@i?~^Y2uQt_vah!y%!_60G zL___&MAzZwi-Q$1)h_hugqtr82Ixz22I6px#km59j)qGC*;=VXMT~1qs4;1&sK@5#^glRk~!p#@QNzjeES~Ix$ z;vj~ns}pX%I3Tzbc@C&GgPSi7V)%|uC)|8-KyWGYnK{x2tJech<$7PauKVI(ZNT@L zI&t5BtGpFFx-Sk0E=ArVYL!v>MdADe#XyRuOJQZ<3T-X#Id@fm%T4Ys zJ6%pIV(gUy$%Q)UZ@IyKkn5v*Q#;5p8!mbKUDJJWoCNveK(`Q0&s|CS{lo{_TW;q6 ze!{9@W~KHz<9x01xwCw6AjNZ~6VmXQ)`$Dz zfS`4WQy(mq`s2PhkRp49Fs)<|7UE{rOa5&WbYC3gm*2$bM7_sP`UiK_eQ`kWT|2?7k;-E(P{SbN9sJc2fczs|7YBWb-&&FXO!1hL zvgGGt?>6?op!?#0;JMNXH(wm2#fjZfUmWCCJ}11Ur7^ye?u&!b$#X>>DQeX2+StPA zR$lkTaT4Ttl??#vv3M49h{&T*d3zBp)Gx<7|L@=j50KH!m(-nI$4FOHMY%fUTscv}3% zox(~7CnyHvfYTI?j*p*fdlzof-&upbj2o?pckij={b0TR&KeLrT`Gs#72Q+$H&4#p zx-SlPcT`u9B0rgX`e7gSNb(_1;dc5vYd~-*Y7e!8{NesqN#&dF*WOu!ba_rV?e2?% zT`EtP&f(O)*3B2kjEVLV09Z|A-^An5EJVLJCyI--o`i-Q=R6FQ++#GyhbgHQhQ zuIZmhXS(H9Z?H~;yJk+c!uVa@O)!GajUmNp3gdSn>TM4MxAdqLLhfiyWyVDJnfFgv zW$g_Wu_fn3&=>!ZNzkqlQkGO_)P0$3Ss%ZJDae+ z^TVY$ZRSukm0wXhimxbz3Rz#ffp)G>&sFu+f#5gYRmo{gAT3^R^t&o~;PVr~9<9xi z``n~Btx7&oetpP;uMedT)N(~72f=eF#Oyzd2dgB#Cf`XuJ(F}GEy@W9P7Cqrh2p_d zMI{kh6R)MkT2L=J+8TfQcYZclvjOx`FHz-C@+ogzl3Hws+eRsIo6L}2Ls9g%@CnyF|oTe~- zw@be0Bm(v#E1GPTy3+uZ}h~YH#X+_kT z_hm{~uh(orH!0-m&IH9kiqjOv?^Fu;ZrOJm2kB&sr^{)b*jBcj^{o`daGKjn`309z zD}yhT>u9!zo0Qr6*a+4MN()k)rm*U}R1#z00)xgHPnXj=@yEnz^0{s06@(a0lPyui z*Z<2-$xeRSY!5dnjO{xU6vM3n*QYE)FXQjvkYUr!x}vc?V8A%b8pIuHZiVr?5S$>J z0Vz&X7{AL~fS%t6@2}oEggT?Kc6`)GD_uy@?}|u%VyLd1w57vWyZGE7m*OlIfTI>6zuYRN)c1tt*F-Ja zCRUVhkSo8po%UkQ`%E32kl)@;yV@0B(&o7uG`>Kt{EB?q(R-`sBX~--jx7(~9g*LV zPP;i}YCeLeWD-97d%0W>jgViBm9+Y9JkOy`ESpszSAO3)jlOKn39j2D%zwt0XpqaL zI4!>jE%o7B=)B|)o@kld|5j|vySrnJHCn^*?DZc8i$dpBGV&0bHY3*w-G<9&=CMv!0Ux?@G&98rv@4Q#K_r#HPl5+nx zN0b^9oZu;$I?R8rZm5EFB-#d?;3?U}&;O6GGl92idjJ1!&~O{1ZUY%2kx~+M zyWM-wJ?EaJ;#=38Im0(0N|_=#-DX4*4MH*$rBdqN>JI0gGFA8*L*yn@hOfw%5dGI@ zt@GLIS^I4N-+jGgz0Q8#&-1M5S!=Jg_TJaEsa9W7_6bR=ug(`;m98603?J|#zRK*^ znv@#w_!_@%EOGl2eI2i)J?Wt)68Lw`zT#?GqOznjY-l3qqKG1_ztTf#58BP&gIBhw zmb%n8oqgXWt)&zAx4K|_N)pm5Nozv?Q*cWEq`V>t_0{Pj^JQ}xeQxbC5??L%uSmkA zO*^(WhF^7EO2(@Z-Luu0I6fT>T`Ia*#eqIvwaw@kmGPoDSpn-d*EO388F5}lr# z?hsPSodJ-U@%e0rkWwSgZ4&otmIU%~!wt_kgp|5%Usn9u^)CmA;j^}-oq%F~H#E(fy$lOZW5|{UHp}o3d^IN*CBq23f;?v0Zlq_9IphT$264A1LNl8d4 zl=_|=oUo8__rSPO8)ThJTGqdBBk_3Wk&ahVZ^Ij2E4qHf=>Z!H_H55rv)-avC$3a2 zu}05PuKJ}+r}4W@(+UX8ChQfLrY6dJ-tT*N$ELJu9DlzY{i8 z9DA?hl_aDl?U4TG)`guMuUtW;L(R?4N*RuXMGmgh_B()U{m znyGsRlRxWK-4P>->}Xk&l=kchCv*PgcXt)ZE0VAyoFv|@m{=sQNWzYAlJG9ymoIZD zYp}3o|{RcBQe(N2V7^z0#f?ccoXut0xw@SFDG2B$C99JMSuTuUNv4yOKyAd2@liUvlf* z#u7>NzIjBEtIOK3<8GQrAnVVmwku^{XC{aOiJ0& z60wVS!je#9ZB!C=w5&-=T6?Acd1liiMUt>FxJHcH(uQ~MsJM;JHAzWGO*ZG(Ki4j1 z$J&~t9s5+P^w&$Ijl-Ym8?)n`Dw^eSz<{47BP9nj-0MNOMDy|UnB`>L(-PGtgK&DUXg?y zMP*sd>pZeZUXg?yYb9~ti>Jh7ACxUa_5$nG!h;>-GA>D4#uZDP^kS!?V87#tZ0Ejd zuM*(CeJM-#T8`(glpWi(4NVLix}(Uhq(GPL+pdR-(ZsJiPKnu-6qj%{k%-po8M7-X zF5zk-G4hcPF}srD60Rl^<0c%8+LaWSa5a%oYcfT44ZtN_O^VQeEA|z~?EP|0QquOm z9h&&3)?{LK1)?TtS5<0~c1=bSYE8x=?5c`OYYPedtJY*3!mhB?Bqgm0{f}BNiP<%a znxrJ8x0X<=I58#oiCtwca$5fN!nT4B7ab($-xmOWSLhWWaoend@D(#(bDrA|IHEXn4lWNoM&lemXwVM7x3id_AwNm@;? zaqasPbEEHm-qU-$bLokPWyf!wI9b034(aZbC#UcR-K(2r$Ddd*Ic45Qc6o8T!o{l^ zRd@$Btu5%39Y5^#68-l0Cr`H`hmx*c7>}{|n_a-t*R7a(s4t@M5J)y(d-DF7es^ ze-)M#chcYak%W|D+Pv+pS8mTd@AT$t6YYEGoHMu2s@%?-J6XTG&&~PUw|6NRa#`#3 z-pCWzNL{krT;iS<$3{NvR=+%vT)OVD_NsI@PSB+&X_vU|#%Ch4wofi^*S6zYNrdIe zsXw0S?=W$%v7_3|rvdVQ|!$@0OQ*pS{c zdvXfz)^>^4nm--M>o%o)#h?9qzuGQ4-loSy{eJT>d&b6^b~$<77B*k&HJzbtP%ldt zZ(?(8jJ#rQeo_9cb%}0g=R)tqwJE%?%gw5`4ZKE6?Y{;ZvAqaU18*7&&W_@+7&_50?flTJlCtb7kX+nhE+X_>y>6Y5HmB1pO9!&#UwH9g)#Z&QafXx;0n&F7>+k z=-u|XyahkLQkJMQtW4^XHl(+nH}Sp9$bhrpj0||5k2cKd=sufU6fPK1tD-o!VQ)qQ zJg>&}GMpn~pEu8|g+&HD878IJSIjeU{W@)mlwIgX20XRJ$N<_U5E;e?A_E91#k4sQ zU%OY&yg$0Tkpa17%g5PsH|GsiWO(ILH!`rS5K)nKiPxGRtNMo<8BmJS6PIXt#WRun z-*+Pe2u22(CzB7^&!sNZIU*6xn=@@{P!hZXDM>SJPOHzKJucV#a;*~?a4wvY0Z;n6 z#JCnutC;9U2As4GvuA8vb!<-F%0Og*UiM&|3wLdFxpHp)uYt($^;J6@8|*9Ql=riR zujLK9%#94t%iaYk*GB$Zk7h&$7PI1 zj5s)F2?Fg3XGCekoKO68?*q}JA5~xHQh#Amk~U{KtFQHnZa92vmA5pR+o4`|d|Rif zDV&F5EHU>ScFo%JroJ(|@UAn)>KTBvP8uhum^NO0(57}_$NzmQ7A}8c5nD)?d~)|KlH;t@nlvEZd_>w;*e33eUJo+9ka0M@4?^_``bCpd_Re(d=YK^`pZ=C6cm@7S znrZVzgr7F=ii~(NsR@}6DaEvzA>VpU^TN*u>~p+=E=e{>h2?s0;jsNg>v{MAdD7<~LtfTbHi1&NS+VZOnW_ z;l=Z-BaK%+U7mcht>1QWMH2MZ)L`P7^YU4P@(R<)6Wg2lBEpf+b&N!R{GZcyaYYht zK57kqvvBmb7j$G`9K_q>S(`FF>AM!{uIR^ZuSM<~`+Rxgo+JHy%sHxMiuu6X-`U>G zJNqA4(Z1l*;U_yS5m)FHz6-$go_?*Ajj)!8H|^6ac*3-K*L}AS|B4Ks9Bhd#Qfy25 zjsNMmvi;O-Wn;j`U6B@Z+?EL6NkEEe^Ok?K#O;BW2q~F!rjI!UJMbIFbd3ybe_DBT zd9EKz_6%+1=N36qF!&)M&(-Y*0EfMwPdCeyL5xHd6 zyX8Y-$2&DBYt5~XX5U5|KX@)mB{+>AR#uxp%_tIr56kt(%XUOKKI? zI`qBr=wD0LvToz#NU^N;pLarl$T|Ixf|VtW z)_ZT)%aKwnt0VJ+#Ehm#M=qFuq!X_wg?Kfs`uKp2U&j|^v=S+`^_d{ivGyyG6+>t1 zC@S}zSw3cR{~ocf@VB?;JA}ECNthY(=FgLbIXMd*!d%HD%xDm1!(7QE%>DWIS3Vm{ zMDNol`)&CY`?Y4IEbVy@pY?j-$fp)LUb#}1HvRk#RaWx@WrcbUvu9d+_qA_D?yvun zu5*^Vxk68@jjXMwDouxsTvzyapmfcZOk&>Lh$4Pf_3=}HF#cu|#@oMYy%L$8Zi)2D z=*lFrm&KHgJMON9+2K1k)gB+tBr&-VvMm zRk=e1=hP%j|Cq6NVf4`Jr&cCLCDzF~HEqZqWu8!2^xMSfFP*Mb&sq-aC1?7QkeWR2 zoTE1szBu{0iXqQ`oqPYuD)x;k(RUD%keWR2!FoqT|M33S?JA7G9fYJk@9z353Xksa zuqJo~Qj%uc+bFCH(WS6EMwv`cvD`PGoi zI`w7_F+=8DOV0GooO*ZvM$zkz-Bsab9W3Ko59Yg)kebx9WNOv9d;3Ewy#D7ngj{Ks zwC4@&d1&F_Q@<}ye7!T5r3kOaoRl5!y|W~R*{h^IFKgYak<<%w%iDE5(qF#lU(?1}^e4sW-n>t^7Yx`)! z*X!x~^Drq%!`twdi1lc;M0}ftEzx{YXZzMu^FHqCwnP$WiIAdKW+bX}NwvwT4Nw8&LRxIi8(#5Do zI@7DL(v?z@HuoRTcYZ2Tc}uX)Tcns<5Ug{|OI5py4J>FkI@qpSI8tm^=KE3GRofky z(RN#;q!imO=GUG#`INSWwcq}`+-vq&E^`ZirIai;&zo6R9qBsg`SNC2YjO*+vg1={ zO-Zf$uB(4vgSoGq)vE8MUUOTtUP67Fl9Z~&+TQ>*b8eKX{~JRpS>xsZ1v-7y~mf7 z1_?@WJU4Tq$fG^;Zq2Fh?5jZ+SI?J>Ywhpj7~=g!4GIgt{HomBeyrbX;gz)K+6dc^ zy0~5ke?O{a;|{(JGb4NIn4G+hPrJKIkYdi?Iy*>&tq4PkUL7+jNH8BmK0mg%lwu8L z62psI#76e`O}7%6LrE}=67jt5x7CV`jC|s>cBvO7N=+u`C7asE54?1WV$~?>KTBfv zfz7j>?vt9HCkcBR*WJ&yny`y}?~XU3@wcCkzy|%roRevsH*eoIJAP%Gu_-eb?Y8Tw z!rC89DDYmHy>8D5+3{mZ?fnMtpb-TY? z@I(EV^8PdO=(Qb`jpqNpSMP1p24e6KwNsru`QG&2_R3%8t7pxC`I=s5!&pI}&==l9~)LX4pvump6@p7A0`JHZ<)!RGb!yIXYWrh7(sY$)_lXd=mlTs2Gk(qOh zC2R|39IQOpH@d|;9%Yq~Ql#;#4su7J`Zx-YX`;r&)dvQ z**)78XxBzqyMpyFuguy&d)2OX1=Me5H6{J|tc)OHKv_E@Z zu2=gDr(Hpc?Fu_)E>UpAs{Bzmy6p-!SXS8olJ>&e749>bbIe#-n`ZVJ-mdmJIVX)0 zQFjxnU7ZtXSMZ8b(93c&_c&qg3Isg~=1INR`ShiQ_4ZFMK-;BW+%+agS=|dule50rDam8?C9+H_EYcC`;jj3YkYU4@3M{g(d~z=l~TLZ z7+!Y8SiQUG5^ofA!v0_$+OE73MwpnG|HMy`>j%EBBQc5$eXSk^Ta-zB^*Ef<~AAOMAsD*wvFXe>X&Ww@>GsS3t0&vBSr-dG}{}M^O{J0x3x| zZEQ3e-JtNDUw1nMbg@3L`^GfZ96WDS!*?SOj9RG)UV#+tfo9t5L9XpEERwV8SciZv z)<5pznKt9c9b0=u_Mh{Y(@G#kd!U&%`-3N_8oV!1gBZ72A6Na{BE^y}*@wH-uyzH4 z?FwnO1vASCYga)jX-|FMpz+Sgs@L6C0_#$W^kMcm(*vypQqmKq z&HmtuFGobOTA%2&66j*fz#R+IX7>8<8#$4JI-VwY1ya%zrp;dJ`+x6=l+4?hUvpo< zT9)YUi#z)DoOw4fF6)ef3)c?J`)YA4mt}&zG)cR66A85wSJUKwc?-5}SStxBMQ_ax z#PwU+9$bj7x#UV zc8SH4pNtm$Js~pk_x#=~kIIfO|9Wg{;iT^VJQ`~YB+RP8y=x=Uv#&f_kF^{*A;mPL zTw-B)`@-I{Yda$+)j90g)?m!O;11dc=YazCOCu{y)p@->C5(SMYkXOl0%r- zmq{2+y*_`XsOH%@QH-3}=L-7n(zx4xv*!oVoFi5_Hn?}k_gAn)3?1f`>1(uS@6U~< z#r?NM?`yu+v0+wgG6|#UQf`rlZt@7&YfLEqfXL@BcZEW^h;rS;m(rwq)hb$Jz1c5^_fA;fWnMQ2hviL=e4~^t!3Qfu4VLW z(m}6AV0{KFg)V`$zOh+LbG?37^^kg5Zdmtoi2)y z)g>0bNXk=GzvG4N34yP)gFSSM!f= z5O4a<2%Qho(91M5xjE+*NJ*M$IEWKIBrB)4fSad){X^jIM0F|GkJ8J-AkSwWh^k@yokhn%YzPTT;^Mz2}pzuk5(* zO=Y95W21fB!&E+C!&C1XwY2B${`XzU)4%*!*N3!0;;k)bt2<#!d)@?9gC!@L8ocSm zX7Q$jE?4^>E{sN9haSwG+W}sKP*$k@G~}5U9jU6 zP4G(2wCohqkYY16RlQ$qpb1|2Z|9aNrXgip;!;I;*PdPFbzF(NBDHnP z7Tzjl(@Xu9Sg-kuia7h68I>(J{i5erY@>hu+A75~q*&*uO;zWwTwdL;K{5s#_DUOd zN5}TMxLUSp^_1x&zgL~```{=DSw2jo+-&KhK6=0WUDe>&S(=dL!!*iG(w-N&`|Ya9 z_noE*Sw2jo+$61B`Om^C@9f5!kmY03t^AS(tD_fem#!=yn{MNmG-%ITUD`aAebTrh<)3Fu5qA?TT@~m3chF(voT4Jb2!torLt|sAiY1YBEFpm_)^|%78_z7usc31& zkKU}?mY)xD2-`|911MJG$D?NaSjW13^LCeznmliy8b6xds>Y96XY^*vX#T-K$A;8o z$B#s#rpAv#HGb51b=R@1RL^t> zsVTfZP>Nxt3r*^shHADnv&zht*fKBz?D?jNdRNrdsi8xA`(p{x>Tc`my2+O>#BAx$ zUSU$8*EMVs|2~0v7e<^dD>o!RE-|wuX@hBu0RJ~3rDWRJI7;PXS~?%}>a8vJ`M!go zJ^Ze|2cYutoXJNSuRu!D^a{UwUJuoyRt9EEi2595PCIRpKl&i;5@Ax3Hsi-wH5Z*4 zn2Soi|Gn|PYCC(KschV)=A!YyToh6q2SL*|e)qgQRaR}&Gh`_x^)hYpA#G4sP_NYF zc`_d)V4Z2ub}ov1NU!9TFv55xX8@GKoWZ8u*?{N$cJNStmLa8VIy+_Ga)j|*684HK zC27xVs7m*aK#xL%W4oF+_XIx%BdzY$R7-py(4(XjXtqQXMc+|9YFnU3;R@R^`uzV* zNGX{%He^2N`_Q2Ujt$zw?@m7a9tFLUrdRmgy_;bBnK$<=QG>;P8o#@QE%##oE(KE5 zWZq60c6TSGe(O=--w&R48qUzmdo}8U6w}f}{O;a)Nh#ZlV!jQN4{3w>2>)*vM{`SL39fVeAi z-zh8YsdtvB9@RQwo=q}}L4e~<5&7fL`=coc;$Nz*H1BP=GuhLn=D z>y@pK&JIBun%tc83am?-Y2#Jc7=);ngPtXy!ZF# z)K_o1yhY6u3Q{i~c1V2D?%UO<-z(Mjlm_vgYp`O0evVi&ZmF4NNU1Q|#1h{|;_`JQ z5SK_GKGKGbSF|CeB+aymyNy?DNPc*$nV0Yi{AC(?T^s*INGYaG&fja%werc^X6u>0 z)XOxaIIfs{NJ3r-BaDr^RDCQB)CcA`BrtoSS7s)I+0u+aec%eqP10tzG+x;#g$+?3 zn0b-F+>kcRj0`i&xoI0xie5pAX*08IsOsarKz+a~N`Y`~{1YLim^L|oN7cvUf%=f1 zK#HYq@*xR%gt9+#qX+rV+QSc{c<0y$Q|@+fp>m%?LCE! z;uX&fOWpiSmy{%=CiP@k)14LVSNBotSC93Q#Jt}d#+%Q&F@sij@k5TSEPDI?i1+ac zy}!SuQG83+VX5r@bWKS@YEs1g=T-LZR;pV2zjGzA=e36MIt_k`rZSFOnr<2kdL)xlK6X8!}z4J!!u~l zd;YU_er>7(#HK`S^Q|DG5zC_hWw`LA8Vr9d4uU^A5 zXtlC>OG)KrKdL$((yi>MOB%)B{P(a_^XGb`Bq439^^(cwRrWnuwX1gCT1k{`Zy2xl z-i;Zw=f$o&wsQAI)pozCTHE-zM)4`ThNWJx%;4b#T6}8KTljzDv9YA zWyM>qzafM6y!*QLE1!4zOZi^$fgC9%=^N%}sTIf@)HsW$Il`jP)7M>4&FC||k3MD5YaN2o2XuJ! z0l`=jq&@F@6@AtQqR+J0^$x-416r-ItLSq>Ao_q{ED6%#(Wigcn;nAD2XuJ!0l`=j zq*Xsx(Wi4D`Xow6IRv8*X!VSViarNkbfXUl#*!fIc}rFF`R2cF^yxe6c86f}0j+kI zRP@>1*^NFR7)ye5c=Sn49^(*CvPq!@jWw$W#-vT?*^Ba*zw!@Du@##Y>0B8~St%e1+J z{J#iDQIjF4AOFV{egRBM(cb?}n76kEZTx-HA4%GQE`A%#*xRV@YnV1Gsb^gCGKd5y zUcvl4j5aghO-7H$cCsSO@toqEz8 z`yArR{tObdhxblmX-Mq9#*3Ylai4A?)6WX zt8@A>?IF@;-Dmt&6G0?E!G@HQG}30p>+YB1Xo>m{gp>;Q`EWu?Aq^>NGQ>}py7}l5 zTkrcWY5Z>Tai+Zx6?K8$({a6TZ`O$wdL6~{-dX9Eu9OPW#zwR`v*VGe-^fZb_GNrJZ3`%9MJ_>Tl= zoCA=w+A+CefI}cIVMp3{VhP$-JJquW{v!bzCkG_0zCkzsXooP-Qk~{k`H%!{d!AQz z+&>bAUaD=7R>YhwRq9{;2fc{l*!4zQ6144k$8C7;9|_Pnogis7L;n0whcKg>8960E z+bS4doed%Zx9Ao1O4_6`)&`>w;u6k_fku19c_^mMiLG>m^KD2eNh57eQ>7y{oYGz) z?ouzJHtpeeo(glLXi!Sh#zru4|BtmNqu(c{Bd8 z&dnU2aThZg(@HdvKs$lIQp%LHX)z{^R+1MO2W45IQqzOMCQcBWDn;G)pz*tLNCnKMu-NE;hR z17sIr46Lbc#gAC8_m33wJNr&4f<4Rkf0{dJKWqG_yk5ToGJ|x7;AAp)xZDn z2{U@_%^;}B^PV>MI6i@~2&YPeHmFIB=jJ}jC(Kyn>9UeJrzX#k_}%Y=em>CGNSK~#?BRFrjAo8%YBs4o z3DU+!SWKi1Nmv{I7XeS0KjT#}woARTtnfQ`U-f#4Usk+Az4Q>YA-V*5?Nz_Lr22=s zcj{8TSVaS~=76-B=}!xcA5!Yz&zLh<0yA>YyD1P8B_ZvRR$t~0*uWLe?m;tciL?#W zdBWuOB~|BUL=Fp$3#`M_90uaGu(cWEL41ca25G;Moc zQAm9tBGVpYu%Qt}Ck4t1S15(@VcHNlK^GjOB!QgM9_dUQrrb^Bq+WPvi3xT*_v?dk zH%OTA<6nWCODWSzOw`8jCQ`o>QXkB%sRQF7()eB72^+$x4~`koOPaRTx@guL<)}UU zA&2oUtMon>(q|pMO7Gnv-Q& ztnu?93EIxgha?^tv&Jtg(w_Ij18!NxQfvJBkOVcU-M(IKeMq81y;8r|BwVVW%dtAG``~l` zE%p1kB&f;ru71ny=aQITyUdRaq}3aN4)tS+j)_uA(yJPmrDMs}A<+jrRcNn>KG=Oj z8qvq>k{uZmeMlgdU{6re>P$jN^ubOQq$GjpV|K|Fg+w0`h$YzDlyrFX!A=#VB!TE- zcFC3pS_xtX3B(fY(Mnpq4>=_IV5bUFlAtE_7W0tkLjth`d(D#eyq80w4|c5}B?&|y zvrE=JB>Ip*G{By@q}9%7X!IGYr6hsq15GOKhDIMlAR5pHX*CNEi9Ym75+?d!CoY%| z#0(OM1}rPm>Z?{E(TAlg32IXJI3dx81fl`!oU}UY5)ysbN+f~kW9s9ZK)XWBAc1JW zwo5uZ`mnW2f|@)p*gp_6NFW-p50cL8gNO#~wUVGF^&E9b^dW(`!pJ~c?QVrcA4*Ak zh(0Ek{C#it_^_kiF2dZ0XVoyr<+pw@$7R~gsU^WHkdidhW`?}~i#~mhx?pEq+Q2#- zX{_AXG}dG!VXwGn=xM{O`~0c$acv+UnDvpytdD6k7nKCBK#F=H#k84O!vA}Z8mON| z=J!jHL-cLV`uV#lD?#YdASfkiQ&u2yF1ThR{!d+8*#wPpv%jOP@Rufh8?F@hDY!-k z;_g5`I4gz?5 z0UM;DmxS@^mnHXC+`Rjz0Bk;`9*c+ryF zZDY15>usvB_9CSu?Rlr)^=Rd$n`;$%D~?*%*=6-U~Tnmq5* zyWXiR+HzW9a!FxtmWe9pYDq{fF%6on z#5}{BSn^%f=-jh4!7JG9V;WMD#@^kgs@{9LIs~LhfM&ZgPyIeT>+P!8^zNGA73}sg z4Jk>hd$mbVR^7X(p+i851Zdk5^>f1I>e<)gCYrEUS~*gZ_B?N{da}6P3SEPiSXyn< ztx|3ccG`Gu)zA^EHNh*`?PD7CENRtBHa}Fkx#M3EWzBExXeE+h+B_{g@Zjd^=;Cfg zF0t5;IG|;#G;McNy6xI4#iAwJR%s%fjEQWoi26(iFi?cY=hOP5~iWsIM^>2vOE05~UR*kbbl3+`OCeItKMuW>R8swL(WnaTt97#w` z>THx6ac1mNBTnM>Tqz}K8%ywH@%*_LC()+x$1xSr(xjgkW9{?l^{X_Iu!NK{>sQod z#=*pa7FCeOAFf>U)bn~boHh^>ZMu!}s{Y+}Z#zhUMvt-tcB{>lu%tcj#yR#}2CfWmxLBVSAx(m|)fa&$*s~u&0yIV(Nvpew zC1aAR#PpxJVrF-wNzk_EMen;anFjoph;h);W@bryp0^;R?IL~{;(5Im&a{a>X(9nT zyn+}-8FSHv|*{BCGf zMoSz0BVq0hOj(gu=fY2GpHaHDKCHbzrX$AmQl%YM9~k?B9)f@-)LeaiM}$HXy(K~0{wBhV7jesJ#; zB+!n{PIbbx#DvO~7nE{oL?zVutfxDt`czz51Y&20T}1_1PpB)!sWC5nRW#z~C$*IQ zJxGL0Ng8AA$yHmcKj~efZCIi>HGkudqP`tWE3v=Bh9ttJBn=yHr0!2mozp`1s$GBn zS@db!o7Atxsh?;5S+xA?p(|Fs>XZP+wyNWxyJNlMzLVPkvh{-R-nTEtX!c-hA+D{A(_Y_0daH7_Z9v$Q>% z4iff?dbgdRZ5m#67_zKS?@RjYwT$o2S+4XxsBNq~>U~vi$7&lk4I7fMSBlj$yq30U z*m!XHm8qM{Iu{`yw*3^RWNvLbNZ2biNlDu@ygII+q^RzjTXk9eu0270sCV1>Id@CJ zC8U(3Z5m#!SNW)SpNXeKzuBeg*_6*6e}7$cbNeH;J(~^^_DW4s(l(8Jv@2*4L%pk_ zN(@=ER@H|Y0R}w2#_u2Y_Wz zKn-demMBi0@ep0+_E5iTWZ*yydss3$9~OxxI5)c8EiJ&IGZcQr2I@30|= zM7WfsVMDDbZv5`kcl3QqndJuO?S*jiKIQt#QfLqMy$-`H*#B ze-9GjQpG9zJG?^wLqCKKI~vp^W$UwP*pP(1Qk;^sO~VFaE@H1Tk&sbl$eL9}SEc6+ z_IKD2go-6$Qivt|9X3=A79Ds|&r4KHv{yRyez~Zdo};L*hxot4h9JCfsp6FV9X4Kk zL(fZ8%JXbXL<_fV$^H%-f=Gl*Ng6hghau_l!;YLa$%Th}m>xfhQ#K77lCW2b)tk~e zI@cs^8aB}X)Z9mpgEqq9St8D4+*yrFNGVC%G`!mKT<0P+Pt;{4y^`(K{vIU4rBGJ3 z7nq!*7FBgPH7G}9n`T*&uvcU~*CgFKZ{Dr$t1F(FgK^Ni>%^zjIB4c@P1XBsSLgh! z`b|yJrct_*uvco5lD27hb;9$VQ@fX&IrW8wPo jN--dH$T*{vIU4r6din-dFS8 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 U^vJ0i#)e&<8X&ekFVd;;|Mid-UjP6A literal 1494168 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 MDj_WY-wgTx0GW*h&j0`b literal 2106376 zcmdqKYmOyJZtwYBfc6j@$bi2e8<-W$_Y2La2Dm`aZJ}>V(DLU;KamkebNV6Oj=7(z zNvW%TY;|M|~9{_*j*zyJL|-RB!_U$a+7d=s;A^FRwU z=L-C596y_RTzhP^Wn88XN%?I7c@Sz@Yj}v!b(nriCV8@cO`lUccWpNhyr3Pz!=Lcf z_6u1r#-%6l={Nl3!>Q;LTaa(XFBQRSPk-hfPQ2hAdbyJ^cbnspKFMu2Oaq=rgL&AG z9dg-BOV@~ipH+V%kzLR8InP*=!{FL~GsfLGwrkV1%PhW&2xOwQV&-3jih=)ov8!|N zTyquNfFiM7L3)S1T;hQqjsU3C99Nt>Bs0ePr^vw4_3f}uJg3e2Telv0z2jc(7aTnO z_$$3Xe;N2LI6LOgtCvvIZkZ*H()UAyM(YqPk-Vu{=BXXJwc#I{c1E;&v`stq^MK>A zF5>k*e{&0UP4ZUGpGyyGQ#Z{GcIG2eLU3s9VGIvw>Z4jOLZ?jcT?Sr+ za{M#?suIG;=U@o3hab`AX28Ym2&;_)A>4k(=Us{K@pEE)C_R)SKWdx^-_#KGB_K#p zncqx|hL?9Dw%nkn=C&Cj@~gv_Nq&u+(fD&p+`2|Wd_6jM;eCG)S(*mxtO^mgh@ziw`N1w8hX*hyV{Gi4xKlnPd?pR6_Bq#c(7{h#Vn{>#~j# zM1;)RHa$s|mRQb2u*Z?DI2i@l7dJNnR_UabaF3EH`x@6-5)wTx;z%T9M3@k?1*@%@ zQ6l)N1dHVDT=^$rF)LR+jWciO{6v{y)_u-B0=J-WmUWnCLcM&mbJL&}$+Z!%BUpy9zIfZMi@Xx-HEW-enhla=j7={90+T!s^EszjO-&FFaNwucxFO2I9*f{U=Iq8AlvaURti*OGBXdK8J-QJJnTuIo z=thh#^^JTf-$dAm6jS2Ti)w2+ROLowLb0vwjA^*=@OzJOkdYF_Cb6Q|k!tTdWDT?} z8vaL_iVu#Wc$Ese%|?>q5|kXDndBG7rFG(LqKuHrndlv{vT5!mx5~>mVg)WJP`q0y zBY5sLip{s8Ry!$cnYYq{jY^B4&!pIzsi6|f7u6t@5;@afUq$$WJX=?ue56$_Ax6aF z#1lTgQp(gY%t+RwLMS^TktHtbC^}_EN3D{dr=aa~UKVnz82%&4c{~Xx)b^{zja)`N zkW~Z@se6QJ#rLJEjsiWx#j#g)<#iVCbmgxi`i~c}>y`m+iNYHsBj;($5H~iJcY=7| z*$>~uM4BVq9MTEEh-*3F03wJho-66(=93)gjQYWz+G<23*G15O9ML;OOuB|A)6;~( zSI+u=e$Eb&fmfEY0y4jIOGT$Rzv2gzZy*D*_I{isM#JLco!Hel_UqoV^N(je$wl_`!M6{$mI0;BvHLwCKTKD<=QPx8| zaBUVR0kD+IO2n&2ic*(#Y&wDxgw}|C@kU~vO)~*~QEJa>M}7q?<4DoD(CL-@AaS=@ibyc45W=lT;h>5{e2lgsu)$;9BRn{sTd-m#8jQI}YIc~m=7|Ho zzdz(W0&^NC-(Xgd%4C zSdtQwSi{i6g&r{o$a1V(B}}FejaOVz+2YQM%1HFG_=CO_N5y#Y@lzw_rQ1je9a%&A zWr-Ow`7@0Dp1(EH$n{l@DYA-^Bt+-x#9*3C^Spaev+#q|b&&fvFvKo?{p__aBBMjZ!MM;e!v=xV?uf)O3`Gd_md;x# z@gzhe_04Vs8m@7vr9X0&#t))>n>#E?k_PcafaG<}Uea8Af=9Q!vmZeY60uZ4Kmaeq zFa3;B)uoK>%8^9%Uy`RplS&*6G0@^ z?4;|2mk<>#YB75mXzHL9;?TO!Z@H?6dFbXWULvxUR0V8#NfE9zC0>@-ec>(p22i4Y z5$nb}`Dr3r*ur7I)HJRLUzL+rxq~1P>kd5Wv$DF-QAyn|+lz1vWlt@^yMFLZI+D8G zNKq6;!%U~3u3oynIyD@{H|dBPQvFFi{7fu`fhh#Q#i!bmf31YSN7BQdu9N(7gq1%R ze0QGQ`tFjCH^_=b#S=diUBD)micXp7!+XnL=;NZ*LaGX$Mx6O*lv%QQLgd)AQ*r1{ z{+vJf^;yS1By!TxelLs>*TOx0wYyM+PB@AlhDc&kQ_xfDE;e3TR6qm9#OR8SEH6zu zQUoKNac+!-(At6>vbCNu^gnP=|!b+;a0uOt6F8PfB-gEMLxA2M(Die@_JIJ7_{}W$Wv=*kB)FGof zdDFTEZP;zSA4iE`UQ@SB=#cLpDU{b;O00+(;!5KM6X%rVn^gW0g{FX>4sTbh#;6>! z6A;AM9{ySo-id$b58-LJg7#i6m*M<2Nw{hj;?4qp5MKiqak{t1Ci?`r%yw+RJ(W$kkW8VH6X%9GNgOh zd|P5{m5w8s5a~&ZQ=-`vms*3NoT4Jy%k+U@(-dD^gdm)U0%2R#!I|b&~`o`}f zP->sfL^L-h*SW-|QRAH9(`Ieu&cJNHG-f1EhC+|Z~`@Mw+FMj|M^kPJ` z?1iBAdp zKvDTJ9<#LFE3U?MC@RJ!7%K&4dA`v-ev(0ZN z6=l9R?Q7&r9*8mc7S};KL`Wp>T+^Mryx=AzvP&P9OgME|DbafM;JWjqj+6#jv8V*Z zD-DlwEn@AZ@ns4N@Dn~|MFA7teZj#E=>|k^;$%{@AoSFUdXQge0VCwUGEmC|FshCuYAH($M=M7Y1QaR=s!wG7nI>R z5*=Y{3llS>@$K2f9|@s_;#2yXcQ0(vuCpG;Z{)+gSX4Zb+kCJJaNT;)I-pxrJh*^3 z9cM{KDDOE|v0|NU2osby4+b()f^7^T`yS#|$4F1e(~0>xG0+wYr>XFG++)4+!}p zqDH-h+C5(AIr3%j8vL#~d6jE8nz*BtV9d+_(N03!w_jpy;_1Oc~+N!1=3EA7qLxplvOPB{j6@NMNF?qT33tD z&PR>J(hpDneHUT~mS#!c3Zc(*?C^E2BBjCrYmx9QO@GLZha!4Ur7^Z5Dix)tY)>9y z9A9Q)FrR*8p!e!kHcLW+fkVuXWIi*CLuEws=7v(7F9U2Tkfu)lkn3*&lHY^=MF-P; z!~{~>-ZnanOph;$rM;LU*O3UR;^+8LTX5I@Sx&mw~F> zJO+kH^4zjTh4k&wWA-g9TeVZ5Ovn1(P7~1r_jsCbgUYKg13s@5wi4cvOSA9}K&6z~ zBD+q$+}T9!QOZeQ83pjt*3HaY{w+6_!U7f^WehE<*O`*SPG%7`sTPn~rPy9F-TCm@ z{}zOU7DSeL@@Ty@RvH;7pY@RymXrlI z4_Mz^0(`8x%_4FeR-u7=7Kf*gsa5&z0}Uc>QSrgrwcys7>O+7cl(KN}tCf9Ab3TWe zBa4@J0vKZ2y7fc=Yh6R=GA&*_0MTR0RAXq^_R4CDj*#!bP@Y*_3o7Y)sf2e@x10Hv zHvXIpHGYFAgld!=yby$aD~K1Iz1CG=CvD;5v<>UoR@VTIswj_er3j-cJ?lDthEvP` zM)quG{xSWpgI`GS(p3C!VT{gXu|7pbq;y%rdm)UBqp5K8LqknL=reOjCxD{zX_+!b zoK7i98p%W{62X&A8_a;0jIKA3AmX8hJ5nO9m%a=mfE@88Eh6tk@RoyDyoQ&=FrCEA zFlNz*Y7#Rw?ST+-+5~oHKJWJjCz4wn%sfw}ROITQRp+2pFpm%^F`N-26<=Yh#Fn0* zS|AOt5OeE4nIy{)s4cBTFWM-U-}7pf7eX4}q7n|TSf^K10wD%FS{Bf8S7I0nu+%xd z{@ivR@U?51vMd=5O5y`&Su&nldb;PCh1?S9lZ2WhhC7Y5)vfS~^L2j>iGMoY{ac2F zP$;LQQ8XUggv!Y_tbiz92xG$cxxO!jq0*|aT!tdFxghFRk4OIpP*n9RN3&N>4<)G7 z;1e1<@?0apNr;M;<%dRiCww8M-J{oNHVV+N_y~ZfDpnptZB@w%1+RV?2ml~_lu+Eqe36-W;H15IazBB3%Y4<3^7_o?WKnb|1EoWB<$a+zDppr>yL7DAH z>!TQW+vJ?1K~m8^2sZ%T*--foO^Qpe5_+oe!hF2WD)=7SjC}; zoSeP;UKADQCkD*^e9ZN(!o5+uy1@f5pF2QVQ;Jt&#p zj@G1wB|vPml7**eLRbD?&^(Fg#FU^VIf_VVu7*YBjqpX3pvCg}gIjW=s6<$?h~KE6bqYYhK-p?KzOc`JN= zm5FPH#7SU7|gQ zO8Z;?$#R2crIeL@=*)l?S4rs5lr#~=WGE`DDtQpRW?hno9yf$RO)B0Od=Y@Rox9d8 zEXTL$LC9B3RROI(3IxQZjA3UMMu>N6*Hi$y52Vu7UZ-clAXcokVvxiQhv*9kP(Z_)Jc;+3WwRV zJgnpb*!Dd%Oub;FGTHUq0nS&6bsWHxi`YfOu5C^V0{nL$shSCqxjl|sTO_9M%_hvD4z$L znKR0J$eSv24Ullj)bI+46k(Aeg-qr-oWAM=HK$;E>4T0OxutrHxWfD{=8`z+fA49 zSRi)R`&d9mza94@77{Z5taX5oP_cLkh!`7hc|_$k=l$Yw-Ta7o#%-O&uxpqkAlj~x z&Tl4WFq4#)@vV^5(RTbE9$MbYRi?-@6-E>n1{#~g*<-~kPQWIl?ua`w?~e^u1hrW{ ziB|)mj?DJFK$yAYFqnT~xi2fPeaeo!85uWwM4@o3R_OZ=G{%ZW#X}2`!8Bral-U1L zA<%ET45ZYLQBypp*pLIG&7__RCC9wS89T3^m~ZB0&amK=b~^P3@A&*>fJ(1pVCd$Wx(y5c7=LXTz-YVVkN!SC?<9wkgW zNSKd!1}h_pT!^jCO5~NwW(Lg@Y}tp@_SOS$CEm+0OVI(ziU*aJE=+M7m~}NsVOFLP zjfhBqh}MT;AK@zasvNw|9mJ?umkEq%ovBAkdx~2 zVtcyp1@M-GA9|LF8Vy{+AsG)sk=xW^c+3@04=fY)Bv!&8V*Ci1#l<$|c1uk>kClYp z+$^iGQ-MOneTfcFpMV%5R3?TOV_5C@{wr#|0vU!Lk;A+2B$3Bhdl5`|%)JQN8Bb1> zF}ABDKyfO`X87K$`;iBZ-ueW=^b+L|*N#XmJNUL|nRp6bC4pa=<2_0O_jv&T zZYLfno-5BJwI`3a6LSzB6snA|6=}8&*F@%^LVSlh1RUv(HnHsmrqrn)(8sWb;TrH< zBCHg89JR2z>6CQ!l!hE3kV$XJvCPh>su+ z9jcK!xUCX^Tq?$%Bq|8N#Z+7a^Zpz+TUWw}ZR(57SMqA9He6L@>cxn9KFgd1c+Fwz=w~r;XzWIWKM|=6Qrd=m=}&x6znVJ zypx`tK4cn!yur*apu7@`%W-=}<+aSG>g3Tyd2V*qOeNC7B4-l9G9WG2I{PvvJm;T^ zsz(`<6j>1~Bs1Hv6Z**}kZ&0lR$MX%yu1-Tm*qpVRGqxWB_uR@AQuxkyULM*p>btc z`?TO9(H$!tVOt%rhakF6dAL#$fI`XrIMygnpX42|dL<$_AdP<0BYcvRYf)N+_*m+L z7DW+thz(H}R_@OG=6^HgH7^u5OJM*}MAY*}M5f#0V#vOj&33d@*Y`zibyxvbEFy0P z@V2vC%1Z+nVa1{nKrm#-u%lF5T~_6iyC93@FEz+bkQ2sNdi0PTXvvNyG9vijR_OsN z7L~W+7q9~@p3k4$k{nGXz=}o0gD*D#n=SIJ3_!_}F?;|&mEjlUZ~4n3^WjGQ3ay6Z z;JN8$*?<01w2izfwWi*Rpkn%k!&kWpMMO+-olftb)c5)zs!FJiw^7%fQPn;LA}xzF z@zNIFP%SV&j0NmS3Yhz5<_)IiDpEJ#XNYaLUkk2Jr7+M^3o4(%$T4dG?$WRs@ue!M zJ)zK!J}uOBTA@M??PKIelKSZBo?znkv5tbA0a%cu3Jaqy41-re@yD%sqUm^j_y_p{aEqsH8o1CF^Pme61TX(6z{Q0 zm%r1n;d`GVa=h>4XE85fa773i!P8KdJkeT1QS<)6-bbSqCtEZcB8rzoD&B{TU2+wG z^^bnxB^+L*2OwXu3M111M#+K5a#~SE$uj?*^hzHOQ4Yn7y;oKu%|y}oudi}qT&XOx`v{>i7W)ea9md+ z=(}1>Cvt*X3>5KMVv-UGxvpl+?~VA~c=9TjU=i`*)0HUr5V{hDbOP;+JWwM=bc{w} z^xPoBdJw;@XYjzLiUqlQ*JrZ z!aU4LA|@mEK~?3Db?^>QDfbxC?y-ikhFM)FZH^KWp_EdlX%7q_lg)+RFk?)8zYi`F z71?}-!n*xL-iQ-AM4ojKctR)PxvOAw89(Y;NKaqwE__0`mu6PU!!XZ!u_PIFtI|5u z#*qh`@LkzA)gpyV!|`f7kssd{jdk;g#~aART4qIh7d|_GHUw`wc*T1tcKlh`ev zcTym*l^@epHc4+cb-p7hS^CNx18;jb{Zyix$mb2Ol1B^>v8)~cD^{OuRrCTZJKrAQ z)wzNQ6^j=SJ|s=m)QyxB=Z_1G)uJFKoLlz&Fz1BY5T=#5{;gD)doA9!>Q1#+q`%t| z98Dv@h(+Yh@c9ki7SpFsZV8Si;xl5=@X&+#bj%oC5xl_ZP`8d+6hd$)LpsI=y1e^g zWE!^LP|J7cThk79^6h%P#IE?ph*+Gw6}&13uWZ&@*wn3cYWPf`}l zC>!bPqT7pM6^_o!^0Mc$q2FIzEH7)x%nu2jAUm0{I4TTU60Aa9&16lC_*46%|x~U~Ez-LziVQ?U9z`Bt&Rs z3$S7lc_)DE=(y|XT6XrzFUE>VC4it#$v#R?(kY>I6H3K7J}2`L2?a`LEHja%{P4jw5Jb3+EwY*knr?#W*sU13<%=J={849_n~4=M>*b<&LtyC7TZCq4LP zT>s-RM4o(mF-zR~_!1%!X6$=-BZ9Y`yyP0BK_MR!aY)AlQEV8MXKN(&rZOH)&z>IK zRSZDpr7&xoJ)@1kP}$GAMv|AYA$r#1naH3tiWH9Gdn)6^dF1!GfhzH(2G9^RvRR0-wx7GHs3zX$Qw0SeIj$(QLUCoUta&sa|dam)I zGX9pGmm+g#sT{KNW*{RWJ}m(IBt>T1zH%KAd(&bkf}%3>WT-`E=TTnZzp=<(CCCDO zNM?8V4`9g~u>&l`1-<;v<-)Dx^_km#NsMf3kEyDh8Ns zw}t}6uj3c#D>^)RDuEF~xmOcQ)b3I}weX9u96EcQFF3u-y7H&`&2Tiud{b>{OxnRV zW7`GGRyrz^hjrREpE)r)-8Ragb_s2#YcIlG0dB^_7M)Z8H8YQrmz0-njIyOp{O|WV z{HmY((n~n}7(57(H>L2{po0!nYLU57$Y9&BdXMFNROwSgI(TKGxS{23O^NV8rF43+ zrV`l%SYjhz3gCT5w?01&V1yToiYI}Yv@wt=6G^7$Nx`0UNK&&zhfqV+(&82DZ3QB! z;w~#PiM&L<28>ZD5x?uui}7sTcp^8UG860EXK7e`c#_Abn}zNkn{Bh=v#nO38>mzw zlDslPkHveg6OxC&PbHU=!$T)B+Q>S-rs8Km%*yFEV|c;YYu&`drjm-?WF5pS@34M! zY1Q35E$jQ$)RkJXOLb`@tl*^2$oG9a-ND&q=3j1MW4nYD*<7=4n&`C_Z=Y2 z>X$too<6;Z2qBvt55s(jsBA|=5VcbxfxzLD5@L=+zb=Kt3{rOGkjEe}#>bJLSUT8$ zQUaVKa+g?X!+H}}_yX=oaCAn@ zBe71O+(Uq!(xDHRVp!@0oI85iO*}#~*@nYIb?S+td`Q^{QIJ&zW5;W=-4cJJlzAPP zO3TB%^^HI8QB zFmBD_yhvIv{cwrs>DGqbRZUMN5BUfayk2o;N$`{0Uj=txC9 z&_j1;apU2YMOu0`vLJEVhL)NFY+tT-8Ak^3QMbQMs&W;a%3^K-=xllDp=wSr_Y5V&dy!9Fm-?spSOHW);dL12TJA&S;?Y z`1S51qa=}HzH)W5Ten%dwC7>qdmxI_%d#qV<f6Sub>1tybr}&vl+|qL zF(wjip2=<|l~&$69VP`2KmN_BX?#CYC=E{mR?42?3-P<{UO z4?)y{az?t3p6CpLLY_aVm}dW|V-EgmBM!hJ*NG6uyb=8c8ZJ$#U*ySP=FHW^FXD?- zIQQ90=-EBLnMA+6LHRpLjYB#fgeXG&l+@}!$C=0{B%;#rqkDPw8PEGjHm4puOB=SR z`_&t1FQqV92t{J&=eC3gb842< zB=Chev1q&%yhiDW@ zoMb+z&|@$+gOW#vSUo10GPRrB7&9ZK?zx%C*9NNpm=Lm(sp}f#lK}Qsc7mx$!k6`w z6tC`w6`I9=E$%imwQx=`Hlc#__7X89TTS*@x&oey>Xz^&XXsMVfW`8ZHSvn@$n~VZ zjAF?;s7I(+y!c-xDhpBKulN-B3q28jkvSIZF06Q#S_9k)l-kI!o1Th;9YAumy!qHnuxut-C1TxVWsT|F62}TS=+TIz9+E8S}=#NJ{szHipI^mJJ zrVZqEL!A7{(4(68u9IgXyk-TzK~5|xzVvB_LEP5Nv6vZA|6I2{lD2fkP}96JLVSyM zNFw4Vk6ZA3N{bQOr5k2NHGBknS>3t(yBF9XQ6^-SK+^Vs!JWQB>wvk9hweX(bAX1) zh$l=)jw;aOg%WAfVY)$TVm?=1A0`=W$M7w?khhLcasyfGE~cHV_v@$( z?I`Y?q+8b?FE5U`zt7$?^P%F+m39rl5RE?>bTtlL2mS~Z{mn*aeq{-WuQGr&%R$Kd zMrr4knMDHo)o~gk8zB!P*2!1958Wb1ryuNH6cZw$c%c8;UI$-pU0rkV^OqpmhdnQc zbbJWYH>0O1a`)U4%$4*5s|^U7j4XJejt%*HngNU0@cM(<*?C4VZ*Qm^p8H3LLv(We z`Nhq<&_fYtam=!#=W)IBZ?3+`o?e|zwuy!P zq5~IpH;z=I4-@?q4YhdBqbDM9j8u~rjz!vgrJ-9CH629+R_MK;-cP!Jy+~b1R4ha7 zTjPZ}v8dbyRUo8kv3LHE)>oyd1URv1ct9aRS-44j3T>}YU`~Z6Qik{uCnh<8KkIES zwLDqgxPmr`+{8H@gu)#T(9q}wU)D?E3o!ju`08Cj?$25mX|WQJJ|$|DmF$a~jIt8f zuh?gnt=b6l%D=z5U~P(Z?u15+6N|{(z}vf1Mmd+o@#$k%xd4-h2VN+6OuCcDnr_9B z7BgO0S{8fHq?7!pZx!e7tL0YsT@i*jZf!*o3~=QH~!iqM@doUrWmBLNp z(#$EHq~u_DvL7%uf8g-;zokg%_O(rH60Y3LNU*NgV}5eAzT??t%|yX~n`T`c?T z@4-ite87R+FMm+_OBdaX4P930>LDj@v8r%sWe#&1uWp&RL#~YU0(HZ(pNJJ5L}I_VcBK#ea-S9=S&k}r5k8>2M|?{)pt4x%;um3Bt1rv?C{_Ln zzX%bN6;A*+MMzIhJINeK(Rrc>*$qg^0L^4HskKseB|m#&^F92Az$kgmW0B>Iz57&X zW8P4q)m#y-h+*#^w9Xvo2o;MLPr7uVnd!I4Q5sEU1_}ugR$#R&ljx_BvQm*eQEpFN z3<*w7BXvhB{f}eYJO;v~Gx7*?A3kjA%i29O(J6U9R5UjX@{JGddl!J)bDH&8y?XFk z*YJp)W)p4>FVjOXcWRlsj1cOGsw~fCi3U|uQ_EWDk$HSb;M3~TYT@U+odc6sRX6Vx z)$Waf6`e=ONIaW-`ablYvb--+vre5x+{**cI*(8}a<83?gPuqf;7HD6nivYz;#bof z>ngyk?CFeMpD3=qi7dKIRn{IDw#P(vsiS9kz<~T+2w`s47ad+bAjS8fsK|`3+)X>U z2M@s9sU^uPZ?N)x2{}*f;*i>Uv>-!gF{3^A0;p1!&kZC>ghxH(r=CtlB;{pm8qS9! z{rTWa4469Su5$-xUvW3@a}UER*xUD@9NcmuD*KW>DUi-4 z16ihSLPLwbh?~WUMdUWH?mMRT==RTah!c}Y04zNxw12p+$!>#@Vc9qs3uAmn3Ep)K zE`vpRUbjf&-~aQUfBfU)Z-4*$f9OF8c$mx{U@9Lvk)R8?;7ud@|2aTI;}^^6K3v&k=R;Na0!+IH zuX6<~${UH5X zKKu($;yD_Jth^P&z{9G)kGvDK<~;;1)Haer5T*{oygjYTlc1DY>JF$_o|uSCESPO6 zZDa^b{w_p)?Qik1lDtOj!215q($IGq*LB*%uZdnDXyP8c$_)gFSd4h0m*p&EDlKGE zn+_-9gZLZUb){h!!=BOr-=wP%=?I4Htz##G7vjXC@h0eQJhl0`{XiGw#H8Ybr-clu z)9wZCh&P zP~+uaXdUnryRV$P$}MOj3}=<{D4i=hE@$zi?-311>HxMS7^)7SVPzyD$P}QK0EWzf zCtfULfSx7F_LTuLOGBc^!6nJxV)#;C|0IKSq!)H)hff6FJP zgnQzb7nIdQuEIM~2mZhn>Te+ahN!eyyY=d(E(e{GjOS*^3L#*|tH{bUme;!_p_`h{ ziYGphmBOB#f^YM%XXHvmXs;PfYoxQdvjow2#2M?}!1@8nfeRE$q zdzFhwh^$-1Wo|mXqW98gmSmX>X%}fuLV&FdCLKTVI~YZQhwDRD7B$lvgdLTxW#C{^Pa= zs#!vk$XSdPi^v<%%j+60JGUt|3cUy`CY1<$II9Dd#Ump@*`B*~*sgldw^tuP^o`KM zvM{7{A?GV=rydXKLN6LY>5eTvGFr$fiP}Pz3!NJy$vYa0*j**hF%_o_E2SHR?Nd@$ zWr@i*T47c!Dz~9Up!BYDYO%=ky+Oz=A_1@%iY$d}R5uY0ZYFsc>9Am$=+H9Dj2&X` z&L6Im&J*U4iam!cVcba|k>`@ZAT5gySZXF+LYZV)flcOuH|;2!`q&>NU6W8@;>NVL zyfKI@eQdsLQ8^qTqw$J`HF*cB;1y)ilK=E8ssnqBip7g3UfK`k0uhWXzR5^##}xa; zYB5F!AOq_*VR`LYCf~Kp`DVfjfxK>DyW>tQSnQHjgrbvBp|qz_9?y(E92Ca1pvRCg zSyn$$-Uk)_sPxykCFg!H5AtGCxe2X1r?6mye`kCt*Sc_5J^ZP8LR@!ZP)MX-d{ zE7s^SH@O|EomDWwtTZ{Z(U|Q zUpfSKnrkejlZ)3z=QhA<9kmYd0V-O)*xV_a!G}v_usSIN&h%Ngt=WFsR?SNI8d|5L z!Hg%6MV~{{bVw$GjY6b?uf>nL2wdugS@QSghuhckc9oR!uOkO;= zvUd=BXB*#?#%(D#=Tcn_#$F3L{ACxY%psFPF|u5rlk5d$1VFd~3FJ&MI7!qyXHqw|`o%4rMo=I-BK*t-3*3zrf?*91-UWF+y~f=CpASw0~X=NBy$q5 zRwjsu)=FiJC`9DhWM@iZ_)`$PX|jQ3>I^UuF{aKaAZ6VvIw(O6Iw5{)$k}VKg&qKt z&4S~aQljaE_%Z1Oq)qt%QzyzRHPKjx?(THznvS56tc1cEnnJ zYCzKXJ*)fJ!Sn6AAf0!EW`#0J4qFTS z5S^k=Q-@tQcT=mf&D->x&4%&~W@+~9TV&u@J8n+m`bi&QGcdesp^K}FIEm2dh+Ysc zTUH?`@`_MVoz!wA%Wag5aBUJWcd}{Ga4lHR)GU>X17 z^O_7&I>b*IebY3Qf)P4>*y}2a5zH`AB}s|oh?lx9%~$nMJ0rwW8Oz%%1A})KSuSbt z6Qc8e*g|ZYA4KwjR)jxvjV3<3JfEOCW$~sI>0TG!ydo zM10KLS2Yitg1--~SlpOoZpG}z!&ZXcBon}_M#RiYA6k!|$zviO6q@boP^?GTl#i5- zkw%%reo6(wP*2jyYoJL*qz^7z<>-D>L?CS;I1m)vK9DO{9!JIl_%e=0?OKrFkZg=Z|WBPnt}G z8>+NI4SvbIZjr>sc!yZ<6sK z(*jjm&SF-Ym6#d9=&E_tM9891<02`m23f7Z_P#!>4Ehiq6MA3Dc0t+_4*)-ts#dAP zCap~+&{k5hO3&Lu5iJ#C3@?oY@u9PKzKnu3^Q?)OMd=iZSuM=>x4~>G!vEB3OAcU{0@#Bi45DjJyIUN=IY%#m|kH)jDh?>?36I4>MFYm5W*FECXqsc4ryrOWj8^q}4nS zd&>`+=QM+4Om5DK*b8`7I%yr)eJUpE9$bR)Ph{*clHmn1u(U(%5+;wyQwg0KVj7}i z@^T+ubAo_6#JI1#Mx5`tCiRb(s?sxbrQDqurE(TcweSGlz9nIk#}hq z-0Zwd^I{W0Gb>pP@6uF51$0b)ZUk*#Zc}zxDoIgV?7fE*Nt;g{lDdp zn>=d7@}4`$?8?+k*+|K}5D2*qF}5tF$)!j6=T%3o1iVScN9-r$^ID>O9of+{F(!}K zy_M1v-oBENEX67ARK{p~im+qK>V1&ic~nz6G-MHWOfo)Vbrcyjj7%PDWmLvQbu4kU zt&LLV{hS*vWi$Y68ZjH~Vv0wCS(G1>&TXLGd{|RLQqY3@m~?#5c2-#)jt!b+mXUG3 zZa-$;nMX|^d&Nq;53yo9NT0M8@F6-T@;+o~F~)?%?TRtjpXl2Dgt>OTIhGbOc}y^~ z65P<)&381lkfsyj$E0%~X1h%Jm1nJmy-CN%?8i2HA%n>)wF@)urwf`KrqU67drj%k zbOPL%RPMtoWM!B#dAUn0?d9Fz#=O1z@VfD&wQx7-1Q6TX{!ls_!$8DBkeN(sA=^E2;kF}9 zC&W*wnAHO9*2C5U-=yP7nii_#=HEa_c3&jLHRhd1=FKJ&g3(@Xf)>y*`MD9aT8FI# zeuz$?q*eJk5s*B{D4OW>46}VaRi3+ix{E0uTFfHcm}Gn@s{`1rCpASQ1uVvmNyY;V zyKI*(=Vz(g8Jqo247N(We{ddxDIFFXs2I*YT!ri(8N9d0BsO30(3BIa2$%p!D5emptTx~sS#!%(?|40ctY?oqS1 zu6ztv{vKJ}ycw{_q%f1kR5td3aO2em}M6T%E7+& z`yktWOeT}=St}tQBV%%N60+kYIimM`LN@V>eHUMe&2Bc6?;P^{w7Z(07#aPEf3>#X z3YyV5Uvk)5*oWwt;0I7s4%6PnWKWH&&03V#IHL?@v2WM4AKfP-|3^l%v+K8;XgJ}W z)3<6&#dzV1N_AO`jLFSCXf-ho^ZU&0f-0bgh?txNuu`Fl(g+#tN$G6QN5|4``?J2z z{WOePOIKsu`gizW?1v7Emk^xB|6N) z<)eU($bEHR!k!Ip;f*Q_Uu9H zU~W?J;L;X8OCMwhAe5Bunk4N1JTeyB!E3UZqQ#Y`8qijNrd*^{%Gc!H2G@-TtpmDA z#e)k;QbCJ$6Ry-MW0ieCxN5}1+8185RJbC%m=byyST~;26p9qA7%wIn4=ycQ3qyoa zQmJU6%Y4zISe1R_tQs8qk>-+xQ0piLT-Qk!XM zqNQvwB*x#PM7F5Ibf1@=)mq)!k=tZI#V8%LJsVcZPHs!#OdeCQfXp-x%Q{YdzmP{1 zGRQl-RVDjQx$$6a>&oNX!cBmT$<3XJ1$Z<+fef)qzz4{f+<1uPc31yc)uqj@K&FU4 zTp3J=2FsjD4u}$CVKh#ppDN0XH{x->7{|zpi3T^cTgQRibwGbnz7k;Ot#E0}@Y;iB zUs5|}k46x6lZ+=`mI~u%Wjbv4MGo^oTtU|KvJkE}ViJ389aDv-Y*hNNZ-uN>ZDePy zgnWREiF^Pu9mp9+S(TbOkFD=K=FtFC{g@v@0$66?cW5z78JZ_e$%L3OsoaK_Hmk2a zX(iZAG9F-=#=_{?3MzEuYx39gV*9KVQ~b8iTjB~#PsG4qXAE|%s*nz&3Zub#>zVku z%*`T1=C0*+Tv>GAVdDkf$Pgz*!c`5c+m4xu#QxEUaAFeikyHBVvFFq)H)J8s`X%w2X#NWfl9bgls z?ix4=P%(MA5v%}#=Aa7DRC1s==UopCfTA^%acCd9ksHVYW@|ek(Yr2`Dp@{@oF{#`Mmv5t* zES^4S70gW{9$Kl9di~dEvY4WUfywT{iRkPw4eQEt7}q>0o!xUC)`PbJcI#1V0dLar zAxmxhj+%LSB-21evta&2jIa?qX_aVK(@~Yf?=X6b+)t9+P}45-JMhRgo2$vOg55x= zkOk?O{M?3Fkjd;~cd=0n;40Y1$e7#&AWO~q;v`YW%yMPwTR9^0QnheQq#cPzh$l+R zoSh@e4!ZY6VJ1Mv*w^4TJ^47;GVVwL|X7P9F3X<%{lIIMIf5mIGnKX2!6mr}OhL_Ep> zm3QM6VA1>v(vPzJtb}@mjLD5BV1jZI{gNPQ>I6tVYb4N0Jx#LWTQVNBGMr!WErmLn zF&6FqPhk&Hc`sabj#&%z5S{FUd>Dnke5DnJOD82YnNDLefUm!}(!leUv1l1kL)X%| zD_W1l5Kp3|22Ih(1T4UfN#;JlZairv+)XkbU=m?Xtu9Kr5GQ46FeB5IFlI}13sr>; z&l=Cq|E;*viAt16KzG0**wowWDLahC0|adGzHTuw!75TMe^R1 zO?=m6G+TP0>AMb3a_E*}8W*WuG{qwovlurf8BfaU0e0g_Gtt}O!eR76l?WK3@E1FX_XE8!j?QzT)0lBwl|2BN13N{NBS0LVb!2T5n0oa~s~ zO~`>{C2@Kl+)&@g?prGA`v~z;BwrQb%9O@+2Q}p){j5Wvn^gSIvC0D}zGU*UiQbv^ zFPq6>dQKo#tx4uHYl?-Y5@E(9a~oXuowE+;CKV4YzQxqmVy>6ehNS|B6X=`y<%NE! zRP3xKv+vE6it}XN3s+{WmL4=vyJ((M!xf-nf*ugAHQB*lKqempDorFDvWkjzY+t7rHMrh>nILt0|e^9>cw3?+5 z^$-=47hkwiZN->Oa(~L$$NQt(!WSe1QS0?g&3el>BDCm2Oktr0fYJlyF zK8lW72loJ#Ou!y74qw1h^Go^{bL}+~PInXCh!^$r{UihX7&+Y$fG_FS$c=l`EHTfS zzK2ak$gnS96lDJZBxyO)4H*@|&`-YMLR6M^z(1Li0WovDgP^OPb!$13JQM z5HUHq4J)6&>@N3__7?)j8t}-yncR42p|*aa^S@`yW#SeZEw>w%MynYaoFAi}l?=W$ zz8hU=HiDaSkpQ+IQD-t^lDQ4A@-Fl9C(T4-|6YWcF{uRb(yw4{b4BLi?Q4lqLzl)Gux82d}GqaP1G{8z*Q6R~<^A#V?o%;A_t8=|*VbSwgc1|Ki3~N_w^A7G{U(R0SnPTi ztx*G}RHRfwyqHw(LhHtJ*1_DQ;-RHOrc@yB=E@Dt9H_wA_vDw!R-V3DKfAGMCn{c9 z*~iEf-t0(;SDs=qm?;vjdT`x$P*X0_Z*iZ)vrsq51jH*1bCs9dS8H6!abG?Qn$lw2 zluB4F#BMyQDICvb%mUsdb5h1A7?h}d>P6CQSd_{Re+K%bd2iGzOFQUVVgk$1_d`&H z<+o=sQ$xaD!0Wz)nu2i}b(4xGURsp4DxBPHjFjQvHP&hLDNT2!XyIoRraW&$E5M+6 zo%)!SFprQix$)pal9V0KKqYjSGWRK%4>WTyFO^3A-vbNjkSr@*mYL5bgU(Xa12o=_ zRgFVd!aG2wNX=_8qK=G#N?O{2>1#d2vasw~k1B!)l{??#H0My`1}>u-r)hEWPNZ-c z)!?bi4rzWp`U~_qF^PEUN++#l$V6^wp@sO7J7OYNsD_DTGMJun-+>!8ku;eAGlg=M zTJkTTm3JCncg{+nn`C_9(oZ2<6nGxhTNqoT@Inoh7L3549rL88sT7J=J-iBs(qsqS z&Dq&kg_$QkPsW7Z6R^zK`iga>0!Di^eb%1-lFn?Jr`fPUcN$frm|86B_}x*>_LfMO zSggI^66L3o4b`uS(lbZ$s<8b5;V~Boly3Td4%NGEGkdPcXuz zqBdo@{#cyM{Em_@8Zj*nx7~_ZX>ch!YaQTyDkkn8U^+nGN;{a2Q!I02`JNRMXLHN< zB*EBpk$srIEVOZ5Od?H;y#Q8#K~rI*l2r@xeXd}4aV9UmWTjPIl;`aSc?E|N`o-a< z=x1Q*`XaNB$UNtHGA1`S!d2;{x;iY{GLXUL5-~CNz~T{1zr^Ca;?7_)%TY}h({tui z0*XrDB1BA1?gLBr(-)pHGu=uNkB}++5EIXEASu{wsh`AwWQJg1?aOX1Ns&okoVQ8k zGsMc9!75Booj#`d327=mD<%=|JLESdLc~zFEDFIkApCeQeoBGzzJa)4L2<}@Fwd#M z3YZUtl2r+<0E2;JR>C|&#^mOlaCOTlWv7WE!~E(a<04QM{>WzYLQ}CQA6#&nipk4e zXw^Aq9n3>iGTDj+1eGB1A~FyhI*Bf$F(jh5BAM8X!F`OYy!Jg6EqM|3tJqD@xa26PX(#C_ovu+PSMJ1ugoBssc%kGc{5nLPObEuzB^zZ zQ-kFbF%b_4R_Y41lw>9k#;clQp~+~k+Tz6|avN5+9kUYTCK(T{Oigj-O?4&e zjJb7;WcJN@>tWmtelvMY#X?Ljz9J?I_C5AEMT^U4LET%7jLFTNh*di4{#`2pK0u}L zgG{X~1WdZeQd^AVZ=j*9&LGB?BP{F@WmiittJp=p=3Zu4GJKo`j&mQXo{ur}M!0T0 zXZ9WKC)|WUH>r4EV^-2E<42J$RV2aPy4tIqKiPdTQyMri=#ti-4|DdB$zr0uUYUKA zl8JFsC|+raZc_|cY~+;5;`x(S!rdg}Nf<9=idb>$Po$wGV{jkr+FADDww(lY>TUdv z7W3xr!z#0+FFR%(#7!yzu#|_mbXkagSjII}D!4Zz_W2)^MJ*J217H`}Fs0%&6_c0y z;Hq=ZN}xx`n5cVraM)9A+QD{+yLSkC8FC z@x?1uUfm)ad$KUa${GYWdmX~dywOzcu!a#U9%*DF8UtC8uJN-SDYc&ak%f)3)#kBB zJw(Oi%cON|?a6zy=w+hX-fSu}uQT}yg-ri)-(!S`$;q8)RXJuQ z$OB|br7J0bK<_YdG1CSqbz2nHu87ww_$PI%FjD zCbAhF0T_9?7@>vkLh*mMTeEvHAYDNXXdX1vfPv4khJ3w(S47zdj#>qFpNPqcuk6!= z5A}W$F-`4z*1`I=d~W4X-;9sQ#`V5g7UE{c4EmkQfkxXcd`0chHVq+pX?*OMB;5=> zGj|BiM%GhBI4KmXN=xrf6sh3s5n6 zxe=}ai-CjI0X;y)cBcq~WZn%}rIYUB8)di$$YkH-19xA-QYBVe zSO3bDrpjlf_NPat$F6N!?0vEGy9V);rJ*eo54Y*4=0VSsDHO08c;SiEIA|rB?B9unCN%BgJ>58s)Rm%$N$Mu#oWjU z8Izk^5vz1o-z_qangQ=qDHX9)4c5j(HK_MarPQ+q-ejIku8y$rF8_U>b{oKf?n z8n5ibwy2n>2L!ARUUd#y3H2Bm6ZVsUvDstJ4~ z7L1;f8}_M5x^iTwMNx_gY4WLCPBUpEx)BJ)o zSOHc{Dgm@o4Yiedl~s9B(V#4*!VFQwBsb+E#f$u9fE$y{eSqC~Qd2ZEU=eOiG6BG} zZIA7&P5WTQSIj6kc}$OL#qZAtb7buF&QjfzF}b-Du>g zyc@6kPU;F+40e-@FJP%Nw8d95=W&S)E-?azmh))dY4Rx>8#9f(@L(N}W8gT_UI872&2(z$)Q&<3UZq zNIu9b9mPa#FZ{hayth;zs@29G>pnbEIdnNjygp3zNlEwg{Th zn9UTNrdj4u1Z~>3RjP`%YR3c9Tp%z?7j%$b4tmQ!*Hd-TT=ElfzWLA_)Lf zE;JFJ6O+h|SQRE0&K|Q0;3km(R_Uuqc?VT{LaCJm4_oMH%Xo}eb?hx}%C(eC4mDQU zb5_(a6k(-Quxf#I*E#DzZc+(|)=p(*p@^WyQeRE*(~gL`O4HhOg#|`jVrXT(pxx)nBHEe# zFN-KW8CU5`1m>FRz-6Y#kaXbEjTST40#u45s~%bb4$b>arJ@$*ftxdV@nj31M}3Dc z3@gd=pjO<|U5{ z+y<7OxKw(~z$0rOQ-c+tVnXhNrQO2P3LMM;>PfzX>iuW4{zN_}maxYxuTm>OgB74+ zLVhDydajCPr<&K9owEw$E)kOx534*$_6W=;M*Y~XquBXw3?fj(YjT)kg{ii5EA9XD ziZM@2t!yM%jEu?6eRx$mX&u-DRNnb1N)gGLS9P6l=Mgfc{hNuH2Fbh|uu3PbgnNKY z=?A$F42o7e9Y)<}ZmgO=lgUIlj5Lx_fN08wrjjRDEM`nH0Tosau{=q2-BIh{Zc+&V zrlhHTjL1y}iQmy4rsMyxma4OeXeqJGu925izgrKB%gkQoEgnc>6?5ynU!t z)Imy7wV=^b=-c#lW+U(*<|U+7W05Hm>6aYi#w2qWTsNN66blVkgd3BL4_Es1^&Okd zwvlm(#Wl~{qHNb`REcY|JjvuxA2ciRD{N-;St*pQN?`4(Dla={9mq{8zGx{+t0|o# zVY+CiXS@a7PV=ORhz7|NidQ|rN?o+xCJ;xqoJr`I#&x zaPcVq=HJ8yab`U3BVEWs7NfEzN}JM=3R#RB zlgw?1-FnnYz?)1g+XQ09%N;Z#=j`PGO) zZc2r$5@ffYwG#3s8BfZTkcCD=_e9$sjv)ZAhsWmyT~ZtP!Kb$qSfjjK8m>cJJ@(EI>W6JCmD$cqP%VFFz7NO&-QRs`{a6=++l z0k}!SlPlfdU*5^MpZ`=CRn6;Cj81M-CQ`^_%$Q{E!|T3-nu4M63NT|*@!?WhOLm}T z<~+@4zS)Hh9hr4zvZxQ5r&hyJD@`WCO`&|%0_?_IvRb4tRtMR~b|g_fWNE%J=T zyFJUUS${qrdu+-Qmw(1XnZexI%EGEi_IVS8r>!y|c zk9h6GxXfKwrf4K&g4~#7ZUXGylUBmrB;x@lPoj!Luy8Rm%oqh9=;hdl38S^4iD>Mr zU3q@jd1R2`w!d#?;kzGKjZt|wTv>5w;X(6cM;Yh=DutgTi+b4D!y@8oZ5q~OBV4lI zpqaWw_Cj^+CPs~Hn>5CzXK)e;q^0}g*W-En`+xrPkAHmp?eBm8kAMA_4}SgEAOHC0 zAOHQq|0>HD*)+vS-IWb7A7lh^NZC8J^y~~}@n`=re6p|@Ek!XZTR*0Lg6Oa(Bhz^Y zb|tWxmNq7#!$g6vUblwb9?)shUu_YI16I7RlS5sGUxkBLx&og}dI8OL13q$%)T$yX z&zsQLCG|-#v|~eTkJNP2LzX6f&gj&&r{-0*mi1a&tWzchLWK%{=1@%I(#;HmqY3bn zO^$R&@=#8MTFJc!s1TJ!-SWE_89no5AdhUqT{>oiO)LBRm~vrKsftIHlhi@A;|7@6 zF|mb-bH|`$_p@x3EEb zQ#nWnVa}dnh<25sN$vHjqm%=Eiqc!vRK`(S);n}Kaa2*HfZQ}wgQ8~@CAW6DY}7%c z^c)%uhJfQdZmVKtx0Hy+Fw8Pi6+qhM4loK?(C4Uw1~2N+&dWL>3KOEyF=>`1Mwo#p zj(a|oDrgj*BZZV`0<+=S-h|cCuHw=o8icLTpEK6bywwa|tVGLsNKb;HS9Yx_5$c1O zCbo)sv0<_aM~4MBGh31E@4T^>>y0{al%GW7fef_FnB+0VtrD{q@j$hrHJHRPcdRS8 zTsjI_(B~+z(~m`>OXG6VXrfkxpu5->15nYA%WWy^xT zV3I$Q(etY{n=H ztQVwWZm>db5REEelpQ05f+(VdHd zX-FB$LN{5{$X3mv+XMs4i>HMOXOt%p_r@3blHPP&?j&x$Q8eZ|Zl7{0s2WYYUh(Pk+WX>Bk z#D2a;)MZ0tie2f@pRf(ZUgSMw>*7R?V?^miQ#NdU85UlUg{YsX1fewc64>ech4>c+ zN0zkdvT!}W!6VWhbK^%-FN4wNJ8<}Vcac#-Hq2X9>6`5?JP1ik6Qt`#_Dr`k@jJ43 zGJAxFVPSFG%%q61#rcr*&PrTM5;a4E54QBKC=v+dHhnmg>nUdUDgNgamMfktjru$=k_x^aZU+x_iL3vsLo<+h7slk;8eEj0WETy&4f3WXojF znRM0g=WmSA>d_MVCFxG!=75IxLB0S*$tkM9$(zNO$g4vvb2F{~f5qUc^>x%r(oz@lpUnZI7p(sAZQzYO+A#u53 zu|GzXg{S9`j9%bI6^(hKx?(06LXvcSgR-auMd2}?K@pVBYGxJ=lfH`}1JBNIUQyuu z?G#1u75Wn)@xm#7;53MECAS(DFR<|R9On%SIHBZd#^$5Qmq^jWD~*_~wZx(p7KO)9 zc;+;ai(5Sr<2Ir!JUz#0PXtC*%Fl>f_cTgSmUnxwq81c|$53$QH13XA7`G8+;psUL zi*tqrzk!uDl<#h3tdG8gP)xC+vM9Zb1c}m9JRuQ`C|1KEKSJ=&e{uqZEOeEM#LlJ= zGvl_qqD(>tEk$38q1h?MU3Jfh?&dxBO{DL~2pLiZO*K#J0?jaF1UMjb>4a^Tzy{rht(MKxRt zd8nCq9^$c5sAwl2Dt#c;z$iS1k_%#)?MV7yXq%DqZ>48aD1g<)&k>R9u_$FhoudX8 zQnAeUK%W#9j`D!CpL{DLb!aoysMX)G6#}A+_ZN$WNQB%~N5#3!L^{UkRQ@()C zA+AR<`P$muau$BhA&u#Um-<5lFo<9d{nVgu(HsxSn8YIy=Y#^AtF`9~*HPmbipIe6 zMNt8Nr7uXZzzHDuFC8L4LVDP;DMII z%fFE-Sd^Y40fV~8g(9e7CCH5t{#C@>kU%6I!a!p(1DB)m0uRYahz=HBYeGZ{kEocT zWekOZx{ z?McClr-#46!C_p*#agtOgX9!Ef`xaQ5TPiJ0w}4|93(p;{bSgm6nNv8P>aEwu>NvW zqXrl+oI{~O%ZHS|QtZ#55*b^9twHHOprAi{sb;=jG>UmpCn>&HMTIqB^T0G>K9{+F zggvp)<;7ibP}=L;ALh?GaFiZIp+N)$r*)u;nNmVN6@-J33YB}yB;&TOE;{(t&Yz_$ zsB=^RV>Kw(_s;EeR0#QD+C{eDj@lSKpNQVMw5Q@Cq-lzme@j(WLj?&DUxlyBD$Cw7UH9_W3F%pu2Q`q&BG)PE@UUJO@c901sJcJq( zGCIPGK`62CK~|b)L3YZ&=W9^B9e`8!!9$$ihuwbX zNg>CSL=Gd}3Am5}TqkK4XNe*&SD1O($ci+*K;5nCI4dJk^(HFZ=hagX`j2TTH15^Fl zVZlTQgi31OnPyppivPgdRI1`pOD3#~e4seUf-!*um+ks2sXS<p;vf#B!YB3Af-I$lc*rXiL2FAsA$EHB#J>{ z66w;1>nyeykzIx~4TS#xDu5IpB|!w2m~KC0L8hAzQgI_ngc+Qq#bgdC`Le6=C}$x# z2a2c?9OK9bLo!_w6I;lYVGE;#KBU@{0S}kk>{alPP)FfG5>%l=tF$a-mjy;!zF5SA zeG(nHL!yCX{%;VEQXce4>foV9ux$~D-3Yde^~VdBq5&yBN=k-`LdHy@KKR?$EHJ)B z2EjA3h8hDIPrIiRP zRL1s7=KHxE%Io58A<3jC&v%LTan>5dL^)@M?4?Y|Q5#VX^OwF5UI*bd$CnxH#`&M- z9s_rgS6+m69B%VnrL_}l75S5i$ddF%?kJ69yAhcQ#yRs8;q*`oMUql@S`n6+jo^7vuWr14`7WP8m^3rB(?L?}rvM7GIG^Nre%)V?sFd zhk1r6pxEkwd@E40^xl3`M`R=%UjA|>+D~2^hnW|AkqaTb?f7EKJQd>nF2ZlPr};pS z@fGaaq8x*sO8zn;fOHAT-W+z2(I$hwlP6djh*j|1GCnNjkJ@PfsQv^K?YyaUa1;%dHIuKcpm_}7Ny*b2|OjXF7-rE2LXxW z$%^zXAd|Gou-%0kH8i7iQxTY?e@3dn2kBip?ubE>(=GxtfuHHY+!K)?fS101(#Mht zVaClCT#ffMycNcaAh_y6#HLXXO1Q@@j{?f=^X7dA3#lk3j6sH)lmS&pX%~Npm5BRKM3beT}P7 zG|m|a-lr@uB3&yx9NLL!5ivl?l`vm{T|hDvhz@(Ag%YF2a-?&3OIMMbS$)4)%rVCP z%*^s&AP{R+wytB@VoA3ZeWvR$N@Laj?zQ~*G=6o+Lh@@_vt@1>CycF<0+N)GV`2W& zBY5`orS}l|B=&dt{|oraj;_Vnr(s{@n*l6k`|RO;J>YY4_#g!^R2okQkTsi*K^%%!=$Eh-;PucdS}D<_jJZ-nrg^VhhFaH`KkPlPQU z8X=ysYW5{aGk!2BMylcIQkDu|rnI`AF#%y!tFbu()J~;kI8UN-iS$G&A9mTH+{1|w zc_G4ZA&PF*N964Fu0l~VYpXJS8udz4IEK+mVhrl2jZ8)v=;4yNxa94~Vs&F6M1vzE z85T;f*_$SlOQbc9$yF4IF)UMJj;<+4?-JvT*xrkCj`_GzkVWwwgIlD&JLr*wI4Mk# zfYyZw-go@H9hayA!ZSW6dkUTo1Uuyb)5x%m&dJ=oEjrV3|Ex%1!aQEu;wOr6UU94m zZ8PBpFIuJyB7RInVH^N?@{xj8SNzD>P$bSQdl{il((pk7KJd>`$+TSr$3$ej;GY}3 zlndaMAYOw&h1-ycR$OR)8%0v65_62(6CJ4XcT5G5RLRP}$k-%tkckoogiyMbJNm`R z#Zd7`=uzBITxr^4CD|c6tX(OLe0vA7bIT`u8F-ZrUgHj8G!AaTQ-eDALV=8w#^%mQ z!~6NkcoOOe5gX}NX?*!Z*eF9}JtfAZ4E5PQ8D_atfIHByPpr=m$GoDu68Vd<@~1;E ze@0HJ?$gKLE3bq^&Pr5=dg6zuq0(f!Dp6ZLo0Wr$^q!FmA=Dpmwc}T~im(iO=!vRJ%cChq*h*!RB5Jm)(JuDM zD@`*QC2T0%j@~I(0;OKdpJe5!eJK`6CLPH%TjW?xI+~83&qN4wcD`a+>0qt-NnGch zKwgHySCBTvVDA{_q1CNsCb<&nFU+qbf7pUAv5x=YdLW)U%Ed5kUSeK-#%)u>0O!3w z%oy&dc9ljH7RA$KEg#@Y0iV<)vQUV#Fs$Ox1WRN{H0aApHKS2k8D0lrjgwcq21Q7; zp}xmvpP2=D*G8K_-@QLK;XvSdJm(Q8d$F&n*)tRaUkWv%GZD< zcdyN36Bubk4&isEyB=5W0~4b z9Y4J!^N3o+IS`W+i+~6syPKrrV>z0>^$my+>6ze#5KB`4sk=v*iV0Svl4Y?CS{R(o zIkSoiS!(IGWGM&AdAk`FXOM*9PoN)@+~5HbU!1~dR60lvOeJH$2rynVMxj4k1uBe5 z&=Z58$V39XCZvBlG)fPmWP_O7HriR1HLfD2yawPilG>YO+bD^V%i$>IL7k)u90ap? zK4gIn=YI$XX`-z&5tY*2ARBeSC_IM(l<{y3?P0_<%4a1NB3<>YxupPttz+mhi49); zr4;j^PVzb$bj365o04ua-qN7|5Df~)7nVp#$Y1p8UjdBrgCvL&@1kp5G6rIqNLWN< zgUTfOD@XdqC0=|r953*oPEvZWiim8xVt@lf6DbYbj5d~HGR%Q*hg3DC5@^Ps^24JWLuXEhR2PO(eT&mjT&gYaE>2HA;Q=$ z`r~m^NRe!w3ZuJZ#UIsMlw9DyTnxqwEU0soUaBI(_2as)iXn z`WHc?_#g@n3btfO@wOlIG3%VVL4L%1YY<}n%*CUMxB8({9@I(d;DN$m0VWOA_$Lw< zm4qmMN<*@csA$jL`Rm1__)Zia#V1Lq(Ei1yyPlC_SX+dJ#pEE7+sZ2=yONn(e6=RU z050YsISIj;(wj}F;K$3llV-r;!tnU=W@Wz@!$)Yilg(CF%SRnNUO0)ugUy>f`?Pzr zTwdUiH;ax5Vy#3jX%D|1jY1C8DT;4ZQIQ2zGp-4a{5F|+vzG~GV})(&mc?Yh((3rt za;sz(F>|nhDes}sX;WY_dx7zRv;krO9Wn8Jl#L8SMc96UiLfo+5;9mc^j`7Bb4V72 z9C==v41*|$ZpfMlyta)SjAj~9CD|z>1iFjWY0b0LKvs(KG13>ABeRh5-CTSUa{WjW z7|e0vu3xME3KRNz>p+5eDybQq6cXW^7U9uFW{?k&8=9vteq?^Nl^~HGs8Y7vJh9>s=r=f z;pZHDb#>riHkK5PlB7gMGa3N}GE)GBjniWlErQ9#;!y>U^|SmSKd4d>Pu_*Ou~PFx zU%{957+Iw$9R*uT>T)!SSxC=O2aOhQ4#gqUn{o8N!pS(gxVX&p6Hn&ixDX#p6*$Td z@&hWBU5wu%3c{)t6vgixHqBL!?*#Ae>M+@_S9th2iS$aBUhEGQs?M47&B$+=b;b~% zt@?#*L&NxQHZ@aEMB&55UrQZ4UO7pM2R2tvCF>;q9Zsd#r!pghoe@}RjB3LvzZ{Qp z9@3MP-)u@n1|`e37XCtSzQoCRTj)k0!cMz2|G7HI&i7IWkMfiJ;K9+UkE6RtGPFJR z=q4ceSnM<<-c8gT8U!-e`VLPTG2Ln$Nd$!)J<#9#cm z)PduLgQRH4Tyca0bBwx9oE1?Y+r+Mh+GED0QTll~9OXQuCn>(yl*mAkP29FgMyhX? zm?RzW^D)ba6kYDuVg(mpNR4x(G?-Sqjmndt0i{6?$-ro*V^-!(klw%kODX3eJxS@U zrZiBXlCEUv04eKj=@MaBsky~QXE_s_Z!Z5%>VQ#v5QPTj7Y-cpW3e(gx&)=so;|&P z^ioqnSFSeHVgt02EIZKq56Jv&-PQ6VWNm81mZvCuKlBTbKzn{jw~X?nm_7~Tm$rOP8p;#~i(-$+C>CJ@JbK^-|_z9v%}ZA2%pZL z6%RfHPIbs)3i1x8Eui8$^2!eswP7f-bBM|uBHG&&pXYN_q}g}dk;QBlhBa@Ma415V zYDQj-GB}>nT>I}PCS;Q^wm2b?8R{RH(I=~{NJoW4Ip;>=uQ@kQUiCKvsm6iS1A!-R z2g2Da*v99zXBWfaRcnWF);1=t3Co><&O-d)@<=lMScY^rJK4gvLC5lCGnUOv`LMF(JN#-uV?mcQ9 z+$|~|Ui=Ivsb$bmk_xIlN%pEnfJuQM`aBKCA9LQ(GW-i zwhfH~6l5WHkfw4TNoBkU^^9HXt?AoxWJ&iD3o&q)$WSKTORWF%g-{3ux*_z@Y2M%b z>u<%EQ~6!En{~?^vhzL=>zqC9H+tzRQbGqEY4%n42-5#Z>Z~EtDg~i**>7G1$utIV zFAU)3P8rESQJ`!?p-zGF7RtXiANFZ5C02~0x!!3pUGRi@mgkogiz-1o6rXQ7%qxYY zSX}62)k=qi-iP8v034KSow|*KfT{ZZQ10t#_cqqsTb7Abj?e#kFM zFw2ymhA)Wb8G8WRj~t3FPKj)Ch(VIjpkwR>IlK_Yl<(rh*SiZv=?lm7R&hqPC^o?< zWV`4xlDH2q|9{k-TaqL>Zm!>t+1W#Fpwj$)Sx~>ptYu>(*;)Si;E@$hkO(K7!C>~3 zq*g0Oi2{DYK@is{x{RKpikAja&YmKC26V6)l{m~X=mu3JIL-M>o{dhbi+HZqqC)X6 zh}`@#@}Kl4fvh5az0=52D$+$1ucvybKdxaJ0Lq+`<92448voZI8UJIH!$_SePZ|aq zVBofypmRpDOGokcht<>z2$R?_)!$|{SyTUeC{|RHT?Fs90-zA<)+-J zO=KgPv}7J_Y}Bk$jyCc>mcpZv31-r>$eTubd%Ikk<9L{$zt@w$A|swWF|ev?j*yr! z3TxGbsEaH0sm?Jscm>CuAI>481he>VMh!m&;z#7S=dj&9jpO|poksj({_||isi9OF zu#<`!C%Hly-_tRDK_WnSgW`PgoTi&e3h$}tANY|BAfTAmvqX*8ii}jC@s>Oi)a3yHNJT_*ca5bYn z#BJ!NC#WNX{0Lj;R_aPhJ3ksJ;y5*hdfL?YW0`p7_w+AM1x?I}BoO7r9n6U;w}JG6 zehj{F>R1)Yk2i&u{P=>E*5uB>9>HcGWM27rA2YE^!qYrm*(@d2j~kgEvr~7Jm5LHrCjS_UE#*(FSE7dw zZjw@_Zz4GaF?do5MU0wfkF;Vi(D$fBl|ntTot$&&PQ8tQtxeQ)XJV&2gYSdK~cG_e4NQGb7ay@>mIHXTM<&`I75W}(rjMEZgSH@OfE z`Q)IPMTTg|xvOp#XF9n!iTTvQ-)|zIzu!%Qb=nx z&-Yj}WuhsU9=b>HkSZ;CNFUDOW!T!+9&a*zB1m;s*c~q;y(CBzcE?|su#=9Lnc~;6 z`fe+t*cyQFk&eBN`kn=g-PqDM2J zT%}CAA^Ac=5a-nsD?FaWikU;9xs^g@F0AvO7p<}d!qnm-CniQ|y?$=kvGi@_=sjWLyp zurxs+Q3ayZ(3U2XZOX2CmVDbr0R@%S{Lj!I6n09a8BRN39GtCoc}66{Pe2|GtaFGQLk#aQecqx%B(wOAxBE*g zrU|{F(?1L2ClL79c}PKpatWPbYpEwZ`bTiQn83y0Ywlx$&DcJs#nNg*gzy)YqC~4# z3bI)CFwWGwX2LX{w8yJJ`>8!d>%$V?w`zsoNW$c_@N*D0lm7NuR4up0t6@OPLI7|k zXU7AXj3O`Qi88K)I1nS!hc{i*wp26mh5N{c{1*TO zlr%q&@o89GzAtGFJtpe2qvRh6B^gv0yk4_V0>Z1c0yPdLzM$P9Y;_xRI*%TJ;Lbi) z$q>RrZ>Lq-^?3EpBl>umQ|5Ubu7^1`UdV+Ttf=uoC^x;-h-FqGX#|b9ji$m^4c%y+ zQn4yV9!*6IHP;YU)R&CE_# zfagjZB!w1^>f`1=UcG8mpXb#pgi6y$r%}{I?q(N%62vO9S38N2kUf1-tD(~v;^l-o z$0#D|2V&Kv+F_C5)wqnTFxUy@4B0_jzR~a|&!_UdnT87qg`?Sz#1JoXHE{pp^_|ng z4}$0!8UE6Wzmose#(_$w5k8uoYDmGRlo8VINp&k>Lh7m?^{!M}ADi4MJ!dSfL~rDo zLJEyZStFBbrNZXgNhILM1bOaLV%}6(AAu{WwxlnLZ;FK_yo0phkKE4*o?M(15m9SK zqbkoO2_s4<9N&fk5%{mNnb2_v5_`giAiQUC`sbU4t`#tOFh@PkciW0jRgSnhwg!S;G%f!P z75or}Y6nC$@n0+pxOW(LTAcHr@GN`nC_R`664IY6KB0_VrmH}L)l|n*(gJ^U08`dL ze>^=?E>^k96QX z6H=lXOA5v>5+J7n_L>#KaW*T3**pmxeg?n~2w&qIh$o2oQ|FN6VZ6yaRnRH}&!dt} zQg@82!7`$o6n^nMMj`nTDqMW0cbY=V>l)E)&)2uYDE049Xg1@g^K?(+q&PeE8s_&R41P&rNl zD;1pQl__vw7=)>1Px_HlR?%!pH4YToVz{WXW~C>ZDAAc~BPdQ>ZbzNAfyq5g#4+5u z$2;g-nS*VJc&RV%&%h2w+(=`?p@+;+JXhwuB=nOgeh7ghr_P5M0T6zNx%1%OOwWTH zmwBoV2vs42Y%!FVanORt?KR63bT-JaErcmvI|JbI1~FM86k>B_=7NXEgMb$^S1Y?FI^NLVW{o#9p&Vv+ zO1IN%WAs!bArv+g+$uqTN#$^r{A~$8hhZJjIn6pJp$N$f5|4>OnDa=J0FK{PR3nGw z?W`vblQ6+moCpUpOr78%xjf1c=bR!Q*YtV2+_UCS{YlET%1fW#yzg_WC~^OAc5_7_ zql&dk5Y#%6ngw(O!@?3o2{B7RF|0vkc9P86WPU#ZZ6egPuQ0*kuiwLdF-C;C1mEoD z7ct~hAAO5RO&8@pkr&+LRPlo-N=6~K7&j|?wWIJ63S3T-Ajd579D*nv9Em8hj0puKqs!&Ykegg2=XYP)SaWI*6Qtgl!WGcTvT_lY z{6PepiT|R-DL~N2N~nO399a%MR88fO>GRO_uY_#y;n)ZuMSl`OWJBVfy^;x-gu8nG zJb8)zJ$Lm|?C|oTdI}!Zi`^(LdP(DM&DoDZs4C?OC9if2ijcW`*|f$v@Wh!3hIh$4 zB~id&#MeqMCUp%AGNdm`oZNY(lRlGBk?^4>`lUXYZ%6j2I6|aeUsR^OD1IUS39A1f zfYoHLauOaQ#cm7*3+EVDh8oJtBpmii=|9P3dZO?Er;WjfWSOPb^)iG_VN$q3;g9?3 z-TQFrp`?Jr_uZXm*=s5{-|IO=Jl+l;0I`nj)s8|FV)p9sLQc-qGAwxn!~Hwx*sU7Kt?T_PSFJlw-Vx~+)-oI?M5a=>8)~soF?Mid5>Jb@ySd%$@3tr~U|$?C|1?7>gnla&xnC=La$Ti1?p73~`jgo7wx^(?zco zvOEe9alZa+(PMKIo*9;c;#J~@OhjUY>zb=Ttk>5m#os(u20jd)?wB!NFS00V#YK?v zxr-)}Qw@1KgDJ_r5t-`8TJ-o_j-OH1$}3nluaKjTbTMtuW8((1 zoEQ?%lAnQ(;xJ`W98Q-4%_$@qUwU=HAz(zatXw?4e-6TS;@>?9iC@S)a~=i5j!YsB z^wd-(2B3-ps=`h*6nnVr8>?)k*@<>dwk~H>P)r{+g0eq_jVf~gJv4Ayj=8Zk7OWE! z>}*%!sXg+nsnnvO+4{dgumn0od`y(eA|`q z9A2*Z$-}2JdJJfg@PkU}EizO|f;KeWQS-po9-PGdjvlELWbn;#zo+!j35Vg_ z8lCcz%FU5FKMP|W@oODMNat{}2(~z;A?G2~&b4$yN6!>$4M{GuOo~YkGESHQ*!j#J zMP3!kliqB1f9j!|o5I*({MM_6Vsik(r*86SjJUbeexKJv^)zN^e}pN`!?HOvR72Y5 z991?viWybMW2mumUo0os7Tzc`1v^q72E#8mQeC) zr=SQ8-)a8vIOEn!e?m{ffq&M>vo-IylY>3!D;M!VhZHl_c|NmRf+!*n&U}@jT*+hw zDGy^54wbT!5a(ydQZx#7D4a}}h8hbg-g(@fM{%?ggxoyeORQ-7!_9!fr_!8)UeZ3y zEbER6^CK*k(?W@ReGbPDVeqLFiJzU$&GIAZ<6cHiQVfWeNe*R}8U8B+mPjm9aLPUa zCh`+3p(vJ4O?*V2CfAL681LuW**mLF1J!wN_D4V{+g)d>mFG!}649cm4kIlO{m9sCrCzVG-2+pp#S=xL;SoHK;DF$-(r$;S~Lq^1nGlEh>>iMPQ^}73MpsGez*Gj8^^xQuNaWNE;CkaUu z-ZX?Gqi}V)5GJ?U$CWa1uyQez>E|G%Z>N>~6^_C@Ob2*jr7IPsvR?pW6}B}p5mUOJ zD92h@9mRFr=ck7JW`7Rz70AocemtRa-x)iqAV|MqQJDl1r%RGR0NGq96uMIh3k>~Tntg9oN#6q7>@@zC(waPp*!opJwMRHz}n$9R93Dh$2k+(yRA z(TPld2%F5PK^U`;j%x<24I@B@i59}Kk5!$OY#m;YrL-&jry3v*R1& zDe7D?_B4r-iT>zxzK?0wAH^{&33<9WK}pC}4aRE(svO9zf`}Z5@j!;7Ia$wbSZT|XHWgHg zm@YxytVwkDF@;t<@k(T%S(Vhwn_X2u17UON@0>;5yotP$*|jZW3t9feTja2YGAu#q4S_2xi#AM zXFOIGw|L52S+nP1ru? zd^FkPQ8EmI!UkGQGf`_wXsD#c4znn-+h`RK5=Z-sR6vZ>ANVYwW`$xjo0nq!`xt_s z5Wm7n5C^u8qD1`|gT$KdQPv{&1Irgh{Rk8Cf|ZS-{0onD6or51Kb8xad)l=;nMM+^ zebnBNJfWRga=0@6kS^qoceZP;f_RjqZU}vkG8Tdu(IGf7Z<%+@<672J#A>`8&cXBJ z_0lL-zmFkUL-Jau;Gv_`?{Nxw^QS6hWG)i=7uJKYG-soFMv@)!wfiPmB~Lgu^JK(%BkB9(iX`09|tf^BKsWdtMJ(k8jAXbU4KC=C|;(7zW>P zvFx?ZA*92s81q2y>mUlJzF-E>P`D6UK1HNmcWZmPpY-VwBm*Bmk+);S%;}v6s+43%zQx zzkdu43dQ$Fxb6;LpTM6~1fNUY*gbowAE9B&*J_TU~(cf}Df>ZF(x&Hx+MdFppg1d>zKw0jJ^_ymzm#9m?%19zkVvbTAffFVT z>gXRMTOBvB%vxr*BYpCcUB-4nMSN;>o9e-fN+~5bee%>RvU5jFr@Xu*Ld_ZgUckh} zv4Y71By|8o8e{}x5?389`TO^C0ETRrieBds6cwtM;XbzRwFS$}-MdQwgkXOD>;a5ZON@t+S)LQ@= z#aXB~lB-um6R=#e!-NzBj}mE#qsKMZza++`M&y8C5JTgnrC@sGKDhjub|mQ!>TJb# z%-!8yPF~Q-E1!x})x@uz?CQoeB3A(?GGIm`u<9I=Ag(*^Liry9-zeo1;iU-0D~hBzVd+7ACHegWTQf;-Ho=KvgJjQcwWT@+uTM*qn9 zhCu|Lt^8~t*-FTdZhlfG1OQaLi$ z@ne;FK2RXMN3QS4mppt9axceZ8)B6g{T)yBl~p|+R$iRKk3!f|ex*KTN0E|npcg*d zxL1$DtMJ{+K>QsqjoAk>M~g>C#|3=My1ab$66od9htYN9$sY7Xr=^2p35WI7<* z1)3?K=OF({=<&^XSbp)%oZnuBQ;0}V0csxP3sxKos1h79&XT?K$WQ3rGg|>2Colgj0N=9N_l2);5GjeA?&%1Ntc8`3Ur_L}u=#^7 zO?r{Aeat>M7KG)Wy(;KJ*XI$UTo}$Og)~%*9-D4o9QPACiI~Kd7RNg{sGEuHXX5v1 z5)0Y#gv2|3Ul^dO310=dgRs{-ClHYNlQ)PDQt6%V#fybYBK7<%$#syVpd5=j0|IRw z>5l9O!QYZzr8xQ#AAI|_zI_RWZW!PjE^9XUHHgAuO#CZ`qDfSP;{Omk~m{}pj0C;b0|~iA|@-) zn>!o_pIf!ZOTfxK75+i^0(bwNS3@9rjZ>)j^3W!Z)rZuVhL{V^)eEZJz@$@LBG<3NNLXA{9e=QUyG8v z!U^O^ToegAbdNl&?k-B3i;fx>a=fS>J&ts?F;@W7w_YVWIC5@BnZkD6mysU2g70Wc zC(J`X@gwNPa6jp8r`wHsXJ36ZtT@P|jQl8g4vszQSK|y^G+r>{!7!{4A}cHLKAb%% z1fbHM2M0ObkvuOJk5Mq_D#PO`bys!^4c$@UXvBFjAUa9mSpd9|$bT2veH$HAmGC7s22UtT%E8%XE zxeFM1v!jq8R57NuWK@h4Fex`0j;OVgX31lrWzWci6^)e{sucgp`prniSXU^Q^i#zM z+K@{@zu2ltMNKEggOFtJ1A%OshdOe>ysHuwi>Wx7i8Sn>(h9Gpf@;kuM%^Tn1B~lZ zh3Lp8arFho0`%2NyKcsUftTF5jIhM=uovzZn#TU$j%BF>V|ZoqMxtJfC|Bx*>7gir zc~s2g5TgYpEEp9VBuW^$)^l^q;?+dGQVZrIqw)IYrV(B~4x=w16|@rUJ~AdZIlLle z;w;5}DU~CkkWnzV;n7EGeMwAQqsEv`1eAXsjc?emc_5`BX^dWm2Br!Y+pjl_Lo>J< z%2^3?lS~dTbV-HUWXLT)3j<2b5|Bj1l>uX79+w!i@JMDcf1dD&Tx>@P5$(9l!jrI_ zD2B=7c|Sr%HZM@yf(yn7tK)uTFOuYbv8h;9F3(iIB0DJDxX75?v_s6rV`MZ8Q7ZxO zB4cvnK`iyRbbdknvN9c`o{2hkX0Nb0MxL(@9UEABguNQMDUT(nXzEd3@JGdP5o0gk zz}-WoSi|bzVEK>qRK6=SGo&5szjtPI+Z^B3<9>OlMi)Thv9RP`_%yRY%TBpnJ#^ zsh8#C7y0-uk5#jnydhsa6%vOc(hS1^b2$_yH@WYz8elFK^O9D=-9^UaCI?s)kzn*C z#!5xOn6u=uUyctlVlchf7W%Pea~dN&89&$CF)*zc#x3ijV)D`mEEj`WG0Uy=)8oal zaZxdO$%AF6kqUo3lxnuGnBZZ|@lCi*KjcAFcVv?7jEEdf^90!#h`ldpiFE!&7A+c6jh(vl3 zKN|<88ar6AsI)^XOoDw>Osy4(FG5<+!HP-50hS7^O3NtfrUI*!b{s#<*eI$ey3& zoF*kES|7BBN~Bs&!&L_=4}WlSTRXI*>ei*TqqE-UlB$LyzNS!1;5xHMScp`gAvH~#l z?F+*SzRaZ-)OaHJ$V3|E_3qW@_Xb|YdA{c-c|_dn!0w=8qMlbTmA_^uLekpdsk^sI zMHlu~>X@kJFu5Mh>U|?V8|g(HTJ`Z_5orXL)fez7F)KlClF7k^=bpG;{OoSr%kr8g zRw=N~XlE`9bJ1kJc=mQQJh(~M6Q&PP!}Us>iIm6>gXQ2bQhr0s#D6P7+(X6WC8t{P z706~=uEogm=So#E&rt|RlF)4Fh+E0@fg1N&8mxj$95{;vO<#^aW=t}z@MneaM?+a$07( z^h(Ekt&eGjl$s(oHcB}KV=d^)$h-Mw>vsAQjlQPz3F+d+qS6Yiups8qp#CW-wN9k3 zcHev3q>=**yA=8Kh0(9_a+vTNGBQLM)7y3XJ~A4x8yTW7`dl3T^6?mb0O^ya7VeJl zm&r>`!2nq$)Q%!TDQk5US(E=IX?U6p<=Pp3@Zqt<*xvO_^GQNrlSV(NIZuBRglMzEOxIiOWbW;;Yfgi%F#! zTJ7YlgSkm1hnA&CmgjmMOdS|J!tKd^CU$}BWU(J=kqqZDS$x_Yp;9_W<2DhKm3C-V zk+Tlu9xBn7=&c-&y>~P#b@OwoMcAgaD<{wjBb;Fj#xb?xHkF@6D|!DH$yo<;7Znq9 z$ESFD^u6qqX7r3u3S2Il@H6>rnXVeP13YGOQMeR$ahN;?it$G8tD@p!rbNH^^eW+1 z+~j*-&`PMAWE={n@{EPiu1Ytf(Jg#`c(3o0F4V3nU^NueR0^e{VLIyQ?lKTJspM3v z&ZkJMt7pU||HC3o=7S$BE_7#8Ur$HbN>|428A@oC*hA)iiM@-PNV^^{gJyuG751N# z)KraA!8kq_Hzt`JU|4%2bb8lxio+tb(hz+*LC9S&)e5hcg4RLZ zq>_g#z5eWL@+w9zNzl~K!7;qq*!WHa^!yyX%tUJHb-Jnm)>cxj8dmtaI0&9ouq3#3 zjOEpC7*Y4E{csl6t{N(9~-A$e7%;11uR2QYL9K^Ta6MH6?wj zm;3lk+#P_Of#-qX)RL4&_~uEJM@ycP+G8ntO~Pf#qT_D`p+YT~th7 zZi4kFZdRJ*ak;Dnw(s^n4Huy0}WFyUwpTjO8O?|ixw@Jl;Rg(A# z6WLfD&(Ksdiowv-N0(@vx=rSyeqk892njD^TddsFG#YlZ#LcbjyL_~$zaLdph+OgB+ zMHZD-Xel?~Xm>KI!z~6CSS~RuVQ!Mi!=>**+2a~DYq;`2uDDuX6aI=e|zna zkBrGpJG_#Syk(Nc+Y61Tvnl9PP00ee4o|DsckDU`m*r>0`t?1h_d4L^ns};NOoE`q zUaaMqGLWfT37xHszu`-d(~L=(IrT!9 zPQc!WK7SaMxix-njJHQ%Bs#U`%F7fbU63M|OzZA3v$;2D=k#cK# z7rS^~Mdpz{Kc(Y6Ihm1bq^U6_B>#nl%f(Q%IwcuhOchjSwhy& z>(qCL92zTzyIeKfByHcfBpNf|Ht2wlA%0h7f%Yxc%WQ#KV!&DDWFv42oi67a_d=QaRQK|qd6}meJ0Kn7%#9=5DB#c)3 zPr>9JVM1+7>9AHufkIf~(|Ym-6W6lf-zr&NAF!q~Fa5eM4D}qk`Dm$O&0xpgues~# zbDzfs-%d45ie-5X3ASzcnrZA{4!}Ci`!q=G_VZd2igJgC*OJ^iTuml2uhh~=I$`UX z0JC=;n<-l$Qp|*wB?Pt_Bosss^WHPHZ62qUF%J}>@qb1?H^{QzlSuV-^mXyJ|Z`;01D~{44#aW-mBsrKHTwF@y zKVVHp9}!gcku|o#|8 z3+7(px<{(UY~U8(O$|iek>wJS8((p?7fve74K6OF@gJ}zqmRgaas3k!DHP=jj~mxt zO+>ULH<-AR#eKFRk&Q(djM>`6Wyf#Fjx>MS@Xb`gqg<3LKz`t1GslwndAO3qf3%tk z@vE7VsC}hA>Ih=#yZ7}Iy51L43y@+_E)i)TAVEVSQQSOSN>UUafti62XWwn}FwB$0 zLb@++ptGiq)Pba277cAo#~<=n=z4{b}4MneZ5-$nmV8r^V_Uujy`QrHi z+hHZI>J0mhGOL;348!h-o6SU237vh-)6RW7b=}JB4#KWc`e;+?B5OF-aqSlJ`2&e| zexo1fFNU-3eNRAP-g@|miwvU_l#`Jt`}iQz46Al>)&Sh1k%KDIps~kSS9*qB<40F2 z^}A18%MUt*v0AOMDNDT=zyHw+t;naa81%?l`pD9kXP%19OCBs`_;KUJV5!Tq?{ZV) z`fZ?sFt9ZYy~NhArez~7G|N^FX|Bi_EOsQ2XQRxX#5Bp1|RB8!Cvj2)}H`Xh_azm;LtP)y6%JoQSZW;p=2XymjiQ6aV=M(7Pv`$b}Nng?nU zhMoK>+lWVevTHLI*F+qRBI?O8P3y0hH~3Tfqq-vW?hba;`*!a*VAGwtOXVdyKMQ0X z@l`>_TgTy`WS>V4#^}0y>_Su1PS}Z^zd_?@l@WG}?UQx$ouxyhi&xxs zx%u*UXX*q)V;lBWOe0l~lia`Nt@qR_CnF}2W=O?Pnomh--FgZs2O|~@2T;l`mHGM$ zGr#g>OR+vAwhA)kWpYonxM_WKY<`*{R!h`M$UDfCT6krl2wh>JLOVtmB8#Z5t=93L zbi9yk76aXIhLCODxKGFCC#PePQGWxnI4ElcQ$4a)g5E*K<|dC=@>UXa7?kIGo|WkX z<^Ii>J_wm9V7oL=uns!cksj&)iEqHf*;H^TRksZ@AA%U+pwr5^^A^jovYfA~bqE%NKG%)_#*=tU)G8 zvetuk*Tq;__t#VLgb4ZajSA_xr|pqULqAf3L;3u=?gQx?`hZi5m!y(>R4i87fmKJ& zDv*1KRJl&ktmrA=Qmu7otL#2(%R~v!u+5?sZ1wD>;m`>>`BukE5GqR068-ei_+hMS zNLdGO50#RyP)EH=qxampp}`uC=zSb{x7Z8pl`GC+>O(-p#fV8HXRhi1)lSG7Xj?RL zIAN8-(CXL?@|0AeRcZxuj=%T%vN#OX!Sx_D)!{A?i;-4PRgtp%q7R_*5itRGfR%(O z;unC#DEL_}NRhm~aro|)6{d)fI?&;9tz1M3^{N(BadelzZ^{4ss^9!Z@+zsW)~YyG1fbH9ILH)hB!){tY37`=`GF|BdX#Y_+V_&jKx?A< zoTG*_G^`Ra^OVBsGM^V@UNV$ZziOa`g+4Esv~9MAEDY|xg?*lo%}x%m=qBFRqZvtE z#oWKbdiLT~HwG84?r0pCVRPHe9lxQpY+=*$OYI1-$LxmY!Y1_NkmXr)%329~2bq@) zTA{Rd!CEXLC;d8?p53q~r3enK--YPZkhT99-Gg(-(7qWvB& zY*iXS)3ZsV+DB3gi!w1@LtzhH{4^G!6gN0{Eym%NxlUBmh)kzZdh#CuMWGm1Sfo8( zpGHCp;r#orMBpP&W=@(yghcpz_4G_@u$oDwqOEuvigGC~v4{qVNE+y~P$Y7AIk*(V zeWaR-J{5>)--6+g{}EsmigASnrxH)9`7{(-3NHg!Lbwk!Ad(K8aqCt!bAeM8R8Srx zI$eiRM~q7<(bp=|LO-e(>2Y{DxD>;ErkaXA7WZvbOEGGJQ7Fb07S7APA`)5%=ih%N zg8Mi_B07abIJogM#L>xbexEgDxS|ndvSiPJ$wxJXh!4Wcz?Bf*!_+jcBe$OpSVT!h zb1tiS5;cUlq~Q$}R8)!RD7+k8ig7wv2XFjHY-K;6tdsavh{*7l`cjK z(@#~9YA0n4xGfqvl@k3?<)rIlt6DfRj|Ll}?&rw2v0H~NTlmMwH~ksJ7FGtez06%d zRn5xoX?yRhV~8iv#fh{9@ij}wbX4y@QEdokZRr&q4qz~V0u z5*?TAq9gsS6s)pi)EW_OYJ?&ZH?Mgw-)2a)lClQe7L6QG7$N26uUuxjJd`bh^!6}M zccOQdxwvabk?}lv8u`Pl?prmA+Ehor|8xwHuq^dc)sFIqJU7Mm{&NsElKiE^pdrk1 z^ODY8J$wwa)Xz-@(Bw>;YY?UNojm0Rbr+pr$b(MJ8OSbiAt*irdwt;o4(>Qgs+~QNfpP3;EiRin`WX2|vQ^XGf z82Jbv6TH?byrh%EFtmRxFI^|u>=>EJZk>PW<)!q}ViT{Im!`F*R?X~7#zPH)Nmb5l zUF)_A1yp?e*kpbVMcn6RvR6BcmxS^-s^HwPbVti}_~sbtsbC;0@%CYyxK&vpKhIdi zT{>xB&J>QST#dKGh)tyOY{J-56)?|aIb=hxW0kI@*0vgHZ4A%#1w%HOpG1*t-#$!C zwq1r*vM$Vb9#`f&?+eK7!{QmJ-1;!yP)C*4Da=Ul1;>ffG@BqMH~16p(oGY#1&gO# zj1HrldgFhu?4YVy9`7cxDvsmRRm#xB%>NWAHf>BV6P0zc0IQ&tqa!I%oD&g26 zO3h(K_0VqH;&L5*luGT}2T`mif1UHlQzC7qle%C!(wG7Y5*K%+sMG7gK|B^Y6R%wKXCy2Qt_E(Y61 z1-kprt=N}{IqC}qg|=-ANbFpE45vas^VeK!eGjaAkS1iR5(4x*hqMLeRBRJiU)}f8JH-Adu9!Wusu61lDZDxJ~A#AxrP0B3YAL zwhVa}85?NdJ|Y$)d7zZ@j{YYGi`}GB?>27>g}U9&Q;=j+Pr7Ny z8!rLqqgbyT*EUC*&oxAK!2H;=vGI9LPYh^VHztB%H6 z1Me=IbRrg_s)`R!MVE`pJIeSm7{ieOScXF3!;Mbw9fpHanJz{*FRSQ96&0=%Lp=CA zcl^MfEY?If1a;ooYI9$y&&$&fY-4(}BdeO%E>)Vg{2>{A=e?+6vdQEO;|F0({D=<< zU+*+t*39ORMEg{w(eV_KXHJlBkS9wnB%C%FM!8EUqBGG`Gp#;?ox)5(pn5)LiUUx! z0Ba^`9oTIu4h0K6zn4P>QN-(bT{`2!7*b?C(4UI&&ipJzL>0(Nv~K?Dq_c;A)Nxk%ZuozEdjK0MrD%lKh>(CrfxjsW8858dO*ssgh?E|6V zY*Zz-9@xI5e8^+Dqoxt=Oe^h~ZQSCn3p=+hZptoEujwy?Ff?u-6usI(yd;#<#K?U! zm$>G_DORwTuObZg8kKL!7i$DU3wj)qU}{RkG#yQVvf{KUf0ji#Ew~YMz7MvKh{Z?_ zC%#K{V-B)bRTvz3mdsdj?wOTB+v^K+=-03DXf)j>85TE;1YGD3Vt&%r_0urV{5Kbs z=5QNFwF{B3D7^?hJ=w!N$mpe&aXQO9^?SDp)pe$OJH736n#{{etW`x5GD^{EC}$PO zO(G7}Qg6+Em*Q9z-<&#W$G>vL2#|e|%3=yDQLK#e_Nzi z(4c3q8zr5#>~vTQk%57ReK)PcfZIYyCiXbzNh_z1h{;Jaq^d|+1MWPH==*!1odYVm z{t7h;D)YWmyxT2nPm8>*QznB?yH4EpYwtJdNF8<@zV1OKQ7Tg(Zc{ONX$4jtG3!9? zp<+Uw2P=v~V3(B7KMsSKuS;9itzX?F;}#yb;P@yEA;Y?_(>5(k8sV8VN+vxz&?UOV zAcR$#X0Fg~SZA4yBQqhm3u(KZx1BC%mZm0lFTPK`WK3>aAy!GyYQQ@QMOyZN-ho-@ zSaFu(Y=sV3hf|abfDIkp2h&F8s2{NS=mi#xjDC+DVwg?Wb;sWGSjlF+d0MF8p~>R( zPX1OgVExyCMclcgxf-`sdO;&ON6d1--_k3I7!l}5Pq)0FZ) z8IzklScV=Yx_0fyR{^UhP!Yz&uv!GgHm2yH+thsQi}+VLsC=xLR2m@FQbto7PNnj( zViL&%6<&NYm`_}*(33~Ma(Cey`~^bNX)%jGHjN$gnDC^CkTSYzqX8MU@7b)F*C`(- zg(_78sdhq|>TnlslSoddc=stg^$3M3JM{=}U0bS&a`cJN#Ef@7$escsn`FcKnKb0W zgp9Ooe@mWlY=s~!A+bYVg9H~2BJ954VK`8x2pg8i9=|3%oJ2b1dk0oSs+E+HJ{00@ zQpssm6tu!B$dgaK0=r`#%cWNJt`9I`Fm^(FDH95UVPdMJ+u#`sTdXW&6bSQi5~-Ef zVLuD=XlepEsqFckZa3_+rOz*%X_~l|HQY^Q<3NOJ&M6U#`hJr?FQHZ%o#i3m7 zKE#N_#AYRl*&_d{+$OXFtD&5AAUCNv&Dw|^iTG9MO90fR7_r)q2=MwRDFe39n3vcOkQ$m88um$vAen@S`(L3 zNp6#1ISpykG9P&v$6Z)znor2zxFnikRYl4=fP1JEeTMu}=&3*A3!y*ns+Hk1W50o) zuq=Sk;lU2I6@drCO!h4JG6hMNK_W~#G{%Sb%OKCM(>IjEStLCZYQ({@=ZdjCCO=y^)SN zssp%(ipfh3EI~MQudrGLdId0{xp}l0-ZnQ-iK6f+;HE|dfO}~CEKoH>tOK@#iV1g4 zr!2>mpJ_!Kvwl2H5Da)*Ct8`g4k@KNu0o2bW-9mA{n$2{kCi5^6i2B;coQ1UWJWKA zhm|75s)tti4LM>S`IN<7|^22Z? zuY49Qg)w0(VUY@22Xqe=6ZD*R)yWzX6PDR9JvGHNoX$r^nnro*Nf{x@L^2s_WTbau zw0!NtODoV)ByLEh{i;7_-Z22P`WEgU>eR?=VzHOBW$7 zI&jc0qvzDP3-b-tu}-9Sp@$QbN;9llNoi`t`4w_%c}`3kIiz01+Y8hx?>LwY213%G z5vt}RWRa+*sSp8`@J~y$D6M(z2S|P3S?(WKrpsGFp%1&`QthM5aheQyI*b zuXaxCyI(`w!PQRCI-r|Wa&RR^N?M>*2*NWni~6iBXcHWciAYSIIr{|v%*=|IjC*&a z(2EwZaiJ2vlhKneW@bfpCmy}!C1Y~a46;g+Rzu!N$i)6OXb&CHn#N?bT+LQ`vOE=; zDLRjms^-neD>4nq8*28Buz@{%Pw^X~R!!bWYYXA`P$^Zkq-+@@XH?E#UYA7HlfrK! zC=nTu_~8hZxU=8rm5t;yx?DZ1m{c4JRtc?Ua#n%dBytxl=HyEyrBW?MMCMFbzcC$N z8od}-w9PA9qnK1gBgROWVxDONTaEC1Y{8tfnj@u%?@1pkCXrTPC9R0&Olp(G(@gv1 zjFh4fa+699Eh{Ep;N(+yI?l}edqfEL{m54*UG))%iP0LB(PH-B;hj?praJs1$P=sO zV#OrV4y@2|IGC=ziDLXulC ztQYi5LW)OuEHW9A(YEqz?3p!V4a7}ufAm5PZ7bPo;bJ6Gt@1%gB~Ue!GE#^lxJ?>& zlt(K#pH@U)Dcm54#Z(+aDaUiAq@3gPgy3|34c&9G`FW*x*$DtWM~_*q8A zn!rOGVK+GpZZZDz3Z2+KUSid9d0Lgc(w1`8!Q7;h*R3;B`p0O+=G|wtk}r|Xv0-77 z5j{1`mgAKfYeihIWAr5&te8~Vq18-IQ!CEz*|=_uad{?@99XE4ieSmWQht`$GVT=F zrS$jz{QIwe{ra!J|NignW+mfMW^#Cn$@?%`I&^=Ml7ocFMLV1-h$wSj!%bL4P&C@4ib?*J$%`_`c#IJ zgS+Sq%VNN$i06mvJ1vuw98Qrb64gl+EMuI~VcBLBIU{73jB&RD_ok2mQprGhlNFOn z3#eKOSp{#CNDe79NJSB3C`J@*@C*>~wckV>ChnBc3dEfp7uQD`k-P$ZR7_r)p;cUo zettjBmM2rr+f+=5y2Fo)P-j{{R$yuki-p9*NqSaE)I+&YOa=L{goex0< zo=bmNV$1T4tvn}^F(=;lMDP*4@q|-UJiHVsS3S5q&t{Xw+k%>Up{RIxF{#|uuHt}u zGHlrjmPafm5#aJ*`H5CKYuVx?Iyhg%J=U#au-eI41#y!|PP62fq9G44ehz<2ivObF z1;&)*=rof~dWfWb7q{DEeN;?d+JRL^&MJ`SiA0L^aFcUbp+zdPP_}``s!Na@%FQ;h zv@W4&LwQm?2TN;>GGS88sbk_;M$R;cL}I1#rg0Lb!i<$@RfJWV)HBag=|duAf#+|iw?W0^r9`g^!Kx!^1<11`>ZsLr zgs`+)Ev&%F7^~iq`ihP+c8i?NWRaM00?kRqnqk#WPOTGVh#NET@S=#3eF5ShPdwBNgFK*#vuAcda>f5Er2p${XQSoei3tZZMMzxd}w z+t@asSXi`l%+VC-6l~;a7+kbNDbJo(c)n8o@zp`vaablF4xoZ4GIhX{jC>C~`kho; zPMOe?d1bmx&#t+CpBAd)moK(^b^F@SR1#0U6nI^06aOhXGb~#_4of$52aQQmq8(Mq ztVfih)@U!HWuhEJ%JiuUOb+h!F~%J7jzx>MRA5i#9M37QlRNy(rSc zqKW}++9t6p%d#->Z_VFz5?R>kieLsa4wMjBC^2Kb1=J>9I!w*Y8z&EqGTT()i>oAI z1)v=yv@(6$NQW{7_ZnW$dQ>a~cDEFvP@YnG)mtjTA|cRNaKSETvQhq28kR>{7M*_ znhs40oN&}&&R%j7=pSdiot20GM*kIxz__cYUBWgcijepN5ZSO|1IJ6KW$dBR@zUg7 zCnJtn%_GWWNO*$eqM&uj`Nh>j>3spK;Orn`0G(4M9VVa_wBVT!L-sibg?S8o_=5zKApiLAhcg#BO_nm{ z*(lPbS|~M=(a-~>Ne(s)68BVzrOHP~X{bx<$^yYmQ45B1rZsiEQV-n4ht?+NO{cZ#4WL>{X(+>~PaK$o4}(NbpD@;ETuF8z9dRYC zPrEFq&v{N|>?sKy&X=hQiim>`lSnh5T1jarg96IIhe6^dOcY2RC3c}gZIYnPD3tH2 zGWa`1OfGZlzSOESc zm5RC#boQuBpmQ*3gVa-ZB&rnJt!*Qyn7{J6iCXw+=|yqy!w6{)D`sk>nY`&j#k7<}aQDKt&8c1D|~0SC%aQP3UphdXXJ zV%fy&a_^3f2e3PNuC`&egb6sc34knhl|gqs!eHMk2* zc==;r5pnQQs7-Znazs{4{_YA{0c?Xr{+kOgwj%+o&AKQ5o0`s<;O0OwcxOltB`R{& z8O)s!@t^ja3a!tikf|hK{WTVIIsCcYZRuh|pOyQjtAkP_87n|-kjSf2_>hy?c(L0= z@mtPq!W)njEeT+J?uBJXzj)h8{pLN&w?_+IH$b%G`BqpyNam&CYvE$KE8(u>b zmM;qQx{(@`ZlK0xLYq>%WQZ6jlZ!;5GF8FJ#o)D!HK6v;Fu2GmQ)GsY3r<-p=l!OQ zx7EXBFc+vnTn@}zPA>GBe9uhNiWC_~Z@JXr^3X82Xa$kJTFL}`ALcxTqK^$d3N281 zR3Ivsv)=T^8J?O%1wMUGJmA>RONK3hQ`&v9-e2?dQ4+c@yK=zpRFx2FPcr;?I3xx}g@x&W1d z)XSf)Uup3rh`zGy?heP8m&#$H$-kwu4ILT{O5Z#@nykE2` zED`r~lBb1pRP@r-#MT#vq|;6=ec{(}BA*|xwIRLjl32RMhe@OvP^Hg=Q>U7tU7$}W zPgpqjC@>U_3T&6B6cc691w2-Px53|u5)`5$B}j}xS+5ZvNDQ5e4XsbkPizyYiU=H!d@W;oTN#n;q!Pi9@IyS6#kJ+;>qK?45c53Eh2S-IiJ#t*fr|B58(GBO%|%+MtjJDR~2T}5``vwW5Kza<}`QvoE^!EWm$-0j|+ji zZlRw0*KfuX%6KmiT6W@_I;T>&NH(?T=xNT*a1%uK4peN;49 z-@LSe3;#~9JS~#566jts`YZI8)hqQXn^WM*;p+2@>T+Eb(2;~j7C0G#<#ELB>QpgC zdG7KO>KOO^oK$hP-GNea^WDGr2#PqG?{lj3emcU%hIv|zaPlOCO#aS0s}sBQim0K^(kS@s_?5tMVir#nEuc6u8!X@q z9od7tfKfp{-`u@{zru%ZTd+u&d^mKe3QT$Sj5AbPPzUL#7Q~nA$%CYBx?>hk_{7_M z4J@T+s9=hFDhP+hlb>@)J4h7jQWcmS?Byh^g0zE(!AD+~Ld`j<#C34MQzVW-sDRQk zo{J8snzG1Bh zY5v&7he@OrPOXHj0JcFQhfSL7(h8||VjAiYAm!r2Ad$mK z$Dhi&gT*$`ff+1lA#uJ33tEgh;fWK(=Nr`y8f~41fC{5Lg(79D0n+>ORe{+@#K1YP zNXDBkdHUs_d1bM(QwtEV*qK&T9E=nyQyrk1Nogp90?NaPK_jP7Q7HxnMs|(`*iGyb z%a2@*>O}7QnQ6UCiFHegW-KB z*i#z4`J4+l^PSWNcPB~`IM#Ee&~b z2|uNpV2y<{xKqlc^`LB7S9Deu8-MVm!{DM7Ml}Q^wiEWt zTCsIQLWQ$~gb8#GCap=wtZ`lU>l!s)-r9W%iFv9}iS8hwadL*8>flsC#41p`h!`rF z)28HR+nJ}MufT3z`fT$ZM&a0EzY%CB4?7TY?7QiUwTtY3+UZo`-_re2TR-bftdLn2 zB9~0$p$nhCS;$bJxyu5^X<(Q6Y;0WI=c$a02JD-ghLBZ~wG#3!GSRpAK;8jan1K1- zycynzM?-q%v4_1uH5hcaGcI~YMUE~g#zT!%a4t-kk-aauLB9+j8JB)XDN(GQInl&M zccuiRZ_B(e9U&b+ZMjq)Mk1&lbAK8^)lf|R5k=Ma3`la|ZIH;}#IFRg0v3cxVL|u` z?6;1cE;*HwQ7im^%Jgv*0^3K{lKz%OG=Z}4aZIbhQ*{vI+^zKIZ6ia?*%|{CSy{Gq zI8XD`(}^P~7(>e7GIbIuQmSfTRgtp_;tnDP-g&JG?NsSjAOh7?SS7!005 z8WjwdVw(D(sKm*AixZPdJFw!?fzJtA19F2#4k~rqJ(4j{3GPHsE(VuM7FWOLQW2$M zlqL^mR&x$JE<2eNwtVulp1o#0v&mic2OdVWQn_D(fnV?jQq80^wBh{xBq*4N+aQrw zs8D-)92t2D2GGq+Tg^TMkJ;qf8Ja0jIh`SP-FfO!632{|NSyqAW_b(`L3#jlSLiXG zT={kui9(I41Xbk4SPU8`87M>QH5Q^Bdv+!ngBOQZg*8!(W5*{~rBj~pLKnpa%EAKO z@P(tluqkL8wrSsvAcZUw8dx&Ct^GojLY{wG%p^$RB@?NZ@2M<*cQ96~6t7B>)`8te z#Y8=)UU95yVn_-KrZDXLE%y%WHH#8<>Z7nz`hrUoqo2M8x%oOqRAc4j(I;eBL$j^S znU;>5*|-bi=#`V1BK4|;S5rw%%{Yyq7j~13L%~A#eeGG?6NQ%XZ!%#9(WNk~N!NMb zOXh`<=FHV+ZEzySVoi(uptGZ*$DBjhV1g?mHjRWNYXn!)uJkc*FH>C8qG^}GKN5|Aw-t;7Q z@W_At-nXxDVs9+l(7S$Sm34AKZlhLHh!AHTrSp(b{L0@dMCP3YVL#0?OWv*Y&b$^; ziL~p%OEa+Q$XNw)2a#B@4#aa$A62( zjMCChW=twgz-lUHCCp7Sd9;ih&@lU#m!elIOb$;Q-|eIviJ0x|Gh%`9$Qs9zSEHAk zLhY)7S6e|V!ETbt=@-xJ@J{^RIUC-IkKMExw@cOw0sNovJU1YVuDj`(SY9ZTNp8h7 z13&Z=W7AerBAZNUFG+F3NS=s>>foaxP9R$IRlObUakbWd-@ z4jrzR;XQQF>!^H~yGLXcC!0{i^A9yUiI-G*@dviA-0N$IRuwtxK<=RuDc8fj^}rP* z51FpWJ*3k=5|(!8*03J!$E=&7(g6pYs;$6_KazoY)hd=#>6V9z$xA!5JS>_Assycq zxr2zwi32RdWja{qQ3fAilB~8|EJMh&(CsDmajPsRaE6sW~f}86slDvu-eIKs6_AuCUrFy;s%MF zRz+UaQF{>If5S%IRObFOl86L1DT5!WQ{ILZbC}+Lo*XqETE}yAmb4;Os@4_gNFiFh zM2h9BfT)I7nxp=lq*^aZQ8%gN^h-PG#p-2*p)9ye7K5)S4I#P}BcPH-iY#7=)Tu4Y!Vz|&}Ejd+ZmBxlj8)`-M)a8faOX@!@rp5$?3 zHtpsFwQ5!iPBHmPc@O~RQvPfdxZCrV2F-^_p`(tXp!Ms5j{F2u3=d6Bok zY?L88ZbKu~8tX;=HZ+JtSh-6bDq$60hX#jvF{=RXAYyXj(5u996&NmW`+Rhsak+!p z%x_d3#iB;#4qh@QH|-E}6}II?RRtnaKrRXSumBTF5e26cTkkzTlbal3kv`#Y5phsj z=NniX#cQl)FMXo1!m_)a6#I|Xk~^>Wl&TcjF?24Ar<#XeoRb59TZX?MhqG`ptOHQJE?>;m4C(T z56Sdg7G_~)Jsrvhf2WMln5oGcWQ$yn8ONft++d)^l^QL&HKwkYf>f;z>8vat6@!yz zNY#(6Ekt(#D1cN~ZRFvv>J3@*`vA5C= zt7dXm0NfyP3#jh`1{6)X=#M&w%i9m7ihwF{sA6@1Mw-ITf5Q$=Od{>DYA2|n5|>|~ z3AsTehn2QfR6a=)Or%$Rmo1h_+miR_g=++@;?ROK%NXfI99i|TViIWtR!cdxN+dxA zCo3kE99pPRjW;09wr5_CW-$sYKqKCoE3YGF`Z3R~>-%XrrUPoFupD*|CnlA4V6_vp z2IK~f98^)5ou+6s?QU0e+HSQon2io=Rw8xGFqf{x_yw1Y5~ZcEW27k?%)6Dqe2?Ex zH=>U0dF-B(j8?2~ZrY&b?H1N88QdR-nB$9(FHcj&WQzpz;=#IIfp=Tr8 zypA+Xh;lM(jBQm6D`NERIMNi6q^BZtB{Y`6Tpbb7oo@Yab2ak6UFOO|MT2#4(h#aT zV%7lMK|`y!b9`%Tn~q^Z+J?FI2qfd383o$YV6)O|N+t0_C5*!iKEbqb%A7r?#Z053 zPBI2B4#iS-yd0~z0;^EaXrgurZiIQrh`X zhpM5R#>W#t@I|i@{g)PWj?}GA1{T0IMXaGj3r@8UW@b zQ}jW`55bZdf0lkp96T&BleWT~oXNAPXdsf0ipfh}yJBOn{Ze^xWc>#pf97Fc>qH6U zhH6=4Om1>$VX1V2kO?ngh)e2M$oFLYE$7=#b7;H|qvy&(NS?{cyaN~l&tSJiJ+1hA z{7^NB7<{zDsfvt_7p5WPshZ9M(;uM!Z5UpN$83i9LX;T}8J)t1cfEHmAm!jMFJu+CT|`V?a%gEYUb+ayD5A2eAdS;JzaD7BB~;e? z(v(tBi3^=9PE0Dzuxck~4a5x^d8G9HR~8_ZNg#T@g=HelqYMPySgrpd(8Y7d%+k#fX+$7>qt{M&&KA@*~TeFyV+O5QpM%?4ITT~2A+CddRD=Y@{ zV%7lML&N0cCRk-H_42aFKXHtsJU>7~F{zdB&)$h+(`FQ@u#_rB%A#U$(h4UJd*(qZ zs4AfCAYt;614>_lk1F>#;K2I0>?PW#IJQ453BU89dQaE)fz$~;IX6EVVg^d(BvPbSmC$mscr9lg$bD1{PI8KctqOBq(p{>9r5i}|@?h-NhXoXW$(o-g494IdW+eO5L+ksUWtU6Xupl4y2#=V0= zk65!JqsCz>eUJ&If5t2yuDh|u!W8p16@!zOP}PyM0^oTPCf+%$fH(Hs3ui|FD-FAwTY*izIH?%@mnJhNnI>?xm9q}$CY2mo+<&S%xvWdaS&L|Lc&deSoVTeJ z0hM&us#Vl#QfY*iuf@jX@V1(28!s!X+opFsJ4)3OGPx8QBE=-B0``q-QWM%AEdCT0b^4H9{ks_-gI-_PblMIU5ZLY2OKtyhyFBo%+imGe$9i>C|Wj6W80g1R1gVB`x}E zCsVmMMy(}Pqe+v#mzzknd>(uyz|w2*laf}#-6WIKFdfWddLCsQk>kal=bR5ON#t(Z zWcuDXuRZOl6wdIIzURLe{xPTJ#CyETSu#Y^zAsQf(MN^}LWJ&mc1m+su{Nv|?TVy~ z2QB-E#Jc5NaU5FsH=wE_Wfi;~L`=N%TBQRIyEIV*c?C9ackI4$Rl9v7`r`S z`&hP18zyPxiDqa*`V99o3{EsQ8#41W@>i}jR8!iHk0oSSI!-4w+k9z&l^*MyW_igJ z>Q*JdDoI)icNdvL4NE@8`)2E{BRzd3$gJIfuPz@paaz$Ymddflo^jR7&@Gc^k*1SM zp?cLptB#m19W~`tn7hanDHk_jjn8oyzPS2WaA0>85d?hG}KsRo?DE zg*{PBupQTJM#(5`g^IctWtCV4FDI2BhO3UCbwKw}F+tB?jw-J8aIcK-^V+AcWpnm! zpU0^m`<^Kf-=>Q>BTO5a*t4??OrFmw*Jn*v9kd$CX?{e?bh(%@$>fzQbh8GrFp)9C zvCcJv^(?MuRTqH;2yF7GBTmUZMqA+4kNdc+VsT9VPBB@`!;-_9+~Kh7^DJg-rwDLa z*taS1E(}^;v*_0Muu}LPR)DIZkX7(DiR6{aFi*y3d1Y9mY1# zldJ^GX(s=9{O~b|6zWtRq#XR2CwYE;wcw5)tHzm`oaA*Xak1jyjq{C|`hk;v+~v&- z7nt=_>DGDf7(L0V)mbL~9 zqinJStU6-Wf!sl*RI|by4|(7ye(Kue+jFTAJIC3cS9Ib~tYnR^d6?%1gab~{VdOQy zXpnV0wjUaMd`&5DQ!#mQe1%o8sv~9<#2rLT!1GX5@J^i?VVd4~&LJXB0xT7l(Z&^%2AmPb2HF>g~bdC7yNe1};A1P}^8%>5X4 zbooRyLI!LO| zNMo>KQptl=!EHb#rZAu-`RR>hbH{k)i46fWRjOGRONivJQ&UIqrIxQ9TcR__+z`ymw*IdbN-f-ms0hrg;zUC>!5B@ap;%fU?qN7CJIkm=|F+j zNGUso?8BqRilFE7f#|8=g9wGCbH5Di?wJU@VgQYpmZ=tjiu$PhELe5qtOB`%h>5sE zu@WsR@aCB`#63!p6}jYnnuv>WDUt@%rSaxzo;m>$<%x)X7Pwq4R(=?)W^&en+@#V- zwJdv+zI{v%Pu21{ZKhHLL=2mia$*u`g_X-UH95R1W);9qA`YyQyAYF=n6b=dSjS`; zWy?l8PX=+TY}uglqiEF;)McAZIZyrc9h?cdL$yw~l!yLCuoRbF2TdJwj|Lry7yp~8 z(9qFxGFGK zQ|u-;#H*d8bx=2{IPgj@M$s>oPR!qoPR%fRRQjc=36FPTl9V*9jv`WgbPeHZCTJDR zO(Hq8Vl|>@64g5OjYchJiD_IlxsrWZCc1m5GnK@1KIrKzR5j%cbnA_B*LG-y>8%$9 zxeht&VD6w|^5Q@%$nSh#fk7VV`>M>n72hZsR$5WoXL6T_Y5SUCRYgiqrMD@j!pcLX zP_a}H;(HlS7=&0P!I)93TJ;M_;Up8j!{??H*PCLVV8M!qiV1mMvnqk*;V>^}m0Ai1 z5tEZVR-qEnMt>BUD*R-AO-8Yt2k#(b8%;l=Zr)IEHXs?oQun4MVQkn{(zGDw7CY8Ke zS?*L=RpSag80A)mN|+ofIg@g$UB;70vmX8UlwvswA1vEx@KUH*mC$M@XC2H(&}TTMZ|^BrcMMze5{yM+F;dC$|``HMDkE+9U^X} z0uE>9=d#e$?3Lga+q)4{(@p#4Fg8M@umj-KD<6?UwW@|y6)}^(jS|4~L<;q)g4@7Z zCQl2azRF}!X+&5W`f9q3sS=8chZmDd{v)gdRy#54KyFgWgOxZ`SS-txxU^V!HgRmm zs53B+^Hd6mBvBP3&}zzgn~KRxJGANuS_N|l5fkzpSTFP_(YH*%;hn_!sTEKOzvoA7 zX)=?`R0>6;xSpULTFvA%wL+ogV8tZj0PFPMPp2wzC^D)=(lE|~8Lqd<;VGt-c{E-D z8P)Q!ViIWwR+85Il$>=SH>o(#s^C6woGLCN701R)-{erKR$Tmy2E;KjQz;Y?4=W~> zW?(fFvkKxS5eHUAtliMHYe&l{m-Nn*Q#w%vaR-r~#40TcE%qUqgr&hdJOyz!{uQyFKBYB7J=@eV)EkA zuDB%rg?E2xxZY`6K5Y(EiY2{GrC7Zx;Z;Y{WPOy8!ZjsTczLK4>6iS~Q7q!V?Rx9+ zf6DnHqLJ)Y%)sR(^RsvvZ~qcOJpm0j0tnkR{QIwe{ra!J|Nig)`+t7%=YRkD*T4Vze=I?n z*<(lXF*SiJ8|Qj7mVLn};K~FoHng&QCms2{ZxNA&x|?;OiJQ7YT8nzP6DrF*t|O$^ zp3fp%HSgu6P~AR;U{m3>`jj4oMJ4~ic4E1H^%wqL8Io#o@<}8L#CRXhfjI|c;mC0;JFA?34I>xTe;yLWVuY%d5SdzIQOv=m7~Ufd ziBJbV%`6)2u+US__+k`8{%xi+ec(>$7pW5e=qFMIjB+`y(U`wTS&wY)k-uOYj;YEY zMI#l&%fhuF-eWzfj5O&6<`b)pZeY_folH*ISIp|CRig$Nqf-B|MFnj zv&zcL>BC?|V%%ckr64!XG^D}$JnX{C-M$@*v_&zdne~j^?QDu+n8jxmqZSs$a$JKk zQ~JL4^d&Pk0?$|WDt*#|j+E)d=iz1HS`g={hD4Od#mnJPjh2o^Ei}pnxrSqoJkU?; zMkrG04PS&Kt?4jip99ZqH!RDf}!{{ zyc}GL;XTrj2=TmW=yrB_6A9nY3tz~w+80s9Ni4Ag zyS1ZP2Z&-J0x%OAUKg*HMiet}CB$tPlbVUpTu#%W5)GfEhDv%*A^@UTh*vaZ32x&D zX>=5~ICv$-o%0N6tRvS2J2gp&bW#@4ICfPDiDD@(k?=;2YT1cY3NHtjV%&{g(H9&V ziiMR&3F|1l99)WV*HREB2`z=Jw!~62bSWw!Q7lD(rlLW)Vq=#gI*L0C zyb|KhaRxNjj`|wn+uh6-8p>^2KRoInQ7*+L6kdn7mZ3<+@N#e|#_h)kS%+op*R9(L zRFL`*pWFMU{YPO@E=B-oO2iu@sD(v22bW@ak2D~%6GdFv$38DiZkm{|-!#5$>81B9 zDhQDw;R~SE(h2J%d>mxNxE0H!88-AOmWd0bUVNKJ3{}E-vD?yb^5}iE8qiKa^8xdN zx0(N@!2fF;NY7I4Pe(OYYss`4NTH_|ezG zJ9?#eg?{yA?j`agy)LL9TEjmFs_J@d;MX?xBOl*L*9ya>a{Bjs|Kdf~ulq_35<^G+ zw7QU;K^^&9hNWX3kXfwv6#REDoh~Rn4Km%dP&ob2zaFX`1;TtS(uR}KKQAjq`u8#X znu=~|&h1mMh~(4{?VHIXF9RJS9epFX=c0bw&Z>xgTvxWp_jF%vUjzhK(#_kz?5J*@ zGS=^CZej}Byo?h%z0IO)V!0$uIE|#|FpaOOhy%fW?OLYdXeu6FOfo+SprcdG;Bx&As6BOA!#=^F|QS99;3OI5b@7#QxEI-71n|ZHt8}E3DLyz;d=1d^^x6B*AzV|c_;56#Yx!RB`8F)Gh$=$#J9 zoEx}e;|7|brkO8=-x&@qWF;LW@kVhPaAEUG=q2;d0e&%0k`9;qUj|MoTm=S{#4O7iNudw^>uz^DELnwQP*W;N>b!Q^(tOK%2*D zTe*{EF-q<=0vWn0Xxx`hGz=-4d%UyBbYl=Z9_N_EydDZWE;^-(_(2$5e4FQg8nTMV z;W|~5ot#BXG>?Oo^N2Mx(#E09wTx%9;SXX<#ZzT)#N%3K4I)7#-bXaN#*)bLQ#~^GgyQMv+3Id^z9g9pJK~XFsFau5(_b?Mhj@L0Zre7E}L*`6Y zF%q5LduEyuvtfu0y}0w3RYbhNl_$?4p`Vd4Hs1m2V_pdFFYZ^IfV?7B8VBR$rce(* ziDHdWKwj}J9ST&@c^DRzoF>ZMo6KJ#IvfpZk~npTe@3j3fH9r(UEVpwZjmJ+v?GH# z21)oGwoKwQ%w)n$V&L+M2$gB<2ploqUUJ-`&%|%&o#GwOV@W<1A!BM#fT5SpKM%xO z;@3G04;Aw)9Ga+hbr7<_CaP(_)3W^H=yz^vCUVixmyZ^%-!4)mktf2b|E6Zy-KZD+9M6YlPN1#xj0>KM2 z?CU^It$AFAZIR13oPmh{CKJPW&0>N`dZ2y8Sh$PlOsG24oEtnp?be$yW<@9DG5S-8Cl_ITIl8Rt9JywUnU3M%Y?+;qV*p`gv z$m?VfkCJkNI}gV>sq5hHqGGX<`);{kC2H3Z8Jw1VMp5K3EM3Slo{%I5N#yB~P9vzylccBj zk|Gz+d)W7SGLQV!8(v`&;3hUsT@3{j;xUQ}6K}+il$ay6I}(wxq%R<2vh$NDR+7Hf zVfg4+hmi--HJB69xN{h^omVr--i^5$kNI}YkJ>i^#-n4brb&eYG>KPJ4l@rj_%o|j zP+3+Yg+$PKix4trI_G0r%Buh=5mPB4Ye7{x#r}R%;kERx+794K~atVj~)2(yil2}Sk#LdE`AntPwsBpJF zjR(bU65?&@e$+yvT#grD5N~Sjdl2vpPU98>FNC;vq5%;K%Xzw!ou7ErQ}TmaG<~kr zfudZBD=6G=gFl^E_54T#WNHIcEyVo;MI{ZZbR@IMNQVkxeWXdBufwh|wO zmw_uGyvG^Pkg^=!sgz~Oz)sSJ?oebcov49CxfIt>IOCADpfJR6a&Rriu{`BQa9PrH zr(ePT048lkK6rUlIO$*MWJYMz=0Z;kHC{W*EO7m0F?}{&^G15^2_88<*|o-EE4uvU zNyfuVDs`xaB$L#UNFu!c;_Y#pNMWAlWAIgx+>>xL1rOo#5Gi>MlNTfp#|$|Z+Tfm1 zN+>HJB~&-ftjgp4O^GXtJ$=b=2kar5Pdr1_^6m?k-HG2 zWHD*uGwmSnInu+FKFpgm>!GY!U3{m7t=sV@?W8*!%#7)N15sIeF3wtx7f%Fhyfu!e83TJ5W`_1!&hJcNcZFIO3G9R<; z1o(7l9|gB8VV2sDZ=a6$4wE72PvP&{Uu7Il*}dJWrt;h;^N)kj)vB8pzRpRwsF=(+ z)KHacbKjzdVNo|VX1{*3-VD{0VzQN2^U-B`T}CVY#mp;VF$Q^1nGnEy>1bAiQFHm! z8!?*X|DQ$RH!H6dol8cz7-_NR zIvr?9rWHU2KsdIFGm3)YOuS*Rm?YmH3&HU;X~<&y5|xuw#AYvGc~I~o=CbC^#NHoi zAeCNy8HGoU1HD~5;GGW>7o9@$_em68e494s`SpQWt<&(FsmY8(7ggJUs0Zr8%a%%M zdBsv`dt8^S67OWCJUu8hF;QomZ6&B+1DPy>AHYnqZIOkZhYnJaMZYs_$SMuJp`mwDAs+5aHNgX&`Ku4r&Z!-$)$sg!%v6ookZgN{*%fw^{EYHV|Q? zC`#gj>R+2xTU+=3=R2;vlsgH@Aty*hPEK`ARoqGha2)gp9tV@UqERQsWXJ^46)1*K z<$F^@s_8tL7@sbtl#gO~sQH!$Wf(ejv7|UKBvH$2l~as^m+DD9h6$K3IE-D0&MD|` zmA!@At*4<6#s_FOc|3F0-Cj8%dmfw-5ZQIKKG6*G=N?Dv85cX%BvPxWdz_{8!*t#J zIQiKD6uUPy3yNk-=K_2Y{)IkFsT$rby9I-2G=Ggh6Mzuz$0grbe#HI(Wrc z%D6t_oRTFJ!XVo{+!&Vei;AqN*HWiW&Zt0BS^(AL%Ttfb++$C+zlM?aXF2t^d7 z!Wq+d=FiwEV!7ztwl9K5in$Cm7gW$#T;)_2Gpm(HMB@8WnX%%+M1m<#Q2F3Q z*k&SB$a@5Cx+=j#T6Ah>a9UAS<1qKwOnQN9#s$q%)zHj68tvf>Gfkg8Fhzw35>>S^ z#e57wPNM^Dx4yp|L8msBm>PoG26v+RA~X*{NP5unt|i)y8?p_i{SQJ-j^v?U`sWSs zo9>fi*q$f&EQHN@iPHF(mGDS0SHgiIHH1tDpss-S3Qgm=hY5*V^A9u}s)uKUpHXwd zKZS@|+}LC!YLs(&3%DYD*4Hy*C@Iv65j!Fv$d=9c%e1p4?pMkk=vgQDQ$LTr%KSnQ zk2F7KEi5SxM_jSr7_XK5X+n=Fb*{A{!YzF0vl|j!;c)|VEHQHCT2NA*&UOr?9+rOs z&jwR~s&42O^UDwnvfW4WZrPqMgilKAhn%|2{<#Li`m2<2c3IRqvjhE*vm@O`ueXY; zX-unm;g-nA!+1%#r~+&xIDLhz_MfQtiKmUKzezZ{7>T`dthI1_$vc7=Wj>ekYP8F; zzFZ8ClqOG92!m<_#*@MC1-;fO5wp{OC;Do*&_!{Ss9SiyaF2xYpT|qjW>`%gyYd|` zEmy6ACk1U9KI4}v9-4D6H7DE;zXL4~Sp`c-4Lvhy6Qw+E$%m}v1s&QtPgp( z>OPoiAhuJ;DN`dZ_X~6i6Pau(8MQf5N5OT8t2-YGE#$Q@&9{a$xa9mY6uoM{{sc97 zFo@F5C&pCA;fyN|L>zQ=Tgz>Ot)-uLF`h*sW$jK~eiwkp+8(nGmXw+Y z8rA!VS=RVB6!cF&@N4nBrs##Up5U@}F+EraJKqS?DAvr=`*jh6UgoaW6w`Sgp6pe| z6!S3%4>sO%p9h3qWh^N*1ljT&MZqe0`C+6e984NQ9q={#waozZsweV^4+b~3* zkPp#keb8E1Vrpj#d*XXz1K={DD%rta z??doF<3rZL65?>dy;4vV*SMH{EVUm#n5t_S-bV*A<4H*<6Xi+QO=eG0pCjhzL=9}Z z&--F5Wj>1`#ElWg2Q7t5jJXyL6zh)@9-`FB5c6XU!xieSiGQmc#;FJqvn3=*`b8?5VWd1gerr` zALDxTJZ9DF1q~#D(}-n8iIR&Z6L*hYt6G~lB|+`fTv`hm>OM$CjW#^WZ<*nEmqKgw ziJEV`3Z@aoG)>>h5%g(eiuojn$C_`sP!6I~8%svCfDh5&h)Pgg@YzaXeNGqefP9DY{Y zS-oORbv_GYkom5{4%7T{HC%GqoY9~QM$nQ^6M7HPs4@pn_54uAR9RfTyP2hRW;|a8 z{d@F~@Lr)Ml{u{`KYi8ys6sSIW;=dXJDt7Sm}^mY#l1kJI_6OGgBHUQQv;Eccs1g7 z70;&Zl}Ex`GjADLO-m>@JElRBmr0jIb?L#>E&@a7xQRkl_p+ekYp*g*ZnzhM2itBr z&tpUIDq~5hxu94kHTcq7At2u({ zeI?p__$pN&$gtL)o;`X!tFIHbo_e&)TJ{`3XMDi4y_8ee#T4>c0AnIm2QGxQo(>3e zUK)54)cq+*`R+(uSdki?#PlI4ctDL*eJg}V0lxh-p_{rK5p=2El_J-~dP5NpBSsyk z@rGbu?uJfnT0L=37(Jm^Q||`*EiWp?c(k#kIDE0F24PnsYKuJzXd` zqDD-d9j@r)0k+i6jo)yidtZ#D%qKAnGCpW2oMOz+qK0DG1^S#agdj2gccC*KB4Kv8 z`nl}fgsi2{9Eegyc$et6ADBo1U&(!AC8dL^upR$Hzhv5;i4oC_XM;B7dTO_LMu z2w}tr=(XMQp6okzu7o9}=7WpUY8}beiCh#khyt#<6M9WImp!-r2B&LCGmA@%sm|v> z3^LxiA(+PJYvGjB;)py(@x1hZFRE54?cr{CrOhs#j#MhZwSW3igD3>S>YG2G>%<*~ z6vBw=v=Xn^g%(iu%k>6%kzz9(ULhu^HIHgWBgBpvNKGjV*GQ1oz>r%gTOt2=WPlD`97h@rN7}!(s2qxXa*WcU=z0=AU}B;+q?oJv@C~0TrjQ^s zjQ^b@J1chi4jC82ln{UF;_H z@@(Bt%1e$VV`0SN;_4F7xS4o>2(TdpOQ#SE%$i5EZWj7Li(5(cbXji|<`K0pqCAM5 zGMZeX842s4ebD!q^;aRzfY%W046FSV09*Lm5+yrOb|im^!>~ ziaTU6yN89VDaBMK3K8Gex>%F)46wd?I*tpzZvYg)q-=UjHb^p3abb!WAOG#(duS@(os_PD+1~eY{S}g zWmF4gkoQV7LUFVxL-0gjK{wTQtdodAvmh)(>qUH;2Uze_M=W=7(Z-F==Tb~PPV?>7 zrqR115bIa_*1o1%zVX<(yxLe&Y97Wm#lRm%&QgHb@gL5(6F<9BM?-buxuYRe6H03? zHZUFF#H8Kp2_9Sq>(W2SBtHs)An;}q3wdNCkF>Z=;iYU(;{1dKpr_t>lo0(V>I%-Z zVQD~p^>I&sgh!Po=L!PrP(v-Jc(|5V6-$c4waRai)RBCPp~v~|Rl9J}ki1Alt-eKu z#@BYQ6T__XY?h{xn|q+?7&BmQWlS*#A$GK_mUGOAxs|b`H~`CcuQX(Sv3cEKxvbpi zMd-#5G&nJ7@Z|2KDWr74pKf$`a*d*Nus%o`zh?L2FxGe==pdkPkQiDNPEZ7i@!jR05>&Fbmx7* zGk_`YkWk?g3~wT>N-tk+`=acTLEIC6XJl49T`{`U({jKZlpEIr`r_$6s5+Ndl_uv3 z0_#XSEuWZO%L}z*}=wI{?UNFC8p+PmX`tJn{Kw{LzoT4$9PGIdAQ?= z!B#eCcn<|7Y>4<5{Vb5q)N{FBU79>B3a&#fwfy3J)GaAB@A9Q7868&Myf0q_4f2Go zqaMf*vJ5>q-T-bXP2STCM~o#Qpjtv&Tm#+^%1If54i6ffe(I-?7zIIZ+^89p-Vxk< zeY){avn$WF<2cf(R0J{;MWm(R%P*keY;!BqTh>=?}_+T?OrY^`Ll02O-L!7w0L<@?AyJ1$6YKM^UVKb!iB4&wCd7inZ>0-xY8~#yriQ@o z5z^{ki^2x#546rjU4w!WuL?t^SRp*q%GpJoikLzit`z{)k!D&S z&nr1KC| zV~z2qgXG~rJkKE7qTmlI_N%J<6qZ^S8JjErwv^Ap6=SIH5@1=H!{w7=qF(c_GE|W2 zKo^mhdKqY$oxM`5ZdO3Ow9*JjHH9GZI+CZFd=M$$tKC#^_J||#wid1KQ|nMVa`J7g z9!a+<2h7BlrQy3!)$rbuV><|~cE``aa@rXIxh10xm8WTb!)67S@8ki>D={hJ?2{xE~gMELXE4#ZqB5gG={H$g++jQD>QJ`o0)TnH}*6 zGUaXWuwb=>n5fq9$Rj|1ic*%54^LIfdTV??t;^$PRolXhqoTHDtkWb}N296CC-FMg zQtLyRKQ}k*mXx}C1zdLMUg~I*fgzsR%v7Zew1AFx$6(w6RVmCzt>(^1Bor-BXTnoR zp{|#I-Izzj?3lBoQ_rbOqjN=|b*!P5SIoZU2HlcU_btzT$Gdx48a(VUx((f1a3*Da zKDwnup|Q#`nCHCdzHb{6f~h5>1_no1(U782lJYH27gHq^jSN@Qk)_`QDI+Fi<-{v^ zJEd5v90b)WAk<`K2;eRuCg3%!gl|@^+g4*KAuB=yqr}qGaCR&%+Qnsw&H<~$((;IR zWtfT_0#$^OF>rgOSa{c<@;=eL*=kFNdCh}T18y;vGJ68@e!|8y1rn51-p4ZKHLjMF zrmu;!=#i*z?HxeKy85;yXjtw%Pg@X7OCNx_wK3&XeJBDk>uCgF#fvm`TbL>~nEKMi z+}c=DYIv2mqqa=PrrZ7lt*GL-4bQ!U&~lZNRea0)+OwSEZOknpb*uumF21^)O6A%O zdc3Ps@=@zpEp^=TbbmnQRK;AjgRpW%OH2jdHq-KmT!>2*OGpi>m?LqZy+BL>1dud} znj+ek(9#x{$iedIVlLcKaJfE1Q^WTSwcH|?;?l(uQUi-_r-EVZ)>6twvFjomGMb?l zOTmYg1~Hgb5LZFmsfsD(7_bhtGX!!=NDV7Ctvtd@zO0GjV!`G`f0!N0wp4t$mUr(n zy&@M=UbLPmV~RNpunk-5`=-X=Zb@xJjf#LaT7 zcaNz}tA_<3X1=ZWv^5BMON_(EifSblT`u-D2d^u`d70lZT-CmGfgB8`riSjN^Uu(c zyi-?t&lPS=Lc}9=V<-;{Drcsv)j4{cQa%b+jGZBnyM#1-jC|^p%+?09SrpF=eNGDs z7Un70LQG5M-N~#=IC1X}#>s;;`42L{-bJpP8mI`y#TgZ15}bSX|?s zYKn;g){^4bfL4_Se8TUMRPYy8PHc6GSPDMCTGuC-6q@F`zb(a5%RLlAcf zF%frwl{--@=eU;|$6C*~ox(IUm$HGm<}kcsyvt{42VL4M(sVySW*STS~bUbvQ>1>_zf=J#Afi{HHcM$Un_oX_%p0huuH zR93yj$}8lPScRAw0=P?vg?G)X^ekG|+VQhTsLn}Ov0)MQQ7Xv12H(6%R zSb2q*svHBBSH+ihh9K?~VkuIG%0;kaG<+}PavrMrb*r>3#a#8-cihUDVxkZ^*cNMX zABcFBv82=iiP@)Dm4L=JZRs~#={_6Hb1I@G?;sKRU5lcoLsXU6_IGv0} zhE-|4HFVQb@L}Wzf5?TnG->pz7_7?2o&Eip3chV-1mKp8x>v2P-wm-S8Z@sIEHGQ+ zltx)6zUH@!m5`FhSguT!wZi9?nK|ArA?B(b23ClfF^GGlScuoL3dklK6xjpEXxwud3$bGAy~N-wAM2JdRCm|O@O)~g` z6Q)k;W9%B%(QPUCSa)j!v)+g1vcE6JQsyYM)?a*+p{q@-1$37X6Z0xszTL+;6u?@q zdDRUW_UCFE^1c{Lnf>4hGR3=Ryn@4$VPaZEW3kDMkPR-bLG^+6l+LX`rT35EMgIC} z=cj4tjFwv&Q_L}V9c-!fnLP0FDq~4;z_og;ajq4yabG{3QJcA}-?0>YnCUzmO|N)c zilxeNShb%exuF4wJ4Bdx*PsI4?lxYgE5xbf>(9M5t#c321ry_#nA%fQQX44d?c_2Q zoN=|bEuI7YCydOO~F}r-|sAlQM%jq{wn+Oesf! zb)cP=Ph?=ZG_hpVpwi!2)MMtJ=4(#yZZ+m&&Q>C&aLzN%`F29sE5uagD6m4zbZzdY znK|MvDQ%9mIlprHxprqN49?eX?5A5lra=d(Lidg7(%#e5GBQKTx3!yi*WD@rDxZE8 zBV+LPNwHL^BgHF|C*atPM5?-uvM3&d)7Ufi;yQE}=Bswo7adAmdoJU6?xBC0hUs7M zp}eF)xWGi=u7x#2Y zLeO*?)JFp^BNw@9dsXk#rP0y$f$vbuV^+bEQujXgq032q)?BI28sj4Gn{Jm2Y$@Go z>Mmzmf}r#ouRS{#FT%^%6QB6kcR$tq4~M=^(|Eh#CpU!1|6qQiE3ZFuK;JHP2i)K} znHwX;qf4U$?uek{3pSO0-*(G+N+}LqEFm=yRO*n8RR1zv##@i~ zj3-!N$FK3HoA_UhXGXVPPSd6CfTtg}zKM>6QJ#A_e`!1G`-#v7t~lU-^}$5_g{Q%Z z2u2SV8otX0INo?HC_*=Nd^EkIz0@bsA{?0z`Oh4HhT=o2p3_41qPXP9)*Gj*6| zUiqG>bN1CCW$Ffb+jJhz17Tu$-$W%?6jPZ`0vKa@%rZEnG=9IU z5QyYt&(}I5s1>|;djy*myf8@IO(&T>)~ksrrRHi@xTpcE@(Qam19+6??(!`SC zKx*^rtN-Ed*PTZaRj_rE4iHZ3cdDgcW+IJ4ykkx`-Ywh$$t1iV^X&-|I)qq?9D|cf zJ=5bepd!F_$uJeE0kyiKDPOs|p;5U2bdY2VYC$ytma>b}S1<{R-C z-_hInG%DA?A*9v&_5;wNw6*A^ zbo`~S?0)@t{TcW-QWM0SFB%fAjq5rR9;N}8?Ui_7ZR3)VlOosCjZGK`u1UyA+aFP8 zwpJJiYWGK{klzMgh}|J8;1SaF@yhp#;x*m+in1-Xysz)^ClwS;yj4dIgj0*_vG;M0 z89UA@9=&Pnvle{*bmcTuA(6xF$gc5CX!k7qt{xZm$*|P$e6%|O7h&|$VOqd<$Y}Ms zB6f0SZSlIilS#SYFR19LlhhM+yk2@Z<)#}u-tEPi+rHd|*Qrd2RNduDa^reWN8Gr0 zLK(m&$l>qvJCBq`&)X3`kJjd@7YNo}*s}ah5vCfB@3wF>;%#!i5>aIVI4Apo`#w3c zGe_k`58c7i?P{d*L%nO-S-Dm=C z38{J2!h@KJxO`X;J|?#EDsE>L{#xDo=335HT1ChfbAV;#+d@oLj=^eOwA*0ix(K-i zaGw+l@ETNnfkl8WWvucDov+_PQt~z$GGXs`Du@iZS2&px{PVfL@fbx2m#sI3G5BPB z5GkL6rrXaSPYBvxA*L!dw_2yTv|FuGIS|uzDoZDSPrm=uU+WhzB5nK)MUWM*7*k0b zDf;1jJx>#<2Txr(kzyhsR9;YHz^jBgvMK^lUj-@K3y~I*bhWr|s&03v^1I+W(sJt~ zn_ZYUlxq%{_I zO@1AK2ik6Zc9|2qG_hpV{I5(gq$lTc7p%WIgD&>P8;HUZleFD*k{KzlCZ?2wusYC8 z%Of(ZT$)%iYDnqImL~#5-oVfD9I8sqFO_Gf@5*Z_I2&n{@xK3#atg5&ISi>)IdF@a zo@bP0Wd^rLMAO$NpIY_@617;h5z@8}mC==&+|zWrl9ubk-ioherS_Y4^?FXSpYjfpi z?@9R)?im3q;gMo0Q^OG419mp1Nf^}7??o(-vEp>LK6=Yj9*{eQd={$^J0k#h$gtpc zI8}b%Z;YkMsd!D&Hba51-ltE-K$vTpdqks^Z;CM0I1Z`x_=e@@XRTymV+`0HDV8cV zsM3L%b@a)r-Ve~)cd$3PucW>w%4@pB47pdz=fLu6_}b18$h|^LRUEFhsLc?4!y!3e8L47z<$=812$u~5 zMY^m!9#knSd3 zd=kFHEVulogwLUhC8Unt>LtoyTRuhUWg$^8ooQsIb&FT!b?Ryr;;Br?(OYCLd2YF{ z$;LAMeJQ3gpGDBoVC1m9-rZ)JzCf@p#Zsk)-y)dS(J06PT)a$iyszs|PauT%Ds3tR z@T-l{DVw=$Y{84w*-E)Do=nYmZTm}o(Tkjcj$h>w;KUhD!!;HCzDCchiYeuT@GY|? z`&n-J&Fp;MMX-d_&|5Oq(AFE%70rR?p?$M-o()eYctCHzPn9O`+Y`UTERR?OOGeH4 z^r|gdD-&~E(VGhO))!G=>ceTMryZGF;aI0m;zOm@oc1=@mL~cW)EJnqk2j_HDJ?ov zlU^e(L`ZYwF>_(3nBRt9km(`I;1JUI@fP`d-UI7&J#=lgddfA~y)j(cTHo1AEaoJO zfZDWjmSU0J8=9CxYM*KzY@$=G4XQ)U3<2B{QiFtj~JlH!1{I4@Iun*?Qv33`~Jx_q~~ zZCw&&J+&;IXXmjB({v5YOXR8^=zVFmdf-m*i8i1t4&2T1h&8ZeID9X!IJyre(his> z@avO_EOtrbiezc{@U*hQhj&Rsahp?-R!57$s;nv7)6NLMEg3bpDoZA>XK3;lw>J*6 z>I0y_>DizvOTF2rtXfBlE7SCcOo~erQ^+w$t=p+~voZv4OGphVcBLYOk;XA-t13br zjq?~h_Y6zv*+)_$&q0-EI!P{t@1*s{_dx`C6VrWnSX-A~-cMg?tdc15LLaXa0V@85v7R4ZcOF z$lnD+aqmmUL0$2$7noMBlUQpwt7XQrf5lQcvwMA4wi;Z1=K2`)l?u2i}YyS_!<(|T`VaMv|M+z@0NPEWx>|_&x7>?&ARBB`_GJ@l|?W# zF@<~-zU3jco9UM06!3X8v4l9_Tg;qE0pEOhU_X(mT#TWa>eapqVZd4r{R{=>Bj;}_ zIT}R=t=`ic!%wTcAZg2NZc~^6OkzCBw0huv5FTi}kH78sINK{KBF?klX zT6JWV(ilU?EcIq1t$HDA=$q*#vlOQ$rjR3$I@HP#ye%O$q*h@LT&g%{6Dig}r!qAo z%ymSU;$Ipmg)&o;Za<6o6vg73g>HTZN{ z4XvV|%TGt|p2j#c_*pYYD?aBwy{yHaJq9U!`1KlK)AYBcSgL#wzZlD-E;PH{M1*>F zXf}4*Q(a#4GoKmfdH!KG^GUu3~Dq&=pJ8C*U?Ew9Lg_*AikI9zKL zLj%BNsI6%ZAg7&&v&T|`A8!kZ^Q0-Ld zZwoQk>?o{4?DSk*O)E33JTh9GYPBojRg2xr#XY%d&9R2aTMEuLZsOp1TZ*Mh&8ecW zvREJ298s@5!f0P>K-{%zrXn@0sQbQ9LU!xv2d1EmDQGEczRClT!R8q_(G1HZ0!lcl zu?tcrlPDuK-&v0|l=*t&hss0|&9IctET14=oo>U(FjNMUQ|F!Bm;&}26WbUQ$=twdNQ9a? zmlR8t&*A4(+Wcr90EVoBQ;4aG13+~Xy_&BI;K z_$mnfI6Z3tHewYNBoUzHcs{|A%0PoV#|OJ9)5A}242}@K)tp3Pt^>Oq#P}Wa>X|%_ z7&d2y@s5OX&x{e*L#DQ0I;DIRt{6LmKzE60`7{@vL<)#Tm!-!sk6_ddP?O>Z4q|OH zwS%>1Q@SxCgXZ=TU*WIa+Ybo&GrSpRVSa}41eVhCru2;zwo}F&!At{_9KSe8fus;# zakfn+7&)BQsY;`}6`x`#fXA60u?m)q+TMn%(Vv1R@bA=r!$8D+A3^+x`BWs{xs{!V z>(}`Q-y5Mb8kxe_pScBAnqPFAf(rTs^C_1&ap9-^P8{{uOGkK#8=}Mg=(N9H*>VRq zUYO*#*AY3^L|q!ddM=DOvcvy;sx-OZjsPBMyX8CCF5pwe65?<`4%LaF374K->cXuH z{}W*#X-;P7@vwjsL3F+_@-p*wy5WvE<&7qo;blsTTbbiVVCg&?u4`Q1T@+b?Dhb)36q~?8PZ0;GArHIwKj(gBpi-`%YI~T$UzHzPA^6M;aco1eTDx=N0J(mG$O%e3*OL z^hWwe#UVJtB8cyuYGu883a~}$w#J6qQ#F?k-8V^PL_LVFbIgkg{m%nKS5IEnM0!Yi z*RG9;y|5~x(dl-{iXD3}5KzG}S|uP#!_$y6<^DT64LxLso-K7l*8RmfvZYWWRLCFcoo}5_!pBBy{0WZ)gk^OGbWVOzo^%m`s1 z?&Vb3?+7L{a+&x^cT=|omqHB*;YFJLsqRz?s_>R3lgAM$Y6#78#)*jOky?RJ@HTdu z#99d$dv!6F;A8k5YP#h)v-7!^!IDzPPXy3Jdx@Hftfs&7l(WDWa#BohCK5b;T}Tp; zXFaI`7msq}Yn|{}Di?;6%Y!|PVRsA*9RBJ3A_xR!HBlgnf*tPX)TPn?_QLN#%R^Sd z5>ofRVynB{(q*sM5gEuZD5%UW|4dqq&2l6GMogvu&;R)P`uG3+@4x=%>%ac}@Bh|+ z%RJ}8!2JMp z<%LYG-?lww9V{s|4h%P=NLhmpebg_;>!cDR5N0I%Qp++se9SCFMKu)Cy~zFu=MD|3d^MWoJL zNmpx;v+t8RTo+F1>f3m2SjBN^mL?+P9l z_tHM1Jl#0(!ks9B(KXNXozTMSvOA+$oSSGB;BNZkSX0gg^RBXj*=x{#r zZv+s@zmDILCQr?|0Yslc5s|7&{x^72&x zj)yU^yh`n|;%tQJNR80J!&Wyc=*P{EJ&!k1rg`bnv996MbUA#4 zeTZ6SYWZr78!0Ya)Xw2~Z?d0r#I_dmJUq`S*UJ=ja8%myN zg~h$7Bi56IyV#kuFJTmdg;&T7JU$naU2-b(+b|5uB08`iry6ysaUccq)_SguZ?8F=O}rhtXK`=wDoXlOb=3$xF;@*9WCGdtNtRD7*8FH zW&8|bQpO{t$qo0#(4%(U_@I^Wh_RHZyWuLcVI($SjUe^Lt3wSEH{QOL$etAnXD3`W z_E;Lvz9S*a(s4a)d1w&!qPdqaP1TLPnl$>~Uf>;Ocf<-yQP#vc(AsA`W&cm5qpAw`9$ z2%whvOkP8@0_?1n$FG+w%JiJf0ez~NQa%b`4BOUW%h2e6E7~6%upk?8@cs})@npd* z4Ih4j5bn5Dk~Gs#-j-si;&8Sguwv{Cf!rg+guI5<;wekrUgBISp1hRpJs!8zYLc#^ zJLBcNVKsz#*ix(oet3zq!_73jkm6Crl=4CNJiUFU&Tm^DvIv%t8hY$utKJs!7J0X1 z>J5T?fC&`@nR#nKxI$v1)|$aCdVmP1@AVT+(h_9)>w<_h3$YoUCed(Ac8^Lzt4EfduAVWFN7tf zj^K)n3Kv|lQ8DO=CLbCtsBO_)3{TbGvcHKG?UG2!T=a+GWN=GLC8PArGWtCUrV<~- zZM(@K$UB5s*w=x}3zBiDe}a8k-LgoG)uj8UNSV$_IOQwHZqS|wc}v&BWYyCs%+8sL zl-W2bX@G)~iH2|=)Z4_px-@#;egGb5yX8BN@0JhUrHdt{=7H>QMR-qSXgYRRY-kjr zP>aW&MTt7xW)!GbN?8P9?C87=BcOZpe;jmM-`x^5b5rBqlS5+ zNR{dt=;P~`Kj#N%de6KJs;KhlVoLcOg5KT7RQqk?E$?{<@#e!{Y-&{%}m8Z4MxRb>I^s^=L&XRUhn?fDvh zO~c=oVyWWzg!7wnBzm4s=epq`Yv2)Ls#1e**|w1==!^aY61{9YRLA3T%+jO1jVY%h z$#_{z8rFufY}X|c_}=l&R_u`R>%ep9Y<(_|Zw|Xd`av8*EJbRLr(JKA-mqFZV4`Qv z*)TBS`E+LB8J;(sUN!M5R_r-BEUh#6cFLONzM?H4NGR%863JA!dXCx`Kkrbb_?m zs%TUh6}Jy29EH4eb_HRvL4(=9W1P#-gkze{Og&dLY=%Dc^j7`tXlycM29?%ll0-!C zp+yog99QVS5sfWo%vk8AC(7HzEPI319f~LdXeTaEJ#)g@)i_q4F~$F;4`quT4>Zm^ z?YU0!p5nWJ`Q!Y>W<*Glk*+{Pd5^Nnzx^v|Hlo0RenJh7Cj@uCiHG(~n*;$4hQSls z>Zx+t7l{BPqFh3}Y}Ansu)t`{(AQ~zLhDc{nl*T=XcQRG!qEpo5}uZRCZLQ$L;q=n zrw)!y#}0Q#{v+5fJYe@jPr067Kh%oPCv~W zgk!-yTNL_GK$F>FWZbb&5l-*6-ye@dzEfPeV;%ey3As8)z1EpFE@FE~zzH<+OeZ>d zD{fgkUoD7ww`wpuMids*Z(IrI(>y~Fx@MF>lFqw?&IeqVoRr9`_q=^88_}piI2OFs z=iB$tGbNSDzRkvG*@c)_`z95l(a>x!JVQgQp;MhSBIH=- zAd}v%LNpp<<{O$ZarDNaJmAAS-_sx(3m)tQDu`h*;YCHPU~%Y)k`msH8bo6uW@4%n z**7Kz;N0XFM_x3zXS6C1jRa{yPSo*2i3#^`CR!bwAmRSmtU)Xm8prhbR@GyAaFB0< z0?|m&>)4Yif*FH;?;(Y?j(n+7N7br8G!iG#>5p_?_S^vb^kzRYenBl*s{+wTuysH3 z%FK2@IH<)nrd5GxB(BVv$T>6B?k(UaRBF!2^V=>WS&1{N(RFkzPI~^MS zK9SCD`~BfK&_#9@oz z_p^@qs3=y56~=4sT|D&;>IpFNxpwfsE1G%e=h6QAv(*g3;o}d|wuP91hS#K^dBhPH7>Tu*8kkC&Z{sj>L9z*_Y*X&UGT0-z> zwxoo$yDB9iawP^DYP87oBVrqRS~NqQV`hImT2&|w3Bp4|l-VX2olGJC{}5Fzo0<+? zvZ~Z%tns)+_Kxtq#Ng3tNQo-^8c_N|Py|^F?m^eUNL@HLz!MuRquU5|t-hDviAS>~ zIUuA$u3~Az9W>Ndc$EG@H{#y`$OcPFK-4F4>nYvRfs#fO@v#u+;z~e5%|Iix)rz*_ zHU&x}npd?HL#l|o3aNG|T`!3)f}4kS69{q$lT+5V^T!f{MynYm7~Hpj0a|7~SE$3_ zq-DF{e#q=An5GW!j7AMgGh)CfcVp^@2z~L%Otgx^SkB{qcgF|;qtT2UQFX{NBNDdw zlP+A`^KlFw3zVghFQAyoI#OcyjCK`rL%13gcLn#N=0f;OVzFYRG;9hGv620znMUK% zJGfT~wHUpsvFB?H7|nK+V6gsVHwQ3b%)4GIxCSv|_6w5m*Qca(VNY2KblNm1&1hWH zQb_JyY!Ir8;2pu#KMSDi$a+F{+nvn~EKt!QL^&pB8 z|9%6VXvX8^2JrzjLdLBtcGGBAAvc7GOm@*Y`xiAALYRxXjPq?`Le$8>ln=a4ILupD zB*>Cd%q2yLZ*;6e>#xS8Gv!VMteu22BjIz>spFYC%2d%Xi}v{V;R|? zmDj2ikKH>UQ*2w3C`%S{Mk3_AN%Ve&ZcqMkqu`8cH}2?sNX97}?I3ixG^wyKq><2n*J~5HeWb{F7Oj3m zg?wRS;3&hZDezZDieU-Z8;=b->;VYJ3wd3_96D@M;tihU6Yn|ZCh#BDXhd%wd64(5 z6)DkZvtuD63lyhwm7YBUJ{_zPggbb(tkH=5R%jAzRAFIA)1sC#^6i-0?KibO1N}(! zFVe-=L9T4v#G=t?)}b^d!Z$i%JF1$XABjl}`cgF3lFqfBJBNxT4LG7dl^{5pP03MR zgcd<$pa_b_UxufE62)lye=Zwz$W5W*r*(02F(hGOmr-pb-D*sYx%-Gh9Xw_r_ai&G z-alepBnXgpOG-R)f8|CulxHoR?Q1+@caSo&_l^psA*~BrN})KDARyi`LfM7w+CnJy zIZ@w24>V!1o!P1MG-zFtAWJeayxSJBwc~e?EjnbTs3fj+Z8I@w18tjFFfWV%nz)I| zLv9dPQQE*5@e^%_>n|pB2MGdXgC!*%xw{&dkYV=}EtWLvP@2-Zw51dgYg70{MJKxk zp$_HZ$V*ZI1=BJ8u-2X$?IA&cG@FtmQU*{pZ~RnV+SMSuiavy%GOR!z?0ZXx+!Q>m zb#ZesXhTYtYA^<$Tp?7r`v?aP6ta->Qxvp2w{R398%!w?8L4l9UILEHlUi5OS3`V^ zR$+EkVq|+?%;ErPwWP!&k1Ff)C@*IF2SLE2RfW=!AUI&Aq3(ygHRZPHgW)8mf{@HU z+{1)1clM7pP5U?ddqD_J<^5_GOZ)l*5AIX&#*sCFXh{P%6hr0yFhY_*2$q*SSBt8Y z^MVXYmk_TiK@rptJHBHuWpV&4MS9jzc+E&gMbp#EU-(i81PL{5X-}3W2#-xVJlrD; z5OTFWDShgq*f>RFr8`JR5Rn`N^+2#Y87FS&9fbF3vkp4|0w*_2vMPt-rmnL@fN)>u zgrP8qZ*koF+D;Wxvku{as5oCA2dO98IY{l_0a33Ig_UfxlxjcQhoU~2EjsK0h=_+t zS906nsh&Wv``*Q(&}g^gfd&Z%7>y{-VU8A;5LJn#=RWrlC_BV{#Xt=E zRv5F7#(=TGj2sI}9B4)5!gV85s%ms$LDQtlO~ui$@1-LOidHLfBzWCxPB?T7;*g|s zRy8nOP8oW|&?+2b-)7nGsHma_ayJVL`^dl}M-DmPAMOTlPE4_G=- zh}P5S#7;s(1I=-JUq!*ARfU%e+lmL<26qaIJfH?ho%rA(Vi)eB)Qpjh+WWBrAk8}L zfQY!s2n>n`i~iy?z*kdIxvy)iC*@PueYaEAv0a5-@X$b5UiXBNa9mx_Q4o(I=P=+W zX+Ya@2MN57reD{p!VY-wb-+t-;pN6gGD2OQ6ikD+R4GMlNZcCx0_6!N!{m%{vyw|{n01q>;T67Ti?2d$ER zo6*={$ODZnx!#!2aoWrS;Miix0}t3MRzbS+xs1^raPJ7fV~Zsj9@^Hk_CswHe`gKQ zhJ`KRIFV>l-WvW~Zsr`cM>oo`B+WWxri1~KS9vPWq?9@#kmES_LM#c|Kl;V~LAw6n z{UgYb_G2>hG1^QZFXeqtK#WA~MM-O(anRsUtFHO<`&X)m!O?C>0SF!GnypPG$E_m} zb_ay93X}x#d?Ei}aePEZO~U|bwuKD|4@6FBIy7^ScYl_4atNDh7OpW!$3iR zY_X&S)r0QazkC_KtikcE8giC^d!n9qU zz59lNwx|#f2T3>ebWq$40W#0o`{_b3j4o^@G*V5sa~MeFd95nM!*QZq60>PF1_3oq zrp87J#Hbvk>xB{BJ169>kejutumc>QE`b4#W)*_rP=JoK3WYRE)xwSaCk~`)Q$p%Y z&?K6=Zw29Z3>;ewnL*uBsudFl+M>a1#->#*q)>rQU=%07L6~>;=hmTp1ok!JsM=e1 zOy!56(QL^a)cHM|1m61#@JCvp}mJ$)cqviNM+cn zAym%~w=z-P>c)QXw$bDp&2~J{=oSrv>qr>Igu9|agJW57^NtD+L-^za;5aRG!4VdL z!QJ85qCzwrfJ*#a*?UOzX>QU}g}4uAF6jo+luVuD)ZOt@VQ5b29Pcbhfkvwx4jWxfYmfNL2E*TsLJsb zRb%`D_jHP)2%Yczm2A-9VMZ7jFvv59gH$91`hOlMxCK4^6nkhwi{To9X@nG{Z`2?f z4BfE^@o@blKulcp?ii{XB&pD;uw&<5K!ufBHP`_RGD)hLOf5q9Y9B(P{D>{|f@|zu zbuBcSRS1WJ<3nUejHxE712?vugG#|(-;EOZ#LkTqCGtz*i*Ht82RO(Ouyrsq@ec(7 zXmp%-yi&O35*Xe0)&&@i3hV&|rL&}5=?TRTbk)!fPn9jZXc{@XbIX^GFSQOesjv$i zDY3*p3U4{nd+-bztd*LjLXa+>T|I-(vb`m72IKy5Q|L(8j$j?f0mSe0k-?yF!wlLC z&Qu*dF=UovWb2Oaj%1VCYDXBR>|i(rBkt*|XKGD?ls%OQ58-mS!T07p(tq6Gw@<1 z8j~F#@~o>k-`iA(hl9OF(?ze8z)i%5?{Gj2MjIS=RQh}NJzznjS%W>m7^r8`)q znorD`LiY7UI+o-cnc{u#UI~p>750Fmbw+wjA|=7ms=`iiG!YrZz>zi%wkf*)#ih%` zC>?A?;LW%ztOyxmPHL{#CR{>3$%ae*)@ zo;f{Iu2op@f+M*`1c+> z&>Q{9F<((oG@6lNq2Ah?NYH!5$xnUSHzx{*nel#N)C<&DJAWeW8f0ehsYhTz)h@J> z^p9gZc_W=6?3%ZUS3SFh#g88t1pTH8p;3WgB-YjbqAkwvd^^A1+Z6~#!srn6W_@FB zSrA4O)}b&L$`4w`xawWMyc$Gfp^q%5NsnOKrS$it`^gyGiiGt}12}Z_e?2bgE0^vX;7*vmNrZk0Aq>vz> zMYRTFRJjQ4T&g06YgQo~3?&maE0m5kK8*W_ZelsS*~!RL`L?T91ciS?-n(>FQk!#v zR)W-G$B=UTg3wm>XWv&z7#6K&JY1`X1{_{y&7?Y0Nl!yodaH`bnlu_ET~spt6^^mN zjsgwnci|4@17UIswMts5ab)*^gqKqU0{p+>E1`zI(Tog>%a3|}3Fk4porEf#-vR^5 zRRFp&o(mS%AyBj%F{3Fxs7n!b#G}HG517~+ z_fRHuK@w?vt&v~I1`TF2LXd#9f#Xz+L|4-7urBN4z0ilmg_PP9-e~)tskC-9DiDnW z&6|v*XMcn`G@)=@#iv?rntpvW2DBPc3*GbZAOd}Vn`(d`guC$TiV|{nXK2+R6p3}W zh}O2iIG@;z z1ZcKe@qklHvgk`BrldL~ouACyqT<3R>kLc`gq#h7V3+(k7fns+7wL3DimR!gr5TL^wAYizX`yDCm)y7=v`t2p|>l z{?MJuMnNMx@qb1nt&s@cD;gCjj0i#kx(}K!@qk1Jj8jm~3j-PK7m%gw?-LP7ki2U# zB17}0p#vm-pq=CUNCS{Sf+|H=<~cp+o%tJ(Xt$z-BBxMN^immhc2Cvd(1U6q5&Cst zMVkVp5sm9v2%#fHgVSi0qRLp@ADqzi5aA$%{ncn^>=dELM+_FtW)xsRY^zU!L7dDk zQNpe0M#0e zVAqI1quq`SQhM{UFIF1_TpT&;8nyXrG(tCx4Js6dw61C)H~*T9Tc4GJ?_ z*R&AA>O)`36Af}Pu|VsEMvoJd7^u6Ud~xSdC5oekfYEG6i3Ww5(5^x705?v$h31bm z8V`5gH9&)s>NXWhLt2-$kiu>OOEz={yhs$xl5=n!qksE)8MvKOv9@P7fSe-+j%Gtj zIH)-4$O~|)V!k$x;=-W-$Fesf^1cBYw?++0Gg?J{7e{kTif2jR2VOf{i?3gWw=T&}v8qDpIn$d4gl{ zsqB5kwrfzD5duatVPa4j2ENg{9t9fBb`(;|Jerc%u<=2?MtjjcFiN^E{}cR`H2wO* zfEXAW6Hq}evCjJNM#x{!1e!+UbWi8m0}aG9+EL0_B#(}+%?UDNk!ol~bXib%>?Z;i zjS3V?8iYkzYzq=a@xlI8u5G`64bCwzFfjYfzYx-`3t)(n3fcsV6+ntx6XxUa*Axc(oan2BF(U z5EPA86i6)l%J2$RVyLi%5lyme>5d=k}6$KKDI_iTrid7xA^Y<4f zY=&VKkuPr)kl`4oXy`Vv9fx)s9#|q{`L<;}j=WB6(4a6Q-z1h7#23q1$SC6QBYQ;t z{LnD>_01~MC!(NeHKV{{Syzu+9QphJi&hN^GeWRfW+dJSdIW{CqTtwINdfD!*Wlow z1#q-#P?!+|$2v)~i0$!I-F@c>z+;0Q8LGtLizbp|BYR2%wEX(QfMw3jy_|)V{6soF zJ+zpjiULDP0R!*yDwCT6NV5?q3K8=$3~G(yo|JP2KI4a*Wf-&&$MOzF7_kqQ-+)Oq z_}odeH_gX}rI?p90?iFn05PX&1P~jHn87skaI#s(;PAa779HQ;B&bMb$^k7OFn>Wp ztV)`%(+I;m|D7?P*YON@OLd!Q|H6Wx2(cmt(DM(ox6dQf+o)E9s+0mG0A*6uaG7ZE zr`AFfo9w+i2#qZ&%B4)amLg5KrB{Gxr!dLR+A z>kL2C#rI5E!6z8AOr3!?49%ROy=LrSU)+11TMQQMR^*71Abp%h5Y`Hd(l2)1E@Gf) zHX=uYeRG6FjotI6S$}`0Q#2d#K;pExq1@7e>bs%D9H#-M$7$lmF$dTY4CE9Z)5KZG1dW3_o6){LO8&M!p zoF1pY@ltX6DNm0#jF^#N0J{3MM>^}cT3-9~raSTpvO$5_2znPHkf2kD35m2TQ$j#V z)Y037>Y5uBh(@AgG%zz+FTBFeJ%`89`vd{%W({JoApej@M!91hy;E$_AQlV8Pf>u! z1UteKywFb+9ewfT>G=VFE%6FS9`=2r$6&F+j0d0yfxuX`{!9@eJ^>HT>F2^m%5*Lo zWJWstt&;P=H+mQt&35EyuwiP<4lPvBI}pMG4dy&%o?+Bk{6a9A&B(E!$M8zKAH)V% zIu6fY^zy^DMuoFFlrIck|2wc~HY3M^OT}ZyUMNLqz{Fq>=%9iJ2fgKTHJ9T^(z5)a=X;Qcpl98?svT9F|^ zyqC+>NDi567l}5Y`1?*2Dhis-$gsF^q(Zu^zI6uK!G?0|MI#`D5%J{he{cwTvoG*4 zs$psZ2X8X=*MvH^7%_W9k6WpMNpm6?Ha~E~`1_I~Ta3t%DBr4=6#o9ZQX&fqaVYJz znl2k=9H4(^iXX8ohH%jx1i{B&=n-3t$dD*^iNA4^fLgTJ>E5s*!$IRdp&{go$*?6g zgX2|4hB*U{4XXN@jmVH7ss|l>2ZI&^cVNUhI?Ne@M7t3g67b$YfI}a!*rMSNJ37i4 zf<(I!ITHC7MiA@h7-tL;%|^^fto8V&n6{|h+?o1jt-;&XylWADBW5JlC5u#f(c6}l zv0k4Q`~8~x(k~3EmB5G%j!1q8T487b2%Eu- z%I{m~kVrBW>B{~j6=pQP*K^hV9{!L*0=-a$A$~`DN024^p-QcD=^wk+Wqog2lE=!% z_{Yjs@zsNmlqf(pnexEZSRQY)NzB1wd@tUCw3!uZ6(S0y>RbpmN%Ew*7-G!p#AHK- z?laz&LI^eU7iMVO&eUp=XO|GjDdDi~2BI2b#a@yyM((7@-fqSELurB&?gqGj7$*S* zBe^o5fO8O1M%s}0xjB9&7>ZU69t#=)1-C2)xKYu`NN(j*DPp`cm2%)w@_T}I_*p|& z(D$)HgK#L$uuh87vWKk}qL%~(gOVvr;VaRs;C(+3plH<~7zz<^GR}u7BN{f(5VHiu zJ!#fKUdx#AeQPhi`wc3Dg0a5HdN-V?4(Q8h>=%2|7ynKnkpoRGt(E?cqlEW zfb_zJp8Z)x=cd)_y7Ixzy9azzyAI2|JHw-ZIm)g>JBeYeIcY^htcX5 z^XmSLLMX#U{*$aM{X-HKbrHMTqL(d-Hvu7dZLeW00@A`Dc z8=ni&zkxa>w7a3_jS+z91LDG%{~51^Z~4_Rtn(lk4COFVDU-fO#0naa=X)ioJxLuBU2&zz|VK z#fT`-)}?K+x0L5r5(BpcK}w!RJ+A`!p~8$B{z9`8PIMptl5bGdpe}Z(3rD6(5BcTS z^O(qodpHSbe2^nkQNUd?9jt|z`ym>MNQ@~#xKf13PT%uk;VmqMaAl!{sp_~>bgEpP zJFby{wCa#~J8K&R2)q;eg|E?(YzXc~Q& zzTonsSpgFN%>)6`Xi1JL<$c_hn9oMi<4TSD-9wm+D_#q>Chl}AJfc6Db{%p{PHeth7QsTk$dmy3Dtz7r!6wG9H z9XDz6A%BM06$ebbbF^ttTG6_yrIgiqdttITff^cR7+1%TTovGyn`yjrM8MH(NQpB$_cbV6|Vk#}g8G#xXVsjR}z{SOzeY^_R^wuC^!?UO(j*&m|)berN1Y#$>W__wRF zhoJQAdKh;B2|}dZlpI&m+0Y`XmXkgiaJc)((Z7| z3_mNbABxKDyoW>q(rikJ2*)cVC^!h&R5jvi7h&=`12p)B}!X@ zAmRN+Fp>%`CD85Ltu|SAYb+W}*POabIXNC5Kh+AP!G)|DM!+lw5?z zEwBDm#bUhugD)bkfO&gyGR@Nr~zimXJxe4)y(| zErfdk9S@UkYJ?N_f6M?#vl0ti8rOCq<--{WT?HNUWXlI8iR2=eA|cqpqn$9{I8x** zUne00GYtPs@eShwao-DPIFgX_mB;>#GA1z%rOJ(B>f35R{i8|H_Y!7D45A#fJ%Esn z;bnJ66#6xh|onO9G=&gbl1)f(t0OA;EWC(ZM{bHbuo-c=o3xrPlyG5f0g%uG< zh%tmTEqm~la8N1>W&bUQF7NFY5m+?aks-?CwIejzoe~wS=1r%(OHWz3g59t>?(P`v zDr9!}W;dIwno04E`ZcA59jqa6Y%rvNgQ{V&*SuuO!ZC3G=TO?^O5p>a4)Z$pPBNsI zbE^)8C7ubG=E4?I98-TyA%Wh}yd)upWI~7ykdf=DLmDZPQ@f(Pg9`?i58Ab~f9!px zw5yQW;hJh~u4*R4H~QC<66PBrXlyW~fP-`jiP@ftAex*p(xx2`L@Dbhv_UTlT>v)nHAx=xyPC@hJ=!!sXwZ}*77quG)IRkjQ&TPS|!eIoMcbV0;DItGJ4 zn#*XDo$nm@N3#xvB{6t-CIav6A2E0|Tauy57!4w#gucYZ0YmEDKU9&-xM130iHhz0 zoYidNRvj`+sEN9&XrF=|>QXe6m-FV`Ylmk}^1jXy0|ruRs*oE~$@P-_CDSk&>}=NsdPzyr!@;$2jR zO-%C8CWLxiHQ@20-<`6kXPZ#m*V0op*rvlCc(4N#802*?Iu_udVP@bub5?scBd?Eu zqfv!;G z2m*sA%E-uXDuy^zuV>=u+C0dvK-;1gW9aeLua;mmHt4Ve9AfxjCII^;wQ9L*dgQMeu~MC_{4~)maBQ;vJ)LJu)!b?I?s?slKJpi;D(3sJ@c^hjKXRzz9N7 z{j~cNHpDT=LAIIkfC3(9Jwu=e)C^aKp(H3Eq^2C1dRk)X5C-mjl&IEx<43Z=jt3Y@ zC#|}o4yU@=qQt|N5I_(D9`qbQ+HtxvbT4h8^xQM&7p63t9S(7h*4qC9jYdNX83_vZ zP`Wb68|VVs{csJ3e}DiOc^WPs2Yf3ba5S4z0HO#_g~Yzh%>*AQ0avDU4mJiQ9$0Xf z6?q^O-HOC@RJY(9Jl3*5yZc7F3bP$SU{EGXE?y0gbRm$)REvsuVzg;cc?~1du=@$S zL5FxaL=^@bs=7e0P!9+VcsfMrPL~S3KfAwB=w516AsUPex$P4}GGHm^6d|sY(4a3A zgs6)rt6*g5gSU+hI>f`Ft|f6f;tXQg0}dD`yKaK8nf_40dbv{ zc-KSa^3$wCEF8LzE^E$}P0`O71_Eaq_y5(6Besi);CKWaTP%5iij-wx9Xsg+Qzo~u z%MC_vqm${k;?ZnLhR3?`MGsk8OSzbluE+Gh#68*#DbOez#K58`n)++7XftC*LUZV- zOn@c(Jn*n)`~gQudfYktYClt6l`-AE+B*8&6B9So8x9m9v{bvn~@ zzcUzHbO;86oG{JxifEiD&Hd9e%*C8|DHPx$O#mTV{A|%7z&cG)M|5Tkf~<|*BuHnZ;W#xc@IU^G0t&!B$`!-hJr1VBb6a!y7c^kg71PsJgTPcMsaYK zRV=}K1$0c!Iz)n@<8w*>qbMNPF8CKl24*p;ZHWa$$D!}FFff`eDIi^iN7Q6W&XGNY z@|N`lBN&cNvA2gI3QuiKF5R2I7A-rfB0dt0H8VgeWOk?!55}VN`sk3T)}vL0U@+Ju zR^Q3N0a2wZnstbWW7$}Ha6D9Kw5kvf#!7%oZw_(5FM`+!Aja5-WK9MJYQB%*FU(%We+rWu~CWni;07TR1$SP zcoh*q(glin0g1{ZMe9vhn^AHfOxn!vYt>;FKqwErGNO=YENr8SZlEAV9JmQJ9B|pL zUb5jXLiIwp<+_Zl0?zTLK?IS@rbnQunQoqQ!L~5)zrASc_?Vm0si^^$4%#d?jj*4`2A_g z-33Bx3iJQ$s+#+%sGaKc*R+bEUrZDn?S^ESB7{<>k=6tnRHz#LbLzszz?^N`Ai?C> z{VwQx35287k{pjzut3Q4s=9^yphUf~F5m+?bjYe@c6n9(o&K@Glm{Z}1{y_TO()Np zw2Bf7+(L+$LQYHm?LrmI5|7{*@&*+ib|~7&lD4gEDJHc~--iq^J5zYj-hC3c&iTev z4bI&qAi>wNFhH6uDFNX|##my;Gj&vOqz#oObMg%^4Z_-y*q|0~yU-8jI}DFjLl$s+ zdbUU$9<7!<0MRgXMwsh5O7;1C-k#M>tdb5G!&aY5`2NwX!ov>j9})9fbcbOeIQI>8 z{;9x6+o=+_kaF_KV}R9i_XviA(#2L4_JD(SjT=`nq9B?XpyCd;(;HLX>Gy`a#hM8i z4@kQb@sP;TS{u-U?qsS74TGfBmJC@1x#_8Qy`oQ>L2$DgCEhwE4AJlEHEL zAyTST3ogOO0+k0>F}kkFH&CohFwq!%_A9Sq^lrCWQox}`QsV0!A=80FHsO(OA)0c| z@b|yvYN}rLR#QqqxYDT>1XgZNT=6f$qcu^#PtZ)AQT@)B)1b6eNGO(_;=&E=LQV=U zBqCz>pdqjRdtaQ6oz-?4`_>PFV~ZsZ_uw8%z;H_S+O+zlajPob(X)m3Ob1I8#K()< z*e}JS-I50$wDyy)6zK~G>_8-$Z$sY;&l&FPM2BF0S(OU?N<6k$lH{>RW)Omueo39 zAMKVDcr-U91x46{_S2w_B1V`qc7!?*Dp9$D{7Fiw{g@>G8D>{bouz-o*5~Rv+^j>) z%Fa^KQ-y|OC>zeA0qRnYU!|z}dWaqJo-tT(LhF?`=`dUJ9poQ+63PiEyCli~&;0{N zTW;*68$_4BI&Y)>V}lMm-~ovmaZ^U+DKyC5nUa?Dqci9GqHxoixgj2pW*v6G1122e z>bz6%kJN|F^@D3EX>L8|ASqm5*Mq+o`a4^7*Z~ico+H6Q*yUh)(e;D(EgK4L`&2>D zuDE{fhr`jT!X9Xl;J@hQqFL6Ws-y(r$lgjG2a6t2K3MuYvk7EIvg5uYGaNBTlpH~H z&?K7}(W?lVHV;vXLD)#Lj+15GpdP$;1i{g6NQNnC7d=}Dim9sq&q=F{lsH~_$`KXW z`Q{OZMynwYG_+}QMdv%=kxv%+?iwmXCCktJFXqATeGiL4V}l_D8k)g@`KgxvUaHNj zmLE~BOxhND##OP@ul!ViquG)SkDk#q93AAGxRs|l6WU2hO!DavbfeT#A5i&>`<-}f zu%y6)I1gXlL>}(Wzy};1tz+CgxD4>N{aeszw4=o07YtwxIAz&@nn%el@c94X(vje3 zGo(Ocu`;^;sA3%&LOMNeOmEruQ%U!&h*`3yAF5}e+~o2^AWIXe`ZIh~oDo;77@6Z` zjO<$6r;S0U5r0tb9D z2#{7&=1(TA4(`MuLjMcirMuVwN1;9%Y8!AiUbY8(Gp#z5mc-z}$iRu=>!WJrG_+Vb zTRe}?QFCpG4z2JA&e@8Grg2S5JX$TurD)s&)h^J_@v=?r>I3yrq~f3{~F5lguTb%PYk(f6Vd5Z5tM3mms9G2|57`C*HDY)~S%MS1t8rOkzi#epCYK@Wyt zDJCZW;Ce?9G987Wq@2{^VH>@B1mV$cN(qSJt>x`w{~LRnO-5;&hNeKVs^HvdaRqv& zL}^Rw;+9hIgPw{pc+^QT+$-o#kj1clz#VSg#^ODsc~L?v$%JtABFDtn!WSZT&(#j{ zY+=G)FU=ZcRdHJ3INg2kh`^%Vj1mjOMGwAs zU`ewQr7ex?S_7a33epW2lF{eS=aumAb_uYdphzxCg; zMOl-<8u_2IGRflJWJV}yl;QF(QY%$KDNvpl(iojP>-39@+wQ4CJK_>#P8hs~pk*Ay z8&js0hLK|yMfOpBUfUg6VyA#P+`BRP|_2j3zi(P&wabd8NMhJ2NO|HRtPfms03eS8l zV!D!B8fIJGZKTX@pnV;eq(C{u%S2XYc@Wq#aMMgfk#MZJx@he^8TnP$_oc z7#V2vV6#!=nXQO3h88LU0@{;a-N&UO%o%C767`Nsz{O3(>^_Z^W_+8N66-q<^cVck zQyaagz;sZSJCMPKzS@3#LfZD87^p&wjKSL_rETkZIFV}E=q-{@ddAokVhm^&oV5tkOo6p324!<2N-*pwX zf2-X99T3N3zOhj;HdIc`@80{ITd24S7^G0->TyXfaE@Q3!mQW+=2yp*Q+K$0duxa6 zU|WNrx5U&CTkdDX3Gk?V+k=Rzc6_p`6habaxKQs586?4bMWyH~U3!P5;=CCpF)ACT z+>N>@?u2(K6YR!pu&I1lU#aODZ%eUMIS#EDGlMX9i7`=k0CwmXX)S8*83UmQSdo|v z&$Wy*mY7&WU~9|va2R5Tni_(;CBy+&aU!158}i|Eyek={NNs{9udDHZ@_Qyb-*ib! z1hvmDX-qvv7VlH~7HGo1N2!XJCPXN@bLCO?KZVG%$MM80E@^56v0j=B%NGGNrw~h% zPr{eq(V7j9Sp%08YY}Srm3bfyoV)6dmSsQSY`lG)VL&0zjSHR$J5U)@dm=2}qe*B7 zi7H`JUI^-*7!ca!f1q?<#aZ(uP)dOa3-1%sP$ZzpSV~4MbGdvP6LP`8Ocz?yo{RYu zeyhh(i0wNrL%x!1JFWqqi!cXQBq{jV`|uSmQMH&Fw=Osovb<6HR!J!qS9^B4#rLs# zAZXy>bj7vkxhK%4!xc)y)bG_pI+xxrj?0@*jHOJ?*#hwjvNQ&EkCfKiTXDGlNqy%Y zMo$iB+Uuxo@~{4w9>tb6^b*aubiTYrDLl=(DbhZ<{b*ZDW;RK^lh`zRLy z+ok{qB%nW(Y~o1VpkSerOTsoxoP_h022gr8A*5cr#-%(YC5D?DwVyQIFncG(H&W{> z47HSvshYaxrcN0P@472;6jTv52EpwT)8n8|myb>g@K-ngMNnVwl=sUt9GWbkbCy=@1>I3rmrw0h{7WgmN{i(k z_IbR6geBc=suNWG{W$RCOuNyxfQRS7=!3-I}+VAkmfekM!TD-?(->z9a5y;q{IPmGRI9u-} zx(=5Mf$K;^7n^%|nPKT%x>!OSVC9a)ELAR7i?kH{xtzGKoJ*SsEVC3`)20V2u}Uw> za*Sy`m}*((gAB?M)#9d+U-yobJXh~Y)%#>vd%|%*MHm?YwnN6kqnvk+d%p+K_ZQbM z3OBa(SIk>4w6*veJX?fYaXK%D%(2TKBu(%RLrTSArzYUqK_B? zoi7F%8l|_X@i2(G&%z+p7p!TBpRV*n&_X5k91?KO>HLP>aj|xpcfRP^8f%kz%br=1 z;d<|A6yq;(=In~_TibXHG8>m?UgkK2m*4hBKBOpEHX1X-Yv}XVHdS+$6bynM=7QXGI4)eAU-Tr6)-&lFVS4+#>JB)nrI(29| z$J(?CT2AH|>$4xMVj^F{v! z1%61qG8RJdcUm~0-B9ByzbX5(dhnO6AZESGsu*Hfu~jyLJX2)hZ_bBokur_MF7GEWBiO7&yh4 z>KuibQ^%UALBRXOSjyD!;#AB(PfCro<496g(U8UnJ~lTPk{DcbdvkMp+FVwC8LQn5 zJ|tQ~m@U| z*YY=3D^R}j5o=qXFD6HVZLU}iDGrDNDzWA0h|PUUbUFO2a*u0&M$c%aD9Ey>$S6HD zZ(pU9RT|tIUpNx5<4j#R>FV0+DzdbMIN&Ot2{2X4mx^ZsjX-KC67MMlI-;F`Hkq?C z6=FR*JC|wTl#kAH$#BKgH)~H)`{{`{dz^CP)s*j3F`tC6njn6v^>gEQS_x?3?4!4a zU-^n4Kw^bQbbA}pnD&W4Fq!6y+KOH`wRz$a9{gM}5_5OY7Qv&;@>KWLChdryjN4=nyiLqMPa}+Iw1oXK<^fSFvbV^;tlFN%{=ay}`koK= zo$!+YE;+@vTW-G_-dzO+4$1;64RE&mCF=MUm%L}4mHfgqK#P_}2;?-w4hKxj{PYxd z?Oj#JaXckn-}#pJY_qxWw}Iz-U%Y2{Q>fXeh_#A!$18(%lo_(~l~FxcSEZAv^)*<$ zFRn#*CY+0eo8Rxw^hq(5IS{eD>#f~V7j3L*>U=v%xVz*md@Q|F8W3xAF%Mu(mKv?Q zmZdeo3^ArU$04>}R71zQsX@Sd#8}GI@yg$;nz_jnBEQnX<9q%Zm>SB-$%Y5zK3!XS zK-9v&j)QNZaOKve$4%ayG>j0mJi9i`{^snIYIL@}zgy1r!4|bp(1=s60=ot$`)kb2D6^r9 zDdjk{jx#g{bW4f@t^64Mr`|F@Fj6ZVK3K^<7~NAw6^W(eyba+OTk5nLev*r`B^3*}f8H49Q;2H{p9q%~IXw zHc)%aV6o3xlR8@RtWI?zzS?%o4mQ@>)Elt3#MIqv6>Tf`J`aVNI8i!^+B9Vlay%&a z6eA-&meaGWuj2+g3(+=sxJl+xGCZV68ySx4?E>oy951JCQoWpI=M0y0aY&v(AGXK|OM^_*#CkRLE{!pOlHTc3lp$ppOq6$U_c zsF^W{TT*IR@n|d_m(NO%zQ-S!$Y2p8>B;;qVzDBV3)%{|<3a@2s$+@pS)ul(eD1EHKe?~Fm!rNAnGhds= zVpCcV%yepF%BgwWvLxn7LvHnvbgZc{z*|!4c;#ifO;@rfnOP%=XRheH4<$M4iJlEZ zE3D=wLyW1;QGf**>PnuPhL*UyGS;ZYic)WMa0g-9dOAYiSJZmXsP?+_ggd%ZZnzV&)hSUtfA=n|HJYp2^QQ?p{u1 zOgB9aup>>4!QGNl!>hclJ}V0P<}%tds${w`HJq~ww(8pJ(o>CTry(8=w=Bk9mIbAf z6h~ggr^}PEC!a*{Wo=Nb^;RdRe&-w}|Ou_${`$le(sjS@q_eZrd ztzH)IbDzaREW#76CatA2hc_nghhmKNQEQRQG207T-7r6C`=>=}-#6L|Zr6(%x`an}C8EO}jJWq^aFKopHq1eJ)iRb_Q8I=}*k? zBe+o?gXdX@syeU6k$n`#qX39pk5*sYngS%MX3&@!!8z;xI=dZGcsF*%jj zj-`&r=>qU_YFM>226vwnQ<)lGi|5CvdC`l67a$8C`!KMIb5yyu-OLO@+!9j53hHusP1SQ&B+>@Qan*5FLf)cy zowqnASFEkhZh(Z@5`wHDjEpQn;)9)@(A$Q7I9RIEkVJ=1ynK`PRdy3#jX8AIQnj8@w0~Ccpg-gg|xb=N~ z-XN9N!!Yu9u9~CMpKv2;IWz{5&c6Q4MD@ zmAZQXw}d#LDguYvvw+X4`gwH+XV*Hz&3v0qm!TU+4pTe;F(<;gH}t=DIGJwuuS=zq z7`(h^sOE6JYFeGnW0K=1F&ZKLd_|g(#4Mf5FXz*kMHw4}y-UpJzDd^g!cM~g!)c_o zaOzLo*Qk6vi)W~Vuyp9B6w!8E!XoX*A z%2!V2Q|6<19cpO|?3NVAKDOGk%$jY`E@bWcj*@8)yu7mDdr%!4mC6cbW4Z>tRf=M{!>KcPo1kJiA^W3&(TZM=t!~@ zEL>~4ou+GwgfjmsIjGT)WIDzBVk~8jLhJk!Vrc~EE*U1|9_3y$yf`SsH}9M@)-q7Afru!Kn@|#mg6yCHVj4 z9yc!O1N9QM8@Z~Mi_|^yQMeRduB3wKF=6~LoQ?H+mrIdG=L$jUI4do8n7>3P+?I^G zOS$SKDlWybxMWq*rJH;+jcw=Y#8q5HS<9tdqy~}F8rFM2lfWy5m z#chkSo9+i{PPqQh*A7~gq0{K})$X^tv^lkDa!mvW+Q$*AFE?pXYAwPo?M*G}ck@>@z4h8A%})eCaJ$~nOXEAg{< zaBeEEI1;iWjg3Lxl2Su#;ZCiI#jZ#!sy;^B;WDvkZWoz{q0GRr5!!&b!L!j(;jqdp zT1LJp!c^lhpaM+HlY#A6d!$%s*N|fAUGc5|$KAOlTdw2i`P~toLr&oA(ET!?dUHfO z9QOSEfh*5iBn62O1!-k=R(GGO-IdtDFAxNAEt;*71#E;j*JhwPnKFj& z`=NUYZ)prh>M;EbeLwKB~}MtUxBOw#^bpcx*-OveVJn zc@#7+X))^Mt~^cJ6nqnzDpgC9)Rm)H`LHwNFc_sTH8He;4R}X24Q957k1A*kn2i~g zOi9bU@Oo6zl7iWo(WsQ*%B;SM;xX!oNB9@F}AI#YVpQP^~Kae#;-!= zC94zkMlve&B{kDL3$DdP^~zEEtWWUrsL}SBe_fr|h;NsG_EjndsCgnHcwImPBDqgfr)4;cYvD$dfRJWE4m(4)G#(>KZTD%8*Y+l~7mg7{Qbt!dD#IeDc7BpGXkkPnQc^1|%P4eCwKGaRLYic!u8R!Nxg9RH+Avik zBB)H9s6-xv%2EQSa(GruO(7B*7EUxGC8#vRRB;O`VT8U*r#u@9Zj_Kl&vu}byANzs zz6#dn`CldGCZJITxrs`yY_0iiJ3=j)Uao+7P(t*<3y$M7*>YpuF7D7RTiGQ4RGzFm5}1^ zL{)-yOCpq#o2n5I@Dh(E;YkpsttSQ-7H1Z2>dAB(>L+^!DGwPpg?wa2B}o!#<#`dP+GhHb zI$mC5F;La*ip zH7k*bdHuO#`DPj$WtB>T3^F(gm5M96!lsnMeyJ--;s_|fWq}5ztj*MQEYu5uvUuvq zRNUYwoLGodDwP*l78bS7nSf)~iNzh7P7fTQo3mYn|JX($ux@d+DO5 zX!)mWr-7}-^E{#q%ddeA8tpnvtcGo7S(fmhf7(23KJuHIj%C6|Lod1y!U~}?0K37$n8Wll2dH9&S$>gPm2E34YA`NS$5L36 z!kqff??c4j+VCV_FHybzfG0O-HX7q6P#wskAlu{3t)Cw6{m=EML33H4x7H}f>D1Tq zLFOtKA91dJ=?|r?!TK}o%&9Z|7AG8>%wnC9=S?VAJ-Ofh2qRM^4X|7@nr~b*fWL8) zvIB7P^Bjs(g|Kq8&(LwQFHWdj6y}X?eu!TFrsIW_J;&Jsx8epTJqs*y#Vc-E2G^{t z@MU3r!+Lrgl<|N5k6*w3>;L`V|NNg{|Led0>wn9CdNck{JCP)t@Q7JYh!;GLLbq=g z{NZk7)qJ~-{rKxu5hYbo;m*PiH1 zWb8;|cE%4yT*41j$DTKVtTp>Q2EGgAJs3zm|6QL%{jg;albFfxs7@SUYKCr=u?jyt z)v;y_nH>gpN0*h6ExxfbLIbFKx?uol%ikMnZ)e(*wQ!Dv&dQF|4!VYs~(eB@WfS4~-Zvt;&JVMZlV*1^;plod{CrRgl@aFi*M z^DwmoTcumBMvFNd+L1shnnJCq)Ul`5a2gMMvRL-zhYS``)0O$(Tx#@|P;QzSNA{VEy2#gN zjrF>Yv^zI#*%I=spI1CP?$d$GIKKl;H|d1tCg!yEVu#QnH`i|DdtrPA0iW+te<3G& z$Qy*aDp5mLF7sOEy^1m95|p~G(ehBqd_&EJ*!20#;RT*r!rU=x7z41#685fZc#{t@ z_$lu?3cf;0Ci$4UqpFiB9p&sKyCQgp?00<#+lrYP@JYp}Q zz9DgBWb3uW2D^!8=g9W;h1Y1&^CKFU*cWkHPDf?3kRBne-1RXAWioD*po|2Gs^1^C z!k9%^eGsS%$z=@+lqG&OSx)s_N|L(7m-$xQKDWjN}zn(ihe+v`zIBrSe;$@EC;menI zlHm?9JbQPPB?jF>rS{Tw0;~AKHHqm1d6|l?=Vi@`o496DZK7HUfGlsZsFnv>7hJKY zbjt^>2L;vjB8JPvj83MkUdh9?S+@a{apE0eFkRUdm8CG`zSPY{ENPZ`;P0fFhw#cb zo$CC}r_s^*c@Q!Sllpf}LGyvWOhxCV1Q_-z35CorM=cpXGtWg8%hCa&Pib6uAURRi z4aiL7Ls)vXjwEa4@uFmH%erb~r%uKE5PMKmT{$8}H6pLmDJfa%`LohiuE``G!gezW z1otiWj8qiwfVP+t@>|?HH5GG)#$j^gn;;e)B!lRQy}a}x5=#0tqw-Ti z5T%P9kcr!M8|UrNvh2J}j96%DQ1OYCEDvfSIV&DVQT*MH6Nc)C+bC9bHpPI+ov@tJM4O z!#K9qQDP+CIcdp;x{zgJk}dTe<@CPI3s8-3q%aqQvoR%;KX@g~n|L9A08=6+yk+U);3FhiNrlR_|HDxL~FAw5X zW>G%|DO^sd8_4L~7ywHg-dTD#vWPBqZ)HQ49)ca)kJ3fCb*i88(vZwm)zhWLOjl+N zcbUP5i2sBFlLrBdHSA_dQ$cHC*Qk{6%EBHC1tpp5wo;WzDK0%XD`k+h;)F)@lw%?c2j#P{>>ppqy-mm4w($!;!B z?47JL>Zq-pdWzF2iZj)Q*@I@1D*6yfh3evlIlXa)$AtV6es@;XS;UGxj`qvLA0+(YLtB;5=l!dJXy(bcFBIFyHO z8Y{}TEJrC$UFfV--mzX_Jtn7iH^wK_2DwJ1q*|G`)>Cz!8#(bV2JF)^cm2dQyG&za z>I93k^qeU!^SC$mxF0o=ej8A$u$CDS*%g*j!Gt5|g^MDMgZ6-e** zF=9$$bCR#R+wojdL_S9zTvFq7jB~{L(Vj^1Yo5m5(EgB_8sdLimb6qcp1lip0tfob zGt%bV2JdlGRW^Mii0KpUZs|3{AA^{3rsja!K7O7O}r;FOBhZx%Bc#POZFkg&o@Jhb7E$ zS|rpgEwL=;L=Tw_#Ts1pRu@|lx1kRu{;ZyySO>Ah#qhJy8YFfFDL29JT{?!Nd?SkY z03i934FV@Whv>>C8KBZAA(&sd%tlnMTthdHt#!X_wNky)@5*wK)HdC#1|#e0F}yJ2 zpvEe8v#d_g>tsr5mIqp1LnV?IF2g4z&_a5*9S33@OtWVXRr$`{JczP6B{CjEJsPpK zOP_clK5`;A8&k^I(L*g)3|VgA2*jQwF{_F%B3C%4#gr>9>0+LEW4;Nr6NhH# ze$B+42MVTp8T-}KL|eRfZK2-XPai2!R`e30;HRfrWJHwL-o*)_@l$vHJ>1d(MN8{y z={!4riZrFian9bldsETMT9{z9lgY%I(0Mjt2$?a0dq89*Zs5kv%43IKw+szK7sFqMu1W#t5d|?A#^#_bfx0zItERaq_IA3_<3` z&$2D4!w52xr=ks)YgB9L*B#ne_-vrw?^k&?Y*`mRC6n}D>CLD*nQvm4JW-rv_xcpC z_(=36!i=S=nvU(GPJIV6oOW5s33L51jd7mW|NPUphXayrPtlS`V|ptZeM`fLrCmy8 zO-xSiET$rhYcY&oX8fLn@nHa5zK2Srj9_XHL*-`zstg7dH?-kOo~X%RnX^6E#v~^e zh*Oxo%w(qL?x#;}Sz;EnbEpb`KtnezyWD&gMi1frK1G4j?sK~YVSaGsjhC6pu)lyR zmVTOsZtP|pL|)BOwpz%Pl*SyR^(6(eRkiFYP^602hAw{>#$?DdXQ=W-7a^$lARA_G z)HFp>EAw9 zAyaAAj`%5^?BY@ivv$ZBRPjy}lbQ;>R%?gx^YUxfETv-NMk7-~G0WBU?DNY~b?lk? zwf+pOyk=_;X_BSG^DBCN+vFI(DQhb)s$m}G&Qm1Pq*eY187m^-mXpemR_vOPPxk^Z zkEdr2OqJXOiZsDBrHOPe`vj-bRAt>u5AejO0bwU9(UO&EL}J(kh6!Y89$^?+BwAFz z%nXJQ&!(QItbd!Do2;@()~1yeFk?oPMB$}U18;+H8&>rY{@yR4DRWs1vqLNiz~mJo z7Lb?k+R$1{h=!|}xM16%goPwsn$*z@PbmarJARfBOlAdDYp_e_ix{S+aL4}aG9Ftp z_phO5iq$V#!Y>a52Int}1mYzcMqHJ`ey{k3_SlS|$^(C*{qf4u-%U;0X**9v{@%*(gD+vPq&C2p+_Kv{w!xF4A%rE`!^~Rb zrEgkNzopo6+Jd1^&MCTiCB*?bgOiuCLN|!rY5yL2slnNv-P3a4^aff=1U1sLg zA@o99f_^9+%eaZS@Xj?&hB@Wu$sNRP8?s89Ue_v$|__h+t&0FdQ6chifh zA|~H-OXaWz;+sGg_%=%K_&H)ydUdPnTa_@B*GBC6(F!b|daI6HY2-h6?_w5dM`s;- z@y+Y>bl8U9v+*dVBYmY^^s68`iN8syqz29B8F$Srrs1odVm5APYEoIl*EK9wV@I-7 z9ju3WkZtrz?N2KX%i<9pb!lSE>}h(>NSDu%eLQ(l$9X5C3A)=0pLk-$LGK`uX>g!uM*`^f=}BM zC0xg8Munsrx@ZJ#58LwnX?$zzS3snPWq#y|tdl8e;hiAH&(Xa=gUQ!Q;J?bOv$%YE0r;tG``>nU;aKZ);6Z-WgV-k;OD-9T41Dm2Zr;T76r200lS#Im?xYQ(Z8-) z$9`RTX%exX7KcW;{f?jr!qSa=6eK-C<{)DGZ4eL3Xzb#r+Dry6xl63y;+RUvC08Ef zMCsa9AlOIrYOhy_R_$6$`dv!DI^N+z{vPc-jbEcFwKjUzT|h zV=B+J!!syEXjkEF)Y8G+hmDA9GeDrjPaUbBMy7-qnj_jnzUfbXzet2Yp*jYFdMDrH)4;xWolx5^Bj?y{uv+)*nDt{In7X&$i12>)qpJAq6 zs+SU`^={?Z$YJK-NDTW|O{hp4J98OH;&nV8L^m*=)U~!eQ&yVW=>fP`H=NL@mg5Kw zoYN>w7J`*`gOSN$=HN&S`$vtaq|skl??p&1zM7^7RKo#{3vwKx!H3CX;rFV>Mh-Iv zM`GANYCa`Zdd$g%);sri4VqW0$6-7SQj>6 zG#Lm+5fGDdn)!E`&yZ#QOoViH${KYagl^Kie2X%X-A_>hG0{2-rABhYp{yoK2+B01 zLPAifo6??p#dI?j4%s_gbR&-vmGaG5IoVD?L8tNQZ`*v6;Sbt3`H!c0{~14q&YuO|i7H6y~y#*9wJpkPTAAft@LgvB-I z*e9vvJiIxTT(aUcSQIQvP;DL4qIzx8jtY%$gXJNmAzN($+(M@6ET&r2{4NQMwXJXa zf?_c!l^|kNETa^Q%C1!13wocSKql){sH&E+azlVI{u3rWl#ZesUQY^|%9;7XcGxvC zCA@N5Pq_-(6xaGud?M2-k1SWHMvi-*_PW_L4kP`_YMM8FM7A*z*i2?<&P>weSupOg zQlngcV8y5LRxw==*NB`|EJk(YinYwsukNRx=+I!Gb3d(In7yp~SPo_jNkvTNKV^}< zj;0UG(=hYrLN7_29Vb*5Dvx3tv}T9X$c=7UzXxIJ$=)gX?z`}P>|4`!*rihfF%D`l z({FEKW68itZ%?7>=%MY<{`W! z84-CL0j{LqKsu?5-6_waUSsA2;<)`x=FWZ!od1oYFCxDqE zW?bXtU5{i~zk($mQWrk5UAUXHl_6`Dr(CkMA7!&8|1LD;7IR;_2J54O7jkH&Lwp~8 zc|3ZX^|MLt^BoLScG)Ron8e4&ezQ*@Ec5vE=yt1VWNz%O>s@kvtWqzM1w2`gHT{}M+7I2-O>B#1fW^q(%I-LR zhu$R4Dfx? z42k9fF4(|)h*TJYr$k(|L-U4^5T9)aoMyewQ_*<&E`+h)@cIt%G(zhHsbrj0{f97- z(Y{0p!z|u1y%PShVdO`pw3!^YtoBlQv#Dw0x26b+MSguu)7)S4g+;GY4jLdR{7@2lEeZa~sS7_EwEEk!T8h1@6RO_#80_#<9 zC8kSfaMveFAd3x8HST31yUdjJD|um6mcnKA-#d*FCBtL7Uv)dZi+KnFrZxD|E?nnC zxIkrbB8oz$W%9Ln+oP zO4Kc6stzOSl~{UyQGPM9n3Ri-wA3fC+xJ69bnP&<5vt?zIpxX<5&eRCYs;p{PG6u> zjO}7t<>-C)9N^1_et_X=U(&%gZIIzg(;iB6=1 z6ploE2{z*xbc#nLo7`Bi)Z&wsj8=%vrWagwAn;bEK%I{!)6*%v#zzW(*WBQHJ0uWsZp~V!835IeeURVxqX4Gn_T^l8ZRZ) z!<;3>JSmLaEkgQ424oSGm-gDzC!ePBcr%XDfr@iqu8 zOz(dBNcgnqY-d!gF8x_5yX>6Q#A%QzTge$8h7jyMtm#m`a~6H$WSt>6(M4ka_;|bg)r4!=2WJ+-5v66w@XZo=1`MO2j+BmT) zUh0bbk7{iT+~DMN1kS`tRRqortE_VFHYxS+*;&AKDka6@t=7+Ut2fKYV|3_oz-UaF ziJ7$1()KNb9LJ?u!%wm32lD|5>+rOlS@K3Z_AE<8>sr}!Dj~_Qbc1RUjyGn3nKO59%~aU+HH2|4?wJv%T!c!mesy!;_t)kinI~*TQZr> z?-vI=iP;4<4~4aBNJ=JA`p`I%TqLi>DBr#T+(4_A_7F6TZS2l=f5Ph=$TDHATpo&= zI~x1?5tB&=RPHvk{Q+v`fY}9M_c7zO`e(k)i9^pla{!ig=!TIn<_SLc#XY4WDH+Qc z%C9S$8)&uC?ql}qw~qskUCW341HwSrc-3=^?h71hrDA#8Nd|_gQLmJWX~^gwplh*` zTtTf`-UHZhk;zEg7JEGEr)497&+vI5ZvAB8_+}bOP^f!MYLtz?6PM;Lp~WsvqBl#& zw&Ao~mtvx+T(6tXLv~ZWy>D??ZWKD%6Aj)Y^T&Z`;<_xnml?3p(fBDH;Cxs@sC9_z zdFKYzKd#-_Of0zIlGIC@ngAP}I=xGJ&W38lY%FRYH5K&+XK?oeYTT4mjN9hZWy~U} zW}#V~A0}>rR#xhbAh!?3DB|Q^&QH#)4EG z=T*ujkE%ZMaSA(i&AUuSN@J2XSDK9ur{!}y?C4Y;11zatf8{cdTQgPwsg${tp~-_tIi^{OuXn+47wHH z1hrks8>5d6+>|rw97b|(tQS;l9mNq56Dzfv<$=|6Qu+X{QzMQBXeT4mM}Lgl-xDwP3S!BVvtCpu;7w#wz+S+YbS(3Ip>&QvI%sXY+SQ-) zq;!@_dYJjNjv(d@hPcY{W8u|!W|QCLdz6XnGE)XIR=atWU~>j+Lp+$K(P5c}rDetK zK=*=lCzRTk6RyLE;dnIUVqbU>pTdy8+4Mo{3X~|Kfg7F57ZH3)@Llam5G-@EOQ(b( zDi`G-Zkz*dkEX@as^cGWZTTHb`#^SgNX`kdrv%+qjs&qHH@jp?I+n)XXnbIDZuaV6 zzG)#W5(eqS4(eX%pyr>x1?6Et%&c424vRQU-Ta~wk3ZV4UyG*C`V zGkvTUtw-hb!Ca$K(yi^wLc(Pq1pggy+W$;TGtNzinzLD>mDa!T*!!>l_kaKMe}4V1 z|N5{0oo@M5T=}e}`?bPF`^0ZWaomuW98c;d=ueD2BVIXrDaAJdEbu(cQtnb}z}-H~ z>b^t%zEP>D%vd0dQ~R&R_vn&fM5Vkb)_Lgqj#)G;4;^?|lsq|9@Oa{)*&VhjvvvX# zWj26VeND(wz6nMH+qqMbMU>Zs>_4#lnQK zoA+Lpsxkhkmv}fMZB%31wR7KvR^%jsPd>LalzuZ)gHyMC<5sGc2UO1qsVl@uxOE~W ztx6xEBV{3BB7Jlj(4&v55Z$0XT}?8|@;Da4LoimfF#9N;48t(4*%Td4b5-iFd);0~ z_*r<-iF^~kxVGg!xp$q01ivCLyJSiTVz9($g=_9$?1z>n(ELc%U__#9ecCkHATjEq z?ZP98m0L-D>|fG1;!!7w#X~EjdhA#IUK*g1`Qreo7bVfNj7+va8H1?bkdAOva&ROC zCpCWi9(~t@%#9P{&E~@cj%qoM(BSGxvILWqS>1hBGD++_97&R<-dJPFU~FBIh)Q}p z6L%&Tvza0HH^5OZ$PpTR88^S!cvd!o*m*dT#Qa?oBC+d1g9UG%P1V%B%Hf4ZtsqBe z@L`gN*C6%2cf*khV&~yV67zSBh}4&fx!tnq^F$he%wNPskRu{$G5Ed8vH2o)9*!hI zIZhWj<}nJhg1PC27Z_=*#VkhxXi6hj(%pECBNmk$97s`t#3t%wzLWkWBqTwviq4)YgHXe6aFc@5c-BkQFXUSL!Uas&su@$d@;I5J7>JRC_<^Fo1_xH>LW zi4wHu5;G5nlGNdm#EQ=(bjx@oCDkMK(^*ONN}sO`Qs^nFo~M?|sbOGvBH5eaDA>NW zzNy^|Mb*0@{|G{x%ZnVn13#25g`jDPj_IHdD( zbaZaY7^b~B;UlHxV1)I^`7Pr(Pb>9c0~I-)=wkTXd*xt?dDRZHp8t$gF)OSftC=tq*MB;J-W)VPS9N1{lj#M>v1Eb||57fyzU&JplKpukMTxX$w%MyTjE}N45d@Uoh zzp=l}O&^zbo?BuHQV7vXHv3Qqvuw5=qt=hjM|rZ^Xf>s4u&Eg@Co}8c1u>2sI?3(W2)gy~J zjoNtEbyL2XhCx|81|OSfu6kug>Skg@1dRTeT8dFN7o?t(G8M8CZjDGusem^s4C^M@ znw?bINzYJ=RU7AJn#fCy{j_#cY+ZV6#6I$Q@BX7Eim#|V*>t0_j%_QGa5ME3|e4douFk%!t z=KGxFy9O*GQ&hnTR_br$>=3(Qn5m%l-FMkOBYn-M(5*qW9gJVZ^i#2}J$*MzLsdEK z5WmA&Us_WbAhh z%STzV8WhostQSr^uj5ESMni(D84;|-E-zmMaTCeS*v2s^%ASU&FMNoU&`v3W&Q2M^ z!~w3GBFR-Y|3yV)vqnxQPv3Z+roc#>-BUP!;IE|a9;5t?> zv!KU%@%x}_awc$@s9b-}A3P86cyJ2avFS;YVW2Q|h7fSIpB_nHbYCTSR6giwSVeg> zgdW`LBWinO)u9;s0?JFmN&fvu)0vO47fd!B+xSV^jl=6!WEnd}@Eye|%yZ^D<3-LZ zyRk;1CH**(s4c2t$!NXqN!{~|MBf(RsdXAVLEQ6%v^U9DQOsi$)#4wUR`cgLCiAk; z)vq#qzf>Q?-23R1|(Z~vURGdLZ)$1Bk~3yiyz44QWzk`F;(HhIVVgja@skCjl& za{fEdw1TxGg5nbwi0ev2K|<0rW_;IXQM+9_m2nh{(v|V@lGF!x3zcdQIgXpq(-`7w zOzj){eqg+F+ciDDBkmp9u#QkMj^BWnw;1eQ^{I%gRQk%$Gp4&XDxzb0XYUd!9aFrL zyI_0@fCD2H!I*NxqeltG)>^v6iDN1%v{P4akP7)@zs@qHMn5SZAx!~i)jEA>Y^L2J zOJ3}!N1IEkmZhreaC%Hc7p!$6WuQ{+*-L^IRLYj|D*3+IrKhK=bQk}lR7N5-es6x% zYQah~Ta{v_8L6GrRuOR{743yrR;|QVwKDH1LvSWeLj7aEa$}AInmChV<<30pNZcGt zG$Lu0c!iX-5B$-Rjp-4!ir0Y)xB8L#5HWJ1R(O63y(a}f^$B*?JnI@`j6(6>pKrhDibn>AoUf8?LHI>abYL<_q!Yt z6bsDkS9lr}(c<%>hU6#Ou4iZp%{!q$_|OQFKRtdp*s`z|PqkNY@@nq9jAmCiUm5TPIB}pi^d~~ zr+s_w^SxpSZ$t4J`JKLoOb4iYxh7giPwZaP82PTA{%wlwmO;u+F>Px z*SClIS2BdZhmvSdsK^J|E8oK^d+6RPrVrv8m6Bp* zkJ|k*_Th(AY(EbDF!lp(pTWU9K9`32Yur1-iQ09`KH3JMV`i?@u-^&cL*jdUivt(Y zpoGaIZRw-|F-|hJ3w!?xLFD2)(pGSoKJ3msrV@RteqKKW){|mthA9He#)?Lygca9E z?6;}YpQfLsTX<~pHsRSYj77_qB`c&bPpJmmanwIza|6Z+@ZG6Jy2~2T*~Z{Ac4YFC zPUSoJ-6Ocuci1hJ(4+Zf1Y2O#I(?keELDw7BNk6w57T?`i z%MwC~@cOC*J?0%9(2NSj11Itrr31P>pMEI%2%itAul^P>p`BYn{}$&lL}5N5^?&nV z|E%=Gwqs8SxLXF2vc&<4xdNU0^oa`P!lyCJgZKF^m7TJn-E;9x6n&&m^!dWKNa&m~ z3MB|pyV!SYm`Asn)+8GPupd#c7%ExR#H^^KGV*aDiS<##j1|2EcISotRRFVc8Z7Uo zAXRs=c4c?@3?~w5CHN3238@THo*ZkWjH)Yz>ay3w?XeHdQTrfna|U!@>KVAw*Tjyu zQu5Q>KsU#4G}sM*WseE%o}GUBj)d1tCX6gA|0<;;@@rN%$vY;+M^zFk$^D?-Gu8Tb z6MXUgx~qYjlfN&w&qvtt^LD;vS^pAawpVtHf6l@HX2Oo*=}FkGsDYx#Q#;D`o{}^_qXk&%LY0aOwVRekk%u{Gt7%aJOZlK5ZcJI^a%oyN`UAWz9rv9gq z855KgW2czzWUz2?9)M_NR*Hi!yJM9#zY)XCu! zG%gm?=!pJlU{s3nF*7JeMgz@`%g?C-k(;h+)ctBAt#x4|R!h2q7kxFrf zgIzIBe9?qP94~bZQrb*s8mvCSKq5r)Y#^4Cz3cZ>JE0K+q0HyopHJtf6fq06P{cG& zi4lRZ=_t`Qirssqdg#RkF?PZ5Y-+Ju&Qy*w9PEmLcGyOf| zd-mk;vpfB8Cp4<%*hPbfGIB@RCW`cL$08Qv1OvN5ocg36Dw|-YGBD>>wWw#{BSaQV z^nxP4jrONoINc;3SZrw6rT72}k)*;i+|2QFWT{`>Wi*}}In0XbBgQ@zsTqjJt{;@U z`sqdTIZkk}FUFZ~nox-Ym3tF(ZoEfw-K+(pR*XX|Q0|9g7{HNBa)OCNVa`V}u0){y z&WaBnJ~8Djl`QyprNhMZQd7Q(nT1F_wt}Q_ZCi*vONiZ?y;rLYIU7fzbHK`v>K1|RO(D^o+GUUE6%j-=9`LgxxI3Mj*5K=Ge%a^1;YQ*4Kgv>X6R9=d7Ak53zdTt<%4}$%b+s%tUwr9`Z6*c z9E}p~p#E^2XNq5^Ze7HqD{C1};5c*n^Q)UCC>heP^TIeSuKiwuPO6-Vj+vNI$vg$u zb7J~nu2U(YmAJbM^%|MaB0=D|0JvEtE_`IfWV`L$t+;$MlhX#aZ2W4c?x&TX5o%}s z5PDZsF0pzY8ak~E{~Lyp$>Kt#8)ResGBpzwWF_4)a#E#PURXUQrLGe1b7;d`Ct}d6 zxCWX&BKnEYtGH;8HB<(@+Gs>8_guR!Ed0hKc7}RDn|7)?5rMUAm2=CAO5{1P42MwV z@T{1+QY2Iitmsq>XyFp!MsSCW!zgXL(s|2;$YMPiL@;(Cv3G2;xcvz0ar4P7HuYUA zx1ZdI%>QN^X}?G-aENh~ZbU*QbKlG@|6;}hSD?`0N({bSGot!3r2QE7@HY%pzKocU zq+Yn&=%~OObZi;g0Z$1dGvQ57;&hEe)8jdf_|ZHm`?B?t3CT^%?x~5%@(jqpv0r|A zd5m@v9O+EPi~2x%f$^>yluJsEg~-z2(l;&BAv+Ymq+WE4Scp_>mk(AhV!8lcCQ_?a z@z|cZWo!=yCtl(+w4!LozSjJ+^z8k?iJzNUx`4#oUB`RdNSXC(_ zD{tXMrC~UK9!NbVqz~LWl@eB{%P8ADx%6aiERNC3gI|UQBQrKFZule}wntj^y84J( zO!7A5jTj2{MXx&Ebli}HCYmq<>{zh^9hsd>4-<N(d0=nQ_CQ^C&CY}cU+)PZjCVblA(V$+sqJR&i$id(*oags^0<3* z-mTg^C^s}ND3*)_T6md|#A<4xDl@2l$^#;8@9YF#=$$6%&hvyB;iO&tjdnla?=4&XkHFFsf2{ z46Vn+EU1?!TcC75TWB1Z4Kco($JYi9>wr-w6 z;>$QWi0A@!nMl>~6MZ6mgJqiVfoRBLBMl100`s0yy%k4=gWnYIK#2fIOn#v52A7*J zFU~f(psDA7Br+yVOr?h))vY+}JWE;nHNe!13bTudeX+5G`Tp#ZD;O)WZWby!GnV7$ z1DAzI^^3mEatOP4fL{J`DkB!GxbLtfxaoYvF?5!pW0WJTC<-b!wT6q3>I3e~mc_v2 zY!(^w5ef{X!mGubAPXd#qJPgfSmH zbAb5>>IJ)nPPK+H9QBpkV<1~-CB@-wc+63)g5{$4k1DM~v?1sdp>Zl^DW*cF{>>6f z;mm;NM&*~7H2teaDn>$Q;4!)4_(^HjOI25HNmR98=1%ee#Y-`8Vw=l^FwKo5(xYW<}_|=u7CI^o^GIOL;_C^3YV3O35qtBMGRI4KotaS$PgC z7dbruFVd)0sziY#4UJNzie|_|Z?mf?1YSITJmtsy(^T{4qE;qWz6#cJV(O>o>_OJ4 z7|vkwAPi-H;^&{Q`^)Rc&@Bm;lI&?%5iPM!oyADddaX!^lsT!@EHA9`z?O0jRTfW* z=>xbCZ)6ZMk_optIHE&GA3@+PxlmFaxYZY zVVoA!3wE7O8L@%xiqIQ@15NKVp$AOYLN^VS?KA0SDY7YQn1qq=-6s^Z4Y{LN)D!Kc zbAyCWH-xbq$MJ}eAetxoEO;Bz8uZFaNHeOUJ&!P2{n7US^ zXq9=1VyQc zm{SJdQ1!A`GKpmtES7}w_#1>DBqm0zO9H4k5EAjCv2kG=79r5G zwIA!mOs#@#(ur~- zp3Nts25m>dUO(fv6EY3qPbNqX#0n{5W*S?lUC=-3+vo&!q9R`w?N0o?HE0;`DjFCi z>P4(9v@oiorc^B4sALSr%L}pRBz3}FCu2Y?>D-xL?X7Wx4-QYkhT)LYibdZcwaetX zXWoe~BSx_eaZj2!CEk?Lp3|1f%rI_jd+Wn-mQy_~>$NJ?EN zqQeMSMOJho2F2R?^XJ|9dInP|B@HEs9+Fa2=!;^}97MpM9v&2zf@Vts$N*NYUO8d) zl$g3soQGVeW6-U2o!XY1ARP@%SP%INCUH z!D;H~^zVm-^;D$6i@uk6hJ>md5ooYeKZ@c>&@5aUg!RJSLPuq%gxNNsD0+rpo+ciT zE1H8!)xK;a?U1MD_0Arg!7?x31nWUDb?b8)a-GaWx&>U6A2&UjYl2(TD}O!Hj!hO^ z8fB^c!)el4j3uRX#^Z`Kar0I6dQwm?*mXK34Z~DzTBhawxb3VyuAe9KvyS-obWsyo zZSa)D-{;np@kqP|X9~88DkcsWVOc79NK|7$8EO*9v@~cipM?4ig1p?ds&2d$RU#u6 zW>hLq;q|1Tx@JUp*_hGElmKJ8)kv4=LaLcK0^#yk#C~Bm2=BfDn>65K7rZcI6PV6n zBq$@hc&SneA|-=TEGSA!B{n5O4MPC>UIxpndhsEGF|BRXdIl?Q@28~n0bHk20!z12 z8)J6tcggp+lv?U6CQ4!Hbu6ovg^JG1LwMPmI!l5&p>89iGGl=&PAi6*cQIyB{t-)3 zPG@r)F-C;t#RTdZL-=oj>d1TudSx&r1Q^O!BM$@$cgjVGs;qB4wNk0qFfYh_MD+sR zLPtg3pk>?15b}In&yR-Sf}JO34a&r&aJS)2F*}oToDh&?e{s;`DmxDW=H*t{62GdXF<>?_ zI`AdL#MRFqjQlKnSeEL(Hs)16{6m-3a;!Y>b39v^6b%I?dQ_?UoVR20k z^GdiTlR^|}&N+@&gm9Hh4TY^~QawwNp33Cs>fXzz5VP@E6xFSG#qj-9W(;_3l8$KI z`EEzPDoZ89%q~WEQI{jvBvWjpJg{4&8#ZiGD^*8JLoHJZNjDMToe6bFv{mfJ!pyFo zCn@FIrC=+6!$hU}Ou8ZFBdQbb1~RoOmXzA>#Kg*0?7~M)&5va|v?}U(GSxcf1(}nq z22IsPO(8RoQGqv@u@J8McT9L?u^|S_rNsj)N5Qoeg^?b5l^bHj)``v$N)4G8&{{^N z+PL{DUQY^I)Gw)RH^8pbF=&|KHCdc#B0UGh;ZBUV!;XY8a5BOPT^^AXBSgn_;}T`kOJd$FIq2M&m81 zSJBR$MJRyd1eiy8lFi~56wLbdY86Zd9%VCBK~YO19qp*a@u8B8EgEzdHS`tzF6f%L z+vsGIDPF5#@)zy^m0!F`W#&DRliwT77AauIx0eQ`F^*G)!)J!;Z*G4fBA@#GgUVzhYDBb`qvslG_oGM>-~z zU6$*ufZ3(8=eLGgnW<7Ru<-({y1@Iiq)xEwWXcw7{7n2bq(oUdUVM zsK}QP<9!%K!dU4!O3OzY2V)-7@iS8DCm4x2uy9z47KwMfZZ|TW%wm#p_Vm>jt(Z_@ zfikaGnE?fvP{1ff{tR-(5YpAg!j6&=GxG9XupSdrKSuB4XoXxSQ_?Lw3gxZ1eIk{V z>%!*XNK%$pRW4FGOXS;VxyWf)g{;e&pk<&^c@j4>=0w}_(P|~l@-bU0w7SOaG!>nh=kW58w0iSyf|r3xt#)NSk5Z+&DP}Dx z7h`>yenU2>lPzl@qKZwUxS6I%CSbDS-BPz|^DtF8Bd|=os6-5^8RLwRrrgI6<}#tBDn$gAg%g#= zLr6U)q^=JUQYKDxDkZEWQhIqUv@~2Z=AP~B3nR*hUs7hzlE#^U!q|}4W`2Glar2s^ zFjFYDP+^Z*m;;fMTN%RmixQD4mGXkAyv0EOj2~t2!MgalbT&%bgeNtT4Q4+lvj&Nx zho_)S7No~;V0DYU*9;p&rInL%K{j4D6qGX6S=58c;glniMqn<0%=pzgd;=9)aYrIr zK__LR@Dj*yqfX3`lY+BmF6w2VVqm69soc|S8TKt*TfNyH3Hs)ry2%n5e`8I_q5V1&0Ak;-Z)S#^MY zU^ID%Z=Kw{hc@Mg9w+PcR>v^pxq}NTDfr8%*Jgd6D&-q;QELMuDv^hv;>0j>^Z_CD z6ZC<~!iY|zj8wY05&M*A8D^+-C(4JU6J8b>vt6Bjjn|c!xku`E{77i=9CQiK(NNiV z1SEqSS`^R&XbTOUkuppkTW8TGS>4WxUT#5&Cj`@yuOZesjC7&ixFkdjtW>I$6IQh* z^sJOVfa_FBiiIz_Qkyb|{w*|vjp<^iq`{0ndTQ?$oOzRL)iJA{)ru4TJ4?)h&&}3! zT7M)AMr()BvtsN$UOL0@`JdN|lC?x#PdzmB=W?a#%d;v|`8HgAnMGCm-^vvP^#Q$1 zMP;R=Tc}pzK#5Cr{szpAyIj~^FONbtjfO!dDsyj~v^x|U$sJmD`;AmoR-VCWd->Ez zc^&OCh3cc1to&q4?8`|{;#h1ZC`H-j+o!=I{Ohyoz+b6cZT(Tq@O_G$RH+mv%?GT< z#MG4{0?WdQPNa1H0E;aMJpZJlzn z2s4$2OxtqHt7w6Y5+@PJf)4ha1uu(gJrq|KH%{bmRQ4hv#c<6ybuwCYk)TzeL2#9M zNiz0+qHEjWs@ce>%#@VN2`eW#Js>yG(3P_U6;^7aSN!a>Vqv%p$57`n(k&tlxMm%T z6WS074bMw#78#nAn<`3gQ-;)Ak8Y@_7Mv|HSE(vE2gt90ymc>3YAVmM5F}*HiwiUQ43M44$p{wL_!DLl9uj6 ztW6m$RVQNQH1VQRc?zxP#MHGSM$5vBPQ`#$o)yGCZIXw_55!=yND9&u#&dvtv3OY> z&ne>Y1Kt<02isCcnz$GKk_5nlng%jBZPZ6VmEsFoWvpsNidLBymB>?IJtwBF6fsyP zUUV`gxH#i%OJp3O#Q-Fn^?s`NuW?63&3_ydTp^{viS2DE6gWnpva3#I5%C(KK69vQ#B<7J?J%r{oreJU>f&{8WQmub{0RN_gIH^x?_I>w%gvU8PZb^wZTbX zqBHX#U_O#M!EPW^br?~wEb}aP;U+5h^(m7G=g3v!{tQlD;ETkoapu{Gog$a+~G1g#_?p&%M~Cqg>8gMyk}x z52$B^)YajA1O+GqBRZ9`Qf*oZv0+L1(OgUv+8P1XZ~2iDo0m4YiOZDM3hE-BBB3(z z7)TBR=9&;3x8%jFikN^@rlBKU#%Ysv=JGq6bmqGo0+~98Z!tqW^m@IGi4_&_$FO=x zNEf_yB4wx&dlYI%#gUI&psPwpCCVP(S*DAx{Ge3z;jNjPIo~p((s&H0XJpj1Apxq) zh)$%06n9)|mqO=6YQ3mIF!TjT^_d&K zoXSiIEg~sYXG#p4wMrv<28ml@t{Ak_HK}>h43t-_Np6b z@R^y_jlIGQMt|l-)<(r>!OT3-$3s&rOIlv*f+bE*4>hFO6eNo_JF%wGpPY(#Vr5n| zA`f9DPS8_grcl))u2Ct0g%-_}x3hg|X1Y2<)(L>}vt+R=o5O$oGyW`Wq+lWkBRMG2 z>&E|}P6rFcf(1$z;fk{H+ZbGgsw@n3=zk4ABUS8F(ld&N40At0bja0>O206{l45rh zS4N14(lVf#BxWPM*|W5gX~M@!YoOBY^Ycv@4V)X~m%>n{S5Hj6=&1;({TLY;84#O( zRNC@(xG7k!WHz*QjuP24*lqEC3E`(O)JGE5eU@77EBjhhUvj zbs2*uztu&k(EA}1XgcZ%XHtfuavY0bXDb7<#@p|1WkKtvrTO~oAP&bm%xG4c9yLoWU zMm!{Fjn?NrYm=tD@nCEIeSS6Cnkm zod3QVhB^jPA!@#4N}-G2!|P%GNE%G2qlNniGMf>wIW17%DcSSk98*u)eNLURDH^n1a2r_ zoe>f&S)?tEAO|y|$zIS$%Ul)mtbYLvRWhV7lqxlDMxo}{rvhBYVEI{Pdb3PqB2Gqh zOLSqSX^6p1?8qQRG~TTXS5c@HAx6?N-R4$hsAV7(qV8L!G?+Lkv%9E1W&5hwhLy^C z8DB{%hwZD9cKigv_;(===Jmit`O4#zGzJ`GNJ+3Up1Y!Ri7s46p-zMhhMsh}T$b%b z)?IW#O4P`~lieg`apz^pTrrX%Bu6-V6AH+Il==dCjhTx#HYg**FN(R;rIp?C{EGn^ zclbh#BBGjwDYX+*(M$PQ7@> zAso=e7W53nX?axfX-F`%Gf1-Gc4XW=dpl(7wVK`jvyiA1;(a#ci_oywvyp@+1i5{g zxJL?ZL_>I0aDQMU{sJWGrAVM)idRFHkr4sBuE{u!_*CsoaS-DKm#_(=F5zd%VEG&l z0<%>zL@-D_VPqu00V9F!4fF-@iLdy3`9aW0f9x7*juv_mivXO@=qBB zvoH(`ms?5{?oCgzCTA%xqlEd3IB5~^M zUm^jbQizDg@YBn31R@YqH_8-xLX}hu60&528BUcf5W4kfR5K6>(I>9@iLV*a7=ES} zXP-&J?Z`5&=WT=s5Y<8?K%iB)BNBtckqQd2KIupd@-=H1NQ9{Tnh}jLy@J2sNq8Vp zFGT_cBXT81J+{o?VuCK|EjlN-LucxpSEl0L{RSOr#I55X5hHP`PJGdXNaAT@x%)2l zv~M<oN5LbGl-uc z1yJBzKX`=zMI{6NNXYwwNt8UnIh%4)$(k@)f>0h)3+X-EYsm0BARbWEO7X#yFlLKQ z2qob-mXiE@*wd_L;3EWz<$?sug}F5)PRDRSF`H-wO=2`5N{pXor<=`Y{m1xV0gY-g z5-Q0<==tb&b$C4y!Uu}@J$EMK;AAZLq_rHlgCTuuv}}?kX-1;jq+jHabPNGz$2v_S zg!5zw;+;_&7c?%&kzkr64gP_ucp2ouxI%Eu?{>d|InKP8e}5!`4-lK20lh_SoRuRn zc(YnuVBrQh(#!#9(78o@Gpj2niq6QA-FrszfW4UkcPJ?Gk8f3J6~BV$1hk+}*8Aybv{-OyLGWAsAG8bEdO46bD^hM$W zMzt6b7Q9Z`L}GwvBp{+O!esh#>aRQ@SjtGr0@x$faPOd0+!|#2P{6k8D={vYA!=sf;mtO zx*)PPPztkKC-@cvDwD)%S#w52pYk%D_=J5jJ0=BM;j0z|rcb9t|$f>cWq12S=7IBiVhqf;sj>FX&P>NvG4 zNk(SH zo15$btyDolm_9X7<%T~-(L~tBbz|DV4Uh|x#DGvkMA;~fQv`!CsXS)+$%KKWt4!*l zsrN|ui7YSm5JFe1N9|bybLd9f^XM`EqmGPR0Y~y7kG$8nPm4v z9J#Q6+nCJubqO6xXIVMP3aOR@)J=*F340sdOsW$kS7b>s;liiyyO(JQT_a|MIYMNn zxXp ziG%ktB_;>Y?br;dk9mTHRFFJ^Vg9r!nf#GSAz%E?MN#h75HCQgC5Zu{#Di=l15L=3 zF+JlOMx>sFSdi^|+5BZwGWk1`(E;QeB%s)b3G_@K+IVNaCd3PnYDr>1{)ES_4)YdrTqiv0B}wsMpoRNgiPaZ~y5FCO;G+@L zQqm3%jGkf@X)K~n(u_hbxWbeXdoSxlvt&{rYq zet#l@2Mm&nlwSLlg|qZKJ$^3ge!n{myw2X*@C`dz_xqh;Sa4~mM3>4CoCmorOpb`x zwORS=ok3VJ1QY2snugghPeBby89If;NK)Cse3tE1;cOzW<4`X{1STEyTnXYyQ6$8Y z^@n}R%3mJ|;DiGC=0&OM35hpr#*Y=rhZhCk~Gsjv&8ZvfYfDo0w^UORN9>2nI;Vv+B1q9Ikwm2q_6! z=0wE~!A(jWgbnFkqSijt_TWJ%&rVOj!AA%OC|OFeGEstM6*98w;X@(XQ1koKPk9{$ zd?xnzur?bXngR4^1Fx%(Hi&<{$r?Iq!*v{Lg-F2sZv3G({*j4L_c0?P1TiMcXepDX z&QWSW(FnprJU9uJA<^CKtIw7%O_*6 z52f}SW8v&r5)MjZDJOVHL~((GXw3U2B_u~5JArLZ4qg_gXWgRV9FcLtf>OsCITAc2 ztdBdvj)G3c-SO@saLa6E+Hx4rBdu(Cp|s~M;-(gLVkAgpAq{#?WQ)=}rp_vl4HoW) zq@IUF6bCf04jcmKp zz(RiX;v2Tp35rTNA}olN^gIKlZwWIIwBk{RYi25N5>G#2u^hyRNNl1V((TK$lrh|7 zB$?H&w1YdF&I>F=g4BM}gamObvam9Eg$aN`EuMXuc|lPtM*@ai8j?rm5weCcG^Wsr zmmBT{MV%BW5V%$U`kcXRJ{r8ihocLSu|K#oOvI3-2`h7rSvtdRG7jprD6=`)V<*1e zM+~U&A$xS2DKs2l{ABu=WDCPUPX-|_4!rIaBs5svK%*wB>1qFN!D5oR`4k<5VOA_* z*;X!idKOMX_`ul_)+gdGWgA>1d=!j2QAH9$d>IKDZs7d=QJhYQ7Z|l-Bzi&qhdKAM zE{!UkfW;gu=+@!dAbR`3+5S5=ZA%e)Ciwq6GW}<8D%AF#&(!`CDA>pnR9#~Y1k${1n zprDG)#Kf<}%Vwa_NMAScUfK)jGuvR{Y$)n}e{$3L|M8>PF;y`2439YxJi&oPzT(pf$S|yt9g{ZP{sdb zBRcz{C^gU)qPxz6kS|-$#QV5-=~=V<%xrb1EK?RXaB_fTrgff;_l%&HnpJH;sJDi= z0CGW;7}lP7R6Jkk@#krSi}lhG*-P_2d5SG{*O7WAB4OMh;Rzy5GB}*Tfcs790cBcL zp70~4L#R^^-65%G;toif$UMJhwDYoN?I8JE!al4$-+CXv4YZ?at!Kg?5-t|Hhj_JP zMwkS}B_~?KI4EkHX)Pc~pd=T)A-TfD9gyUgxF8anlC4+fd~Bq7F!dv>EZhMHuULi* zH$0^#3ctUkA@xk$0ZIK4cC#Zi%SAeJ&Y1Z_LdRQ6wIfPP6-zsR=eD`R#2t_jQDs26 z6!9=G}He?L1v0?DUu{+M2Di*7U>ug;el4qf;${7DIV$RmeE{<6C^n! z79?bEm^LfPYbg|j&DZD;{prba4^4LjqWD#GUeg#88ExVgEJr<-)6!qU01l`rj;k%!{I|0?Qp}Cs#)q> z2ryGsMlprlv)m$tK*;QmBq0cdDESB9H@^!aq!=!U5~~?C)gZwrRy+Bejg-UH9y{8Q5z5QPgux+=2-%yyyZx8uf)=(voT(+!2xGnwxEKQbbRs z9Wm!#T$1gv@tm~VHL~QW@|#3>)C=+G%8pVJH3y6CYvR5SdsSBEzcaW(W%p#2b0ohiBYwH4`@=Lailx?AY*2KST37-u|!) zPi<8-6L%mIU3y`4szi#Oy?H^Tnh9q_WD)dsC9RaGMvI`8Sds5N;|0hCSw6UmY28E< zSx|)`c}JS>j=NuA;UmbUZ~Gw=@MzjL43J^4lelK^$6^^eX;!-OSxkMu1J5_9<>4cW z8zKzNUTJ%wfCzt;6;%Nd@^wtOp$URCm9{P7hg%TACFOxjF)*(^2`M)0*<^e- zFtN&=X$sraop-Q^Us%h-Er<|ekp)bI(56>N5lEP`%J^EGcdDE3ufF3K)-!PrCh;kj zgeEL980f7g_s5HXq?QMFM8qIb!Ats1%G|M~a&US&45|I5cb}u@@h#`vZ1IE;}Y+~lBq5h7>V1a{Mn2Hd|R8VDwdy)m5{o$zQ;SNAXnfi}!x(;l* zV~BUxO4a*EKb`=jng?${c;_bDho$Ha^^I4Uh0?@KMOIJyafydJ0AXQ9Lqm}q4qCOo zv7VYb&{`hu0EF!fJ)I)ddDFN4gV8^kS@4Hrq3?~eLcWTrnG0uy!T|DC7!b$jnYD zRc4_Ivs%QIf`V)#5}>dkQc85UhFsv`21JI`%l(Z=vTf()Xe#f5dLC{-gcK3Q+q`d? z4I&F=p4X6S4sJmsu^}%wo;4xL=0c+ty8#bnZQ!FhZgxOzS1{T*xCM>vLbzvhF@i@m z4>us9tb}_uI>y|d?Rq^U3%B4AM^T>N=Jt=^QOm+DcvNrNbE*mvK&pAT1(9T>Jv(*> z7-UW~4jQvRnY6R@$Xqj1K6Qf^iuT{2(n&_1j&g2Frb6~s3Luy*6E{L=4yt1##3dHq zg1CS&Q|Ca9uIyl>pnH{dEadBcaLZ^0U{D(`I$0iipe)sa=9 zG!2J5Ls(==SV-chba&tTy!C^lT95>eW}!0{`@mq3PG;5d!vB#qnQ!g*OO&Hljt>}H zyAeiGkzJNHLyALW@9^fNc$y6t9rrRDjJYHjNamVJLxjY_4tu&n*u^R>GdBka<)BtF z@cy7KKrH0l;u8`KMo)5%#RD=)r)8pyq7{yr1>%qOEI5PFGBjtQwt%oc!^%QcKdbAd zF}q`gGDU~+e5v>}k!Q z5U7>~XE3O2+-SzbHsb;d&S20^&@iwM?_y;-Y#8B#W?(&^x=IL*)^gwu1tSYODzO>0 zNq1@Rwx0FHB}`n)f;$)t3J&AcX^vwn+{^VOWBiyW4j9!eID;X3g+G2c4#mT6_)^V) zI}kF2j;BpCbsfb%Qnx@G5L< zi66#?OKmyNFov3Pf3&hCkGJX6QK=xK3pP-=R!ClA!5s|hmoS?XQLIs7HUb7ilX1$W zV3L}i2f(Oi!5s`KG^cBYd^4rQl8XloCV9M7gF7}mB<`9~&4N1^>|^EzW%@nW=c^Hr z71aZgF1Blq#59y`1ny|m^WY8##X4`RAsaggaY_VZW@yqXvrf06Eq64kS#SoUqtJ^6 z9ikTBbojoS~qyiWgegZ6kZHUia&>SIPwz z+`$mzDV`Sj_fcA8pLR9~7gTcK4u#~&q z%!VwZplXFhwKQk&xX&LczGz(G!5I!#W3lSArxS&Fos3U=`5H2nkvVb%9O&6m96y0$TM-;j?J9x}kI zT9gm0LZ)G#9>KttCi>+!BIKK7uQ9Ekvestnd%U)edz}~`QG6^aUCIN6ZL(0Wm+>TW zVq_mggvU1T=&T`Ec=&u;FFY9f%+L*470tc!x?p4{JY#JqE?icX-mf0jEcl~AhxF&P z{2P&L8b&b5f_ReloS@uO_dYH4JUHWlpt4qx|D|e$1vbCKQ0#0a_(7(D>QJTg!uPaX z;=vz}*qXkUU*V6%*5ht#3Lf=5_~U^ugxO&A1Qq13wZ7o-uzu9@;EzXqcBQO5>Ur?TBev>a@zcSho(F$Cl2^98TUZm41cDUD)HO&59`!u< zlFY@Ww)#WGGMLp|&tWaTd)WB!foK(zj9w^{TDCRWmNI;Ex8q z>no47M&=gF`yMo8(3Q+1q5g^80(YwhRW7wG_@mLqN0wU_H2Bd+Hxwi4`kd{gGd(g~ zXISt@gNc$2ozYVM)wI9bh9ySQn1H4*Igb?!_p3%N2mV-4Z%)mqbR979OrW4`oDsdG zY>9I`aY`x~@JE6P63aND7z_|#G_PO*05i=qM3TcK^m{K>ru9^E;Ex3<`?Z&$@AwrA zP82L?p8x0tckSI^RI}iZhV&eCBpyi~Fj|6l3VX-pCo&5T!=cy>Wep43A`Kh->we9sX2BZ`88;>kI}-cqDE1LBB;Q1^VWfLpnX%#Q zi&rz?k3_f9ltUd0#&f`6fCM)P4WKfDgkcJIm*00(#8q{f*jK)7*#}kQB1Bmv%Yea@kxbwt+ zf9#~cQH;jS0!OhRzsIj^Ps)oGpERtS9Dbn61arPl*V2_Bpo*)(su|+N!^9JQJE+Lj zh`s=+Y-vqFWCc}H>$cZ2nS^k&R6A)bM@@jWH;RFFy*?tp_7Bk>%xfvV9E zE?-0IGH+`t!NSU>%$7Q@-jQ?f00*NgDg}u_m2G0&AoPv%LTe_e^kIcX7_v(D8>P0i zkZ<(kj|HS!loS%;I;7+ogEvz6Oe8}fp&4)@H_fpjC8=0<*Rg;ygQ?D_r-FFgFX9N% z8_Q)vO)>Wj?-hyY#}@VW3)cybYB^F=Wq)_aZrL6Okv)+D2OXlsNV$fkJZyX6I$tnO za8%0?!@*NBy6a@e4Do#2pkbnamX$lQ-Ym1HeWe|xkMt&o<95;uF!P>)+(ok6|M+yfCwYBMI#`iFoL{7?IsT-A2 z#8AlW(2r*PwN|5Ej1&x+hKNgwQ_6V2zxGCvymqA=DI8K4$orQiA?)ksLHl?58%&a} zl_P~?z^%n(Fl(0l8u1R`utf>H9&j#3RH{HKdP z%hKjXG;C$&JOL;IVvMU^2p4WV4$owQ(-nI`jtCASfwI?+nqp}Pm9gD&SctSqwE{n9 z>eXKX#}zqZIG9+|bc~N2h;5AQOa%_|<`kQgoR+=IEM)#0v_qQVYvqXHAiI%k2RTws z3kOJM5`)WM0mlV7VmKI(OtTK&91-K@^;-EWwc~;u5gb_cjduKvw&RK%A2!LJm2K=Nkxq6|~cBCvFmAe~&w0UVvPXBnE`O?wQIKBIR@r z^KJ<)*i0KBdop+rVL%iY%(FI-k8**BSQIxz7$r$f3olwqfVq zL~uPD%AFWKK;}CDLW+{}Lr{p)mvx(9@eUd@#-);ld+_-3VsbAd;&k%JP{)A0f*z|( z?jH|s~WBp*Pi ziu)mF%>X%>6V_3~AkP=-T|S%rwwXBJ=gSoqK7w=&)grZDHYJnTp;v11VT)S-O`If& z$&m47HG5BCZP-%w^2#3dQ@u3gf+Q&*ZJO?Q7K0X29dFj%?S*+ zA%6S?7u64rYDrQ+Hur7I)Aw`V5(&8b!u7Eq67tPF2dg9>K;-MN&X4(27!Zjab6^JQ z1Sp}S@`dJ68J4~Q#Q%n==HVj>)0n*w`SvzlK1wYMH{ii8MzV605;B;9sg&Yy{Kx}$ zC1XcN80F(i;r{BlbOayO1CVyPAjt<;A;X?35TS^2ohWvovhs(-HhmsFoeWYwuVgF# zP(Z3BNdck6wx>XfD(p}jM#3Rh5OTX)8}er=NUb0#94%E241bb-N&4->W*VNoGmkm~ zMc7&8mHUV4N3|p|Ahejr7DVtM^g#lb$w(_B8No?;#{7v2azT<9keMzU64$b@DYVY~ z3X{ZS%^7P|WqKG9#hXveg#%B!+_wHbb!)9Y!e{*UVq59My8fV05YNkPz8lYCA4Sk^;i){FR_Oz1Lzr z0OaA42QTBnL$p?s7!WCM#wF)!1r4s&0LZgJRHxhJf+Q&*xViGSC$7vwG`Vh{e)GEl zQY}deNOHf34I#Dt7v3*aC&w4%2|*$_w%;b~TohFWk@=?o+E>U!8L( z#`!X#cH(It@1GzeB|Y*{U%ITA%rbPIjp+_hToK}pCoeS$vYFj6OJ_f`!hW?Za%bli zP|#t^<6r4W_k7e|VBjOfh0pmR0urQaiFVNBBD;67pR&_lrdo6@^+7#wY<0r%IV(`q za_|wu3yV(LuIVtQ`k2i$ZBO5ItQGe@WCe;!2K<8)}op&kwW|$TC zLgFveh-w)U9Fo(;)8+585GMv4JRaO zg-DQi&1d1^Mb?aIEE1)lc!zN{WX+gtKK%LaHL0OmArd53GO0a%uhKhCDui)jSc{nf zPs1W(N&bAdl9XYU2oVaCw8hAJdIX=Px}ae{dQZgxb2wIB9!$LY^KqybB0+-1b@a`X zd6YJbPBQD#n?u9JNdG*K(woCnE=FR)kEoO)!Ghao;3fXD61=dO+|8uUhBY@bLx3)} zzdzJkbiK>M`Ssz5;GmrF`#?M50oN1POWtczh9{VdzBBuD_k z=a6xcf`m+0l?iwZt7f+QAAf_0si>AB!h#X91LIRkc9HHO-y={+zq9B=zn~s}{$(on zajg&u5{c;*vk4Tjt=Pu2|GWdj3p&>AGg2g2$fg|1ox553jCh)(Zdebh1t?PEklgQC z)XwurrKoZfQxYRXWq5fJu95es%)nx77cDm2tcEEk%L_FY`%iCrEkqVGjtrQ6?wT>*;&fUSiIs!Uc62$JJ1(DtB4Z_0RkyIh?GwEOd z3!u0l#RrR)Wxf=$OHzmJr z7dZHc;etiW(4FXnh-;B8alPAC_+U{lMg%AYh%@CnOt>VNCCkyDJ|R9>)Qb^ek=dM= z&-tk3^a10791$7}4q+-TqxY$2Cy4X>jp_qNy%--XWQhr*U`FD2Gc^{!<2NkrB#b4k z>NC&2?M31_(~^p(dKNx{VCZT;>W7H1^4&GAe1_`lES017t0q(!dxDEWK#TS04E2!L zS+ei=?kJ8I8r5X_8DzipP-w2+oLF*~i z@N|mIGzM&ZF4y4|VMB<7TL+4286_)m1Oon}m@pcmsX-^5wek91!RSbi3$LsXl?x9( zuehI!9DbPQFFwW+Qth%b#FVB1ZK|uYKd!vvtt@;#s~a4fC*PbtU6uH_cUYsE1$Q`@ zrOX^g1~781w4v*eP%(qV$Q4i~jsck!JL;N5lJA-a6Rck(g5!c95fzrf=TCWRJv#!$ zOzLC=6=ATA74ue(S`H#Hyue8OS-E3pDRP`vCT2;FpKjgT(Wqv@9S-FQ%!GH@Eyw&l z`6nejH^Xs(g&W|AJg}e|&$?d}G=E-OCw~78Kx`ht&+A1s3pc=#Wg43-)2NgK`(7xt zTjkLe>jz2DsFfojlGrZ^2|R29){_~H8y6Qqqm zZWSd~?s{09KI|1q68+e;E>XJz3MiT^U7!Q&<|`IFs#%Bxal%7f@w5qxfq)IqxrGe% zz^oAEQSIuEDjif-4*bzz`VhVBGkbh-#2FwjrVQ&An=-{c_dPE4UnIigiXaggrKO9H z^KfI@rmM`#LL`VA9!$+=Kq+t6_LXK_t;*^Y_>rdGS{ClWBQ|B23gCFwn355Rnhwu! z;Ex6g2`WKl*cN*yX@U=M*gP07?YO{#KORz#O+y-R$j(V#@@NMOTgQRzKGMKObLZwY z>uXDW;HZ})!IUMe1EYk9i!z-MFrM~H$q`j@5Q*W01%(QXY$9hxK1I|3FsK`5#0+h% z9SWjohOgH_j;NLee>9RC?uABt$turTZ!l^(@W&$V{+7borg^ygn++FH1Ntcz{LvtJ zLTXxuqSL*`+g{L+-U~Kyvf~;jWNSgaRil~(Z!~zf#vdktL3MS@jZ2Rsb#QlMQO$rq z5fqL?2BGOuD$zpqnZVOG-6}^m1!b$;zefb z6bs&H5S5Jswemm-B`ugw)=#iNQ5%@x>yi7QaY2v>(@kR_k81{=$|!l672HcGJ1-;l zMWddBNDLn^m$|n0_ESVsxaow`iyM4c1~5Y*(p zH3B~ZASCSh+m9gj`&V2U)CbmykwC#1eQD0(`t(7ePJ{%5 zcI?S`P@ppqfCqyoeJL*xs$@t|`2W$ZoWY8!O=l^k}4t{;7 zp%9UwK!Jik3iVlF#^6di(N4cudqhN6-0CxnCI+iG>vT$dXypJA7vqivoKToWdX($f*h{b^vlBS(QoJ(h=y6aVbq`?YsarWtSKW}pz_jZa!o zp+M|RB>zHyQhMRIHt6wZ#RA#DWuVTYeQ6}CMfh7}2vN{rY4m(QAt!(!M#Gu`=CPfm z)5vNp$~_<%NW`TmplBvF9qw4hIVi+P!h%VbyuE3&!dg<_eE0!L!GidEP>cf5DsFho zjUF1!rW>K`a+qFWp%5eqjZ=B0o<4A;=Ac2xU{sI-Qwq=~8JUB}b)|D-Io{jKK_f0l z0Y)>!>*!=)+f?r6pb#So3$mbB;`@v>!;D@zCk$4iheZ1BFFe)A99N0a%&boi5=2%) zLKI*^0)fefF5+vB@<1p3bHM{=KpnCFeS_O+FhpcfC@_+5qPPh6^2(?OVAysderp37 z@mFX=Oo%%UDEu%pHAmXoNcd5rO0I*V2{sksh4P<9m)jqAD#Ai294P4)KbvPd!})F% zMr;P9Uq)7vT$ljdC`9hKhm?~66k$0u8jM~en2EI^mPfh3$Urty9z4w$jY4ID{Ti)Clg&mDTkTFfU_(hMVSce=}rLy~DN(twCb zp@5*{gN+j-y0K8Cd--BV4S$kMAO)+&goi&8hma5o2BKAWeb{g~-F+%b2^u?*io+Xc zQ%NC%CL`8P5us{=I-)Bj6w=zg+041PKw5_)_x>;j{kRQPiX4gvBa&#gW#SqY%Pdsb zI!>9zJF#7Xx;u%2*Ut7IibhzF0uC!4Vcj!BM(wQkzLLePK9^A#{J_S)r%A(DGO0 zD8Oh(Ffn$6T=GccK1*5%`nOj~ZZ*O51`CBCDQL*CVATTQiZk^TA2}&mXoLkRFeOP; zXxR2hV=l>|b~Fc$Hv~~|NVgO_7uJy{+4zA=HVciY910A=7_2>$z7)b3Vnh%1zOtZ* zNuhwC)q_VmiXkJ`KJa)?vY;Ru6-2>NW@^L}t&;2q+$T{Elo&Z+lvlJ2P^S+>`5L=N zxtdu1Ka|5zA;nvP__IvxHa^HL!F`8=SQ+K|w63rhmZ%iXqBLDz{dd7cRZH6g}4mOf zod&EB%OWE}MdLCs{%1262Og3nEaGw~EM%s}Z^uG9#*Q_ec~}JHP*}_o@?|C`l?RNJ zJNiP+!y+h$!s5J~Xq8#7{15qc!Qx0aD-VmH91086LiWrqCmF=J*$dZeCTYT69u`44 z6c*Q_{#j&WB@UK;b#!Uki#;L z(?roLuXfr~37$#+I-YuUR5D*Eq*+71eg_!X&3(5Sw*$gFG3E~vdAv~i+Tf6EGTujG z{EEs@z)1q1j1hK|8hJ+5O0xjZl%FDKrhha*Br8Ph_bU-{aA1!Y){zx&Tp_rgda}7aYQrZjwAyKq97H_an2txH?@S7Gy*yKYhgiSlkl|p$&hlysOad(${_lqP4 zjW+~QaBvv7LUAz|HOc&SfrCawHj7=sM4s(`hjIXFR1gJ6UGX)rVucMfG6#OT%3|vJ zU7GA=OkYtBlo&Z+s0R(_f&s?-=zdi8ew|Vhh4V`|o>U!Y^gE_T8yw*@8F@;;+EMb-rl+^=-&k~gJah2~5KT+8^{9RoP>NkhNC z_@G%p$h2Z=Fepx9|2Bt2hO5zY_C2+CnT(f7X6Qo7(1RSLgCQeMQ2?g&62xIZj(|Zf zjdrW^a*@hUW7SM57GVZ;MLn9;obO>i@VUj1TrS<;fHI{d)kxc97p51%`rRi$m8# zfJBUebSRpUpZ;Erq)fWJOsNj$cCdG`YEcxDp1}Y%&26IhSAiXT9)(%2kBrC zjxW|ONzDlp36I<9FwIm} zTV6?5Q36i$8N(lr^+i+EBMH^@>*KB5K?c-E4eR)wiZLdDF|SPOyH02f4ZQmgyRF;N zeZT)MLYhugJ?$in7|iy&Rdq`(@~euLi8V7zA|FC`qdR~94nWk+;Eb@8>3@`~tlLX| z*VF(&#D4z{KvccpWCkwMvdbiBhFESRAokUW*zex~h`JRV7mnmA`wdB^$xM;9G$;9N z1R2-?in{k%yxF3o-5AW53`LNEY$(wDx`q2#t;n(aP>K6S8dEk^abRUM4w<9vsY)Fi z{r>Ab(d2H7I!G?q!s(5&pae<6gN8%my=S>XrKg>jyDDzny)>K;8{{A#jS(fIN=Raz zsEB9>b$nkW7iH@_cM5-MOAnHVHm2b5jvxwFN}w5k%b*-Wq4IXWQc^3^qPbho+_3Gi znDoOE<)9EF4GmRjF8#Vv5{90za-04unlc-gD;Z3zoN3>R0jx@9WbFsL_fvZBK|q9g)KOBP$&shgmf=NniiWy;tg ziXa({@DSJ}M68F0`>WhPZjz2bhS~DCL{w@}GB52njH>&RQt}@}9%7O*2vabz7*c6}p?6PA#_^{n4UxDg z3fR&b5fl?Z4mGQ3ctiy$&|vru$AZJh@Z>?J{0SPz-nvO}ydjCggQh(O2jHr%1eb4k z9O{&%!4VZip}}0HnH^$mEhZl;QB?PHD9cGr!y_(=LL~lT&O;>5gAyePk@D*P)XR=W zGFjt>JIJO5@9M(>jI14{pWQu}B}D?7)%HR-V}%-nb&0K9<^!VZ_4-6714<>{hoRZO zh+9{VYcgU|x#OCKuP_VAP*l?=58u+7gF{RT1toQXdJW~#b4FynPLKs9$lF*n11OJO z^v$a?1Bj>;1(wDR%cJKsy}^PKq#Ca3{Gy6PHI9?=#4AysX&X2#dk~r^PiDOj?{~G( z@3xQ1H!~|i3PmC~bTH4)3^JgEhq8v<04>0)ysul(^f^4E}rvN3ZLkb812^0je zp`=NgK(0bB!eT2KRfvRLnPxJwPq{gf-wk7T5gYeLakZ20pNtej>RX8C( zH_+bqh>tuR-WDPUO8So{riT!zIE_b73YJe9`u)YHOhJJ(5vj7}vPk950t`ovjg~VJ z`u(XW;KEc}j#zTE$gz|)o6|5cWPSfb@h%YWNO6Y~Dg*OA+4n_6bCG#d#}1Yc{(2=q z_+u(6uiewzSnPr$5 zXvq`%gZi}1bGE3ps z-gSIQaJ(T%p<^dvBg~6NF~ERP0GoEua3f3Z(F}ZX!`n;^Xb*3&pacnjS4D-|c&07U zy(=Yrpus2=>h~DRx-Kiu_udt2pb_OjiID*Y^H?aerCmTO8W-|_Qb`~WRHl8>*UTjC z*3ZaoxXD4|4LKC1m-3{DHAXi|J8G1OXP=ZX3xyzAaBxY$4!u|S#NTKfd{Uwuq=P{p z+K+CC(O?$Up(Zr?`*#3>$C*?fVIv4v;P|**mLxZnp1?2*>2R>=iiJijOJo->eG8k( z02kU>m+4Fe&ak@y%|RnBhk}#>ENY#_vzX?2+H~VsN0hR_C<}!kNobteo5`qohM`XU zX+s0QV83;AfMo9*U?s>`(v?W8|a*eTDeY9Wxq)()O*bnGqc zd!?I&l_6}hY{Ra%?@@p;QEBo8E}a2wJ}1o6I;4#ZK2^EUk4=IEEIwe5KV!DIL7^gy;)Lj8IB9B!uVd+ z9Fbg0nga)cv#1~is05st79yoL+%7AZEPfBMt`XzGR3_Zehe777vyz2IRE`3SHa5b0 zQiZ(QTD9bm*BdMpg2cb7BEr7vpOZpEGfF|NR^f9Ph9mc+WT6ojM8Ux$V3>Khlhc{6 zJlPIEDp_!Z1u5Vl=u~RQhQ_gGGzX2i9109Jn&6q!a>u_{IV#lc9O{8(p%E6OfTIbK zU^tlSwrvBFA-aR{SjqJ`;v5uW5Iu{2RYir608dz|8gVYZz4K$AZb@i_Tf$KzCcTs!;yqWSPq3oc{6<~+H;Y8xMaXbiZ5l>4^!D0TTEt$_alkWhq1Rp z5P}26ZSayHiposS@*weXb{5M%Sm6cllnWP&Dq8a>3YVoES%Ofpm;q`PIg;)#iWS%c zL?l}>)DK1%C881JKz-F5Fq+8G@TJV?Lp{wyBh11MaF8YVIVuFFIVp@(ljWEcFVLB} z`@4;hPaV7Reh`I5RE~;B6#%1Hll`?)I>mBfrVZ_XQkvj|mxW4@*jFux7=Zz1?a0#Y z5zU}XcK2vtoP$CP3HPL6L2=WC3Od3&GLnpQ!kxz2-ph2AD{gPaNWnsg#Kb57ZG!?* z;V#(~yj=G8jz(}J_c8q!?j26dI)`yG6bDFo#CHPRf~ni3KG{ z4jjrQzbQxQlJD+=G8vVkqJdlmdu+u<@oXeSy~rzJUU?EwS@XaRF3^BVahu5KL6qDj zhaz%XnQKW`(n9qPCPJp?Fi&}rP&r5FI__>ZlH^E&l)3ye{(}W#;%|bej25Ciof;pu zlRx|}Sq?d11UXP2H3tkjH>sqSZ3Va%oC;A>ipuZ0vHROK368iR3RUTq;!0%?5_gI? zUbOojdc%$kWDT;Q1qpvxMdrc-0b6mQ4TGt-CV!@oaT+%gk=%`Cc?}d3NM3KqZQC(ML zuElM8`M&w-JmBuVt~9Nj9v9_h9ho#l;-VCY(5iG=DFT}Zs)(7ra5Ewky%=oCxmt&Ah1a~eU!!}%a~2}+@KA`7gvi87)w_@Sd*Y>XQg`>u z(h!M@qJU*o-DM_Zj%B5K;S;AO4UxDg3X#$reFJi=VNC-hEJ=X};WcdMNisIFpYf(3 z$NFYTc)TG=frqpP(D6sml;%HKo#fxWk!4ihV4)Bs2M#LKWLYEI8oxJ59sjh;f+H-5 z0`+vEPnx09_#vw_O#34;f0}y4CDDMCSMKJh9vc_>hgOjEe~5 zq)Ez7_%99La2pKrBg&1;NJyNQJO9CZ6*AJIJ=5k%s0Xi`R6*lnGEVwG|Kk_`{O`a1 z>%af?|M>4=hv*|S>Pb7XXJ>owO6NPhZzrN87#B)EYESi>OpcDE%8~-@R=-S+c0Lm^ zBex~cUYY1X?>(PwIWdr+f#jMvxg`;ixF}jjaNZaE4xYVqn%`87;;{L0l9^BVYi-CZ zUq`|`l%nJSLQ4I@47iK5`H--bGtA+ehcjl1(TGd|lX2XPT2VW+Z-+1K)V#w)J|tA5 z^SULE&t6zI25pd>m02^wX1RwZ3y`=d8dljcRUH~xk^5s;!Dx3C3G+~jk_8B9Am;uK zR5r|82IeD&CeFkjkd#JE@?!$Y!Io7*XLm(?jfs3n#xKfF2@}!Q!p>k>e=3mp{F*e= z`VJHMkWimQZy=#VZd`fj-5}u+yiKmcLF2z`Oi8jsl7+|{vS?r#+C?Q9<4|XEy5h+n z?zIv#% zjc(g)uN6e1JnVwVJX33lmqvjG6=mdlv8?36*$=`B7d9`oW+bz)jE9Y+zGE!xf(M0D zGnu?I(`y&mvczuob-7R*K$F-X&}%5P#8qaeb_j~@-ezdr(zC=WXzvhC5?Dre-Pk?pxs zr^{n_VOS%kWfK3S){)GfF?8e&9`X@kQ8SYW*KwVh{mpV%Q4x0O$}PMQC6FbxNeWyUtwxB5u|UkL6pwYgb}4v5MHov+ z8QvoP>%K?k9Ue+ik`SS@kBfI8*(;M!WOk|a;f_+~DbW$BQ*05*)sQznN(o3@5>183 z;oXFAJXV=##Aw&+N&^HB;x@pVI?v#ri2~U$4_cJyr!A>eNfObIDo4_0C30W9S$M=H z(Rh&FB|9|m;$-}X=*Q6((ZyYK8&fk0g1CmtkYA@$$J(|95yOL`g)1DuNaNlqN%J zMg);7<;}xcf{637b@|s$YCa-S9`-?m#l{!f_oYFZy$)Quq$GZH1e{tYH6M{E5BZ2t z=FT>~>p%bmcU>kcfyl(GZo(I#8IS!HyCd=r54#}32~l=rC0Rol$dc z!aVGP2t`fk1`%Z*yIZ%}7u66vb{U~8t3)M;wyzxlkuVRtAc7ICbObnl?8x4|h@ica zhKRAS3mzweVlohy)Ck_HSdrs3B+SDuh%nLTt|2^aKVe0}JnVwVKthIU5&Cs$;r-A} z6XszDM2IpovyK=ufmHg=KH!YtX+~Mt1rMrR$v|@;{Q-X!K*BuigUDDId929c zZyG@)%EK;*Fh}PeR+Xw<*|K&ItCG}gosryR6_CW4*as7G+a!6}B8CS~MFjI1Fm#N= zyvhQt7LVK~jo=YtU>7VXUnbi?;l1p$1`J8;GDny=D|$i)_yK4{S=a>+IsnKx&;fW{d0P(zH@GB{?xltZbF#O7BubKm zD|y`+JhpmO#>RrHq%s8~a@||9ci-o~AQI)FQjr`)7~IBdlc2IhR@tW|v+4^KIiQ3n z4Uw=Y8d!={WhNyNL!$7kK|vwr;_U5iR8f&A3zZv?j_{y4fg{Nk${iLMh1RDuk50q;lKWQ{A_`W9S!Q zNFV`9fV zx9oLfD#kB~+)?t+#45?x@w9Eor>E9w=H!d>%fGm_aW!7@_52ad27A7+b3hXhD+j zV8{gtxijTfxaXfJE9A=tS=a#&s-#KKp2msoTO5;L|4@1+y-_QRyQvUj0)|n1mg|g( zswV*Qh9nwSW>_ORaTF$3OI7mWg}4k<2(nNLl7I8fPUpa>`kWvakalbm36d@#A=a1_O0}m*7gXc6-$(!x83S z7c{oPN~9~UvcT^X+Ci6%%ytT}unQjXZj-E+94#I>h{Q$F$a0ye19NQ0OXFkvhmjOw z$he4RID#xFWGo|{n*=`}W{?Uht%v*1g%vyRm{5=_EJf>Y;zbE}lS^*Ljr69xSsi$5rPKQ1bV(XNX5KhKnZH`RxmD@Z_ zLx{X1ibkZKI6-oVRWjSycF9@py@>oa(jY-cKqM@RMx>rN!DjX|GnMITz$KIG@bA%) zuqYaldgKI%OvTg-BSZJ69-62mB_7SokS3sc+uSrzOh)Hgs~^cP{xAon7#N~zl8E=S zYAW^kjpL6?5*%ScG#>TvjpGe!5*}eeG#>TnjpMJ}Bs{``lz23gH;(toQs9Woq0wl^ zZunk8i7(tLg6p;BIdW(!@n>=(9&skLFwsw2QHf3=NkfDVPRSlq>q^BM1)tl38ann? z_HE3x77Xo$-)?85@8H5TS04V<(4J`~-^zLjev(}qS*Fc8!q#oLc~K=Ev~v($Us*&> zPx`{t4=Eob&Q6k!E^X!+Smk5M&RCWtNvK}%$WP4cN8Nb639L;1q*$2^Wel8>pH)GS zba@BUB^>l6Pb&p*{TpuE-laXi?&ySJP2G&G+nnm#dg| zaMBPB1Ik@J+7-d8Nft>QSY0imprMVaQpk{Il%a_rykpAP-uUBt+P~M$a4# zn`AO^`afVv(hv!YqJd>?ArtAiaVA*;y6FfQ{Wxf{$aZ%f3G<*uNkW7XJ}ew#dOyPp zrA=GD7=e z(PRi+QhUkjPc|5C*RDkNhz(GN$bK-QBfH-+X*v=Xr9{LCt`hrYeJ%s*cn{OV{nsG! zhA0}5I%qBPgwPl^fDVi*+kZxzoYJUi&yhq^sqb9|P8CLE|M`x2ctj;B@i_5uWH23P zh&S{12w`4!N6!%EhKaJE z1&MxFO{KoJ4}aHX!4VZi!x0XrB%YQW^$1H+0zzh6%2L?mNH}HwjxHaZ+s#psHzX+m zp*n_oi1|cphD{$c?|uTO6x>LtNJek7YGU_S?i)Omq9h^0xN4e=P8W9LFnsGuxE(~O z6bCe@f;J9`-?mO(ZAMQbgTlU#_HN4lbEVL*yD2MFT6jE>`8p{$PsC(2(;? z;TnSu7vBE!{s|c-k;gdDVq~E~N4qqDP&YG5eg6ll%#r|+-u##(8rU`$IHWMC)#i7^Ntb`_>o4NNS@{_O`O)J40QPX~XuT%$1pmjx5*}$UWpH5s?&8 z@_;>^1`1P|HN-^F&4}QZP?gCsqSs=5h-)SwK^DqSn}!Eoh;$l~Hd{$Ue8Q?CN|c8k z5NY1s`QsPk!*8>d#?mvbDRQ?vr z5f((FQB9KjYqg`9iRYF?k5u z3Zl^@@gGy;7#%L`A6(ITxd2 z$uO_?yXC?}>c8i1;Yuv6hgXma4c5RCIF@`Rp|M+nj)9ugK@7Bn47B;TfUN)dAHRP6 zX?`jC5f!CG7;oX8OV-KThXORmug=jCA!K$<2roYb-vX8#%?qo>cy!ybS%J!pqd zIyirYdB_LEXhHkHs4`Wjbn^>cWl9>4=+&U97z4g!?7>;amTv>ynhPd>%21dGElLg` zlDpNT$|!>@ipXT44jF$+hVK8ImsGd?R{j-ZA|Db7dtCYG6enMng@-?GJ1+w1Jl)D- zDBWuix#l_{S%Abv(Xh57zOW(_-P_A)VoL~}hYce6rzXxsDNGh5O{V}A_shy;Dz;9s zBzA2b)qF(4Jmdpn4YZN~5!;CwOu;9*Pa6>s& z?-d^Q0Hhhr^8pnJ^RNdXD$c}3!`6}VwL2MuS8{I}e03fSY7&wSuW3yMbBa#G2 zSP+c|dmi9B15!mTLzXuUIrhk8Arh8E0~9f~h8gSBq2p|yu>%y$VHz()h^d}q>bjIz)|r*IsU0#zXK+giq|#D`SF>?5!NfvY zm8_OEypi0Ysd=Jg0ZZPSHg*O}Oj1-v_3N45OBsqm_azHe9^smGYTo%M#j(l5mB%eD z5By6qS7$U$ri7fC9>R>BnWDVE2$8TT8d&C8%LZMJ4l55P5RpYpzt0}N{NJM@QAso& z91LFi*f7x%;2=YFzL2h(FKl1B{!I!Jl|}& z!bJorL1h?M>xK|;=9ZxX01wBi?oM_?-r%7WW%^3NgK-Z(7GxCdSntjqvmtiZjwCcj zhG&NaDIp!dq{WcX7@H{QLlqC?=);l*M^qAx2dcq@q2VgGHy)Wd?Zlj=5nx`~xwLy> z=EOR|APZWM95^tUKZk{CA=KmO>oyCIup}B*0?90@Xa5#YB9c_1ALsH>x4-`}eua6c zM2UV|O=dok6+hEgvB*jrROE0MH4TxlC>0`-Y~WqXg2PQgmdnJx(3N}myfC}$LGU2W z9b^Ayh=EFo=x5brPSeUhVN!M!V2Cev^m8r;jGz=16on%;q8LoaDlEtTjz=|H*gp-t z6oX)xEK!p=TGJK{ma$@#l#=tNXK-e~)>O6y92^YF3Q6$h}5^8G+Q2h;{yE3E_9YWV#*|0EK}poBnDRkx_qp& z@fd5y_~Yv8+}uQjX(4FAD^C)Qq#GZ7+!9#+md@ScAz@>Ga<_}cOme0nOOh;H>GWe( z9qVFF!17ey;cmE+@!5m1mRshC+F{{|rGIud1} z5+wX>H65MQ!izp(Mx-a?%%3g~k6xN9Qm5729B46e^g}|q_+--WK}d<6<^%aTYJ*l$ z5yoKh=?*wC!B0{G@`fOqjL!1$aj@)nn`+qi=+{G47XS2L!)er;_|1r354{Nl9h=(y5#e_^5FfNL7I|5`;7PKHqIx;QS z`<=U;8d})IDIl^-(2(SR14#0VKMRnsBpTOoWau{0QmTU3&;IM5<%_2axz$+~Dl-hi zQjtFtk+>)&BvokX*FP6DxQO~&Mas!%CeA`B2yfBww=L-qq9RmUG!~*FJZ^tC7Lu{r z{mkS55*I|nf!RE*vdWOyx;SPZI5Js)#6{7N$ZXIb4f%*!%|awBi3Wu7bzHDzU>WMS z^M15(n?VvQ&i_~(;A%R`I-s}ak(&`j3JV%jEbZ%p5iLj ze=?<<_Y5T!kGM(Gkt|WNa3#})#y+Y^PKLCJ<)IQK{CPDUDNdyV zQ0CBbtgtWJHkPn=JwCgts zl6Pd$n1p9HB|;MBL5mXqyqeCRkk<^RR<$5mfKX~)n^rvgy9?b0(6T)ea@Hw`geB3y zwt4vLiAj)b+a$C`f}#cFdjwqOp=q+TP9C%hYW32lZB9i-V(vm(FcEO`g z_b?K3W|S&z{wL-h&aE?&uOLwtcEN+HU1qlr6U6}X&fA{hhhM!ph{Q$F$kqw4l_v({ z+gVpea+7+iBXlIpLnTW1>uNf6!e^zPncfwiz8F^W6^#p@e`=yEXhE`cq;!1gyxWe= z!LOP&4d?wT8j`puC7mV*1~c5`U(s+Z_e};}8i;q5-MX zq{m;rgr};cvzrGkN){rFNagaAMu2hCki%0GX^7w|#6;1+)_KyyefTz2>t#U;l7vU| zRHT`w2m>tb)tem#V0xU4UZmiCxr!TvA!Bq0RmEFYO&Vv%wgJ%0=asVDE?=)OCA3WU zW0o4TBBY^Oh6@WjG6#n#k>tjiP2G4S`H*CZk_D}mF#59zCIAfKnr@4C%i8cQQ-%HwTlrEEOgU0wgXXqwOi`6-*A^rwSx$ zoysdbRHB4GZ%GFYmEt@ZamGkRhL{5hU+utEW|YN8Sttbo*Azg=5El2aR7l9VVF>~V z$-Y+F7x`J$DUfYnvml9!QbH?}7MZF_(E>#ygZO3wiEQka3@CMrG&TJtkh~*G2?3|61PZcj#?Tfaal@C2vt%vBAE#$H*ND~Kj5e(Ve*bFB_@L;YnaJPUpy&J zDTtT3tN5(l9qVaY5@(?lBnuFR7E))l4i_fiv)1g}n?Lx~mjy{&6b7QUOw5z-bYrg~tJ{)D*bQpiKcJ)3TVkCr%+lU+{wHmpn@viv5MM&V-7d z^Yvf<+}c+D{XhTxumAe>fByaN|10gZca|w%#k1rAOaO+m0%+DA{COg>}(lOwhRn3uOcLcgU0`pnDfJl| z9~0`U)lM)TDSzaHNN~0NAoh3df%wlr+xC@Rb+QEjd&nNcU;OMUtNd8+NV^PMFV71K zI>^U;sCyR%!pNKx_EMn}JZ<2SpV7~R5@BKK7saOZRFA*0Fp7eepBxRAONtrdXY_H= zD6$plEN$(@S}U-V7iKz^|7=tagzGp#wVcg)cY8YLMYGZqyGUh3jpFd2NF@_OY$?CTc}JFN(47iMpvSKwx0xt<5f%`;0{44T7w zvF73=+lSd7EEW(eE$YdZN3@ndK%)n_j}wc^aabKCrKJ&Culk%=G#p6bJux?1rc{u5 zXBD)VEeTgjktoV=9`J?aXHRcMwpUY1urSkr_6|HVx$GHHssdYWsPDRJH;SQRTR{RY z9XB-Vy5#;JuFQ@&6D=ct3PX}xy=qaiGChi`@aMamt&VvgV z8YdkqHR5hD(qB>t{BI0W*K*+;af>qP`?`$lwu^eRI*i?A#|(ZLx9he-MCr!$vQ6SC zjuK>6c1@7QIdR7_r&f&D`bA+Uuge(~Ue}4A^{khdjK$4?h$V@d1iXukK9x6@*MV5+ zec{{>SQ{vn?iY8}uYcw*8m`$0fUm~;4wdP?HESmbeZh~c95T-v(dn!!jiGg2+cq+= zaR>3EFveY@;`G+ir+tiXKU=-xWVbtWzOgQY^z1E!D1JZvdq`GM4sq5{$Cte|yejOQ zOg|Abck{G>fHAp*Pgo8!WA~)usiQO4H+h;+d3k2u-BuAKI?R!oXrPiYJVwcK^Vsw< z6FIbFN_s^a15J~mmWroQSY0( z#-nebk3_~x^DOA<*Gk{Xz~Cn`TT+T7rb_NLwonp_fF`+TG)~){_Cc%rtf*HzOiZN`QNS%C4!zPrGJ26}w~L?x$yN3Z+!`I3 zMloLc87I_A#m%;7BV{UO-0bo=!&4kiD8*tqnug*=6rbx;aZ@Y)_fz7d5T*;B^%>6V zckWLIF&{qb94M9sj&_08z|FEE_(XmlH;%j|$xvPx-S?=+(mY8u7E0tZ2-Y#Y6Y+3U zE8@37_#A{zQ~18*q3<9a#&V143n;9KxZ&caVe>ixT$VYKaw0`9347U}$g6SNxxrh2 z7wE*W8s^QF|BN~`LCA~{u;i`eDZ!pJc2e>RU?rB6O_SuLS;j%*!g6)|%q#T*C)zZG zjVlu_2ePx0s6Crp^pxoZ6cR*8K$2PrVT3?DJ(G;q0!T)CFyoWLSr)=xcSa%f>+fbk zRN;MXV)+jR!i>?DWoM#ITyZ=~uDE;r9HsckByOYbldtW6cDv|uMAriL~1Vrfg$G;Fph&nmo&LRf@5 zkdR=OJXs4G{RXVVO&6q&MLH2rBs6w4jnQAP1c-e`MMApOu0(U_znnJ^FbXs)&723Y zkPz06nveoQOacW0@ffLE!wM2s88@TAWE(6Ziot7|wM_eh5c~Z~gtt-PE@196lb>am zF#g8vevk-)tg=0m#>0vE!(j-^P(Ue_hlGI{j)qad7NQNz_28|)od+=$w$qhl9BJr@ z{eC4v@KY)p#43sU$c4boKwfvNNs-!9W*TE8nQpwRI;7wbltJOZE)uF*uTo3Pm3Y1B zLvcCo4MXhrD-qs@fqfDb8c2j$o)c8$ZR)TM{$fQuZ;^d%19wvBD-V*3@wS`J<HB$47x6{J#^bHXE& zy4`)1AqR$_5DJJBLHC*7Lrw-Er%fGXrWqF~1y>Ai+Vw?6BTnr1D-kka7|9yYAVk)a z+9OT{E+nxDGFvR1CFMm^>Yjc>3Jft33M4OIRJ;?_;c_IZfU~q|10|r_DiLZ6q)cE> z7{Uw`LM+sTMLuOg;zAc48BQsrpg=;dO9D=$)G3OfCXAdm53N5PhNuh*25HeDz=nw= z&Ll>XkQ1vArAY@E2;c4NH(WS^AqJEXv2UqJFshy2Y+Om~0}snhAGV-_^cvCM`ydXQ zS={sv8u@b7 z=fz7%Y711K7x&(_xSC+WO5G9%U3wY%rJz*}~UZe_8TtDxNMMi^^wF^mK$- zTtAV0-)|vz--9kt2a+Vz7T&4EC60tM$RZ?1QI?mC z`i%b6Zw_Q$CM~;MK$e8OmyE@YL(2$fqQ(Xs6Y zr2vbdA<9X0@poMbg{JI+k}@syuGTPy`KUaw5ZOuwi9Zphrq4q3ls7O=<+ea+AsUD7 zKJT#bvhq=^juTUzqA=nX6^CL`YFxDM(6C>%?_i65{lksUbDA0!d}m@yTVuuLsSC$( zxHp8LZrCpQ>Qd?cyP*dKd}w#|`E)h9DEZsEG#KiUAp`r6p^qZjV|?pr>dT+^LGF}Z z?A3C>SQffVoyq3l=?ZUDlG(u%;YVD&Z7MnWK^(m2D#;6n1$Qt^K0;FLXe1F+0z%xF zq*z$mB%m9rX{tszV)BFC%2P zQs&ZTvW`_c&j_u^+&eB<3AUbk&kcH6uDrf^c9ZHRsr6l$%&1-NPr{cJLb!&Lyiucf zS82@*-6A&>H8Yhe`n|o~5KO2K*OKr18J-jj_Vlodq0l2MYN$djc=l3oD*5q+`sZyK z4qahAJ^a3uf4a~%D}>)wG@)%N=Du0vwc_bRQ`eLcgV=n8A9l9!0~p+rpNCCxpG0vF z;dlNPVXG)^dD);QuT0*zWrG?8JMz5X!ex>KwfOWm%H)9AqmD`4X1#78$&Na-+R^>? z#BJ!SlWs@!bdi0nR0zoICjQ-hA`@{T z(kqo$^a{wuE-s?fs7kp7T1@hw5wv+CGjM=74mH&ywMt~BzkQN3`8Wy|SSGY~r$246 z9|tFL6pMdc!=Lawldw8WOf6*)aEnM^uSk)RIph^grbHUoM6EUtk4!tmB6)v%w$1j zi8d1T`+Zw7fe+pFRtHaFI+>o_F@d>pT+`RENMoD)AaS!oxK8DbHM~k(_t)iXThN7_IZqN69C}F);ZMp789pF$9KSgx z9ZbhKkC}nY$&yPx8yQ=!!_m%dOv2R7Y`R zQ~4x->5|{{rjonwtJGiNc8K+7c=Dv|Ls&X^l3$<@S+1Yb6Wmk?vmsX>Qxq{v=xWCl z-YgB3OZ>l+M?sUt77|k?xV=!j!W)^@w~ND!-Od|X4n}K}kRfC8o02Fdy`zjKWpPuZ ziH)ZsrmtjZ>ulEywfcOc@>v*xJ6-tS81C~mp2UFrP?lqXwxNvZV>uKEo7VC8(o}}m zFH>X~w?YdCDl8EcRG9Ki_>#U33?o23PmB1Ok#kr4<8=En;5t@LEoO60oy=HN`pUJc znGZ7CSdYj!%LnDze`5YPl|$6j5kc-pq2GB0{alt?E`?XhefY+9N{OA6!#6y4_eQDv zEPL`+{v?nGBJjxGKlvmN=AlHiu?nv|PK)%)47k};4n))jSIv`jC?plP(USqO%#3K>c zo;)uL08j;2d5Z#|%>`>Rl-S%{?y^b-*YTmt{Xr--=h(lN^R2$813=yv@lbkHx75QC z?JK8l#GZH?nP8r*5@o>2?`tFmtm`U2@k|Sie8UAPsCf8!^lteaipR+w z`WCm14~-N4#@I*Ku#M4oBy`&Wj|5d`#oCgxfaYP9g@cNtc*LaA*DE(1j&c!`h2n(d zfa)`!CNF;$9B&9xfV$NX5+!Dv66K-ewy2i+ zu8In|BKG&OLYKEZvupF&e;OQNK@=P;AR5VP5OHRdBVD%JW07$s zvOJdcj?9XzyF}8pBg}#lBnOWEh`pV4BL|G27z$8|?<7D z7$Zz%Z0D|O@dgK_7>>d+^NW@=%JRMk6?G8yM3S%wi&0`RigU?KRsMr9U|U{;H$2r;l=@!)hfR{Z-XZiEM>#0P zNWcQI*$p9+9B9vCjpep?iBJ)#L^`kN)?%E4l=tlCW~E^9h8TB1@h<6JTp4OZ;EqyK zsa4^rihn`-8++1Z#P_aH#2F}s2!GI$2#H2%NXOM0W*K8H=7Nd^+C-WB!;l2#!2AVJ zgrz8jS z;E1yckgF6Vc)jmwC{mCJ3sJ&}v1A4oi!>Q3%%DIq6YCd`R4gWwEwB{(TFm7u%779g z`Z*O5sZf>S&Ll=y)^bAvOUVvqqB-npqe^8*osg#=4vdtg(sjqeKSomVDd-|)>mYU6 zOn0nxa=2_Ad_O{1B+zS#IM6&rdy;H$sARBcOj4yQ9yd3IjD&&)4uzEgvrQuB zC6*;a0+g(kqELnLF0As|zJ&te0g!(d3Lz1cK4}V4Kz*bpM1K1d_Bl_A{RiJrQJ}8; zB+>0!d4F*|OmJu4V6L#I^>{7kk49mM&=syUDunbRe;B$~s!k;1s#+)#GY<*KE z>q9GqlYyr~I6tPM!5eEO8Axjji=@AYY0}O@HjvI125tTgIK*Ul3IkJ@>1dSdN*O0b zv}SJ{Y8jjiJQV_cpdYaJEejHIyJ*h|5}peu%RUfltn~499Ku381p+=45c}#wD}(R% zKNZ3GEfo!-on-uE;4s$&KBP;dva}%ug^&c#FmP&Q9tf2L&fot`1m9=8Q`p{5jbS*_ zao`=PHSuK>;xatN!Fg{dX@enzlYyr~pbwspsc1+r8mE>`6*5U|GYuYZ^v?n!D8y4B z_#lk+Jm_VCLew(&e*aSu&(Zm z9Dt#g!T0;0ituvOf!|4{iYzAEqKUzJ*HB_|9+?a$2AZ*~ZiFj8nwFbZs5>ylh~9wRxsc7bv-=_gnI7G9^QgI_fPdA4PEo*%Lp;cZo!` zO5q)Ir!QZwxaRVeVbxu8S6s9&Tx^BDcul5dr8Jp7D;ABO(lvK%7%JDzV6phBnAX|S zG+eA$WE^Ozdx23@*ZLx*@aNY*7baj4hh(2Jt79plo%x9I!4%Jg%g*_Q3M->oq0OMKg^I6j zkOSXiA_ylg0?PuV)V}wk@RG5(IS#KRNpoQLP>EQ)`WY+N19ygg$M&yM3C@tFWTiOo zO}0SFWs1S0lYU~VAoI1@+u+cPEx^vZm;4{=v8CD;B1}7!zfWx?tzQtaw4$(UPF5@` zecfu^ju=?v5snel(g_WggB6QNA1gI}aip&TsMHKgq8lB%C7-{XwYX_SJKfOwmOnxY zjhvyEE-Dr;hhgR7P=C#OtZ5SBj<06%(ML*ICOj}SNF7SldH!|gEl4pgHK-IqGU2cP z4kh2kcUKl7 z2|Lx;-EM>}=dJFTnR2X&yR_LkB7z_XJZsa*Xg1Livy zFVVPS&)b7RFxA7S8CdEX&eOYfot#82U2sVP%Q1N;NltY>qljBXdYV-|4%q9_gn6ak zhzpl$C7DCV?la~;dTv}#==b4?_%U%9MpyJ#32$t2^KesX{x_A6LKuv~YWVsg_?+)B zyfLP@DjZ>Vj3}b2FCmN2GjMVtD!1y9PhlCB60|oK{{_fc-1OB>Roc7(7;X8n6^B~V zB-~wOtkeDyU>EEdLkP5n;oix`Ek*0BHX@M6;uyx4$j+E&p}Ea>+XKWG-vs(|lni~J zf^u)=vpt%hMN%n18U(+$k(C%c+}){>R17^bC^3!n4K1df=)~em`r>(JESGHz6>r6p zl+$4Z=n5wLU$q2J)dXju!Q2(mXG-zNX~>g9ys!(G`dMm$+2hrx!F-!-IhR!SZE1dJ zFxy0CKna~wJNW{X;i25pAuNvyLeLzN??X@ zl=;;R9^F?fq70NmObjRrebAD~$oyTl*z+$2?8sc4EyXc1CXSdL`|at0`SX#83Za4M z6>wTcH_c3_o{=poQTJ$Azg`Ov`;wXl(~brv6)=kzJa2Wi}5}buANPPJ``awN<2OJr(L0lGN6TUEQ7M7&_wzxxGWlJ z=OYJ+m=GEWM~-c0B!V1hG2Vv46aD++frtuGU;Sdu-1L0`yve3-3mLL)2K#TD{6s~CPpASV?j1o^*5z($#ggMY+lmW~K(K|~F zO~etqvxuY}kt8gFVrVS-C2BiE5o16Lk%C0OUgR%8A|`}Jv%70~&v*GYjF^TO8pqa& z*y%P#U*g)b1dbwo3Z-ZI$E#1lUQ`v@7ApL0#k!@N^XfPrOH=V9hU9UU> zlgO=mjqROh`ZjOjabkItnJqFXqn$SSO(e%wq=^A|35e32#ei~xx_pIg8wx|0WNtYF zLS{*mJ^CzpU_?3iQSdzVl5Oe|>Sw_@kq-%FlC5Sl%(PWQFvPkZT~3~5Q_?>Sjj$XF z(*-4vrCR90wj74U2kW&s!XsnVDPezb*7C3jGN6RWfr8FP)PlSR*6a5IrIG3K3}vMO zoOwUZM}HxKL$6>YO?YG-LC~Q4DTcQta1d#3|eRoUpet%7PN4-*{+$R7Irh{`|gC zn7oB2HUJSjvzx^+$-YJw7*RRyVBmhUlaWO7FyLkV%%kG5$cicEi^;O3eQm}Y9Nfhq zewu>CiG~#3C2UM#VdJgPf)NTA8d6xDfoan|mN5oSRNl7a@~MrBs$R;xo(m(JvQqhMjYJS>{uR7=|EX$W=?6_c5sf-y9I zz(BCPlwcMP)JU=j;E9LdQUrwEWH9Q5R^>sezpo74=l_4{&qd{R)TtGE)^2zQaoexT z&exSm_k`S-RegIR(Vegmpr=S(++e%)v!K#vM`jSlx`6hA5C^MYe`hoOlH|b;VSR^( zji^0EMC;_fqX~ZIt+#zsw$BXs`7F^y8wnV3O?T}azyB(`Vi;LU23qdX^XvEMg$DG6 z^&+C^FeA^pQH!H3gK{#GqnzA3Ip=-02?0-XRPwBpd-r6@(|LDSg#uy zY%iS^GmS_1r5-2E%g$#JJ5o}8j>5p3WO^#r__bV8OtC260gS8^z3aRKrZ4VW@+ah_ zWdn;CuwiQ+!RcMKeGf=yjtIi^t(Y#gtRiqS981<{*=%XK~ORT$-P@ z5;hBa4;_=Ao~jAd34sl{rpmyEgypQrhRI`r*@S04P{v1+8OullQRuXx4Xq%}`_)Os zWacQqash<8b+wJZ&lg+v`o<_mgR92WXD z#NE%AsaUKW1y+ujIgtCPgbpLRr4>oCMYX<38*^8?WJ7ronEm#oWM3AUS^T?!-S*8r z*%%&7-h~9jMEGJlquiTcM}(ZWE-spQcEVuaA9Hf^SJ>?P zK@>{GEO;AsEtvU~lhFkeMIpq0q!2)SG4rbyl0t{VMAlI`Jlg%ndufAw>?!W6de~Yp*0UTAsw^Ke+;riW!2iz zUcFNA;6UCa^Xjn_N2s!7zF_Q()4mL-6!C_Wgu^6=+Jwl=&svxuo|Y=6dm}^f>uVuh z7ZsD21M$icGzoPNnUI2|oyo~^FboIOGz@hT`Nma|wI$pm~uY#7*v(A) zaA~xx3C7Bs$P?2wwWEN{s_(JbG3gwJ*}=kU1qowsk#Rt#UXtv(5S=PtoRn63^vw63 z(>xk)oau}0*)oCtG7!a;)F+QrCZ^sUe_keCW5%1qL&oIhNXR@)nn$5LQfbKV_8@6GN&ii#fyC2Wf|!XkjTevJ-6sfp<|-({XmG5j>%6?$8`i3jq2Ta*9)vFI)V=xGj5<@<=8A!IF0B$#_o6 z;woCVRZ*>&F>QYu!|$YGGIJ1KIdW#9?xbVE-p8wS`Uwrly7toNztU^kbH=EvW_86p zFe8P69R7q_pak=IqC7_ums`ZaVy`$wl<+85>_$Vh|EKRsQkJGxlw@4Im{g9z>PRtj zAh)RWu`2Juf%Q9LxXSBNHlB1f3m=*y)fJbC{J{BiOEHdLG{Ft@sjz9AJeB7$$sOy7 zF`H^pD3_NVlg?3)9V@C<4#V^Hv15|yAtoACCMpTdiL z^zgzuHFqU+ikGG9swB`kQLQiIQ7GG|TTOiPSlqQuAQ{y`rf!sq>g30ya~x)e%Bt1F zxInCQmVv!V$AMX?RBWKzZp%{lws=MNwtOcFRVWB#tj?s@lj=@79|tWq&$1+ zzwojX)UqVRn#c5xlA5}q&$ovilT1&=xC_+_lSVT55uZOW|ZE5 zHk511S-|y9EZ1=)Q{d8VSo;c^0=h-yMX=r}>S-cdye;cu9L=KnzHz-#d;0ZGZP0;` z9Vu%T^d_AiX1cP1c$nmjjHp>B3Y!x08LKK6$x)8X_&cA@Oy-k_E*_o35pxFGOjSJw zuY)Dkn$g}IPTVareZ0yj1&+SF9#t@dVy|A1-wT(;V0pL26O1JlCt5-E%7E)oIa5Hl zi1bto?@Jr1Ehwg*Nm60a4~iufBobsOhL%askyT+~szsq*ydphhJ_?wR#jd1DxI4+1 z?DTX@Uym1Fl%h{c?dYfM8Zer=%V_l$;5Rxu^hY(EFdhoc^fIH<#1ysAF(*4Fnd1;U zQq(NuO*#ib=B$)3SuB*p3}eNDw@q+|?Mtq<%;OMi1Bm;HnuWYcrw^I(y4G6>wemI? zW+>r{j;rsRPhr}QLd!5g%z>hwnl9fnZJC=%j1+D->6rW+h*_4fo{1TztQva{nG7|1 zl&S1#nRr1>Nwkp->4^#*qfWRd7OrzP{U?-$wd5E=r_4|pMg}h0pr(~5S8_zOvM=O~ucIdliQUE(M zJCVh+E2H_pheN&IK0>ctIig4!obb%*!9AvW6xQF#jY;N6$PSd%R1XcAhZ~bj53=%L z5@gy2UbI@)pLoG%4fCi)b@e)#>Y?d)*fGf*2-%Ucn(Cn;bFpL6>0_qiW6}x-omb2I z2_7_oP^0M1pl0!%k4iQUJ4B2ltaS3wV=GU&T~1Nv2)s zK*l!gqW4%b!)3+<0rR7lI+j;a+XmK+%3PD5!yt39Xns`4aY|dANsUVt6TdHNSW70VkwKACTo&Rm#OeU8BX_LS= z$v8k$cfddk$fj!LwaKifzN+DzH5V11woV|LTo$0c%t~M zZ<6U@rk?<0biUP0MKikDOrzY{3Up}>+i;mtaK$6@)x{7_X3URw5L|}}nuEGUrH2;R zph_k&Dj!u+o|=q8>|K`ijJgN)tQLpmVKfSyydB>qnW}E_0W%@(%EIeVNpoPgs5sP1 z-I2knSRGw|&iCjLFS`h_$sBEsy3oD3v1(_;63F1F_QT)0ZSm zmMg_$P<8(qNu;5yy}lJqM2fGisVLr1LkYf6rW+hnZEr6_K@!XC)33!W453u@jeArIH|Ksz5MbqtWOQ$uH<|DxHMVmRG zrgjuc1~(ouCO3y-=Hb#IZ2OuBLGK}Ba?`^Mpo_fGwp|>J($>wfUYyVBnSO4vSZW7P zt$KgGv71qAM`I9qka(z=%p8T6kHwy#NvQkCSj@Z(R~^S#Cz-0=v0w&Rq;gJI9<3AA ziziB2ees7zN3DUUmYk)I8faN$a?~q?my^Suph>X%$XLwuwM!YQVELHUtnD2vTIz-M z7Q}I{mwTCdQPMG73lq6$FWAf8GmwAx2{j)Jy+gD(FhnS*j=sjdi zxQ-vw(Ne2`Sm| zb!B2SE44WfBpBr{@<_hLJ1jotA(7GtTl=|NTGz{jdM}^?&~T@Bgd5@juJgw6b~^#Xxya!z8nV z(ZO+Bsl*b_>#$0*u-268MQe&sVZGqW^z~^zpQkPCK`!+RU1fsjmH!fTW3UTDJ!d+W z$mr9!botHOkKTH?VbRk=LZ8L)Cq9;}g+^RGU~)}3p9)fYiL-_~1}%80G%4#v|O z^O!@+w!EY-KD1nCz~bdFv|Jo2<(?-*pkgAJ+gD_*9FfF3xxsV{$s`la|XU>9k@=X z%gDWbU8l!}<*sq-*T{7`Uf3^3co!q~O=!gGGSQzA2A8#OFEuw8X~}BXk*#xo8ix6@ z@BJmhcLk~_eR25rmvKIS?;>X~g}8RZnO!&-)N{w1<8|=0${HM0noYh0Tv1)QUT5@V zS-2=!=p+qM=7+v3ozz(KkKba+q-#+7j{T2xQVbQYZRY*g~E-GOi=Ao@bYnJ znPP=k66`)Q7B@XpN7&;;_5X^AqksFvgdF)g6Gnw`=ZsE5F?tCoQGqkvDD$SI!ysET z<*~pAZ?>twFO_4lL4y6@q^H^~DzaPZP^|0znnS;2Cip5J`udXu&>wLKo zqPPxN8mRy}&jV|bFj?#w#8jMrQPMxnv_bREMA4W#J^l8^AKakwro`@z=;!&$wM<{s zW`pqQc}udPocm8)L2b$`HNo%=r-AI~HVsD9Z{-Ip3`6fvGPnDo&Hg#z@|Q|7G&XF^ zRD^71K8K)Y+GN=yd(MZ@RJK@_*puRO&X2!D4?|RrVBWz0u)zLu9;O-9K>W*v{{ug6 zW@N>H8g?@5+*tCMT+Xbo$IX*M@GZ8nE*Ll#m!mC@+@v2}@n3tEX;Nf7yjVnzLo4a_ z^a!eqQ}fo?)z_%*PSmWrJekMIy?0@f?1fnE%6j_&>#}wp3GVw;iEf#=@}{|d2j8j? zp68%DuT+bjp33bAVVdyaJM!ny)?ZYd%wH!~ z6A~LEXK-3rE!fdS0%3UjIET~B6tol8PTrYvQ(jLPR2iSmlETM){{X;4dE(WuE)2@L z@_1P{I)n+Y%-K7ixNv7~|N7Q$PP31l>bm`=@-YmL6#bzFJ^T_|Odg-A`VtQb^Kcc?noxM)Q;^iQ;v_toj7h1@vJ+X(5wI%24R3euJHVr$m z4m?+{GuOz?@mQ<-m7&wb!4r+N4qU}@7z&8$H;wOT3T_Z z;^oDnas*c1tI^``btx^4xKr`+Vo~X1rF=2bp+?c3--vi(q*<|jBvj8BFNxM}9^^)6 zCI-yov=?H72s;91lJDdhC=ZYgEJB1p%9Shz(P7CWbj+TQhV{h`K`BGP6r^25BFcnC z(ut@Ox}XzQq`xH~L76+r^ofl6nVisdKKI=HkwOOX&l&l6BD_zKL==Ptm=nPhCLi+@ zSWi#FG56CXl*lWbN7M?HyKIx!p~NKR1y_>@9!oWG4Li!_BJ+fyp33cvWfB5;pQJ}= zdh`Z!069_WgWoh_Ttbe{4(dd0=kOWGvspt&H`f zz68p((lmh&)QmEec_gJl)zgHJxVd+zGgT=PH0CYaGnH;uB8CpF%K+<0F_oc;B5o1s zDHiymLhJ?OKXKL<>TZCKXu%>$M=mVlS!?e-=_%;h3N);*c{ge#>PJyRiUO!clF%=j zCBbS8+DMi|GV=X*gO`fM%TZ|M$muKTvg9l=_fb*0UHU1hGry&7#0Ij$ws6p7w&q zy>lff?*a1p15X0dUf)%Fs6SWoAmL+)FLyjQPJoAqb@&|`mx7dwLCda`PRO7p_QJRr;trv7anI#iQoDk z6*sT=jh_T@581Q6gw%HNMN6;wS@E<3#v&6xQ*y+;T4mz-sn``_yX57k)50WWZgQy| ze_B&nXXm%KrnDZY^t|Jqcq>_aKhQNl5@l)FvF+z)QS@c))lqE1v$gP9AA`c~o3l-k z;ZLz4tDPQx)*h530eDgVZd~}T6<7TYQc~WD%H@>dUYYegtY`F|byG~M|9$jmR~V?6 zqWxi}w4hTzhm-0ni?wc}L%=##%;#$A<;9}X2djKSjLX)Apk5l1M?X=SbmiJ5I5+T^ zo#$>czT#OPCYyyW)a1!|xZ5WxGl|R*l4ETZWq7jaQRvXFGg0zRZx_vD9JY>wS8?-D zY5yz)caVJN?+`X{+^$OLq#>Y+oX{P3`gM_{D%Ej(cxo`#QGCDNeJf2`Qfx^JDy5j4 zB3`K`CwWRSB_*HFidpW8DA8T2@Gk3xCp9Z!w&FiLOP<;%I<^@0Ov8nvuuhR#d83O$ zYcj;h|3DxW<8k?=J}c#WRD^z)jHwTcwJ{|fB(BedK2B2O}kUU1&Y@fd=AE4girezuQup7aMXoLT**Xo z%lh;M%P#X1XsF^2MODp_y<<&}^moncgj093MX2J4dA$%lo;;Vd(4m%{XbZ04 zJg?s-jd%?@-d&Uf0*J@^e1=3=R#f^0-i{ z^SI0x?>s>~Ia_g2Oru>GE$$*$y3%?+1jtw>^gzUtL=ERtHDWF@7Vtg9sv=-|OY6!L zQv6f}leEQ|<3Gr5TzmEDNo6FeKtjfyi_eDLqqXr?&q9~tL)&!6uZnp8cK*tm778LC z68aQ^`$!+G=uyl(DlLkfSkYN2KcO{Z#=kvDX)5-N8W36w>7?NSOaPrV>(7mxgwG~v zcjY!*sU_eFMO&y#;Y!8Cb1UNh%0t0ABR{ILQQ@yK#h+v{jnWVydpoeW_Qb!*Bww1m zMsuYKCw&?gAAL>B!>Z4r`kJPcIe2@hSiJPmvTw@fLVd1R#LUWe{MQ=bfAs3D$XiLp z$4f-Fve1f07+;rDX+;xf_C`A`Dm~q*#wF37Dpm_ScAu(5)Z*7lPYaeq3Z4e4GW%}> zj17%~S0*CSCx2aTy^iA-#UmH01PfnQs`S=TL!?RmL)KzyjEU+|+oa@y2zxlMhD`j*4xJiUoRsAOkLhiKmt2lb5y zL{o3kmVZWJ+y#J#-nFs|?S)c(4{@(03SWMYXskphYjMD-LdOqM)9AKT2K6iQ95~b9 zFwx=POJ(@Hh=vhf20!s02A=NIR~{J!H;)>G)R%CYy*jv=2w=Y8yMBhZUT*3} z<%wQhyG$J+GfU|Rjbg-Lm_10XXs1kI3-!{zIMR+rj^mba5SzsF8G}lD8d2oOZvI^d zrQydj?aopkMTNq?r`+%;Fk?9VL%b7w$A}&I2>Anbnh{~vrQC@wdriLOHvDJ`@fObw zRH=$_armfMyz~_=2Q43m>RcIedM?OLrU=Y^R4iWlXq9*D=}aBnHpN6;vW(?zr?Qi>)_;)UFz(nCugUHxIfMC_!uT5_kjZ)dt| zyQRmJw3Q=hZ<8aq2+IM&8B9?ac zp=$PViNjGAnB3NOJ?r(CfJRwP@=68AkCgHP@YIq#h04o`MdTQ$j+9a(#2KOwe! zJ$f4`DroZ^c9Z(v;XUZ4_MHGHjJ>0x?U^mbm=e;nljMAKNMAR0TV) zuAB2HW7qeH!dTvHSpdAYgG<3!vhzwER1ZT8pn899yD-)BlmA0Bk^Wb@P{)=2SEi#& zKI`ea!s<;*HvU%ZQoc!=X}R(K8d35DQR)7^ic^P?~m6X z<7LI}0a;B0xXn>iGXrGYVkdl(Q~%|iNnt%9?#O$2v8WsbmTv%s#o+5=K37vOB=X!AyPs09Diu?yFA>v9~KSkWjibdoosE(6TDMa(Y^#X2D>0{N@#Tn&u zU4!L2gNnf>oscq*-FpOMdX<3Hp;D#*ZV`D^t+sX><*3OzkX5?=CmyRzxn^LF)L%Z0 zn#gis$DAd{8^QS%EYW`qp_3cCjO0TA9w_(gU*Xk`^*)BKK9T3ft!avR)P!MKlpkHG zJ7V65_jzJf7B7dPRmQ>Ma;iR@Fy<~Q>Xf^yQdRRHK@JHG>mEb)CjE0}{(_h`hF$aM zWD`>F-B~S7d3BlCkH%r0mJ1^r*aADARyt%QC_~hl#Syoq=rridBuQNl*<8vMJ1=dS z>ucO@815i?+LsWuFuue?d-*bqQn+U5;&VHPzHqg^y-(1qb(V!Hb=Sv>MddKKd^%>a z_`0CVL>Y(F$BRX!50^@!GAowwh03*}GvdlI=8)JuyI2{xO5Z@o&bhBu#k2J^N?J-< zwOW2xM5$KGC#|m^Ls4?vAxrQv|n#ir$Vn{HH%H=0)xFJF< z3pT5{H^hvk8Rvd*r{VNPk=z*tVO0q$nP{KjM-0@ta1iLG;dbR%Omyp(|D3lRNJ+-W zjY+1bbZLkkDylY^Vc<-xT_v07Eo6;3 z4OAo~CMtr_j+yRiIv&}@#9>`!6H`~oAR}v@7*8kzgje3ov}1iS$CEmP0kykqy^UQZ zb8-_^vNXsJl+{#^;#@kBH_14(th8DubOMDcjhoCa7vuJLH=V&dvTTxSohB4&^WoKG8Q-&Fe&U{YH7+aU_8YYTrszwQykIbjxN)j~#^)3w) z@}6o{ri#vHF<{SB{)XpgYKzsQ1;2P%Vv}r+JvxQ3i}-q?kFlTt>N`f zytQrpAXnLmhjq;6;BHZ}Hn3KS-!F3`gbZyB><6HdjpCtpeqrlQpz01PLG4OH%fX=e zIrSk*!rVi~!{p;gu=G_F zlQIc#51HUu%+W2}Z#EcSrjyJ=;vp)wYi4;Sg9F)ONeAE{TXnkr5@cA#aK?Jc^i|m- zA!LZ4@E)D6OzPh%|GFybB=c#+l0;1c-a{tsOh){AZZRr%X~mwiRR2;w9CW_K#5R{JVdF8pU4uOSb-$9 z0L^1zQK=>`l?tpIFUNqDBWDWaJ|eZP-w=0TrIkqHOSQ7~_M7G?*2n}abO$#JTgQ?~ zQ7q~=M$xsE)aaSL>V3uf^RYTmO!N5MkFpbSlZr#JRPu-C|CV$tf?*R0z^=*ip=GjI z2zvfvg(agXx1jFAT}+%8)sm7Avg0hO_h^=nmFO`{LF+&{Qy@2qI8;j|f6iA{K*^J_ zOlY&BwyRq%v`iKY)nXBOVYS3)tuNn(ql=TMX61l&oSZ3$n?xL%rHPs=LDkquO=T*E`-ZxNS;3d0K8}w07O79EjI(f>xRlMcpLR15CT@>_Ofttd(m|U0GMZDC7{M zqe^Hb*tMV*?8Td;D%+u7R+^At7khR27jFZa-5d2$BCH&xJjg^S2$PYy%;W2wQBaHzLd%?ZZ=}~RA_nZ7K1oy^LL^r z<;=rT_R23z{qY&Drk>H@rq-^l+VwER4i&Xhj^=74CgK6!B-2AoUyaMne^)o-jGN!} zyo?ws5%=+OAss~Z@@XC^e(mR=jeLZt#;b+UK5jx9mW0=#f|`m^T#Z)t&4Aq`)6=i! zfw=9gQ1_*$icnnpB0;!r31}V&_fiR$ez~&Yre2hAxu|>?t!Um@%bA0@gNliHPq#{6 zLMrUZ;b5s$JYsY;anwoUNDl{lx+?{RN~xfZtI^0`8?1a5tD~ee&rhkH9>7f^eYMK+ zy27`1At%lo#q{`T6v;9olAgI+b5P~HnM$F_c(^gi90%BelA5Za0rPNUlIa7cjFgnt zm$uAVSuYiPmB~42lOuPc`9%vkt-8O{*Xt!>Mirt##^mNWxavAdgG2L!R(R#0-lt;n z(nG7sBT5y$&Ngm)5uY~%(Z{$DG97se(4ujRq{{RG8WN|4=<4h#h=&NWDZ2^Kv7NQ(1>}sG0F50L!a(}hqoS#wcph~^-Kl}IeF@NMhBRh zp~>`lF^L=p)?socVQ!Lfz*R;~w|++SOhx)s}KTQe2obuym@ zEJ@Vno(bA0*43>()3Z0@} zV%#p;(tdf`ieRKq#N^~asQMh5=2c^rfp?dN$%g|e<;P3t3#BUkeL|W2DhVrS74k7X zFJx0vjrfkPY8GC{Not-UjhBZRlT1&+_)A5cD?G%@nab&DhSh>d$wQIL-n#uwNejT7 zWK3?31FY#}j7i#zr7$u}rlcA$4;d5pK47J_icVX4=aXtdo0iQ;wb-s@UP*W*3F=W( zhkkj;g!GH+urXo$tSqGP_4_;H3MP}KinTRb#!Q?pVlFBsFTDeq30Ph06_eBx<1j_l zuzSduxH}L_@hb8HU@3z3*W-;BHcJs91^vYouo)48_HJsMVNxi->^UDdHDIomT3y2w2kcNut8>(J)Dp;S0&@oLCYgxw!k|U0SA8Ct z5WrXxW+!2KmeYyt3r$b0VZNeA=|@lBF{B5gl_F;j^&d=4K3Tf%71ic3r-@DF3qHtwI%ooJBrtL<` zPmS5X#!7*nmcmUlgVrGPX~aA{Iz(-T|Hgp#kTJRG>zLA~=zv1k{FjQs`fePm(So$6 zMMht`SgEzkW$ml87sTpFF>??%sq_`A^z7Mq5E-fJ#L8sw=VFwR(pTojvDbsuL}#ic z%!$9IN)$xi(9UD9I#9|Kz)d23sLDVp%T%_6kXE(s2d7bbkC1YY>s?V*xJKQty``* zL>^!VN?NH#8;968qfvVEjF;T1R<-xVTIJ`nz1|ub|D$0NK?uKzU#3!_?vJ7tkDoAH zIfDA8{hNXoaQUdz$IR ze5eH7a&p+wiX_Z^U(V#EhZd&3^tqzds#X)Mv5&Z7v9Zxs)jko0YBy-D7Il!zN5$mj zIJlaIfRLO`J8leg4;d462VUhR7%%eTn@Y_2?Rn6?1@ES;KSpp{;qBqZBy${OhstUm zrxG$BHzt`LWb&8Bd1mMl+j&mxQlW+_kOgwu{Q9eIcleK_Y=u{ua9Q#aNXt5@n7kYX zSB{`Qhr$%J0NqEW(k`F3T58hoNhYY5QaMNUjnzp@YP9aLu2^iZNTbKvJLcvGFD#hR z@ojKZ!|r-M<^k4B1>8^4B-~9hy#tx|-uCR6Fj*{ABWaQxp^@NbkE7u7&AQV^pq-fK zlQRi)lS~gU`Ag;X7#o2pslC<%EA5w6o7MQ{MuO1Tb!p03=%|%vG|1?0=ibPX1(z&& zW1jl7j8{V0GBvMRrs@$i2lYM`lb617WyDtbp3TOP_CaJaSZc-1BTRN}kW^F&56|RYtE3*Mr(XVJvREoc+Y02}p`oelmdVytUE!@>;8phm?I&ms>L!(* zdSR-R!*$!#Sh}oRQ$jC|jia<)XS^eHahhc<-tu)m%{+r<*0L`^*%s4Rfi9AZl<}|3 z&b*$a#YGBmmM@$yI>H%oPj|Nr#ji~CMZY$EG(HPdhKwm-JBXNQJ5;JPS+}BQalDEo z?e`R>XIl~^V7Z?7JLlodZrOoZ0a8G^@`w3!l_Kq7=`Yq3DwkCj@sT6=o@LK6<6#(x zG*0N{xsdCL_H?f*w*Ie+-82(fpr_K13k0KgD{&=ISr`hK!GYN6t-=%rkHoI z;Kf6wQmz{>M}g&GurFo~dT zh~IA1kv9MfjM24;9q@f~wd+-AI0-Lf#Ute?DN_J9i5#X@BgwEU9@WHS@b)UCS_S}V zv}Vc#0rjTEx_%X6s_s^Xn@`$(makzxv7U+nV)72KvXF+O=HMk{u5!-ckz$%Up-=M9 z1@jnklS*H+)QOXD1NUNiFg@`Gu~_xzynbDgmeof1@<4BcF;wR{86 zFw%Wrx>yORRvuV~$!RLZ%aEH?dS(l>%J9|pGJO4EC^anW^)wC)JDMlda=XiL-mmL= zBJN2gt1)z>z7e4k4c*`M5i#PT1jbIcIO#&@oqQ1~AJJLIQ$Px#yF@C* z@`g#1pz8Bye#-mt$-~?6)l6RcYE`=H-@$g}r#fN|RM0FFk%BA5RqJ^xtunHGCVzLV zAfhrvxBHY3>190)CtisBt97!PoS}=AO0B%sJqN18q|5=_q|#TbGR`hmLIUmTCcNTC z_so?mK4UU?*DGQUr}LT6!j>VTw@9)&!;Hd?lmRZ|GWvY?Xr$;csE(2{1#go`52`A- zuvsg9_OiJ`t*Y9DD+$E$iVdUG`!Zb}QFmuT+q5)yGBhmNr*deNHP6UB|ZmIAn%LDF z!GZe;_ApZElh~Ls8q+$7mcx;_R8CGgczDS86$06 zeazZiL1GIdP$M|8jo^%85v6GSDpSb&N%k;el5l8MLVV#kA#>0+sW_lgrhR6?MB`ME zjP8UNT>enSU~R3&^B42wDT=vL+CDFoa9NI-sStOaaxr4kI0~u5q)dU^B=Ra$aeu*6 zxLvVW+p4frbXO`!co?bF%I8{P)71ftW7YLRP5xe%G68OrL{F)zi|!;LPi5sPBJPP1&_Ky>yDMz*@Pc0MB2C-b=pDM&R#Xd^P_!0n?_Db)?{ zzEUX_;^U!0DhPU#w!-ISqA5_dbGM1D6WC|+G6l%j%j}A+yI2V-RRU563Tdjt-Pjo; z*DbtFDlaOP6dy-I>qZifFZXJjmyyKthQ;q_SqVjhmrAjG7hq+@<7hQ`)7|8(w4(7i ze3+Y5`nsj#o!1HTbax<_%C_<%>zORRXW=ajwB1OB=THW%j2@cX_f%RjP}oNEBXBVI*eDN+`*Du zgrg176!T>&m1=pNEF%RU0V_w&XaSG{%R$6M{8hyYg+wVnsON24AyM;V7E-?9OukIT zUGm+()I-ET8{gN86<{Rog6QV`|fBxqOigoO#YIw5(Ez)z9JZl5Bb;11W1C zl?tt!3(`}qG_-Q$%)#74CF3AQo1TqA2BVqAS^VbGb%&+`#omwQjLfb3YwmD_!fEN{ z-|v`5h64r!9igUfhHzGQlhsKnQ1!SPpwFWPNbPTRgL9SIQ^vP?u4Hl@XMC%ymJw7X zr(|V03#$?VpR2k5f=!4Q9Fmpf8C3gZsIf!zfTJ9kgjXj+Nk7E3Xq8BqHT?*!64yVg z=eJME%JR&%!enR%Ta|g#`SJFAJ*E6iPsSytaaCLC1eex5$@*>;ONl~6OiN=+Zcv!^@z-aW({05kp*L%#I0PFDmbJ5q%$-#tO7@hqu-f16 zFViw>5s$Ah^VDQS$sY0?Djy#{)3TEBCU?JPu6@SZ%JD$!NGs2YaQP^@@4~TxUT})h zx{?PmZf+}~@XNhHnVkX8Z7aE()1?7fEhEz^I3z2{bIbC9szAQyN+vI=3Gb3qva&qG zD#|i^XE5O~MCJo)m1UTM>nf_y-I>_G-R_cENMfkkmz{DkT;`U|#~0`ZddW|>`v^-1 z1Ri5KX0QD~E+oJzQ$i-A5^`>9VOUnn=oD*)=-G$pa$f;e^jnHq{8d_Jzn=)I5>c|J zJi|(tR+I;|?PALCTpRM`q(=9=-G-D**(n#J<)i4Hy4!?#!6CbExwJ$PjrbZTG5HRY zRClKOmHjz`PbkB=mvKjTdhX-GLRqq>Jo^yi)Si_-Nh;7anOCPjnF z$xIdK44C`l#hEI?xJ7fn`S#YTT=Ab}-0I1!FyG_f_ zLCP;E39>rIXg@n5i*>>07xiNq8)vw!9JVo~Yg7%%nW953#>!epc^HHj;03?h&NR!S zXkNiEjJ9UobNtt)rkN;pp=GSIqRa1XB|OlCTJRY5PY(9EK*4CvWYp24Mm zD7f4k76OJY7J=e8wNH2S^7@3UlsZkD?v^Q)EK)r{GWS4>;L^-7coJG=67GJ_ebcQI z=4HQJR+eXIadRaZ_}vIy!KxE3u97ctC*i)6G;_b4GcOI?e!pcy!?*!a`f-WuLg`(`Ns?2rYe}OiviW>8?@;$ztLM>eY&mQv3 ztn?2B4EqLN#g6NS`;na#t45*ONj3EY%LyCS2y{9mtLJwQ+5c{vB&UJpqNWex zMW4KH-?S6lH4J|-6a9SM?W97NxbtQKd?v>h5fYjQ3y4Yu|!{WxzXmK8Asth;S@RmZK@@=U5^%Q2y)ruX27 zZN$fvNMkfHFThUJ)Cu?OG0!b5sv_!*+~vKBo=7gSnrfH46cxV$$8+m0CqvkdU>C&_v6QxfU+7PaP}j zgL=s+S=67I7q%1?7JK~Xoq2Ty(Id7rO}ODxGch$deE9dYP!T%vGA?~L7d>i3oERgH ze6N3`xd)-&4-?9cxfn1fO`UKrIVS!fivyzQvT9bXkB)3^c)CJ!3zd^^03S|XeM|J% z4S4wlUK7_~GtDjEHiRO0_muhZv08so-Z^CbOsz~2dVRU$R8FM?36#wN_7iDoiq8Q(wUa>RU8Epg$p zs>XP(F4&3t=(+dWcyQk3GNC@q`!(ziLola?4z6A3RaPTJDW(=^ntwS zl&mbzEQ^cE=kmh1hDN);ns!_|oUZNG`F>iIRK3#lLF!9sh;OI9%8uDVc297e37M0w zPRN%WWBMdzWiHtXtgOUk&Hk>zRb6PTSzW(>Ojeo_EAxWP{JX}wIw4vc9g-smN&82rKoL)SRFNhZkWWw z(2t!C$toJdULZ>Ll=I*^PtokB6v9;^O7@Tfv?4pA{I^fwL$m$Vv}oQN#sOyTxf#cP z!L;ZjTv;wa+&9utF%KCE_{6PHp?oBIRKz$g1It)Uu3X_UJG}1FoQ0Q@rarJ2onrbJ zcefO+54-Bn+O@rq6JfM{P%4 zQJMJYN#y7f46*DY>iN>G)kE>dwwI3Ul&5v;`pViwXjw(VWKVf+S-YUxgx0BgX00MX zt5BHiG0))21&{nVyh%`PlM2|H>kATJI7TIb&`!qG;mU-dmfCpPFv^D1inD#0r&W31}FXUh~e9g34#^_^3@a|GDC4zGnr@8q6whDA zwz=W3(eyR8WTv*RRT{XqF^pvz+Kz76OkF#%iN?phFO(*0=jY&cuA*7P2u!q4n(Q&( z#cLU{guQ_+&n=AWB2I;xx}r&+?y|D@d}GUwyRqHc$BNqbOGI%oE;Cr?>A5qCTtrm> zdG?fNrWGe9wxwg-W>IEB1QP{b{a!*6JKs*#_qT=_qi&r##)FpTJ{pp=j%Cdv_!Keo z0%5YJoCVjJie~L1gsV)L>@m;q!j_^`j51OmXhkj2nUTlB0i6IX#(a|3 zG4oaL)J&a;vSYHp-C1Zk=~*yylvOhZz2KBA=Fh?M2pY?xy`6yRCp0o{)b;f1w=0El zwTyvG3Xe0UYdb5H3F8+OYSty-CZT4 zdq(?m18hH+o+$~HXzGM}!7*8Bo?DoUYhU&pWhD&n=``lEWF^XkG1`|4TxaU(1A6w9 zXU3Ha9QTQdl3^ht$0QWuj||gj`#Zr@W5OwBb3hxA~XuOHfRVuFp4v)m9`tY$jOR(8tHw(cQp!G{>%@;0=5 z)GX_v&gvOrUUp0t^a8jdQ&PHqZ*V1E7Z=XLcq2Q2w;{9-2DyY{Vy9{n?$MSSjSJsL zXjdqlL<+zl2Oa!L!ajF%l?W39R{Syg;B}^=PN-*(DKM}o>BUoKn++;7jjWL2$3$MD z(J&ArwEWFRR?*!WCMcn+7<;u`lvtSk=Q|Uy^E7pWJ$p<6Vo`~M^oOle6%#8#EGuMe zV##nkCKk9~X}?5zhn2}FGG&cz@PrRL~=KS_Jw2mSYYT9SpSp=VCXL4G1wyPq>7VD{(S zfmL9jIX%CBN>-QxxI#C}`ZCJ4p2PKA&xCa}leEw38N*d_Oiq~d&?=FzKv5Ua3l7PO z@*J%=4{horRMvjKm?L8pxnDE3i4w}nteW3HCMV2UU^%JjgL%m*Sm`Q7J%(v5BC9>FT%L}cbW1~o`jjYKsx4NDK*Qt6sp`JbFIb3P-hJ!*UtSHx&$=whX z?3tW*BIc@%)=MY+7|Vo-t+cG#xSKMz4mK8E^f?K?ucs5}*<+rW7pblj@A|BWAz*O{ zhxL5wq)y(~XRsID^|?b%L@O+ty;M&p%(KTl!z=eS?vtw}w-@D_68?>>jDdL_741KUS7wHd5~DvRFxgYigKK}szD`jm)U(Gt!;8y3>W*XeE74XTf( z&xm7Lmuc280`n@QdC4Ag7G6Hxs%N6UGq2*_UKjVC>uW#am|OF?lQDhS%#1dHc@@fH zH7_r`p0fyLCH%gkE}&-*Dfk$pJePHVmR9H_QJ7f+l$9~St8fw|hCMBZXI2}Pmhw&n z%sM*}|Ksk)~SFalq2Ox9AL zBNlr0X4*Ik+R=c|eOp!1UYZp#unmq$O1+F{e}AKGi7>H+m1gd};5tuFC(yIUJTosv zjzib*e=H!I#)h4q+Z@_7@&B-6ePEGn^SsS#zRfI~WwXHu75>N~p}_rLw(umAe%pa1&nzkmJaALwS5aBIl1YgcVu<^+o65bLk(OW^-h8Si6F z*C{@wOqT2+C!uwwo(ajG4fFgl1$eE?u+B_MOjt!j&kuPCwqML_RD{ER=HHvAGqm%q z6JruA(%rxgp_XlvsZX#_c|+9NK5L9 z_{abK*I)nq^}qh{kN*>27~~-4u^)Q2Xv4+DdZ}OSMB*2IRQ4P!{lvV_bL--e4r64Y zRjX-6mKW)ewOy8Z;!vnvr{~61B+124oup;{1A4p_Wq9XLDY&+JY@u!EnX&4D_J%ED zTwz`2ackK^#YjSU)>7Yw%UHR8` z*zA*I^k7pI!c2#bhcasw0bFIWWKTH@t`qgl+eH9Zku3RBp1}owO2_YpC9RC@bIGt2 z506G>F|lcpXOd^}>CVQ5jDNF^3nnQ-U0JAnCGMK08Ckcu4udY7yoe7)eO!@3VNBNL z1(%0wS*WKI==o!wn^*k)VHrReK9em^-P1R5Vo4*z`rXvw*wdJLe-ztkVr2p*IyEEL z+0$ERy3PG43JKgiy8PK%B$rFuL0JGf48#^&t7{zTr8i*NF-G%pg3C!!AJj`uv6+|p zNY;fI4PT4x8&HpI{`<%uj696XtjCQU<`bWbhOBX!*_y^)P+mq(+$^Kl8`qDR#oU)z z2FFY-OKS1e1}v(Fw}i+5muqR}rpN9YT(_)UJg&f^Gp+{9LrW*XOODAx{_N($w9=PR z_V&%E5d&zNmLKnS@Jp)mPlp2L;Ii(FgZ4;M*K(W<d8!;tMC_B?SnhqzHxhtQ6A4oXc5y>`sYqM4nm{y4>*)z_< z>O3{`HW6S|CQAO8XK-Og+pRE>NSdi8Z#f4x5>UO7k&vQL1?IUQ&q^QcvY+|^Zlrsd zh$BwrhmK`=PIyUq0Uvtef@4vN2WXR>TmEYmCMsfNPc|#GpzJ7kcx}4@3Ovf-U!8M0a&9_%`~dv^xV&6!dU+J! zYj&fjg2R5-LBGpFihTbA+<(WP3!GWy(B`!Aj~Y097fj<|_rSFK0x~A|vynTXa*P~> z-F}*hsVG9KmiByCq@%R^EGQNlB82Z}nJIbHBO3W>z@Hjf4uRUt$~*Bh(qTlpQ73 zt|4L_=oEpAIsxw9ns&iwY8N(E+66nRD-)k4{Z-s>_(%j{g!@!^mURM8=xQc?zPpsv zW#6g~c1M&Be*-F9Y?to`s$_jPiQj)K&;uOhRFcR%w<&fP+1&wIW0mdp5}&g(Ux->F zmt3u(m6)9ybY_)f<%d%pEJ^1yOLw3I;wVD*&S5~($;FNWXXKylfB07)H`gI zHCEYfFY!4$^R3sj^MlT;@(wxLzX@3vHKVBC?OxTOCzw(fNo}mJmfH^Ka5;^_?v#%6 zRpsUq9z#~C=hIYUs-iAnsx=C8L(Z=94mdjF7;6|*Wc`z(LJ}U9Wu-<4X3CoGAa*}OBCI&r}!A8S$S5; zldKdl?#IwqNiAd1Q9W~5`xxw+Th3Kwmmh$x{F#m$cJj?M4sO$G3q2f^$QL@q#xJMU zPERK8Z(xP3Wt8snRSkT zfn79GTmin|d$o!hE9`{ZuKuW|ejH=cn>-q{GBO33JQ3HpB|H&kSzmx$T7T3aa@ce* zWnR~dpgSV$OR&R(=?Jsh?K$0g5V_+R9l-6G=}Sy)?jpCu3pf}yY#N8?L%~AW^Ycg zSv8Kqk6$XvYOG1*o5j+Y1QbQcK6<#!+KiIM>Uw}CinxWyiXc$EUW9-c8=)J)>P!)l ze1AQm15Q$uhb;bqL)Z=|93QhQJkmY9jq1az)sN6auuh{Eb4%*W<+8>qn@uG?2D54z z<^;fo=<9BAB!sp8h#C%qzX@;`U2kr{Sv8Jv+gm@yFPfYuzEu4%xx&Lm_ZzO|?n5mV zHCEUGHbPR`NC2lHH9~%5vo;u3co7I2$aHDUa{nw`W^N9!9Z)y`pHp_F#@(I4!;s>3 zjkz6>HCEYbDe)=fM6fI30(!mf1T1hD%*~=LTa*l|u{S^5tQyC-?Tx=u?+w_DlE&(K zfJP}xse9&?V7(I;mAtnV$}-xjX+fmdFcV^3bG!M#c0l0}{e4}w-pG{SGcMxf8K+6kQ>6x_IB8)d?mL>z>W>Fs#Y2kHRY0ev6Ha|on1TwidnYD^o5WNQp<(@Q7^BD@K^Wb0j=D1bigA@va%MRZE-`*sBeH-t5`+O8kGYv zoAE`ei{|l>5?R&ql{&$8MCAxMXv|?<({ zYND74To674VZI?mq z5*Ne?HM_zQYB(7bh|J$_ScS)<|Wmp#+C8v`Z>dy$jGpX;!9JlmG(+ z*(*{ataYfz+FVexD;%K~g;yVUTbt#K$Qr2JM}fk(OeHvFfbpKVlr=C=QEwFFwO(&du-O%k zQ6p<45m+#QDcq8PVC0_^KGz9by(p5B z`_d}8%n!VUGy!N{nImhy^K8(3^mT$hNWE zr&v&L#F!2aD^@fxaJNQ1C~t+?0d)i9_bDg1nO7Qc7?C7vB)Xc4a%^#ur(DuVU9*h@ zr;s^mdlvdoKxUB{1CYh9_}Lel{pWR2H$EgvuVKEV*|Zc;KaWXIwW$@80)LG2JeKKRow`)IL*Wt5IP&$zgvliw$JO7OB$)`fZ4#p0Z5_gHDy|Z zRW8*w7A-EA+0_kz-=~+#Z;7+t0K24-x>gg34&mEWQA(?z7_F_gSCZ6ioGmT?bzRgA z4oNa3<$llEhIT;IK;c2@Zj+G&hm1G6aW$(qws4NE6*n_4KByf~ID##5k8wDP+xX8l zHa7Rnw_#f!$HFm2Bxpxuhl^5axRN4_z`INz`elk{1vrI$)l_%~COTL8TA=x7ttm{{ z5MIN;)^l8LAp7o@e&V(X!_+C6TigrAMYlc1Ermr|6`-qZ*m_4rJ{9K*|JGAyj~`&Z zkqXsnXl-vM^5kcP+yO2Nm{&s&RPpkS1zamBmJP2)-G@O~2HijhkKL7&kGDE)WH> z%7b-jT$MH7adu&2rLD#io-(p|b!!N}zg2Qan0H~h8y+yEMymZ(WOF{q9nd+3ZipXf zI_gP;GfK*2uu zk3PG^=%UNc5j(TeA$9~JWGvy$rmwlD^0Lix;99aZ00#F4ccqqgXMDON!iGwZa(`_G z6CN|f&iVbqD{{_Hcj~;5v#T5fC!d!AXvS^_sN3mfxUs;KJt!j+(D2S+d+Aeg(QQW} z%`9xJbQDQ^!&<^q`kT6D7~^1}Dz*5UuR1T_>?()A4O)Rq%MoVBqpH?@$7i@l){iu}m7ZGco0u@?ky zu#vLnPAir7tu)t=f~e|X6!jIb5q`0pm^h3*4O_1pV=?S)pnwB=1Bvh;vBbwPz$T(2MO*}6*j%-_CO72FD#yreZO|+}8JNG)TR=hQM!Jq3SuKJhZ<0xw zTy)Pd{->U8ld!SUF4&1b9%c(F515=t2$WK%&z2$G}AD$nL@;ZeM>br{Z=mu zTAfsO`vG9ZV*>@rb+Iiw{@nbZxuE)7dPxW76Y_!N3jZU*cKMo>zB-Q z#9M`Z0d^C0eOfFi>%*^iwG3J_YKYq}S#5d~oz24T zl-?D;i|r*mCN0SECoDi^!z#lf9Z^Q6v+p9u&I`H&I>*pOuJwo6h0(-NPdGu3br=VH zOW0WHeVxA8UgBf+#Y~7O!ctBx{Ks3h-wQgk&LMR6`pD_ke!Hll!fE}s*jD0W_O(p7 zcId#S3z0}x*`|s*OuUe@s~kdiq?UQE(ZN@wMj|+OXqu#Js3*rmZ=9OLDdMRSm2_j~ zRvzZ4SG{Xi%JlT4uk@79bVYMtt}|&}!eiL=)h&|SjX1{S5fTQX=#@5M42;b(L}BZ~ zDPoo8E})}s$fY%A)`Sr7H&8%<)8ykXHAAsvY z7M)1`?QPAfZv+}H+r!rW6Ye#$!U1e@Y*}EYaZt)No2|X|BWl+-0*$HZg>DvdypS_* zsJ*w(1{b?o;|Mqry7L#4t89eQ&Gyz20;J+bePhtnxB3wqbFr0&#y>Ma05z+^0c^y0 z)5K60B<};mT}1KZJjo`o)q>4DY`@EvW-eHu8e0H^j1kenN)Bn;$ioVTiR@D*6uqaNPX0n$yQG1- zb{h!}VWAAM01cS*slq>^w_qZzyNuMa=uRSEREeSaU}jf0z>E~SqE5cUi5!O#L&f>c zvkmQlsDZ*RsF4V#B>(41!>q`;$=l@_pdVR#$ZD}PAJFXj2FTO5$m0q7EL8Yx?%dLA zm42T-s2xx^fbHkh4%!2v1`7MYM!G5VI`~E_^*WqTv+El`ug&k;a!qLqR&9k-E30Lb-df{=)(5qPouo#EAJ})0e&MevfEs8~ zh0s?;QU0id0hyp`qVAf$qE|FTlUcBT7d{F{r}WUQ!5a!>3wy)q=xy-9Ym5z!{KOB9 zLEpjL+V#eyZcm0ywR=ML?LlCml6ni(D#%9Ww8ITMJb$?^L!b69BY^FI!qF-0nS|_Y z>U)|1*DVVUVADdQ3^gixwUUqYhoffIHwJB9SZKN`huhtA;1E50nA)(lGVJ;memZDI zeIwAAi(ylXx@s8f+@dON3TLti78YfT-p$gi`bMDPbv$mht+K~__&7i(1ij;S&%KwW zS@n%Tn^#H(Yv01a0>96eDWdU%Wn)?d1ru)S=Kk>S)2wg=o2GRCyrBK|fzpNbd95{y z>EFxP%nCnX<27&LBOnJ(p8{;Fbz7U=w~RD4d-m}uEY#(5S5l3v(H0+Q3Px@SP2$a1 z3F(R)HZR<)8b`P>BS}?7J9P=?H`wrTA7NFl*YqMk*9kVO!U1aRF7N0yRh|Qr+qf^9 zVcSqoCj&1k>D}~pqgDKh_~3}Ffy!8|(NLm8My9Qxyx`e{CvUShX0LiRP%iAXP%p#o zO@Q6(N26v{I6{pt@{#*cTe&)ju{(y>T0T~h5WX2~W{o4RkpGNl;>~a~YaHMPpJixo8*Ejk+B&DZ&8~2S8tw*d^9{TfybCzI?{01Ep0sKl z;TAS8$W7z*j8l{qy`^?pBb9xCi!Mn(s`XiLOUmxEZB+jhfJ1agdJzV_&+GM zi>Mw7du7B|f_KDbk05sDZgk3e0TwtOqr-s4swRm+pkzf%G^Wpj|s@ z&2AbdTxM%lNnZfkKHCXuWQ)`oPH;s{p`tI;Eb0qj+h;r3OThk$&xVVrJjUVu5^5V6Arbk4L6t-JR zbPTgDk1`C#RqLYwZe~#H^(8|Jpa8N#w?=(O=UieuZ8TkFBiEb1$8gK*)qxn7kRh_u7*`jP7|O$)4- zJgIKb9nm@d4VY2;tkG{DD=kQWoVdEW+$O82k-~1sMY%VXWatiNWA;kzUM+*_6RD%L zz^>LXoBthAUxQpyqJRXKb%E>Jz}d_8%FNe#O%1St8)sKPDi!rL$k9|!)fvt)bvTT_ zh`0vkW3=s4EteVKu8Fv~=A3{t>KmZn-tgY&s#M>2+rqzv`^%FcGh-ANe3H-fM`LDI zH-cRo)r&kAGs8J+)d~n_J+5u?ZeHfl zS|yFtJq{Vf7r|`?uX@{%SJPMm!=xn7C@5zzyQsg}0kZ@82FSB2j}mChX7FX?p}gM` zdQ?WzxOI9#@KvbA-}QsdtZ@YX#G^pF2mI=y zu&DSmbu%}!#u0Ae9eH<%>UTDh^swo#FopgN_sn7N~@%Sx;~(>xs?c>$~whRQXqgFh?=qbLV7CIlbbYOXXo>p}u%&4&|qec~v z$bGn{bzAnlKsEz+*3`WlXl8vQ)aVsz_!RNkpqrdOlHpYLTAE8q&193|SL7$XOwFus zfEsy@(AGB4*hbOfiLl8Kn#{Ml)6CjNh-m;qNzR4;g*{P47ozt@ixAlLNB#ZHFf;2L zp+@0=Pm$XDN_w*2P@^aEai^tYj~C@UTwc$CQCOqC5o#ml7V@@qC-9x#3w*3Pg_lPy z%rvvT*GmBOR(&JX!uJGEO?e`c^bcEmH`L7f2B;lidOzF0Js@hJFniO3r|(;45}ZPJ zAE&@u#0(l+Nw78YZ3I=?l_pB(rkdoM4{COO1JGCkta`B+uc?#4Nx>KuR~)g}A0GgI^v(p@saBaN-G>D2Q9CUQI-0FW|2-X#ptXdsoK`8 zlD+^m+>B3KtNT{7O6m<7Ye~7!+Mco^O<0hpYn+AF81ieAI_Fu>n%-*HL!5d6T!3S^{mt3u*&&R)eEn7gs&gMbSlQp0$!DRwQL`^3F?m+;W_<6 zB!!s4V0OLM*ooC_HbGy27F9)+ zS=|74x^|?1g1zl(ayJ~C4?>P3f0CpXD{ z&4+21G*H*W#-J`C!fe@0P7zDfc(uCztqWv!bpzaSE8=bC)qa?ENh5WwCK4R7%Z=ar zHma;TwJx9?&^JPDx2e2dS0h=MT`p>*aQF&9aigZFGBXKINp>LA>eZ&JGKwV))b+77 zIA267$KdA#TbkM)D{VmV0nM&%fIMk3cw9e8`W7P2Iysuy_h6MYQrBuC(IE@mo^)$K z(1BZ~L=eScHo{RACUmc6X|y1-2^uNuf*2&D5L3e}r#)~g1hh-QHwXXFzUXuf-yD!x zC3VIOQpyJM7Zy6SYBOM@g6d{Bv#YCzK$w3O8UL^#!PD6FDttLq~p_ceA~7z5@}D#tu&j|w z7SL$ftuYhUogKf?SSxD2j3VgiJ%fsa z?QgRPd$xCA2p-SWNxSSBuu2-J>jfGNbC8t`-O5x&a|exavAG)>cr*zQattPy5YNGK zZWYxXHXMx5`?>oZybRi5!`LESeCe%rk+B^R^#!o)h+pNZF=@vf6opR0(W=(C$CSL~ zqP_sO(0S3k0DMis#g^skyW|^%{Vez{z9XqSXdREr04c)6I#89KKy9K-OqbP!)2kAD z`iNdLr^x%~fZ73lBkYv{3g~Xj&Hm&e3s5tQ8Yt`o8}-+~?zg}lI>9R6g9DE%+qFvz(k`AeYa=~@y|BM>P!%E8(Bqt z0c>F zb*f#oxh}fRtqc@S!_an@NX!M08(GWa6qPOF(q~IYN2g*a!PH1o{FjHE?{(~R6$X9r zU3{=-(*+IPyqNrq>?5NU{>HYDh1EA)BUD|!`~`n3Y*vLI#-?-=8E^XFSscPM+HJ6D zspY5PX9n-4i{dFCYcnexz?OQ-YCD9%gbAsM1|{}!C0WUf0;&U|1_~drljsz#Fg{Sc z+I6IgyjdHS&`H~V#{B-pYmChcHLJc6Xbh>xZ_|9EM{=Sqo=SoU*;8Bl*{GQn4q)SZ zq?c3~`HfMC79t)5hREdhlKxouW!?+60}4m51+VcPv+y-|JIrj_Mu0Ii&_Q9iu3CwT zm;3g1W>z?Y%^G2x?XK+`+sk9WNL?S$qMPx4r`7lr{O&qNq#8C)(45W=fJrT!Q^y1x zjwPJNbP8_RDIde5+0LC^IPKd zcxog==wf3LX!;slF;)CRmCZi@t5;}Hpwg~s=U)(y^0dMX1`z-=+U$qPAa_B8a7WH6 z>%TP?6LJh?&uqe2;a2XU9i;#?59Gncdbo(owar9U7g^kauOr0G>09L(IKj3)TuSlK zG^rm8`XRQO!9+Anq-Uz=Var`|<=4s%IHSh#DPkgJtAlcE;@WS?CBf~DsnJN!YS3KM z#|2cu+lOiuHCEVaDDf$DFVBp9vKIr4cn7v&1M+SC(h!sq&)4)e*oBRi_JNN2=rnbZ z=ZrlhM0e;~x{eqO<$I-ml}qtnWpgmJ+a9t2Is2_19D-LvPZ4h?gZJu`q@bWQXz0~s z0<9|+=xyJsS=K;hFWi_pfLxPZ81yr%MGM?uj%VEiPc6ILGXoo!loU4H%(A-UMhp{p z(Zs00hATo>Tffn{=IGTfGB>-ZFFi7vKihp|X|GUNvjo)@GE{9Wy@2;P z0@O&!Fpb872eOtQ{zs+nC=a|<))(N0`%OOpp#i=I0ae9*8znodtS`U~mNi{#XF3}u z^3rWRIiv%!dgDgZlNKj2!bh^VTg7<6&q@-0TG)r&!N68e?(K-I?zq9y(sVsfDVa7} z?dc!uI`I&~!Yq0$);Q*JZW-ThKkn>}&I>+NZJuZM0|3^N>xJ^kEUPx_~6tOC_O7Ot=8TS$m)$7NvPyEto437BC9iQFrsM7E13|o_9EB*MXMY1e+)^& z%gi@Q`aJzim+9|+`}ON&H{^(@?x;aJr4%>~AuM)h01MdI)kjer=0sjnvcDNG3RGQSHNf<`mZba=3U7L_t(D$~P8%;@kvzo)A{G4_+{B+oi3hz*ZRsj5IpHZl_!PbP< zmOiEz!RGOK`CV=z>iL9C`6GF}+wus=!dvo|wS1(s;u%GK*ohZx{f*74Y6e*bwr;Pw z+dA5gx$Af-dYF&KYGAXA`U=<}mw8y*J$n>>q-pcfMc-&oGSDRHD?sZTwSG`f;BU5) zX}z{)71bLy25)clxv|g-j#EwkZJ8swc>4vvjky{AH@Vp0MZLsrqwm=G3x}}T6@Hx3 zHGO=`-rvzW9|XIo4~37|$>S9AMX)5Z5L0Wo)nb2lcA@a8Fi5bA`cT*pHY)R^DQRh& zV04!AQD=m}1d&P5S3pMnrE6JygMUVDZ3C^&_<+_xqo}WdEqTyevJ62qT1|YQLgdc( zC=}HjHht!ds;xYX>_MX}$|pL|xX7>q4ZNg$nJ!9UyXqPB!p*F44F3?8VB~*rw}t*k zHSUKOZdQdu*x;a{b4H9RD_kn8e6*YL9&m`$79xg=TIf`Mx62V>L#1c7PX*<=Z`ewB z3X2-lbu=*kLK%iO-rq#>tV-Axz%$_5W_ypW;A_~RvkMz4?FAjjFP_8W(MRymP#ZpPlR_Z$>5&LRs*FFiW4SU08qUmK!A5 zkDE@&k!_=O3kvA9C8^ZqW@9db?ufAd(7~^Ths3zT!VYBy>wWy1i3)X%ZimEK3*wwP2YUzuB=&NWZDH}#s{x5W)Pv&z8_uxPxF z*b3hRgTwdOY_7^u10kSY)B2lKHw^FZarP(DRXO=Zk*$+8u%HZ_A zXvW%(XE&U1qc4^Cir8L6A!L~Dw_HnWw7M|07BOwExr9EI6p0URc7;Q$<*Ot#r3sp6 zmH#Ddpd*wq-j22MF#kZ1l!+TIdK|oPGiw|J$7Gf^CK0W|e2*swaC9K^P|Prgv`wEW zL;rB#%o-=a!Js|ehXO?^HIm_Ml&6C^k1m^PzEqdy=mUMtA#4~IA0>7Lamdp4vNvu3 z?mDP+)N%=_SrXr0V{ZBmjG}%j>;oEhMNc&D2k#X8Djg0Spusq}ZY`Je=ELe<32H}V z^@mMNTkPCqRzcJ>zy`UG)>pGRodK;(W$+qP12m(g-jKn}NR0-bGWw8Mi$!<}WCT}y zsqk7d?L5{4+5uVpVH-*GQczf6WxP8dxFao5K7-*5J6Gd;j0^oMCQ1DvqwSu{j6M+- zBFfKg;CUk@vQo{5Coi-4`yxjd%&ek1gC>ig8S-N~hBhv3tJ6Es@&8Z6_mDHPIG~ny zzyUO347H7d}q!DUI?%i{4h1|yQ4IRJMejm{H0UC{hd(dYjLh~(+KB-1-k&`LhhdAy>z;fSn($_FeZ zI0a$4mWHE-rY)i>tuWL4@S=9;j(8s4dtQlpkh2RLDD4JaJJ8+0yy-xu1LUA9i)=3Q zDqLf7E(-fxaP97b8-LY$!TIRx@szU7LL>vU(UA2f5p(xHdTfq(o^lLzz*@2%E}$LJ z_wku?3KM?N@=iU=#Awsn0xKGiW|{|i5mr)e$;Ea_*24=ltGW?p8)7`1G~CnHt4vWt zMS=AI?Ea&13)-zWL(Q&mgqzq@dJW8v6ko^|DFse2O4ft@G066UG_0V1& zTo0Ih8X7^cHH}L?{;I{)0L?7wr;+%8riMxiptOBxTl6-GMJ&1~DcP!9P&+znF|{MI zy2I8}#)Ab9)&bfl|Fq0-$7%U1^D^~hbD86@is}s7L~k3z%yc)iGl2<@yWc_oDM-#x zm{hbbhW*EOS>0h{sifGS7mRD5%CfzoqHE`Ap!bMpw3>@;y4huQhYc!E>UivDW*;0~ z9vf^diJ@LaCW*I!eyutjw)?hiqpYs54GcEX_D7>QB~bhhrvB>8vK zhG9u6?OQTeYf<^Ll|kJO1FWP*Rx$^Ew=qo3asJy|Ug5th)<)XYZ+@nNM^f zxMKVTZm2hd%&hMNwPxpQRGYfh_T|Vc`i7(rbw>g*tC2iTVaIVK%2aE<8=fVzqz`pp z1=??_1o;23V$+OEp8_9h9Uo{0wr|Ml4IJ<%PjJH@RreG)!e&)C!oJ13plOW{o;ED) zDBYTgnjX$TT5?HuWXi`^)Cv$1x^Anik;*Q(F_%nkoAGYak!tg%c&v6(Ictq7R;-7q z!o&4(={-`oDhwph)A(KCH+n$QPfPQHY@VQShHYV;FtDvqP-DohAJ;0WFJx5h5-StQ zOnt$p3XEn^-9b}woA{HSNV@y(kyM4Tr!cch>JAx9>x}+DdaWD(URkN}HUl!Nq|T6O zts$$@Hd>FZsM1i>t1tFcw#q1|J7CELQKwf6Vpd6gA)B?zP{Tc}6{2N>5>(&cR>*bx zv0;8nT#Bh~gc0rBA53L$vp&-P>uG*gFG+J|3sO=aBQjH}EH?M-tdjEc+<`OzB^p1iJ zkYQ|0uux9v2PWUJJjUOc(Pq#+h3o>>KPD~BlDb329NFVWqnWQC$p^tjPm2}9plvNT z8jx8fb%qQk2Q7-9*pk*SP}FUZ>C0?+H<_ENgM%;`44LRY0xOfZF~$#PHDBfd zQJq0!kpM6;(9>uzTa@a6R;8WUC3S}^x+Cbat@SqRX^SXZ2!+usHu>g8Q!c=OL2sOw{9l;|K58b*jl@hh;hhKXwu9CW)3EL5t) z%r?Y~l6oV??m+@{5{__wEi{>}^w9?&W}mUKE51xYW){^OGa57?0j5|2i=kM6!ED0B z6n!ofR5Iztt01#V>WvssJ+6PgLJ%8fxPTaXrDqGVRPfhTkeNmG#f(upCR_=c zR18)pEs%+uRrbY@I=*f#cbQ#MZ^R-eL)Sl$g?Cvs*FTw-@Pqh{sNR@q7>q?`5W7Hj zPHKgFmfMZt0Em`r$8*g~)0!p5g|qSspFy>rY7m&rujZ=v7}+!ScNW`c3D zjml=gY0*MY!p2Zsj&;yNxEiMFHo%OM2I~4iwsqyHtC1E^2qJ_T&%q;Ns>J;lW@b^{ zK_mUc$SWTrm0yT41sdxI7)@u%AcF$A!2FswlXXZ|QJq2SA-(<+m}`aa1{!ltFdu-M zmU3k>XV-vsKvZ|oh>n<~9&yF+FgDBYJjvgGRC++(ukj7}lz`GpnS|kZA+npZo0oVb*z>S><$xOC^9-ym7D| zKtEFNn@PWcRaAG-SRP24ktmaFEQOPLy)!nFT19mSjnJGKupajOj=$SLt1}Fs;l?Ve zJ803XDetV#$_b+i@vHeAQJp~>Z|q@!ewFbPx_6 z8SG`$$~HoD$hYtDCWO}`-3MYkVKAT;kM@A5zM!?tfx&;KE(0QSB1{a8`D%Kqn6Dsg zr}3Z?%nnHE3t7kI6;j4wXV9+Fve7d4O3&jAMd3SPc0}I?@@*G=o$}GxMFuMsd2X>K z^X1k8nqAU|x=x_c&;wU^9yvDC`9rArs#xB-|@guXosJ3|;tB=GoM|QOP%owV6eI0c>mfk*+j{ z(ppP(eQJ0k>bTl~%`B=rY~n(OeHF@W`p;xx>%7&duZI`#cSLoEjj}bN0jyql zwjJxP<$2WkgxV#20chRId}2deGT-RE@>!?522GDq(iecnwk$2MSVSDu-eZF*BdU(R z1goeofGv2JY7VJ>cMv7-HrxJI1{LNDLP7>AS;z5ZEA=OC9Mj(hX1o}^fpKtT7E_ZF zd!)FTx>~!=zTaYrq2UVNa*T|oWNla{^Bu7ze<{wnjQM^#`~3v4FfrxN zVrPm}LXKZR1E@@2up5fjqOX2{vynUUE5E?#ba#;QCjGI6q#{NWbeh}xgszgx%dsyc z#?G#Dd=Aw;+Lzf)IfECSw>ZK#o(uK8c3MGG&8DM6w~Lp~@i|TK#j@{c!;UeVk-i41 ze()Ps(v|CJcXpja?5Oh1P|LC9Xwq&KUIp1*PlGeL5U#(TR`7Sb?~dpkW4C`P1YLOD zy&rN`jbq%pNel`sDQ0;C+kE~bY|gH8jGg_v|Ec~73t-Lndx#x7QE8%SaPAsS9REkW zu}5@{v7-r<_CU(^403P&$=myOE%Q-Uon!3i34t_bn@v;mQF%=FQ$JbCdRCQp$OT{i ze?lxKMj>1D8RCW;0(%D~Es@6bV!%~@DlFETBwC;pu4d1@TQG4zh z=wB<}^sx@qSZP~r_+wTOzL{5dNaqkcx@O_4XlNdxdxXEc`*p(zOD?n(%rd-NBms$u zRpSshGS#8Y-C>)z-MwPZ3M~G9>D#3f+;z;8=YOt%Vr1-YmbVT~>CT zW9(QLy-*5ccMHY+KiJXBiY4+Pizp=N__|_@-YYe{txmJ5{E1w;XQJ8yqSFN>jm?kZ zCvLx6F=A4)q2|lNxVypi^nCL1Laah5f;2!S26sf%hr&*{Y35FwZm4`i5IZwmfA{4? zA5J-pIWBCv67~i@)g!{b1Uo?nlM2BqO#;en;?NO6Gy^L!Szz8&6hc7fY!>z<*l8Y# z?Or|Xlx%vuV@G%2qIO^gM|fZ>`C?^vc41$D-9%&X%=f8udLz2}it|if&>he@`~^m~ zB4chu4eZ^Ux!JZnQ~1S#=6=fN634{ro$$Id*}Jquj+nn&sZB8SOQQr_jBkgWS>w>; zV2C3(*E0y+i`)~FQ@wiSZ)Y}|Km^z09>0~z9nd%iF8o$E{$iz>-uYvNY9si_zNc~w z9Zt0@3!cISp2GhGn=@-1184r`Pc9mIy$^%^UJrrmZ>#}h43oqNBT8z!)iqaT9N~rB z5tU=;CRS;(5{Aqs)oO)cwT2OX(Aiavp=0iMf_YFo;)(R{&{Y{l_(5k^c?Vta)NCm_ zRU_W{b?u|q^?NEmpd)Tzi2~yVGnHvJ5Uq+`NjA}f&3;Xh9*Y~e8kg>fun(n00~xv| zR`7IAlJ8U2xrcJ^qwHEw9N~wZS?BmCpu1Y@mEnol1|sOFBNYH|G}RrFpKMEiL$fpM z974wgBxNuxnBHoh9==$hqa&vwu_LNS@m19lgn3!r0i9#$$e$D9Q{vF#7(oZGk%llgl`C)S?3r!a-1Dp_~bcR?x92-*o_)C(Pjo_V5=FCIQFV}DZM)#=P%? z9TlCC{4jL3l>hb3vZa~f>xXk!(RF8*)g8G%KLGv+&N1U)ivOYMCNdkS<#5xbCbul- zFB_v)tYu5apE!l>`})RbOikPIO|mhCIbjS>p}oR@_~| z{N?qX9@9C-Zejf}Gy(c58C3uEo0yo&7X)hB7YG|cF6{s5*x7ZCu^YM77_?>t5tjI0 zzX#F)f!XDF8h$!*R*hrawB2-?pk^Y;sR&|VpoBgr&8M?3oVsH2KCC|-IJ3$jax91n zZ@OQw%Vo!`M2iEQNzwgm;OrWQxXm=ukq)7&iE6|or)|7(y%GC2>KSgCWU9sD zj=;9~AL7}Y<|L#7&x%1`LYkEukkhAL?Vn>${alI-yur)z} ztDp-q9eO!|l)FxSh^f{6Z0wHc9Ad|&iHzMv0c+-}``OqX(K*D95-#(F;i&q<^6(qos5tVbT&qaB7`>>RxYzUE=^ZSly`I z49qRDV-T+8ZK6b(640cJnBoqcYt_6EM}!TOUR z2z1QmQPEk+qD<_dW{=lCEqqldaX{8UG5jI2> z{+Y-j5UYj`K}@A)Sp$`wkmDEC^O~%^$vm*jbVUWn4>_~S z@ejZVQ`bTELWz}vE64$6&*0$-2}cX}aQd-c0o;-C(m-EsBJ*@_a15U%YvHsZTC1X4 z#r(LOqZ)D;Z5l{HWnjA^Y;}U|fW9$m4BfC^X;5C|-USA1svfdUgKw33e`;+%8#c4T zA#Mvh<{R~U@ox}qY9<0hCRffv$A+o|5AK@*cSPeDxk*#iG<%U3?*4>c+Jm!^Zqg

3rkj*X5?ovTw55`+QpKHgLfyQ*7r$}W++;&J$W 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 MU;q8b&p-U*|F8OMi~s-t diff --git a/resources/meshes/kossel_pro_build_platform.stl b/resources/meshes/kossel_pro_build_platform.stl index 8188f0408f50e3a8b58efc5fc7f09d13b1704c8a..31dcea7dc8d3e98b75e4450e35690d309fc00008 100644 GIT binary patch literal 163084 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 IP1(KrKe0?$cmMzZ literal 561386 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

3@4jOa#%DynG97{T8C;`@R|6ML73F( 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 diff --git a/resources/meshes/makeR_prusa_tairona_i3_platform.stl b/resources/meshes/makeR_prusa_tairona_i3_platform.stl index 2e4b650637fce4d112f163cae874ad7db960fbda..d6e2b92a8e2c9b92dfa3e847dd99e179453a88e9 100644 GIT binary patch literal 134284 zcma&P3Ahx+_5MF1A|fIpqQ)hlQ80;mjVrRu+_`9QNyH8P;YJ85F$&@mBvI316kHGi z7gU5XUqC=Y2p}RN(=!*t5_m7}^s-xqN?tk65w6=mX^jiL3Z=&P$6e`vH=^l-gNrP6>*U4d1=p;QG-Yy&%iZ5y z?(Y+%NqJ;IynoD+^65)F5zqUGy@Y0GXeTniLS5E?8P#e!eG| zHsbKn69Qt+mrKiYul5AfMqK%SPXZ0=Gv)9Od(`k#!jsETLjfl4_h;QgTy}WM4RFP`8eNp+o7gnceBXX~= z4+yl06OZr&(?(>LZw&}(6XV|$8%!IK>%21{&?e45-4g+A$j2dpHgVHOzDH%+fZT)I z0vl)(^Jja4X(OVCHv|OQ#3ldd38sz6eK9{EQ1jIW(?*Gn$tqy5}kO;#s#S1`Yd88rV}F5_~wc7j8fvG zPAihy_w8{jl3Hm*`S*jQedyDR3ASy-MXetwp%tBd+FGegkWw1$L!T=`M7X|k*rX!b zv(|9dn~IeXcgz|uJ%iS8CRh`+`@ZCvv4f@e(OhIg+Pv2MggA2bNZ*%KLYP2bqPE3` zT<&VVSN*omO5Oi0I~{Tult6l%Bt%lxQ+SZQMS( zyVFxs0=?zfMrGW?#`gB-%DoYVdrlD>ETuGT=)DoA-SX4;-rS4jp>4ja*qB~EqSpku zZ~yu1@}>*^C-+7?HLQC)c*=|A*V_I!MX)9#{x`f=yye(Aa&s~Mr`gn z&!yaI1M3}8emN;8BU*klEg%A^+`ObN7}4Xrrvf5FQnyZ?m(({S3VrVm2$p*N>v>gb z;^tD#(@nQBGcx-3?|?f8C?Lpa}3HUwM#>5uC< z-1@$z6d zblF?lpy{>#9Ccy%!RJ_cMBpy@b<=v*i#DkCQ2zR4FdNZ;$x_=jgbB3Abna%lKN}E% zlxvUa5{x@O91v)=Duwo#t|f(GHv|Mrp*^N+V((Tz3ka4%i+Zi?!42}N<851{)%JO` zwS@5Vm7l1VSB2X3(rWdI%sHB}Ay}8g50+M|CB+2F>7=IjTC9YKvcA=72oq?vH*~(* zhzQ7@V@A|}vFh=1q1VJRTI~+^ZqT~_Kja=Z&fZy&dr>c!i~qeKp5WdGzF4(1CB?K6 z|2bxTj1m3VZfSxw8FAg|pT-!`PyV}~jR;~wnvD45%$+et^rv2(CRmdZj||!wV?@8M zMVequM*Q-DZ81jl$Gx*Sm2%c(#4VY3VvOj!EKL)v$%qpM&yO*>uV#Za8L{Pvy^0uZ zzqZ-iU>YNRO`j1h{&ikJuoTAdnukU#88=wQ?K;21QW(8zIT_Kj|EPdqsqJp`s&zq# z2-kbo&yrENzExwqt8c{^g`YiVS%aE5d+y+1&Wfd&78`QGY!rv^8#d2U8PTHAm|{b{ znhSUr*?K_3Sl#i(gd&H)o)XZct;=lu=ZHySLqnLr+l00>BmVWwc*!dbVIq~gf}QQ& z)wtA{;Mya?5w7#DT~+3~#8N?fgm8q*0|O5#jb1yg-0ZT`rKHgN==(t7>A#dW3_it5 zP>5+GT9r722|T0ny-#XD%y_72i9?t`tTz7W1S1fs=!6GfEIu@CcJh|OQiB%EcFz(& z?t-xYtAFC)So+@zig9 zLQ|3A7;@PpL}q3Civt@NQz^~%jM)DEMFD{^)$OCbJ*JI_k2o(NFs3^HB~LJIL}3Bm zQZ08ercxVB8?pW4g93tcfoUNkT+bOjS>C)fwVXc~2Wd_VA(t0w+r<1<%~DK@aD?ms zojT5a=P+GNW8|deZ$!VI!`;)_LYTnFN$Z#qOP)9-#t2F4D---CW5kX7-Q=Fn?L8vr^?%(-hT_jLK( z=3mI~Q1Ac#IPF*SM}GS2a_i|EYC(L^qpy39en;-{`v)uiy+}v69&%9c`6mrK(DgDe z%G=L<|30w%(2aJ#=)Bnt-imtn92ECH=8>dq?^*Ly(yQI~!c*z~DzkafU8U{qhm;p= zdQ?(-ejymWaxJM&JUXpO ziS;tk^72Bt_qAOmhGt{arXx!n!bJU7&y_EKnTQBnzhx`jxWq!3Sh90s6{2gepO!d; zi9bB{d>AXSF=W~CB@SVtd%Gz~P9r}4>Ad*N_9YHsV$+DJNofipmxtyYBJ)1_3}-2( zML5Fs^EE9?Tiz%L60;P( zf9PnkISm@_Y~Vk^!w)lGAE-1OQFY@aC1Xq&R-V< z1WTdENE0hB|6xF|6nczwtXf>$E+AM6J%;9jrQ?p-hXn*np*3qc8F9lNEdqk2(9X3k z7;(s}p9Q(gQs_&xz8UfEi*o{krSO)ab=rtF&-szQ&hMa{b-oN^c%7>;V(D4G32d<5 z>a%LQ+rALgE3QlYRn}~59d(O52leYKOEGQ4`F|Wy&tG*L5~|6FPr7^(W47kX5pPKy zWup2w;g^Q(SBh{@x!J3R{)Mr8wGeR?dmL^z}5x1>=QoadSv%#8-c>A)!CH`j0 zvBKPdYBJ)KH)aN_cUTJZOqwG^lx774OJT-BbKQtBEvE$pOYxUqBW^rvn#}v?cVL#n ze2LaKBPM@7B_J?!qiu!1K^t+(hM56@nH#P7OdHYt;aLH}F=5(>-o-;@EsoaehGnDc z%Y=w<#Y!iXnuaied;Q&rYyN)W{EK!yRlYYqD#q9V?@sk!b&z|!Q|a$Q$feEZ+vcxZ zv8be9c(*^lxb#H*9%az@edrVZ-Uz&_wVQE&N#E5zSUEJg@6v2&DgCb2tM_MdpOz2j z<{mj*-mvn$U#itu9n)lFuI1$;8oYT$2fiI2)8wUEjc@yt9?MNT{BO00)usy`&$XUD zOYSXJiGH@WA&+|CXUrEIWmBjO|e7uY~d+Rd0QdfA>4JzH;!cU}C4+)su+kg~zH zjmWfYQQ~wUCQE)dO>D3|AtGGod~jsU`NQ^DlMr%=Mjss5Kunt4GgWM`JtKx}*&Lt# zz;ANXe?Cmo!Ft)A5xG%62y8&A)27K{gY6mdoBm7UjX&y{+ji&Blnu6RM0C#~felD4 z82`N3V0%U^nmZ+a`l;Gn_SCcuwr#}bt6By&Ahmn-B(cHvjF^8~r-iW5W4M>%ykgr% zZ2rNXfeohFo)NjTro?DbTH9Ig+#`=q^3aHV&-Jm=lsBX`wnoJNUJ}?~z28nbG^qgu^KVZCh6h`8Oh7`=@4AFTJ6 zeYR({{R*8AtP-pXn}Cc+V}CmysmW?h^n#8BIc z5dL!eXMqjYJEng*8}x}0khhk67_%<6ff#C=_v&%YEqgDp!ForOU(AkOI8xfC5x?Gb zj1by~vtG7mM0C^gzy|A`{`0?O8~1$7Y((H%y|FcBz5L8TE@=NKHiS6T&D?Qq;PS`Q zN83$EoW1j&@*h9(@5uaah~H=Y>=_xU2_ctfb3^7|-f?cN)(o_By+?nnIbsB6Acwa3 zXM4&p&M)rxZdYyn?S4fYOL4wgIxb&(rGDhZ_PMez|Sd$S49(ia9KU zu&p)Jh?8$T*zF9m5GIg5t)WI-(BaS$hcJOBj@D2kzHQY}MtxcaOmJH=XZGwA#Fu{76HX9>*1Zy%PT3sq`oBwcG*O9Rle~&aGv*(>LOWpUv!^u1)H0fNX5xxI4 zIw05{(?%3dA0M;zai2ZxRzMsmPim%($PAbm5XgmrU0Mmjv=KADnh+59PB9{XfDlX@ zk?A)sAn;vv>cEylFm1%<&qoHtoLP^Qx4yBz5KJ3!+C8V%&tR-Tj|IinU2+^9zHdqtl>QQU3?^8U5sf+@9dDU5DybPv zuqGq6tv)jz)OA!+GnimaMjZ9|xp9-y$fRa4!J3SC)2&FE@w1Uh&0vBx8S#Z%k;3`T z1ZxsPE;sJFD_CEEZ)taBmrEUE+K8{7oLY~sVOuXOi4@nq>gyTGw+)pw+x1^<&FRdY zzH{(u2($5Mv40RNe6KsV`698$F*IV;6GzIIxO-zi@58f$ejUKWCD=CN%?bpunm>s9ymS1R zk?k4rzm2EKSN--UrETClp4t{7!nN7q2i0>);oFUt4Zg}P7(cT%%&RWV7MFRB6@;$M zuU>)&%Sf8??a)+?LbNmRh25=lnqowQS7BEk_*{*kHYWB?t8kVq@IXXUiHE z)x|atL#<3u?@sf+ltxv=z!Pd3$K&4gJ z_a{CneT)$UfA>>aC!_o8STEZ%qIvzjfeqG+ugJmvC`m`JJr0p|G8$j3lTmxf1?{`c z#=U3n6Z394#6(xI^6FM0#KvRY+R5r2)x|cD3;HB7;?~F8$%4b=O?Q9_{esvtpxyxmf5E)(Zt2VG^S829qgs%8i0&8}49L=;5y5d&}tl8CZ zG}A`tieDwLW>;-6ZG^7)RRSx1H62VF(f5;MW&N(UR3=h+6@gpa<`r2Zta`ChR%xv3 z)v^&ALj3)szsQPT4PgT7dbRwGXxr~;S@EkOOkkC+)-faYKD$;{{Azt=0xN!l7A3KY zZ;NEbuj*m~D}Ggz*uW*4R9W$>sYSig(Gpht_Wt0(2BW1t-M8&|`>f8ZZ;3_wz7yQ1 zJt1VqZ(qPtcV*Y-btPcG3)knvK&nYsoy!raPuIpnuNk^vjzV`*hw)yMwy2g)b zBbtvM8xViEWL;i;i!g1(TIb7xW7X{KwR!a|!n6^OIe!^U%Bt& zxAW>-glQw-_k#&88>WqbZxIe*;`Dvq&Z}n0oAogWqsVWMxRHAzkz(b)NV;SeTvyt+CmO(En`t?p`l1+DjHqnYzS!@AhU zJ(sRd>X_NU3e%Qr-^}YOR+eJgZ2ZElFl8yG|Gd}gq~@Cqtb1jtFIK&ow5aODKi%5e zTR(m-uR9KzU`=M@|H=AY)64V&r8ldz+Ep)&tmhCWT%VXJCc)#FQ*uDWNb zfKH;-ujz#g@r6fMy5Rd)?`w}Li}rmaf9lmECGJcoCNgW@o3fAzd<|8CX(Lws zy8nEZ!nah-Y5d;r0B_HT+&}#+r|z!6tfTJK!kne9H8SF~_j|cDM7Ht>vyRCQ6{3w; zcwqN{z^tS0c469x+};NTdm1q7s5@$yHe!#$WA&Ix(Vc8ea4r}T*ZsA~1n(YU+K8Jw z{;SARm`~DuWtf@N{YFOUoTY{^ftg9&`DBF7S!xIqn3>ewRYF9#>YSy9FoC%<)ntUu zs%Z!lm{rr*8lf|H8o~r-?t&dv5jdS4)DR{xJE)~;HgpD3Lzut}q}CWCbe2;?n7}Nj z)=DFECRIb2z)Y&vd?DoWO6=DN>s}e&l^`Q>-nShA`Ovj2Ud-#nwW7VoMOEJwcG$Pw>V~nw=#)^sRHvZm!Ta2-&rksgDQ)1+_reDVxi)wi= z5ok(?xyyIDy#T9|GG`*tln{3;`ZUHkQR@{Gfu@AmZ7OUvmi4rT-i&&{Q#OgLy9xy2&5O?(z$F$kF za_abiK+mcE+L$)tkYytSLf+ylp5K@@B0FMmKyWTFZ3JpN=Lz~j_4dcK5D~6FX|h*9 zptn!{*xY3Eu7Tz9M2_RsEZRzl0sGGGF&KsA|- zpFh^JgjTC%zyxbDV)!>L-7Zu2=3XfSCRmdZt8>ju=q}JdG%Ck#BIm^U?H#B1fgqSd3~x8zns!c-spAhDeGl>MqrIF z-d}ZPFW!EY#_zfk*oX~xT^cu(Qkv}<@!Vch7h)V;O^R(B5$&i;t=`e^5qL}0Zx%+x zXYCyjEQPn!w8yN={`Sv>yjF>&c-^zv=!`dE+F8s}OdAnB{!$U|HTqqJX}rCreT6-G zW#gC$mco0j`X(bA&Py5-EQR;lw3jq^Vq=1(@Lrqt#1=VkZ%nWh-fPn~S~`z%Ot2K* zYt!j?)OoFAf~D|Yo6f5qvw8&tOX0m%J*HV+ZT|A-0l`vuuT9sImEDdH2$sToZMr6A z+;=rj2TP?^AxYFWZYl@ugZHIYZ&7H2T>F^dmS!nGXv$qNW>}J)@KldEwnpGh;Y@nRF&e943DCWX!d?^B z-UoFzDH9mUs3s#m95hqj2X)6P6Bx;;CL?OE9bDoOJrfwos3s#?o;*grN9j8NOX10> zJ9Uj%+jU|{h)yGRm1_VoCB%^h~(s7HM z17I60#cxYSU?(f*DAV{oy)PACOgMxI+@}dV&+(+!d3By|U*6n)w^+?-+Eqp}I**T$ zh5Gto+KA|y!(-S`0{cyL&YEc>{(bg=ferqKz_bxa2X>{XUhERlSmF1;>re!46GJ)UIGxRdYLvGzn`$So(b$w z(Jv-U8`1WE?H6MAiS8L=f;Ab@XwG|X53lVYW&*oX(mUMVx^#KWAxyAsvyq$LqQurg z_x|7sSx59e#FB#o0x{fm@l!%DZ8mz3ZxayM?b2iTGeR(JMB9J23JC0WX?3sn%*?bA zn{VDHAh6qIUN~^9?8i~P*sY*6_RVMvjTkWKllafH7m;^9 z@E#f={AFH?V81-?eZ+1RtuaRQUVTtNuoP@)jWMDyrAxZ8Wgm;~aYxFv)$$%pAtGGQeP@O2uhm@S+{MlptuaE#C7$?|>|N3_z-||NonuL%`&h>EEOQO9q6Z~z`2=s6)#q{^sa6L8a!cG+J z=b1Jequf3gCa`-%38szMy68gjjHgmqd#-5$ed^T>{oGyZ-XQr4DBG+4b?M^y@7MEJ zU5*vg5~~Q;GrP_yvJ`&@<`@bgm-a(O#jv5CJXwlqBTgGPKF0g9o-x1#Yck@&Ur&sY zay_kp3D#sprw=E@c>C4U3YcI`M%45iCtd{gv;rnrlM%ab7%96_^t1vd@E)z2jA-f3 z1;D$Et`Wt%v(k7g)>90OSn19lV1lLaR;;HO7*XTSH(-LL@K&6*(bk=zzywR-typ6y zHX>YgAB%o71+8Dh@!pmmm%w`~+h8fC#fDrKj`q82R2S2DuhsfyMC4ZEvJ~EgwT@LM zRvz!)wzWL)wykxHX|wU@8vjPG1m5VijxlXS?-731KnctmXw6{Sh#Bq_3{D4^0nO0}weIK*ejPjSJ;06;)nvr_;e~qE%Ti1m0so@B=7v|(;J$GiS|<~M1HtbZ{04#h z^t%D}b7HiudpI#V)4iRz*HzOJE3tw1k1fZ}O+4xFc$asX3n7U{EdYw_dm?e^>Sh`Q3O_x^TE|TE*l&@0 z)BD7o(C2m^5p6bl59|~WJ6`>JzR^z>2@%i<@@V^B0kQj%zvtJjcwPvm6Ce|v)juGH zzx`Ui-^k%YFl|JSj|MsK7nbtV&v`9B?Y3KmVA_bb&-^|hT2Eh?f9CLBLNIMaX3ebu z(WTkK{JLW=6oP3ZzP;jYx88qV{@`^#kn&)HV=F|2>#KM7aW+gZ)9+tfpTy9J&0qG5 zIfRMQ(sGguMsz;<`j|tQxS?}7$!Q~AYkZa4X<;Eue6ygGl%^5S{q3BXLzo!avy{{r zBW^xpUUAo(G1XVgx8~(ItnCrFPruqHp4_CA)K|8_n#{&8pFAOE>rAjFA>`7p(-Xzk z+veuqpO~$bpw%(w!7M+p%a46aOOV1v^U6#FQf_6$Yi%bsAa*{HDRFJMwZlBOilDtn zaSSaT$9=UksEO@nyqs@w{3${(okS|rxV$+aIEG9c(P8j2vXVpNd(%fR<&U3vj@V$@ zh^xPy9T2@I&T(JmE);@kBgXx#91u%Rdolm|*Ov*wv=Kk*yD%UIPnne;wBQOMm^R{$ zkLCr$xy@(hyEMB>2&RpQCiQZCpOsX%eWxb`(?)Ec=FTZ4V&qNJl2|cqL^Pp)K;$=1 zO;XOZ5#M|_TD-&P92paATZjnPNdw~&OYscb)PYlyvJpZqSIrq+Zc>_<^jEtt8K1N} z{NCs%m)6RYAwh1w>SLL?)7e3$8~uA?QjZfL)Ao|NMV5M^ZhX?_*`5)b|F@6Zi)^v_ zpyhb?McF^2m^LE*?Fj+Vq%_Wzpnpa&ZA8t3=LE#)%f~sNKK>cSv=P0pnG>X(Q@gS6 zq@+C>v3cT^fsLa#Je%~jY|n_6`(7Uq%g=u{>Cc%qqVQqAfSCHXvB@)o>4b=C#@=7< zvESI_Nya(N^S%j@d311}zy{N7PlyQD|GqiC$Wp9#XTN8X7#gu-{HsL{VWP+Kr;}VT z;+NSsiX6hkjxJ9pIc>zZ|F_S=rZiI|+ z?V*i_qzKkzgdZU<%)fEey(xk<84+FIJ;oSEpDY;rDveRC+BTxc#XSOor7)`1^ck`8 z^^jmGjA}L4jcEJNFjg#uQLUD&5i1Yx7{rRDFyhqOV?>WF?E-?OFc#GsYQ+8S`#I+o zkBU>{M8W!gF}v7MN^=?`WPP(V8<|h`2x7%CsZK1J>`vyQQsWqM9Wxsjb#7F`D0TE9 zePlGjQcN3hU~Q&^QR+8$_fHY5$%t3hd=_JrI_Jy5DS|Z_kJn` zH5qZ$uR6vUb8h&Le?~FEnv9tFarYQw&e4b5ma@T`j5ugxj~HXljX%0OMX)9#uI$$% z#t8DyXAMaatjUN$L%O@?`B?W=|K1eAnvA&Uok3-+LQtPIoO0GAM1<>}M|>*dT`e`H zG3wWTObEF=+PWZn6xBxx>&2*6(`Q7}4_*xjmcpo3^U#Q4tycvEOJP*2*Jr7 zVvaAT1LH*PU4@WK+wax~Hdrsl!CHHaXxS+wSPG+Bt)W6hxR$m)zMTqyOqmUQY?j0xIXQKkjr;RyLds&KUBQjSkEiu8p z8q-E>oK~pko)hWN9<};&u=R^|3t2DQ3urYGHLD#mpX1AUby8ES3z(E z7Myp7MP=PxVfSv{CLksy6&eK(E)Yd-V7EyAX0w8!838DusLf-3YhiFpHBref|_;oKor6 zLw=u)^FD8##mNWWYlN55xZ4?^oN{++sMzrP=tBbb{2s*$5g~5Z6b}^}ekEWbwsSN5 zy|Bw8oSo}e=`rC>B?$;SSEL|k=lYd^Ok_Gu z3J5z_#HAxS--LV;N~3k z4Cz8_=c{o#a{peCvt7!C*iL~CX|s_zc6~sgP59l1A#Fr-`lkV5r$D=y5N$-J)6Rgf zQ=ol|@_S-A9nqkWK%4M8HGPZndoY>EJ+LjXfi~fHgZdVww8bjQyb}<13bb!gN*j?I zJU<{%^HqvzBivcPc{|_Nw<0CDoQ!a%PD_hYDW=hG(&=dVuk)luX$TW&H$h%S&QjF< zl#N|cclBAsQcPQ{+}X?Wj8ekA<5tcCEW~#9GM7jB_k*N;=o5emwrw`X>>gH&R^&bO zgiiys4}Go};m&u?+Bwdi&=^*a)%(wkm!3guILCxFnT@66221awxyS@!o36W;^&cgD ziH0zNzC>-Cjk}ufRR=##{yfM+jC1b&3Yda;xw?IH_fjUqxx4a~qg+i4rId#ME4@$K z@Lr(24ZkA6+cNACL^4`jGXy43klX_g!9RfGv8(* z!J34Si}U-DGv8(*!J3S4zD088=PV>xlM!Fbni&YxS$fMB8tt1wBFFd7=^PLHlllSAs zv5InEI~x|lgn4_b5E0_0t=4;0@%75D>+`MF`%Ym(Tdnup5)x>&s!38VHni1x?=T^O zR;!wf&{pd`(1Zk9t!gqtTdntU6B1~(s>uj#wce9XNTAiKCL!datyV*j)0$UkwW`So zZMABh3A9?(WQ05UU0SX7;Y^@)sU{<4Jk(TLt;NKi0H{6QM-tbP9-}8qZC4wt7ws{~ zU2o{zX9FUTa_uoFK_Pl~dN?4^YE{b4EazCYedvaOU@1GzoQaj|PYMW@LW}ZiRhjta ze;-S$^(#rk=PN%^Eq6QrZN0QweIlbpX}(pr@xb2gq}6J^GlA0dzJ)keai!I22orWH zI}_*qaYUWXKonv-rPSABe==!>h>)5|TNdPSnz7&AA4)MTDHo#E>+5qE(fi%~A;FrA z_;}gY9Nq`~?*5QqO-3Bjd1nsq1AcdZNU$a&_WF2d4(|hgcYjE*CL>OGa9a-V1Ab3_ zNU$a&{`~NU97gos!$L@~CL!d~{fqfIybn~f!J5p*?B;uAG1~T?H2k}P(irJ$`pm|+ z2mc}Ac!m4+};J$Gx|yBe2TKv3;58>e5rD$g~M z>lk{Upl1+l0a57;@(obo>|YEjD}OyG&*cYrgotjpfD9Kr-*<-HdW z5xFy@v*!KTw?UOM-_aE!LPAb>@WrfoeD;LjL0*VilO$R$ZvT0nt+NzC)fwVXc~2Wd_V5#f48woMLi z^xBG8ifJL_^4!VeaxBF(MowD(M!b5-aQAe!5GF8k(mH0ujFqS4FhbHA#{|F081Y`S zo80rAf`%|r$XglSuoOx0ykY5W&B;Hn- z=)Gfbt@+C+xRZ#UcIR=NFR3-J7))fAKOPX+$I`RK1wt^LI7ft#%kH)>1fy4` zs}tR?+mU0vOyK;FX@~ce7@CdW{_}uZ4q*bPc}%#uA@Sm07r1eWg)o7$K+?pj%YRtQ zAxz*jk94eBT->gfLzuwX9GcUXj^E8btd>KVz=;@InnFalcKL^&_tD;mrI;2%E=NAr zv=*mbXkFqK%p(IM*1qv&j`cFZnuLgO{pjvywfvsJZ!h?oksgs{x_**lDSZF%9_;-0 zk2LYpus!SSd#(TGp#*D^SjlDR!Fy$yz!wu8$+A5o?r-u=SG>!34=wx^*?)udzWcbH z?^<_WV1sG4XEvO7<2v*{`o4_*L*FKC*Kfr}1n#{>ch#cL*f98%GUjnvifOSS#JTT| zsYRdB?6T8S1Zy&)O`B=8=rfMq&@n}@CL?a!cWy2EjKNzvr3lt!MBgE=)S{hF9oQvB zuqGkoa^Zu;I!-OqsO|brZN#I~n#g>KhA@F1qxZF4#kLWfHys%eEQKE9@|PPD*DYHS z5G;irBTeLb{WKt03OzFfLs%2{W>FoxH;8X@HJ!|U$| zY_Q(yb7b3EzYx?bu1ow?R@6thI^WUq96VcmL>HX*#mCFu8^0f4Yx;zc%bsIK)bUr{ zhJ`L4&TEm!J3S4 z=Nn|vtNHUdLV`63As2UsLRXFn(^!KLeC?B1xpNw_G9z@&3Td5z6xp^|xzi)Em=W?P zc=+B~^|B@-+zAy~%n11tJVJss8FBomNm=8u9Ugf020~{ff*|m@m=#X2j&rrvwCMZnUlNH)tdNw0>4VVCF_^KGQ}#nx7pI z922IEz}gQkgN9|}PbJ|ogAy9T1n%{BvvJ?1+d9wr@~N_41L@zL{EAlpPNlya;ZBd} z3{QUkl!$Q5U_R+NR&I}bXLwc7Z(Hyu;`h53=)`L#+#dJN=9|X7tF0Vb@_UR5ZuhDB zui=r*gp)qa!RJwvd#2W6B!gY?nhtnRTJpPT^1G!YvwK<2_RG6jmBhOgR&uD%Dvs6G zPmam4UbbiFxHAzw`CeedJX?kKBvuiwcg+9Ld6xP^uG6N;5?|KK_Joj2ZqR3e4WxGN zk;6;K1-2)`5w1I%tPaaZY+DGA4c`{nKuo;PqC(8}jM&<0o<4Lb$H^ z!Jf77N7ZAvr9<_yJ+je%Nnis~+wL4HHrSpK^H1y44K}i;dMU1zY}<&;%TodyOtU>B za`PM2a*JZU@R+6LWW>Jb`dDeo8`2tEBjPjS9Hg|*V7>4HrS;8-JI|VuX zWDZ&z*kHZz8>Q{Wh-d!2#I*<0#Wp}|`5O^0`7p4-df}%^`xql$`EqlPb+HZ5T91ur z`^MHBdNS>!Snr<`KV{s*?fU#kA-wOd0{QeR#B9%OM1wvFY_MMQdB*+K>~`B+4qAM< zuSE>C&6|zf*iC^A)(ih<(+>Zew0|SM`PG-sgP7@J8;GIyT}EVnu`IB`df^eQ_4HW{ zY`lKkXF1lzHW0&>myeM4Xg2U1L@sLG<+8!kM}Id0&nWZ5g1+{picc2*^wDw(3G)zH zh|OnWAvSN1T;|R@WjFK1SRmh)ZY6o*+mcHVvEmS{i1)t2JmEdiFmZj;3%g+zyx)cE zW=onfIImc`Xdf#)#;MBi%P)8yhgqwo%ulH>6Qk00=KZZ~6kgSy-9 zf9<=mUbe?+G8?~~-lEpLP=@JX+KBv;gKEtSWk|3lBl?VQQ;T$XkAxw?nv7`r?^d;V zZhMb}A;FrA_~*_0)Z!`ZJqLyaYck@&XTFk=jQ2TqcW_uPZJaNo#Wg%t)zXwkoiIwwioMnRbGA%ZQ82R(MI`cIdrkpidta@a()tLv( zkYG(lWV+7DnitCOn;?HHG{T*Vm}6Z`n=ehSyKRSz%CRoxltjJ}e95OOuJ*hZ6$Ad{`F9mnIX=17<*&4@=~<`qE?~^V^XDVLk{8 zM~Mf_@Y}7G$9@+amt!fW%^N1$SasYvISygMykRnN!c*7eID`rF zhRKBUfSENPmi{}i&N|y^f=oDnmRa*c=?U)>vf$1VQ=gek3_g3GoOz)P3D#tJwfOks zbLNFIBv_LXPpKCL>-L-#2GIEJK1d8PUGubve#= zE)UjZMEv!gwcG~HBV}k$hzM8bIkFC4s=QChu=Z77YjE4LL9(9u;B`mFn1^90Ua0`> z{?GZ$3}S_EY2NFlUq#@(Z&u1Y0&~FZ4)T@kuoLIX2og5*Z4zI}=AAR&MwUWM{>Pc} zm2AtgFQy25B~wk%?*D48>=DF@bAe+h(h;s#zfvdP&!4FC?_?Y+d@)noLdeB=@~q|j z@n87h)w2+@JrRy@{mDCZ^2L3@_?fA6;2WFTHX=(mXWcM`xWL z*g&c6UhVUT?HTd$>1WILK}`q89bYhmGWXa&PYY}yN3{&tp4lio9ok^M_~x0eyFa_? zoxlc{Guty8U$p2Nq=WV1D`~n7{_eDnQcE=MT(1yA%{Q}gZr*S7y+q1Iy~jyq|Ce0|k) zuwHzLJ-7KHvk`$i`k|v_7liJ8W4&z8Y)q|vD6qkL@rC!U>~gaq*kkYRSIc^_hDGi9 zuhzcr65$Bf-Ni;ZtoYQOY>0`j5#^PqLdfNt6AzV@HQu|iUt6m-kPG@GGUB`4hskPO z4dGZJP5LY`;s^g}Bdc*WgbAcPc;X25>pk4gVhUjbY0@!DVk27kgkO!TZze2-l0oE5UNN_|>>d zU_Gt({_R)eDs46j!~AMoC9s~>d;j*Uag{bA^N3%Ks{~fZdhg$UHLlVL5v{-YKv|9J zy{`M!0!nk)Bt*vf3lCC`^|VT}JtLgQ_kh59TJIO$uf|o{2vvTzRBa z{#(D92T~MUA>=Zl`x$e!hu`(vy$}(uqlPZZGQoP;o)B_b z{+G3NOz>Pd(;^(5STIV{lPr3!L$)=&u9}6 zm@z+kgMSBP+KAqL_6rEim~Xptf!JW$h|D9q-Aty{63m!iJ+CMP(?;Z4tqTaunEzyG zECka;)J+Nqd>>xE%o9ut5#jpZRvl%YTI+5|SZsxm%bDvY%ACIH#f+!Yn0wb48nN@H zx;ljDcXIw#SpDm3;oSXeSucO7#EiGr7_-s##)AWbr7+{IHO7eE9S#i$mcrb!))*r; z@7*RKSPHYwT4RjJ>^eri*Xmbq%p2=G1LuMfC)~eIzPM{HaxP%@Tx*OG(U{%x{X@$D zGv-97{3%JvLlV z&AKp~tLOLoV9n(&O-L{?V1jzg^b8Ig$_1?j+yxz>#DAvzx&5STI7I>xlw*uMJAfWVBo)(obNsQLWdfWVBo)-k4y zSn0gnaB8^>m^R|Hdrqz6y2LcME+cN-byqFs*mWj_rI`KvDCnhjYt(t_0aGi9-ezGe?=fZgY60^>#NeH>@cyekT>t!jXjc}(yb++^93$dLj z@9+Hy_WV|a9f$nJ!tV*V4|-}bgm1#UHU^_J{lbfToq4fXJ)0ZS`SOl)YjswZ$Gcd= zqQ46f;dY1O3?I+yf)~c!B`~rE( zhwo4I%+Ey4GrtcA^KT#0mU8DEKOoF&dV&1xS8PP!mQG%pH;?F8L#^KNac{9T8+Tsc z-PtfHrp;46r{lbfd*nET3Ghn+XW>i0^!CC7$`& z#{4y(1$CEW$h6sTzV0zcR`G)Ge99(%?_F(AJoB@Sd~roUn78_nHXALU+Y}Jyt=_Fp zNWA8=jn&=$6%gjFzCd2{naHf!5D@0A9`n2EHJ^!IQ}3zel$*Eu0(s46B6ndauwmZn z3o+A_@-vscb%KKR_kgswk3a8J?vJLZyAKJ5YWR7d()-$Nr zeYXxE@vUEonKt6l&r3n9%xk(^N0|8E=2&IEXcyQpANrv^v(fuk9RtFA=pz@@mp|K> z@p1QnFdzB_^5xG&%Z)t(!hGl#$d^A8z59iP`Oq(rFMlSYAz`e{qj`aR`7_}>@CUVo z%b#hL#ex0_C+ssow6V9uA*1X4ug!!Ro;-F6Jv#g6_#hNS~e`>ud%kgD` zV{1gCE0)%p|MqYmKb2PzIOp-b8;_8ghCS~up40K!m&ID{Wmt-7i&fj)sw|JycwEZQ zM5m(=c4+Nj7l+Wggar? zeF4x@RYQU`8PP~a$a?x|NU$a$2TRY0(mor=mt;cw>z1WRGWskO&ao_q3yfM6+%Mg1whY{Q)& zC2td&S3D}_k*wKpXR>A+N-2#IvOimxZEXK)pCDEolj?*!BiEgqXQdXFX0@95)f1Uo zj8gp>sbMW)+S1|9OLaRo^o-PyU`_+e{yR` z1ezc$e_u^2% zF9!rm;i;CCEQkn~V=kGS#VA$V8jquSd<|Joy!*d>av0y6>8L;%P{*CL@~fdwtH%EDZ_PWW>`S_RHA`q#?nY zjCg!-ANM@h(@#T!H3=b?wWTdGrq+HC<4@f)XlKB>+LQbZ8$3+LyGpP&@|5 z)GOVw%mhZ9>8INE@vjC1OJQu6eya7zz7Y^Cg;8JnskZC?)&~SjVZ`ar%jJ~s>a#8& zSPElNeCODs1C}+2RnKE^ zu8f;g?Eeo5VY)g2A405`367zpBf@q2l!xkq-MwyHvS3p|>>;OhH?R@2uQ@!2FC*%` zkxPwBQwX^%p4_SqHBR-iJ&vIf*x`n6H>X}bQewgcesA2y|8B&GO|Eb&f*x@;9u{`MR*XO!@L!=UfwccOHJ% z)z~5&;o4*J;M%*g>yw_k)a<>y`l-UboBJMRRApUU4IyWES z)5Nq9H;o(|5S$B48?nZD^5i_3-FC=(<9@^)U&_F~$I&Z}1C`KiVP zYZ4;Dwdw04>bT|bvz;{wA(!iZUCd!Lp=H2Q0i7UwT(%*Hk&KoB6M?3LxMR_$ZkBU( zQU*)}ni68}@}0T9oz^5Zk%>T4LY&(4>)gC0YmzcxBG8l&fA7C7x3TYANf|H^XiA7| zyN$Wi_i-~)ODpYwMjU~rgxL7r{2Z4W+Xys)h;TV&_yIvpy!~S9OK`6(4YK|Z1WR$N zAt2Bu^vqhOjp#ODRzRRljM=s}kGEo`jre%b%z!{`@7`{m z5KJ49zjkmf=Ps8G(?%R{@)&8gs+S40mGp_XZ+D%T-yi(FV1SnTmJY930ggwPRy z>cX>KPand){w{=EbOfMM924B@??z0$X-qBmOH6Q@jJW!SLGpA~>ka9^Mg;DjYbVP4 zhn|VVF=1M42=TgWQRvC^Oe7}IC#ohRu5v93J(-?G#RO|I;*ez{{kWuZ-W3z9$%yQT z!7|FwGqsqIQAXn`^fyMSuGQ2sal$7X-b=o-jB5m2=o$K znoJu}_$DM|%up!x_gQMEjnHlp{iMgf6dTg!%NBclC34Dt$32F+2XjmS)% z9}rwNOdGNKis?ZQ$7Rm65sOE^D_<0Ke=V0yi%*}+pM3IPrLPns!gbcl{kyRg=3bR% zdqT+NKL;+X<9)PDV7_$C+^5Zk5JzA3w0!?4Ej=lRaRLbaD#Kq=%*L;KE|T?$8WYR{ z>ux8|=@ml1oYJh0Q^+yl7@CdEcU_ue0yDHTe)f#SooOSU+iPk!CNKk~1k*-f)|sVv z-xYojb`M10`u}Tmj(0WjUMYAN)BP=C14Oi;(VcGphlMZ!O}gvGi2HZci46^5f_HNX zA(tFxgxe2sC!hGT#Y~!>ONAL>-D8&6$o%!*C+jfxrsu&i!J5p*EswwCcF~z$%)RL@ zA`nmV5GF7?tmlUrfm6mfgbBltN63~?u! zaR?Kb9ZuUg+?|%jAxvO)IGv8Iqx^XjdcGE)aD$!x>688*bZ5A+F1CUBWX(fMN6%T_ z^OuG&f%#-De4 zvEH?FZiAdxshSvp`{$;z>k}U@Yj4Rkw|{TrjFYghITOLlzaMSal;EddN8a|ketoSF znd(wZ*OW4uwkO5z>i>3hd8_Panrlk9*V!SvCn5r4A#Q(616t>-z3$BD%Zo~=4V*ct zQbub!DnwLWs-|SWBUYK+t&8qo7B+A)rJs#rDSv{f+71cR<<|cbZTE=P+%HFz@DDa{ zI;j6%TT@~wyGN{;u#kc~MagKpmy{z7NK0U&5ZgHoz69wDFA*%odhK5Fs!|rP0m9E& zgnC(%6Z1r*gj#P%2eTg;R}&?#SPJ!3rR;Yt^9mugJuOvJGP;rul()pnLipqpPiSnN z?C8s-h9Dgvdw)HLfA8 zbsBP+qme@};t-WcNt9>qToX|H${d9D+9p?dR>jAz>k*Uei=bM>g|c z|NJnb5aZ2TpBZ+a)T;_%AvGnY?OtrS#AgogC3(d}!|yHnOoX`m^F&l#s-|SW!-jjF z*E%KwXd%u|X7aVi6Z&jV2mnI(5Z3Ey%>@xetfX$SUZhF&+V5I-D@3NcR87f#r}9Yh zO7$W~{g-2()ASV??fk#KCbE?2^`)ulb8DQNY|r2M$!G4JER!+9#W(p9=VFrFBOOdw zNEj2-gmm=1?z4RJAz~w90&k7UTBX1S5t-^zH6{BUHr(4T(h#|S0Rbt$g3c4kYC0tV z2*FYstI)=-yCogvh6K{2tH;eA@`{P-Qa*P*jdUE_Duxm#Vz z=dNmU{<~Hlm5g_pK#n$VG+5GM_prf)g|J>+B}3TK~L3^SSQ8?BIH0cEoB=WxHNEg0sq?$Ox3gJiCRmDTyO(<9dupjAM)=;@&;0wR0euA^ z0{yv4F>Uur-KA%(5_m4DUeko~kUx6XrltHdQ8gt`&Ilyy#l8Qs;R*f9kq~04p_JM) zO_UC4gG?aqs@Hy}bV%-2m-4x*F?5lkCnpogQU7(xm$`mv3JI2C+U}8#n?I5^^k2h6y{suDEX0qHl{QV1yM3>d zvOqdG1ot{WWA{V=5Q3%jd%bDWGS_(@(^XT#`+&~-*za2AI`30mifOSya{wUx>I9bZ z?>HJ;7kQckU>gl-UFYBkltraHOv=A)X_@2A%gUSy3-Pg1y`~B2cwmoa_3j^@g&F(O z;NR|4FKY@33xV$y{WeuovU}w2%C9?>+&`(iHbWOm8G%?aVIhT>X}i}Fy#3AJbaTmw zECe=erqF(GK)94wlVZAInPcun%N+Mwuk4Uei*3=2kVy6UXJ4|AStAda(_=M>;Aq!Vwq?@$+{O%uJjHtTgoSuN+x{yFo}B!}#Es$n`%T4$|HcwZ837v=A_`;WZ7{80 zYtZ}jFS~y--i0^j8#-U@?!66_f(@lZ!a@o$({_)%ioTWkc9dWSo}dq2ca_*+DZ58H zn6MD+*v5Tjtc!GjXgckoTI3bec27j4 zgvO*H?KM%XB(GQsX;LZsy#XO9PfOL5j7F@ueIR#xfAFBB!=!v(Y5GEfrI@yR#A>;( zS5kj1#Mdi5fx&)nKt!llX(^_Wj(O+YB>IuNAiP&`mhv^b(algw%EoF)3g3Ra3fsY;S+AD<76}r;H``kd8`=ieSw`ycE;^zCmplLZuKZm4YU{ zPtt+hmG+?_Cgt-=H90wYejs=8DHte3tBMWO5;!90w(}Z*^ZO}ec3U#T|HMh8Y zW4Zw$?ISJaYrg*-vHG&X^W*HD*!##*zI~*K2$^)N~jc`a5~>= zbVH)Llz)oq%&pT*qa{3@byk*XyQlJy7G)v+sjswYLagM^f69;_sPmK*&fY zEyZ8PC00XsW;2a1TL4>bMyRZ-Jik3|McJ<~ttr{P*dW3}WNs;;O%vJZ3L7AF-5X2U zJ=qY#LVQe=HchY*&Hgx>X?cj`uEnYlpa1ppvR_YIQ?h&5V8TMe)S4zq$31JZnb!Tq zh7s=F;Q8fl?a$k;zSX!>l=WWHL4<{bF)>Y&j^pNMGXtL$8%8+ak6o9S{rcvblHE%> zh_H|_CZdkK}2<_nv(r4Hd-E%b)_gaIHcv6f0T8Fy8SLTh^Q{*-na(2w~8R4#YSO3QOle|-alqZQm^cHv0+41U8<&Jzl)6*#uhUj zeBI@cTPH8Bw2wk;zl#kcqUus^9Y8|E2HHk6&Dp_UZgJAKP0IQH{9eLBoOPn@USfr| zQRz!2Y+sc0QGpcGZV9;&EXB0l!-lktN}ssn)kR5v&Qf+SDMxFn5EcU8!A9G?qyufE zrGI`jowlg*1aME8ga~PuqeQS2({`WO*y`G$`y1%=`X@k5iKXmbY6)yq2n%uF=!v#_ z%Bw7Fv~%U**J-=C*Mtb^BzJ{iDW>gS(t#3u*7b|{b7kvScGr|x%I+l{L|BN^MYP>Z zI(*#~8>op3WG%SUl@JYRt?dnB|9+ynlyB#rmXtp$eTmpG z!uL43_S}A#SP_9y`a3HjKz%G?A8KT5R}{jMy;3kEwiZFU0n{*f1i4 zQBhioY1nYjkF0xsz(zpa{D=ItIfn6MDm>qmgv9-U(3Q>8C4!jE^g@50DZ_nU-- zg}C>cBvx+iXmT&<@MCI8hY>jISI6+-h}@-v2$o{n?xj5Ze0$Nw&#g(dHT1UrA2aE} zUH~F2#Eo}}wtLuE|DOSM@3?Chb!PK?&7HI&kw52i_MIOu^r&R?iDye_O&v%MLnN$Rc z#iu+F5hqP3Az@Qd&8|`ajD=CoUWleYV3E|a3!cjrn*#3$$p28=&{R_dW8^w z4i-x}f8mKeA|huku+fm#6SW}c)~o&Zd6ap?QhZ*O{VwS+B2!(erewcYVkP+mTNYA? zaqsiW6Pj<5auD*@P)g%&nkwZ{tdxh?P`%dUu)RuoBt&&7?z_YW#tU0}$h;5lUbG#+ zSb=T3j9v7Jun;_7ZEvvMlMNZS^L|H`vU^E~w;_au_?YOtk7<(fpm`sQRUx)r(KRKz zhmFcJN@}BpgsC-6k`Di@Z9sTGcRKIG`?+0S5n&-=OxU)Il^-*R4I}XGr2E?OPNnyf z4k9e1ro^<}OFG<0M&F&8;63&ByOakJ)un1m_Pf}iSsV`Go&NT_*dU_1lv_WM_z4gj zG>gL_f&YPo5F12PmvTK(;@3cI&@2vzuvY~8U2G6hU8<&JzgKK5(77cJVJ{B$d&Pzl zQFW=BlKo!EtD?*UxJt<(>|4TqujG{yQFW;rcao&~wGbONi<99H_IP2xiwz^9>QXf& z`(13fcTUX9xMXBFg#B>X?_$GA(z2 z<-39TFQ_T8l-)}@h_H}C%(UH;4S5=X(0L!0vU{>2goXHYC~cZ3ud=9DNV&c{v6S6Y zUI}3#zC4sRO_C0p#X$+`J0MHhy`+N(3-R?zY11U>pm`tEM150aDZ7_+5Md#{hAVBF zBptp*Ny;t6w^V)ew%;2PXq{;(rX}Sxi(`cEadZa3eis`=pqEKYF)cRSERKuif%Co;l6$ux%c zyQITEqof4!^h!%HUCAq*#fgmYPh`z$`@ND^N@VbKPD?Q@Hf$CrGQy86w8q%)l`_|v zq6|h8X(^_~h9Aiw<&hD7Oryy$l;n@Tv9oJ8UpfUCPbx&iYBkGYM?OL)&0|yX4i-Hb1SL^~q9& z`1=V9DL6$&+dX0xSN8QG9UOvtfA(@s$?k~&AOuV4X{4q}%iPV$NM4yPw_4eG>DKd| z?RVI~UxkROOEE2ZRoVLi(#}O?DYxP~u}4ItgvO*Ht!a|-NcJw76rWL5Q)1sTAz>jt zR;t%DAy%%Il-oD)^@<62nAbDb?e|K(QX;A@Ra3IxVZ+t-VrG?Z9~^R0Q}d)_zrzL- z)un1m_B(9I-}Szoa|m_@`JSi{+wWTDZj%&hdsJP@?{?CDOnNw}Q?La>dorf&9fB4xl*TKiwWFoF4(=;sMIMXSW07MnvhqnJd*uUcp7M_v0l4xNLYw}$|!A` z5Gz+p@EnwS#UXh1X+5_4hJ=Oqr<%7B+H>i}?D=>8IcP*7=23>-OI{ISA^xeawcRu! z)14-G{LH&@C{1_f8Qwi+ z`E`99!e?*W@36r{bt$*L#GP??XyYLj8<}RV-eN||{c#AN2yVZ_1{2k#u!mdE6Gu86 zp{w*V9Kz?H+wT<{N<`JAYD)HdC9ib0Hp3w}HPYv3!xPh8UMUe(mvZwA30*1kWL+PJ z@Cl;!d!@{kh^kAuCtPw?JZ!j{n9T2T2%kZ3zrzL*ZhZCkq~(|t##j0~Y`7Lx)U~xZ z9aP)4Nx}Q#_YoF?cXFfcUP=%%ca?R0II~pyD3-E&#LD$P31K0Hm}$F*4c8~SHFt+d z-Ni|&-g9J4iKXlwHkhywr;BL2hYj~Ma5nt9K0E8x=}L$ObU?5a({>LV?r8uU^85hd zp8z!_ma==Kg9!`qF;Uty!A4h~SJ{mFL(2VGpFSP>#4!Rkn6MCE9!i@g*l6NQP;8(C z{RyPLJoIc)BVdCG3-R?zY10H7JAK_18>or?#9Pc1slAX636^5o?qOrn&Cj9@rfi@^ z=^1z5PgIxk?cCEy`C7CMJU!i?5x&RKllSa*#EJ>@GHEHMVdFaA!-)+ee9x)p0ow1d z!328Iv=q~@QRDk|v0;RN0<1gsLifAxcU4nJpw~}JF*3tE-OukDQHXiuZTCnA z6BgpfyBZVI1RE8f22sZS@j0xxZ}gK(Yh7I}**$Ei7X&3(O3wo|O|Y@-sAqDSkN+#r z4?f+IrR*Lyn6QwV64Q21HWq}jD#VZ)eMlckhuxD6AuJ?JEo^K0+#0WCkL9ApbBeHG zgj)~gPNw|k?*3xK?qP!o3-Rgju?l18c1YjxKrU`|pkv)?szh%gwlnB!O8;M7-vhi` zRb6+RT9P`(f>4x*4l05+)qb=xjzgcn9|R*woPgRQV-0;n)7Exu3{w+jjOk4n^FjsT zi6MXpUosjMDI*3D3BGr~pQHv8Dq1HK2N}#{NQTA`qXA!ArQK`ov+r8>yO(d~y|>@l zd!2RupMCB*_gu-~aD+72AF5PMQy4XR*~PoN`(Hy2A=ZPwK_6$`)IJb}Xz z(o9pLm{1=P|L$dHVP+4fKG~YknvCF8hmNGI229}A^K&j)kfhhABWa|bNv7g z*WmltRaOdb`6xucY_-}bywyiMTgv)y4Zg}d6CRSGB_mZa`b0jCAqT!9U*n)#Nk*z1Ax(@vhL#MD7)6Kf-M4ex z#kcKiJa;R};BbUA@ve-aC4(booT2;UBb*Js`TD!ZQQxg3gToQhtOrL+1_$mC>e>&Q zoGr1AD!wUtMDze{TRFPs-7!_1Ymust|MyeT639_j&OJp)lVw$C#e{tPLDmO+xDKV8 zUuBNB^G3cYdWvu>M@t6B_ddaPwF?fklKjSU%u6F*wwU6cBHYT+lELwP9h>@roQm z<#8XWk=Ja}gO!&xm6Ia?OmV*L9@;U|(qi1a_JPbeH5(W45{!GoMzIT{?%&v)Tn26lpg$69?` zGB_L|jmMkba*Y@qec-o~Lx}XeYm9~`%#j?;RtDxqrUm0 zn85Lo*ZlELcgn@&5CZ#A*MQ$X{ISrOvuMNp2_r|{v7k+h`-%;efV1M2oC21ha;A);)&;o21oR$ zoj4Fq4%eJ_|Mjsy{LAD}I5-@!Y!y##M>IG-e%%Q>b$5bmo_Onr;=2I9N)CmC!x76? z(H}=NIEI)1%(x%rn)816hS;OOlpG2Nha;A)@C3ThjpI=5dAa81+ip-kMnvN%M89km z4|)?r?`UD;O-JmNXHL|+EH>V$>4B=G?|Y=D<*J! z{atYf%dz?F6*)h2Q_LqZ*1DBsa5zGmtdBw~CU9_fsl6MH8r=8vFOb8nB!j~d(qy|T zv|<7W_M_?@ceKRgZv7ZJ+)6Sy93f4%@IoslaA1eGJ=2flMdCoes~rJ_ZzGnivY*%P zz;t&>h#YZhXG7uO@ck%^GIJ|OBj>)mBt(v!wL_zDa5w^^<=o2A;J|)Vy>B2y&H%O3 zq;POJ0<*!~%F&Gjb5zuG*9(y|S*1|njiV49X0N%Gqgz>Ft|f;MIU`p|E4-CeAv(;$ zb1O%K1N%|oGh{wSM0yt0t~{m*BJNeYer$cRax^$_vL<{VatM(=RkrrnueF#ahz{P; z+{)45!0u94nuffBIqOLo)K=2x+FdRZQS`*TLV|t>>abtcUgW|84KjKKh&FkPHq-NR#=< zR7GuC3cK!{XZ+XQdcG?}%m#mQOWgf>kQ|c1;RtC~8%IkT2-V%aL5Cyr=v;8*)muKE1qzcq3wob@3@ z+_Jf3gSqLmD_&*_?5-tytG?J67`hUk~ARvU%0KH@ob*IK)4)<1GX>x1h-;j9lK z`em!=^CKD@(Q60nVns!Ezi{k_#_>Z|F?KyALYnwan4u*jRWbSuwSWGWbFUxALAR2O zR5?PL_26j9;D}LlsB-}LI&h8WZY3EUj*uqa=QFfqaKvmd#4a!A4}2ZAW;M5x3=T&~ zvmP8R85}Wlj{8y2)ZFJ*lEKjseHTAzlEcv{gCpizM@t6B zr=tJWb5WG;gO|J_=JR-Sa^%aBF77G9tsE^G9Ne{R&v(&Ep8lp+lEbYeqpTbuO}5=a zD<*L4$9`>lPMxj&Rpf9h$>4B=G}Vg|t(d^U{@3=Sq{-3Xl1I-7K1XjOFapf29L-eW z{7UW{bVB5)cJsyi$f0oN+z=Sa=2ngd2l`)(ySrWdgvil(|G#}TITQ{KM_@#rTR9pW z=znb=rxPM)nF~If90~`ABQUeftsG5`0M&k!5II{GTH)jnqQeY1w{mpL2j=tL0QN%U ztY4*|@RpB4&;yuTIl9#c{1S4&H%LT!FIAfgZ}m|KdNOk>M}uR3^uM-i*~7<4M0#P> zDisb6Lv--G=2ngd2l`*zukD41{d4-F=uzuI;ovYtw`}ET<^$)i+P#|I>P%Jo)RjVxqF8@$Jt#!3AZo0| zY9eKD#7I3Nq{+2GrfQnPNPIlU;1iG#Z+-1;J5M|RgHcQP%JCgLH{6@+56R$ggfy#- zqb0NL?mZ3;&QU<@f8-i+xRqpZ;HJ<*NQ3V!3oV%(ahCIK?Ogz+YCT;0b9*~SUx07U zt~Qd%VF+oGBXd42g~)lFNqtv)r$LDI@Y}IZb=UK+Actg@l_8{=rbICzA45FL;Pbwq z6JkC5^hMv=dEzDSBZp*gI6|7Zb6`x>G=(u9#xt33wfCbOamK?xxcj3AE(;Fl1BWA) ztyUX_GavEX^%-~{Abzg--X~7jz4f)Z9#lBlf8Ck8JEtdy!pUKXWvkUj;f>?a$?Y91 z*F1Fc`C~p5-Z%;oH~cMG#UAt+-pcAQ-+qaFxaO6Y{fDtW6yD0J5dE@Myl*g~!7;@C zO4Ye*j=b^RW4lr~I1JG*TgCf|BN`mh5)W6~bf5r49f7ArNV6UsEt#boedDS&mc00=gS$0Gxs_zrpdqBe6G)*Y zg9G4B=G}*!n zt(d^kden>q{qCWYZ;Ch_y^UD5%6^_`rYibIj3wj{B1fE`zGzJjg)`@dz$i1fax_af z`Uc;tj90U;oyiFXGCDMoLf1X9MLyoY-c`%$Qj_CcO-|x$zceL`g1Es zHxA5E;OK?OnXFQ%@WxRH&T4ZjN4K)VTuTnjcZtXuxk_5$t*i>c*?Df|XmAX%AJyu- z$Gn}0^en1fDI6SzpqDYXax^%aC&PTe|ELxRKPX%KdQdnx4ACuHtu_j0KGKI{olBEm zSoKYlW7KqdmgEp3{oNXU;8~{3`Y?nv=_gi76cg(__8-HiCWjE| z71tOnFPt2PkS6`zN{M0u$Jg>say}=+-Q$NIzADy$c}wp#pZ_~t4=NlS6GYrYKDTl- z^MSid@F#w_7yPZq9NdaG5F}`)|_0mIyn(;0(2L4S z+*=6t+PPKs$BHRp{`dcG2l2)R-u!Zbaoij8tlby>&13$EeH*v^ z9rts8$hwhC4ns(j_k|Z4cYLSJ(uKd!zS;xCkKdUbZY7x8_^g3hfRO^%q$c_(rdn-DSX#to=1{rVp;9||Xj zA(pKiogBJPMu_md<0jXAUrY{#Cx;NrR*r5QbsD!5B5$6pd?>te6oU7K&#fHY%BoJ| z^4{7+RplZ$9M*keGoS&SKoFH$;`PSq{(}o z3$2)#bCgpXOK=l(jZtnTnH+|YChw;%v|=I$?pkVNB5t&)yAzPlfw|wWIhV5nAl2i z*14?>kn^{{;eL*_ZY3EUy&}zM8^QXz-R+7nK2x+oi6|5TREDk z$}b5pA424a^XwD8L=J^B=Z3&2Gq-XyIbQf&jBw--B1g{qUzZ#TCx;<0TF$K;O%C*p z_Pj)hoB{5-FgX-X4nttnpIbS)anxyC-WQ&ToXIMM9#b?w^rm`>6SL*q%F(T?FxR52 zddzo;$QijxTH&p%3c=ZVZslllzTh zuV!a_A+Nmt=tqW-COI=gi@;lY#W#Eg@<@HYy(&TrlD!l;z1PoONype2sE$Q z4}~X(5coRi+{)37qi&~+6MKcge$*Go6e_%N6oTKWu6)SK(XFiTO;*;q;>|C&R!J+o zl~p15o$9%jqsd|G4}9M>5%~q$YF7#;hYLhasfNFHIL3-8wyhct1|fT1NLAK^1#%}H+wHCQvf zTS+E|A*6}83@w>uWvdCa#L;6J5nJf4Gla+GXvxe+tUsa;G9S`pPc08n;oAuG&bgJN zS%bEk5F$sM@?;gxoErk8%-qV+-giC&1Dk*lN?PL3Bo zw-EeJ_1wzQt zD7>}ZLgZJcXI748K5R9?FIzVRz5-o+UNXzd5Yl+O?K{$KCq7XX5z< zc6%@0cW20Xf-+@rIKr(QEt&NZtBE@O3B)ZY-bN0$lFa%rgfy9wLMtY4tm7<$pBJt4 zVt4w7Zn=y3kPHq-NHfi?=Pz1&tUvs`XvUl80QNs}H#vSg+C|FDhasfN{qsUQcbra$ zdy4(MXvKwd2QPZ?9&$(qha;rPa{z^Q?(qZ!eNji?oWx_lbSOCTbVBlx!%mnkTjjZo zM6=FgHBn~=g~$^k7v6oC913Sy83Lz5=2ngd#}Mz<`gzer%3^SIGkv!_KI_471IR4^P+RBJTF?ki#=*`UbOnQb4X^YVl`hUOr^Mif7A(6Y4Utxp>f)<#ubimlk=iAp1YM~aKxB6BBaUlqJ_rU z$QoTa8%)lN=KPW8EXzs=aK!vEBBaR^pM}O5&zgy%tgxD}^P)KeF(zVl{LgdK#Zxs{_EN1guUdC^4VOjarMm?9t1o7xFeo)?{4Il7fq zo&M}G-z6ev#WX?iyy)D@(cp;r1MkY9 zUG?xk5|Jk}tA#5Z`7i{}i_WbaO^)>8*mmJx6#`yZ^;*f~FoZN7Z+c`I6YC>AOL7R2 z=S6GufoGXA>%$Pzq@S3nN>8>@$PsRGUbNzJ&s#F{k?&wJRnnxtTWIGVZ^!SWK6o3+ zkKg$}+3#?3$4kHdnzJwlO9qGEr!P%fIXY#O)t_wLU-F)v`$vwlLQI98BBaTCKMIZa z@lpl{-xqx#??YCq^4-2Gp8XTd2M{SEAC8b_np?#L4!$qi?sXO--vB)IwAYaX?-iyD z4o66n`KXjACUCU38Uq`nxW$EcBF}&3x#W-x4o66n??{iww)M7~XY%ZcZc!(*Bv@CNbR%F*D!eFJ`f zNh0#C=#Tt-a(GNr1m1+6TREB>0rLAx5|M9r7usVAb0K(t$=u4(Egy9oNr!j9iv#bR zS1BkQb>7}Ths66!=2r0>ZbY~GsM|>Rj(e3A-kq=76apOWJ$iC1Tjjg@i3Uf!g*~~y zq%^n#pxUm-G(qtGlDSphIgsJtX!jZ*RlIYcG`QoS`knJl5WK%+Zk6|!R1apa9mo?L zxNV`v59g4~oac=WOqDcw2SlM26H2$;8bJhZji_K&onn6e3et+?;Digj+dUGV+1@^f4}i1Eu?u&-lWb@Dtoh zGVt(d^kTFEXr&`Q4f`VBeUN-{VcAx*a3LMtY4_-!O;?RWn~KHqaI$>4B= zG{u4YGb@Vo3*(%49L}#ja-xAA8h#b`(J>?E^C_Hm6 z1V*yCm7~FNQrxHC+x;bp$kF+lAIoRf9@7+o5qWOqXmE7*K0dj>BoR5w9J=Y#%!kJ` zMPO!`TREB>0rLAx5|OiIp*^NB7lQYf%&i>V@=>>u@cxqGz#LwsfVs9}3W9rigV`>) zmaWofs1jl6)@>xc5b3>CZ7Ljf9yM49-d{4eay0U>KktV_s(61%)j52sYP;}#Dy9j7 z_m|AA(uY&qeIV`?8M1%y{*uzbXUx8m_m@;m(a(jTXF0dZdq%3KvDZ%SFDV2()*2Zk zXaCTRC(?Ml>Ai|0MxXIE5+QPJP$L|?@RZrl4IxeX)S0Thzob%_x8wW$B^4J|5H-$A z1_$obFN8F?HYl`n^ULqy)8;!re{sh3d-a8P$n`~e$>4}@#RI{gG&m18Mb}s7o9W@7 z#Qf2};mCE3V~S8XIQUCM=kdzQ(bdn}TW&;D+VA|%buAz3L8%=%+Iw-!R@iqgG&sKT zzzcWceKO|5HQ#$F=EQIBVr*A9I1JG(Tg5Y(5e<%mfA!aAy(+#*j}marBj^3>-hIFL zb&iP&2Ztk;tyUX_gJU>we0(bt z<%E2=2J#~hARlpZd6W$S01oAhi~j@b9~1M!u#Y`Y2vhavi9D|~0P(BO#Hj&_B5?;d&JK%B^YY!~$` ztMwpx8zD`!K0`~c8mxXU4ZgedYmLv*TZn$y%F#$wjBqR`|U0bU*+2O9uAy(JITT@;5~&uB^2} zD<-50Z7Tk7MnL;{=;S+sIqN(TQ}h(!aXDHtIC_k`tzEeWE&K~VbvyYaZzH71UX&@! z-c_lMoaamsLiXDCy)E-0boSul8xegWQj=DWPPu9@MjwW?4yQStSAhBHXG{qL{2*WlM~CqDs-@mAs9RCTE#KV_vDc zVJpEr$g+|qXUl3=3P(QB3LAnm=iJKCEmh+viaE6q?qx`34d%TD9I2)8cyU^&Vgd)x z!nOAee)f#3!*|ZR3@&-;)q7_=-0h*SNM?QDCX$Ab2Je*!Eg2kxy*&WLjc@JRMw{z?Cr9FoD|2x(Ru zM@vRNu!9w6?#SVYqc#Wk{?9M}@33$_a5!Sw3g4?LH0#{n9&pX4{^`NJ%g#JP4uvxx zhFG>*Z4}P>u(tan5o?H;#IHpmWVz&b@NXhr%02A^K&j)kfj1tm^H7ct%$7#tPzh-#^xe!dqDt zqF=UhG&th6o_c$^6JoX5|Kj(L?MmU`Fhsv>j^}PA861v~2JhDjEg2j!f8bpJo)>-ZCogaF$7M$-%3@st3oR#)<=x%(RPVIOT74VN0Gy=B(pvYAr0Q56IwFM z3iDHY-$0t|spr4{2RXMZd>et@Ik$2&bB>md*)x7Zxs{`tk2t+UA1m@9M9u)O`%H2uocS;WM*X>!qZ`Ng zzJU-qlT`{8-Z%=uS#56R=vG$s_CSyME)h8+S4k_pl~o}+%))akM>8LI7boky7a~22 zYB36DK7{DtP0Xzv4UXZH^nK8-dLdRD_(9oM;;fp*G(mLBR*q&_#p#{!;n;Q^0WYk2 ztz?#!A*Atm(<7_i9H~#wk{m*$H(8?(yv&qYR)&x!{lrXFda{+m$a%hzOAaB{gL~eR z!QlvL(%-F=C?=MbttS5CKmWbGXMgP3aU3DBe+)6U@VF+n5C52W@;MleGhf=j3zVzL@_l~~cIn0M-a5zGmX>Ju0I9TWH z9YrDHTj3wSd+(lioInoA;BbUAtBs>2vp%9FmhU4(#I<{O%)38A4$0t%mBfgU2JdiI zs-`I%d(`1bUlfDly>jofdzbD$mvy6XaI{`a#IhCM(cq^;JabE^&&^0@E+&R{V z!dqDtB0j;iWVPBTocXZzhie`^<<7BPDV+HbqF=U(@o_|hBU<9P{&3ADpSYv-j~GQq z1UL-QFI(X|?uBMqVQqeKe3vzTm+sy%_H9|k82pq7Y1V_IB{Sz(f3&gW)W5lX9HZPy zGE3JG(!?2hLrVrnjBw-n)CUV$n0y%%)n~&vK>sFGU;FTKnrL?jbwcFG`M$R$hr(I9hQMe!w{kS|5vz$9+gTq%_^JzjWZ)oUfQ ztkQ=gLK=@Zti}|Aqj{EFi1c@B^nquYGRq3wkj%0&gfzK>QE0^kj(C1G-nRrqtsvY=GV@^w zX>xC((25BhzM4>~ay?k<53IaW28Sc0Nsi2UuJo!DTAkbeN5zHpXRSXZgM+Q4A*9Lm zV48^xo#s}KZX9?<#?locpQKd^72Y@s!Tpc9m7`l(;aML!@VqS%`9!cv zTH&p%3c>x4xs{`t53MG+|B;A%vRUm4&l4-AXs|+X|6^|DXmHqSg3m>(#o>8t^$9!| zt(YbV?tjd!a{r_HO?qVY3;<7rtLHd}WR`9|LuTnplh3IOt(aJYTl*h1M!A(_maZYB z$>;5b#?$i}S2)6r>kmAkuaV5HB!k1(AJXLhN1+uHTgle`N6rAb|52l;5G*T0NRvAl zg~pym%_W>aCi@>X_qmm1aQKdiG?|Y=gS+OEK-g*mIj=d~tt6Af5Yl9Q6k0J^o$p|z zMh(_X?^cq*!4(U9toTWj?W)jMf^aLztPev-llvcqR!rb%eUPb=CVOgm zfC}G6pm)x#9L=2DYC?z{amtfbI7`7dS@l}UY*&Vm#^X&7u=-=<+;%gBNPo9RA9$AK^-mGf zy6;tp^onZ~l^4#kvK5Oo>F-ub6cfwJRukB1sPk7?y`0g`UrA>Z!tHwHih1F}y;ApGV!y$FjVF=qZ>!%!plv%Q(&TgM zLgU$T^~Y$5wwr+`+cieHm1NeSA*9LY?S)oMsKFTF#`OoD(ARkGR+7Qt2x)TPpwNm5 z9NYUJIRoVWM~$LFfWr~etOx8<6k0MkxSFv2k2-(lR+3pCTl*h1FM+SnlF4DK3FN%a zFu0Xuau`CItdBw~CUCSmr(c2^tdkCIB^ex!kS5zzp%oMBV{8ATPHec9WY&ivq{;n{ zLZeOB>6ECCt^JR(!hS@ZfO%@fvQ_r;L^J2Mnh+vKoI1&)aF(tiFv`rW9L=2DZiWy! za@L6?g|l=Gfzfhqmnp-)#l~wI#^g`r}TqUjWR#t`J{>R+P(aeWd6WsquM0yt0t}vfhOpy;Exc@P? zax^$>HPOTW7+YNUSJlE5j(iv*9?&dVMZ9A;%gS~$q)9)qdM!M%lv!4WkjCQ;s|iQ* zELnp>q`zCE4?N2{^~AAcvj0(5j+V@_veksg<({`>mX#r-Nq@IeqL{$Z?Y`jN_`ChS zyw`R3bJdXlJ{0?$LwL^!gN*Qo=tGKMY0ApckP#lgo_`;F#cQVs#93C5i;vd$iwL(` z;v>iI3(gMv9-xe8J6@!H!jTBtOH)>khRmEd+epZ&p-a-|N8I$?SK5=|Hq&I{>MN5?d$9R{h$BO zAAf)S$De=wumAavuhaSad3`>Y$JhD$@w_j~@^!{|M6d6r}z8&{d|5c%jNrazkZ#TrT@X}6`tSk@2}H+|8aW#kN^1hlotL9gm~@O zNfi(^Bh?RLPIS@*s(MuvR9e%1oChjbKd{4j*wnN`71)6H{e%waQE)eXJrCP2>P+a2HW6>%=jRKR0hRGF(CCSuJo%Fwe!@T6jxtr$ zkI8sNGeA3GNBy{r)8A_-F`N8E=*!KWwMWGE>v^a#wB#r*HB4R*s^ z9Le~)vk`&uev_&~=q{yf9LKnPFL(CWV0^GV`wr*)E#~4##M^U4e94S*E{;TezC*t~ zRB`zhGjSZE+Al5Vyj%XaB<0EQ+d-h2hb%lE@IP#fzbJ}XJ!WR$Y0t7tQJ3=*kX z7__Nbh=b2(5lefcFlO=(SOsZxqAI{Jo^9?tZ{Kgs{9gF9FuDN__6=>u$2F&%+4vl$ zdN3-vFfr8<1Jkm+zFwG8p0f#6CH{WAL*mz~H15gtb4pf&qv=8mkkXv*l8wlM7x0h6 zqYcX$|7($FGI9ovH6UtrGEIuuD zOAcsGlK)n;Af3-_zVsh2i%%E$@=Z&UfMpk?17bzfv8Y+Cn3jNY^5rk&ELZ?%@WC=( zqH*vp#{QD;`h9+}kF3py$$a&SZk@aanAVl6BAA62&FAI(`i20TX;kv5tJ=}1cJpQ+fRHFR{bk|${hT(fX#rMJrF}Sp>)7FM{2V;Q9-GPC>7EaTx&^fhD`+I z1c+VO$jZ|Jr83X~Eis0G>LnIoS3Z3i4C8s{hbVt7o=pJ+r&{`&g9ie8C{{>CMu zJRTJE(T>Oa=T}~$nWNkrCKSwgeEV_E6Re!JfsICdlebB1(Zt2KU(1dWx~H3vw`pv& zZ^8C1Hai`1?S9BBd zHjRxo?a%9*n727>YJG|$SF^@cl{v>2jJua-Zs$6iY1micqCGqmHW}0nybfm>RON4H zVUn#rW(%e|9+&;&VQ4Vao1_c!Xer})IjkInCZ=7n(M$$gIUFCxCZt`l(MAT_2Znm3 z8Nxso(yrKOUt*d2=`!F<%`{o(`1o>@Ruj`oaI=P9!3k^dlL}Q^W7mcKk#LqS1l^m^ zcNV%RY^i&E+`sQQ31**i8QJI=)qLB|mW*sTcCnD^AG39KO|aEa6s8z!Z@yGe1KVvpEkj9UQ1UM*n9c>%J;E$Rm;>wy*&@X)`5{2fnEchT zcvN((M>2{4HRJ0Na*EEO7@c%Rll4HE#A6L5!m9P~Xhif<RAT!||<|21N2Y+AZq= zfSL(iMT>oy33n9Q&J>gmASK}7Jnk$+heYExg&8S)5JN$qr*HX%!#~pJOO@8TxW`B@ zNHEss?sOgN&-)m+Mu(xMFp6g}4nFT?{9(sqYchlJ!N)ilN_8ELon!R64qcCEkgZ>bY+;G$d?vSbY-?TVV=?qBT&q`;e31cs;feCa7s~Bo3!m<_ zPQ3K-a;r9{zT)lq_DLC>gSV!>D~?IthW|Lc==g|nSN7P=`p++1i+a)V5eu%;oFBDA z!aq*D==X?KPw|{S@C5v$=vKGKE2bW~+s!QpbP~P=4}+T)f@t%eg4KE3o5zovPF#@v zj7zg#_2Sm<={n+n%lca6)77)!MYqfwwgJSZA@d)H7u_;}_Y^DN>Q-9wABDHNW!9+| zZ3B+r!Ed(aKMpUtWe)3}%&+5_tWve3#;h(LecTe!;7AeLwm%4xBB+^3>K?= zLgszyNg34Tvl;Vp)y{nDxbnd2h8RU^b??J$ZoXgclX#CWp6-%1nVu}$=iXzkyF3xa zEDv}V;q>A54lsQB!gFcc1U0L6=PJOPkMAOQem!*C=Aap-DtE>7nZCXkY`=<21o#10 zs`;ElR<|*hpWlNs{miA)CygM$p)-(;Ocps;+?vUC))qeq>k5q-IHz2(p&mjIKIyE= zWyN+!j#cgs>$F*$sPH8I;RT5?B+pXoSdN<2rwCpIPEjno{6 z$oi%EWOD*0KTlR4=0&AVJ&7$&7Vntz-dKjMy)LJn*<|)kfwuam~rVCgg1z8!bq%z0cADfyyT4Z4z6YWZbU^lJS%37N?I**5;t8vh1U$=?A`Y z{8@@LuN|qHrcQW#4_=WoSIgvV=MF+nyLyg!6VQs~f;r`BAnQ^txZ;HAw}44W7i3|s z^m__ZO1dD6(b$=8LJ!bAs|g7>hfS?*(KE5prD7M34C-vAWgKk? z)!;eNY6HFNXqH)YN_iNkT}rtUO*qRqhb+!M=?yQ3uQ!o3`I<<^_{2}F9tpmiKCmi1}C819fErjI8OqV;H-GoXblXEtQZJh|SL|=uyl`Fb|PRQLHIxTGz z{dzazC+;7F+bHasaj;}$KuSKVJIcWv{rL45%pb80q`fy2pOnRUd@-2+3tOv_Pl5?h z$l@%%HJJY^?j=ZVS1({Gi}L_uG=BgV`)j#^83dH`I1eyhNbm~^#&e`>Wn~^`0m{+J zoeD~MJPL3<<{AVN1BP*(okL^Y%8uicQqKa1T>$v>kgw>aj>L=M(5vKYz8H?Yj)^}D zFgP~tUA+mHrw|RjPQC`@a&kL}9|pL_(;rxc>w&~@zOx9mco-j7PZ&;qWPuSdUinbv z;6Og9`04_daxe$bFhn@|$nu_OozFCfEC9=|m-=Xc>uqGT|I2SoBIKS2&&D8bz39A% zjhb+nmd=gB41oS^bRVo=*V!!7+zTeqA@KPqrv3%qgY+`N!M2+iYN_}_@Z>Uk$yo3f zI!2D2W$~Ey)yS8YZ@)g_D~m&tVS5seK|+DS3H5z}WO8w0-7$o4f5OEfPm-sUCK7(p z`?anpTSMUW(#scqv=m#aPNCxI5vYM!Tw*K}O)Wv`DOjplET+p6>R&f2 z7p0tng{~@Gp@}vx-IJiHB}qMnOO=b|1i3`#@L1;?F?B3U_rEWQuBOmnbTC8LrRv3! zf+ANbR&DHG8a1b2VcRTRO3ee=!huAET9$JPm?>o_0!z3bB4ZcRs5u1-*ZGG25Cctd z?0oAqRccA?DPX3Qai01u-IEy0u~Bmh7A)m(Lp=043rk8WwWRhGFjLCV>&1Ik+J&6h zY8o}CU`4%{ZV?s2UcDr-r*NrqG3603z`&?E#Zps+Jw_3GguX?CW9GI zEXzicjca|mX*~15!qh{Y5#bsZ?rqhIY+x|5!=b%;hM;p<>X=QEp`I*g=vj`UI+wK| zhkD6^6nZ^yi!|jd#MZHFatS%!5?*W2P%akpC(MeF@Qz%99vd{~Bw=jzPPlDy2|3k0qsD#;r|Ylp3p^`UQ%J8}_DYX+)}r1P>9QASrJtZxbOROJT%BhTpVzNm<%yK@it7XAjOQIP@TCjnfe4A@_&D)dE z9$3zVCo@(|<zPs!|1`G?po{^ZI9F2DD7KuZOjzG;H!G( zAcwKH`1F=C9wXA^NU;3!^hMTvL9AG1o^-h^y@gy9n_gN$V!;RX{sRYDZv687i^o5C zvu8Ww&m~n#QevlOQ$E%eGt_+Eq8^%;%f4fpWULLQaATTX`6`r8_fps<>%dL_wD2PVIxQ~NIv+wM zro6R>xIo=hOP$MN&&Sm?EG*D3r!$+iMG35tU^p%PPi9f|U*6Qvptynqs@YRAtzyNc zqdMVzW?d`8{9->@r7?uXFd)w!42ADzDO4sdXL5O^7~UsIC4AYz6_()Y0e%V>mmpAO z#V$#!b#gyD1q%(EDx-G5+aj)sl}H zUv;SJ_WJZea{F?*kXAGTQIq^!2A`vu9MLwXtu+HNYje;LA?U$H!unETJDQxeX>3=7 zpF%a3@8*@$&g^oa;W=zt+R*h1zeuo`Jy&Mq^O!f^rN)*fYGK>cRc4>0n-csPY2O}L z%A~tKw&~l|^i$TYtP_W^g|_m*wzG^TpdW@70)0K;1}v=gQ??%cAha0N8YQ|&D=tJ6 z&<|s~-j}Z{f{`$8bzj>=_Bm`RRQF{Rni9dlciBGKyJ=|~*dGuSy1t60GD$byb<%yi z=vmoyU{bTA>-!nsFE&ebHk0KB;e?Mn;CL0u<3qw>-h#W<$3s#SZWvnz8?bk{MBshj zkYy8Y`*_)}JA@N6H>*@}IR}oejRz&I%88kq2Y0=oSVyCh&L-q-9@_$^5U>q~B^|EM z+blMoaYLx2;kcx;33;0bN57%*z@)*6nVSbEbW)DCierU+=5#od?W@_Ba2mrASj@N{ z#mJtc^|5?s1d0bY_%c}ft= zbO$b822f{i4xFJ>cUuaC6-s>$+j`prgu98C?P;Yd3qJ==YlyK%VI{b{+qP<`g06GW z(lr#2?J7nHQe+#*uCv+9%l!^a>Hc2uaze+8?W$`Lj!s9j3|OqneN2X2WC;z;lxCXH z!NvDK;25O#`my`tepxt^(+wJ8Wt^j0DiJQi|FpL8&Xnf$Ic!=Rjr{{E)1$cYFBfT}o>*;4<&UGB5EFeu786>T(B8dMdU_%yWM^vabf#(SRW?zTf-Q!lrmUsiHwR9WO&li+ zws2EbBkLS8RW@0cf-PNC)EM(Royq=?Er=p@j^e?+SDb&nLZSbj`X=jApvN1C+>;oa zZc@gJv=!N6p+mQFsMU+qVz;RkPL!oUk5R_M@yOybO&!jro0#(=bw#*X=)c7VdC9^Q z>{$B>C#GK5waFWCx^k9cO&4yVHs7T4V5fASS))t=CkZIP*IrwYQBQ&*kMRH)cgeqwb9E^BY;5a7D}b;1GtyJ(cBxcm%WcX0(< zvr5-z-Jx7;G0nQ7E}e}{{J0B_t+iR8n+GR++yRGW0knu_HFy@B_;D8;ZGvVaQ-`zN zZBGA`?xKhcmpYp!@%%hrR8j8NS>W{h!|`o4SNJ5IU%7wJX(zVfMrCI6ZB$yi5{oVd zT^sf}x*6DluG~A4rqEfp`DJQgd+h9Du2rH&KTNh4PHqi1F~QcOAB0B#l(6?J`_=$W zK)0}AY&gXQy+8l;_aA?K{o~I+|M_oU;h+Efk%>6!tK-2TqbV&NI3D1Dn8p7#qusY=!eo#U`*H#75tl$W}}X zDmH=rFt**cg0>{E&tZFWN`l)%>ULJ>qO@b#aM#&P=B3t&7~m0^xpCr{$JT$l&`r~o z5j@~%Ry)7UViP~^g5!NFfGgU{JhmH7P~qDHJ3|+aHyAa3-}B)5jJtFb@}{%djB;^A z%y4N`t5@suW3-hsJR8x_%ah<1Hg!Pdl?vw&{EU|yNKwC+<(&2bO}~JT_qvxk2T)J` z{0{L@#XtHn^Ag+)L zJrL5D{OHIh=HM_uwXftYctRHD01iIBjT45xoLzWW=A^_SEMcqzI-teq3m4=_pLZfI zxDYVZ!lD+;Bb2`G0)+V!x=3hPwxd~ugU>q=c_QEkE!kGgxL8#Byc6-trTcKVQ_-L6 zDjHVv3@xEFD+-%M&O-46ozE(vn0+~Y*)W6Ywmd>h!S;NPNv{){6vPS&uc%?0en^2l zsIip1o&z1wDxs3TB@5?pcCE3?bizpzaxXcE3=hO&zSd|Mnn`UrP9dacCoeOA6T>6i zR@4~;I^RI!DSXRWOW%?M20=hI{)FWZKJn{Y`DuLbINLwrcek*EYaNaa^$$nZSht>V ztSdgfp$(GWo)6Hc6fE{@8MttGWmpOcdb(lTR`NMspFbem?6G70_FmfT7|~{OpS!8H zzFl9ib*N~KC>c$x4^z;zx};RaRkVhD3fiC=m#PFWXEc*X5gn*}F0`UU&`v4VG@I~< zO=6z{rzU<%k+O#!O!yE zR%-y9VGl<<1{FA6F#;4Ja8&*|>ZQOWyLgN%Ks?cJW`IA3POVufv;gVKS!^YqfIo+h zcXje$#|?L|jkIClgE8G8e@EfP*ayUWy@adM*1!!d|0Fy$b?z>pSt4e0=`dE5ZH%9A zx+19JEeCg)hR5Ix?Z=DM4R{P=z%MLC^_YeyecXq~Kn4M?I0dKUS>|M?6egklx`!_Y zO7P2P29<-LuL!9zSot?&0H%2j+9rbWCHTJ zTCc5mu{Y3v+(#Eq3xck+8s@1deci{$P$I3-rSlo)vzs$7rU~~qFAHmyD^5?`?LuRH zw4Skjfz$2cRJo34DqYQ7*ZDqc7-;Hf{DY~KuAZTAExXJ-j~bT3a0VhzC$`$jPsGKv zdc|@YpY-t}brlb7Hg1kE20qtqCoc9ZizWF7Tg@5GM_kawCzkk&N?=_-OY0zD`ua}# zN&#T590PNx)OY16PSTfNBwYa_}hyqZ7kYol%q&tkciG80BG(gxQM$@uWk0 zZpM(J9qkcHxtv6}c`;zQu2?n63gv3BLzsLu>Re7EOnwY-LWUpR+K;&i2f3U^7#$tp zz%8xmSqgb`)~GY716n)7)YT2k@D(pvL~lLJLmE!FcaZ1tI-#jE+*~aH2!BGckj3K?b|lY_>f_t5bM8JxzKydUb`)gj*?htv3y zYr$X;w&*A3a2j9oTc`(kmwsXnC-H6j_5(xEqMw+d`A?m!Dqe{6QH;eG*nHn zy|%VtQkRwQBjPb&2v#v(Z~4O9)#YUmo)wQZ;9XP=T{)9onjCIMsaxQMdaJ{kOw#D) zKVn;rdU~qgB-f1m16=x>j~~y0OOvvl#N*OHsPXsQAakvZt5+i+NOCk zpMRh`Q4-&@t;#JcM|d;^f0HoPx-f}hvwTS5$p)1w!zDABAGn6awGS-%@#95}&WUfu z3Tvrwaj1XrG3gBD#$^hYTX4ka2eGwc)cBLz#7MiiL_xZH0dZzOFs>c6H|V?Y;i@Uk82zJ!R?OiqQ2gVZCm^ z1A$*0Dbg{RmS5+y^mi6K9w7;M;ox9rddmDdo=H9w8u$2Euf;CSV4{4|e&PusT8@J* z%|IvRZkBed-9G5jR603#^XNEbX2lY_Gy@%{wEiB?R`2411L;IVz(6PEZk~2Llhk$z zTc={6vqQ>O~Jw8j<*qT4O6gt z-gTQISM<+E5ZJ4+aTYd**Rvr_+L=vepTrhDw3|qLRodZR!Vx|+ij4yT+QM(BZ|OF%I_-)r-1GKZ+G)CmtxmgOqp5}vigh1zP<<2A zuGqred!HDy)IKCSz(bd-v_*4*1spCdtjF8KbQ999boUBhxl zvXM!a-5kke6JkqvA8TNc&LK;O@b2gD3&!eh33oli)-=F^Tr?7+S4gqIU^DsJ2aXIMX5jzU4UiA9Y-MRGanlEi>`j7O_oH5Dwb_j} zr=3DU?P@1wZxS9iReDz_51yRCgYe)ILO*7fy(}+%MnbQN9~8k{j>D5u&+-C~j<_xV zad=Yd1zvQ-ZJX9ncyj6$UfejU`laLOgv2YjxaU^)*vHXHsaJS$!?GT*=iup`nxo%& zoU@IsUrPC#R%v0>cAW-4_RsFIKX0QWR zu2FQVxJMMC;+VOQ0t>N(5J9rNAMgf(jbh{jqbuQTEbO#xe;#7 zq&<&`Kf9872?IAY8*Kre8IJ6Si4APnaHg>-(0#ChKhGp+}Ly4kb zF!RK_uOg6+j%BbMRY~B45$`#9`?*XtqAYht7a)trPESX6)U5TX6bKvnH>+v zj}};Twm~fAIe6OWep314KvuWoNo;rA$>YkjzNq8_;7#km^?Oj@FWBm1fe*7Q?kjI&>YaUjP!;@0ar4PIqogQ()XgbUc zk-Huu*i}zTy}(<;$NwJn>RSSdV=W z7{+{_)|1am0j$TK1{RL_kE%Y-LSaoEllc4jT^vc-I+M2qeiRz2Jyt)kV?7`f(T{?I ztbkh{BRC0u3L9f~quHUml)70I*e)4+L!n0KWR{UhOI$&RX@`>TihL5=;On`n@9Tvp&h=(FlxrjhlZwqjvAg)`}OcRUG8`m`PEflU$mJLTbP8rBUvHSi!1 zO^N*)hDe#%=k!`Yrgr&&n-&W~wj?yHK1I=eNh<%oHEQ=Y75{MQ*R^ao>`^Gis zL96EruSJHvS-8v{#wMh_v90$#U}^PHI4VqG({w@FVILo|++MliRczh3rjuFfzlw%Q zQQSrPzDNNB2IxARp}HB^cB|uCW}m_~s4lt4u!I~IWw7WX1p)w@#C{apHMsSmcMCp` z?QB41KZXs>FDznVDZbd;D|MCF4`IW79ItQ`=89ERY2GQbAH{YK7Y^dW_C;8f8L%J2 zhV@6DUqs}V5u3z*4BO-T5*$bdWr}D@68kZ1SPu#}G7Q?nOJ<+K#?2g_AR3(^ekp8& z{!wSM3|d;^D*WyHnJQ%20qSsuK?_lZ!`GMk*l>Yxw8;&C<3;Dk{CSUvPX zSWBAk_PdXu>Y1ld>6Kop)mtgP&`(_K9il(Kkkt1uOusWP&AXkM`8Zfr5dHAm@_DOVuujfi7mRo-O z42O)m<}!_rN0_>==j2torQ3L!hSq=D%*FLfTvJlUu$zP>eAz*@F39C^bsE;4w-pU6 z38fSt;g0&+I-17SXW5}wpDCToVqnw7kw%2P2C4KIpB&Qlq%Gjhj7!(d($T(d-)G$Y zbHZJ!;&RlA-Xy-2He?gnr?E-1u`O+tP0pJRXQ*uAChtbZ1FU(A31~ z1~Hszu5UL!CsW9hn*$cLU&4vMLCTw`#O{1$W^vKW0h4R#VjTk)oj2-S&En!(3!J~t z!m6TytIyROuIS-_RXg!k(^UDJ8dR2JpDUfq(wnK0sNmS=Z@6_bTX#Xv3xq!@wzoD# zh}|c=Jx+a1E%z)etXHF(MBMDo_gAOtvowneYOwPjZzVQ`RBF}bXbu#6^siqOlVAEA|$Zb?Nu zydJiWq3Y8uspw_!iQ#a+1SMaPOcma3Rs}Z{)5wHx=hBL9A0tWAt|_9$lp)2YkiDZ*2O_;( z?n3RCQ&zZVfpN1FV9)4VR2EURb3F=@%wx)n3Uk-p>N8VzbK-ZNh z7p0i3SzvVJ09c4!(Vj9?6qB^;Hx2RCZ8cVBNgXrIT|KLDw5JYidX0tkUo3Qs}C3?{5pTBbXwXv{q~CzU#Ihkx7}Mm&~Cjr ze)u?D{vDs|Y#bJB%8gTwvh0wrKfto>Rx2ix6d4zy$6ksr8o|1ma~X>dZu%fxj!A$K~QZOqpbSLns&qSF}$ zeL8m0p0gMvg~3run?F$eU&bG!79M=0ob@aEwTylhp?@dTA*7PSw~PVoWrl_4}+tf2{;@x z#^OW=H^M&*kH%WSd%OhgR$H^pz+rf_*FxfV%Geey@uUnKgcmKgfX5ruBsz)zFgluS zf$sX=I*hWr6ZsFLqs_LX9r_vpe+nH3Zmv3{)WwPwZOS2^++|LpQ_{BJ(=-h5MZ1|q zCw;oCRl2qpY*g~t7Fuu7>*#neQSh&AIV@&gUgeb2*Yltgn#`17L+$ZlAwCAWtcLoM zk2{2+W2~%&$$aH1YMr=-C+2Vx9So=te~>3gdBI!X>#nJf`K4vQX?UC(pmYbeQeL#H z*3fHxKUlc%*u>l?@QK!vfiKQ}+AL1fPwE>=dDh|`>bKR9%I2EJm#Sa&aVMWt1XK8M zj5GwLyHgxtT*JQRgO>h!L0a2**7vbyTkH_cK{F;jL`S)E)Tp1&L5r%<6`qItJ5eGz z?j#A9j&zUX+js7sY?GroT&9GF*io?hvCd^#2Y6%PW;g@HzZMqHlWlZ?BMeWncY0x# ziP<9WW@doO_;?x@gRJ7yS7{EdgLS!@#Kk*1gI)`7&}bFWx%ym91G{3U_j*T!Mq!Ge zfl1k#2KK;pHUNA5q>AxIwKiMRz}O8D414(QqU7zUZMJkUgIS4~&=)=9U=-?*Zit2_nLQuKJZA;&!)Ggku z+9q6aaTf;W*}}UQtoDS3i>{pE%TLa>+hIEy%eCQGanaVU&Bi&kOR)=8IX|Qq`mVnB zDFoT)N5BR-*vSd|wBB~zRljIQ^Y!He zXyLX3eEad*N+XMAV52ErXHBpBCe@1>uUAX=c!ryVUJg&M81HVch5S5qPm zG%;&)&|+8LEY`Ttgse?LQ|pqB&Oz>UyCJys)@@HgOE&gUwPa)u3p`rcP0x4~8F#lw zeR4WZ!RN(ratv8CwVR}KO$1ulp$FR0r75Lcfzj$ExNCT~^l3^JhbBVO6dxp%3*7Yrb%iD@aL+;$K3ycOtNJO`(5DG~k{xaB6Cc<%cyFEz zQ&f{bZAVM?H~Yld9`@Byo35hKAqy^k4*Ch_Q#o#iDP4w6=6Hmfc$1}_4(c_90 zm+mvMzD{CO%2Z0ZB$LSJlI@7H>u}F=hr;pCNpMD8Mok6ND#mf;k>|;C7#>6rzAcp5 zn2jD_jqy2Iwt-HNV4gR)Yu-U9`U0W#!JA^Vg@(6ZSmDIm=iA&~SNw7=&9o9Xt0iVtnYC_6ITcpe2k8}@^KeBdgR2U9_1K4SCEvUkRztQfDmM$1V~=g&GV~P56$qhFA6uuL zQ`XvrG$L5Q)E-PrIQa|?un_`3xNuf_9>f(~2H&`WNmz0NS8#Q#un*!2E`zvDn46GY z#ZR7&74{)q$z`xgI9ESjWkCPU3i}|g;2~EPRKX=-PvKf!^F|3v4X)y%2c5Ipn+9&l zZ+<`F;;BSEORg@%MY;-f+--zh#b_`GOZu{hD|q%*qvtHH;G9dmre8dkun*$8WB+%we!*7JVIRVU{uX<6cP#kl4f{ebMzm|O58`?tgb29ayb++S z^$aE7VIRWvhES;YSDca&v3hD9%VOmy{W-2k+2Il!jm~B0R(E|L6y^_7?W&<*A$rY% zH6|4CeexEK_~qQ#bS{hoz{>sJlp+LG`&~N|SK5PCv!R3!+o`Sy+YH1^47FJ&pSr3g% z$dry{D#m>ew%rjRMH~CX?x>nB&W6|9?1h#w2-+vGm}6{v(yug6tm>3^z=TZcg=nbq zI#meUS;Zk#pr>$UZ@DTyZk_bLoI-5iDQJph7V=)xDP(DCHgrW#bF=1TLDn?cU8g4k zD)R(FG_G|tOJ|WLGACS(7z2njvGwJ&Gn>pljg6BTvT<_SO)6BjI7w^rHi<1xXim35 zunPm5khf`UoYjymoUUpoV=9}Nw@GZ#(m&k>>j4HfA#XaHq0d#5R?yRQ;Pe}u>C25 zGPWmQ7oJ5cj=2?Sb4!GM7FL|3K$Co*c3K^5?I_sV@{>|NZC4? z#mZgN#$Y4{x|Y+fWD6z!fuWt#79oaqPTR^>=S|nmFoFg)#*D;nLykyeN8|fHid}9g zQw@&K(MY+ZP#hrC;C0=MY&`H5lzZfr)||KoCueRB+&U8ubhx9hn^zg&q}=Ir#wxd0 zY8H5|Fobe1LSgD~mU3n4^e({H;g%sqp@nu*^10*(8JNeH;-ce_xwJuO;*+vC4={yB z$KZJrw&YBJQXXdkZo$#9aU(1`nE0eD&f`n*(W{sWxq=x0#VqQ4hUUAT-wO@ohw^O! z;HwNy!izV3w7r8$`@}(XTkQFPHMkys3v{!us!7MwcEw8p z*inR%$wj;rU%kq}LF$PmR~N0sKZVXPBzXG8?Akl()MD9ckM!%gI2E;{gI#p7VNj~{a~>GN_m%qST5?(%iPSq|Z_ z4qRK``M&w4>LCglra5>sTnayL*&KV$3(<^d`N?oICI^$EF>qA0pvL>)=* z4>X-viK&y&eZorWMbw#0GCeT$yugo6I5oX1lO(W?^y@OQa43^>p;zn)Y7uoNlT24Q zsY9lhV6G}M^#bcizbaEK915{;SEK7N1raAg$?Xag4OPRsubqfge|T%_n74A}1v(X0 zdhwKfNTZ?-WvWkSL|tcn5@IIpcNCJ0I@7OLC>Gv{wt=wEBg!}f3iA}`6p}sn^;i?C z*LVh#CDjpeEWAd>8BqM>j!_qN9M!k)C&G=_o!bni-9$~mjf^v()^z1Q>LN(7bqDY{ zLnVYx#aKB5X}^-Mz=Iwv5(lAj!<<32raKa<*P;+=LBNyR_L_kt=5j$ZE! z&oB-rBq$+R-B`ixh1i&66=#&5qEj!$#)K&_>ya*X0jz8-J}P^`ghH`3H(x2DDV%~x|ZoPng&q)vuHqALzUL!-GzbESN4X(|e_ zK&eo%j4(|ijGS`sy(=Iea;2<#bq3P~76EfBFFftrpLoiZvZ_a$!2}PlbNDWxvgiF) zcsC}?qx0-Z`!ndp+pZ(%hA#YyC7ug5fZ$?w%axZeFr5RSB+*~yc8 z?%8PwSU%v?yG1!kJ5K z7Blo(%dswrEnx-w$wm`4O%y+vmB~#CkOX?O&vG%CsJk6jI zcL_GEU1mJ&Hz#x^Lx(DDr?gD64Ih`OKVW_eW7p;a4@-zi& zUB8FpuHd?;VhMSggcX*{u>@8GqqP>In5RitVR0H*%S{|q_ImfUc3tOb5>{BeCKkgt z`C4LHDX#ORW9cLGDLEDl$Kbf+KA=uZaK~eb32#*|EqDQ|sF*XbLIt8bWKH**FIYRBGs7NHw_6 z(MtHR1B;82r==R)XJDnRkwIsqRXcf{oWZp&4a?)R#`VG8DlWFl){Kr7*So7s%}{Gy z_N%IgqjCwEnt`S1aY`O~qot+t{Sd*xy5Me@gq>1k#nA#$nYJ{OmPV#SG*h{w*JGpU z6toy^vRTT@)l4JHue+AqjD^Yb^<3=Bi;S5}t7kH~u9*c*4i4&K>$9e#>Eq-Hv0@%! zVYj@N)D9+RY!+F#masn6oYCZ@i|1m%)+uOO(hzkQozHn(6Im+`e9u7>bDdQwk{0hh zmC=tvyV02*2E}{X4x4D`N1?@5f^l@a&!vAfk;PNRV%VK3+;MgfmXe_ zqppcrn}xQ}cL8YfK%}cCWNi)_xACxM4K#Tm($R#h%|Z(v6F`#(A`MN<+AK7oUvktn zII++fq|VwDGz!bioY6r$G;1eZU3vw-^)%{$YJt>u9F3#Qi!L|L7`4 z|E11Kj725y)1T5E1bDd^TPJbF(2!i}5KTyptIw3qHK!_eHIvS&A~ng@k0c z^Jf25^?UDNwWPPsWspp1bty6`eOAS5F2ue@2Qvx=Lm7Hq^DPHfy+pAmVX-4Z0gijI zz3YQg9|&hs9LAYC35fk;<)xa{l9J6&S?$?_Ri3E2TEASolmX!dhae6VaKOE0r%s*A zRJr1}e_Xq|nyF*`vRvrTL&#V(#&ZsaQWT@uSf_xg^=GH=O2t@9J%vi?yHfaKRG;Uv zHMUAFLC%?AgK=3E^D{9t_SH%~CL7z0*NkffZv0L#@JWn?j|iCHCY6SGeJ)QF98HqL!pbffeHz*VgwO zEKQJoBO_M&-%z_GK`Onl1K^!+7{*00zeT!=TCtQVS1}OGDaV*{WzH2`;mVs@kK$>J z_zYj5B}WFDLnUUoNLkSIr}rn`$yycI{< zU&D<|y!wb9f}-h_x|w=XaExNTB!yzY#S#!a4<32tVh)xfh(So-2uEtRW#ZAEV8J%qdBq|N+umq9bA7)? zw-l*bqU)#Y9fPXG*z0k#Lv&s#RCAT6rDI#oiE(9m?Clu>O+Y_NwHJ>0+I3WG*7@ zeYVdvQ8j5Dov~-pf{Tt%SIsa|fvo>>QOh+jMsuK}RW(}7Arn9CLJOBz0IhHkorQLL z#U53*EOgcGFM463HRRy1v(SWGyHpdhWHu$O}0v=1fR8AM4VgcZNh z4r-8K-m~w$VM|1~LRkWy!6bcmt4=Bs{YM~T7!xM0oZT2=nkpG_*pFyb@iiP{c zm{T|1)Gm^k8(k(7662lJfpoUkwabLeVATRYaRoOtA@v_NBOwq?rLQj1uhyka2jRS> zP~b-Zg(AiHLyNhoW&-UIMB&;D1RBX*&sL(?Cu9w*aF0M@%k zS43*ZYG7AxJ?{}n;YtCJNdcbFhhkr^;ynT>#P+{^pGBme_XwmA{vCVhU9rX3I@m2P zXmub%C%K-=AK3ySv<|oRdnCz-(3uR~s-zR8?_!Z!xJ!es7z|!q%_O&8 zX?^+ue^lf%UDhPoOIX%vlA)pI}w>;9!C^w~W`a}z!5c_y~*R2xu$rel@YW4KK zTV?8#EtnWrq#kT$l-zD4^H76FG0@lQT~+=WNK#YYbWk+psf6IVRg5+>nABuL-27@B z+mL?~Qz}{6Jc%KJ<`2AkU5}!nRN1B!T?$Atm_BM$;>CAUxb{2oHKxu8n?q02H0Mz5 zU-TE_&H$=d!r5xN%zOk^iX^hb#gh&d^%N{6-E<~zREGKOJe$|CET$boLNL(A^@aIT zKZ9FiMGe-=PU#v-I746ajjTGDZcS+kE7)1DqW0-r5Dfn+u0}|jp+}(D`PDD2oW!Ja z#TUVKGJ|4z!VH0fk}UlEGM88ZbuMES3xW;&6UCG>7zFFNr-6mK|G?EP-PC10Hau#Q zYc;5HHI0j5TF`@DrE@&GU|p^zanY6JO0Gp%H82R)=V}@lBe-1QaLUuH&2okcCS^+p zGc?I`>V4#Tn*z^_u<@7?Sn&9j>*qmSeZobHjNwB{g123}G!yE*lyJc%Vb9Ww(Ru0| zcL@)h>!x-wg3jTJIo?T_0VFs*ksSQ7chBfI^~in@7X!$EEB8-@nlbWCO??m+T{@7k zIDA5`j`|R+7&r!4;^>(?J8J5Kxccs?C`Ji;4j0`&$D_6~c#2lg94Ph$ssp zCY&FO*mJmGy2Bp8YCv%uEGMjU^|_kG#ULZ#D$e!Uxujg_T&9Ufj1PdtEAfn5I>I|R zw2r5Ju5>QL=%^KxlyH_)qMm^TYZG@T)ie1mRXn6W6*b9$DTJrD?6Nk4Y1ad6-@zz9 z^{klarI(yY=-esY%a)uc_*jZxT|5qPdE!iEhE%BJXUrL^HTJE5c6}@GkUIv|n>vx9 z{k;*doqlI<+UPyymNR?`xn{KR5KZrL$d}<>@qNo)b~=<^d~34sy)3@G3AG_V^R`#@ z@V6k{X=Guwso!6fc#o0k$`hxeJ1Ces;A5D0GZc3*`gKe&b-+h3A%YsF$k^=>B4B~3 z1D?eMAKp<7M@${uWJxazK_-Fs5Txtvi*5^j#J9JAdk7H}1QE~SG^p;OcJKfleV3zH26WaLb|`W+oBc5bqxD1JWqJTaU1&fM8M6%@Rb9 zxG&UR9OMa;hPT9=n8L{J^en1fR@VlTJ>2eS`zdc1tkql`{v>90EHu=SjZnk^~eW6q1nNB z7!)54x%S8hKw&upOR#{FD*8)8o&l9kjovVP3HJvfhS(02*vHL)+D}$NzI{Jg#=g{hoyDho1o8XkhQ zr1@?i{uf9c?*T|$e+!EOLU#(Jj`t8G*mGDoVXUpjEI@qj4)+kEEAB(b>XMAq;vPbD z#u7bdQ^J)25UImG0ErVzZ0D8p%B>IJJsB;pj)b`|{@r(uO`~hIm$aK~ekcIzO!`Dv z%4?M<#@zufysB_#K~>MD5D7Wmh!7d1@1D!2UEGit7%R>Cur4D~9{2?gFQ_SWmcgD7~A6PW{BEExJ0{?Ww5o3@B_s zjkiz3k}ezw2K$`i0_Y4VC0*{wk7jb~tBuctPGzW6Y1bWR`LH|L8ft@tw-O|D>!~q| ziu>*hVp;WTx&|sb5>#25MaA(0%YVW#1_M=>r8!iww!;leSpPOqby?D>^nO82SA)h5 z@<*zB^b0^>(fj!=xTKN0PdZn40b7^L(hP%l0D}N5Kf|JPMw_cyWDo>o3-;zW%V<+X z7YzMMn=c(quVGvVMBh-YZf#W21z`w{n1OUOI37z*H)CUMAMOVJa{N`fo zL`NM3Zgjv*vGO&YLbTgEMX!yjV6sM^A_`tv<1TRzSnlL?oh$=ibSdCie-pMf<&?8n z0=151sN!*l{#UQ9)svdW4@pAEiUWNQjoa&q9OpTZnkQ%ua(EHFAc5bPzy15m)^ zY|R0S&JI5Z6SAd)>AimPclcpRCKrw-S5vs6Lj=G4gQ_p*Y6e$YRXp8r6i1jECWnd< zc3L{*V^@>Z%TeQsYnDyITUU{mC7Z5U*UQkkZu|Pu$)>asJ}^}IYP&!| z1O13TF#A!UqIbejOO6UH^bD!i(FWI1Vhy(4LP>rEW2(4?-d4>6z~qFtHi0wS+@Wuq z@*!YS!X+5De5Wr)D&-hAnyXYZQuH10^`?3wREYXSOQ3aKa2r4mD7ok!AP?J!Z$WQ{ z%FdXA6u(<}Nn{<+=Jz~4ZXl|>LZ=YLMC+)`8HsC^h!P^6BTpq>ITlSpG9)_YjVif} zJVWK?Iw#dHzMDnTB>YTOGK?UoO(UT`G`?We6UNg@s&-i09wxW2W*u`zjf&1FCj^1u z&SN|3$?0xbtmZBA3@ByBx%Q`n`Kr7iGKCBIh4XY%44WLPmW+;4FZoWQ>OZ_eDPsL} zmaKOS(SNGR?}oLnl?-hW3$u6KMYXN78`YZbzy_pG0oNu=3(*3lF)e4r1|$?5h|B8? zH!iq@U;t#zJEIrrZFN3B)0u_OA9<%^4xE;@0sb7W?nLhHbMN*G%3=5k8NZ57Mkcz? zNcW=EjnYEb|A4K~_O2#)#^wpRJ0p~1`of%Ig)mXM<@+hDD;wYsU_%@wp;QfQQhU;M zvn>8$?tlvSgykp1HChKB5K52N4(7pa(yc~J;X;qf7+ql~&j-b}E@Vx4FldVXvCgFr z1DYVaYRct211m)|V=+F2tE*x(v{4}!FBfYCldyIwSCOs+{Zq9JmHza=fiVW48t5e_ zohx6AAJ@D+L$Ed8`l#BUQv7g6WP1shm-2Zy@_gk~1?@U+lpcj9B)y47G)D410S#dW zW|F15Dn?Q4=Ry5Y*U zTpmTrF^)LNU$5T7@{}Tjo^Z=(5sy+=P48m|pLU>O$&0Zht~h;g+eAMKO-Q;zXE1W2 zEm`%W(1fHbG{z$jX!H}B*mcNtMN7JP9z&A<7S+V0E3~l7{5$FzW^UZzu9L3N!cqIW z1s_w_(l%e6bb*$ZTIz1`7&I~I3XK7^KQK(Gt$@+;+LS9W#!V;K?4jL2CL~>B?!K0Sa*^p>I=Mr&e-L{3I^`p-Hg}`u6PbQ z+>kkO5G}qvNc$XT%v^OV)};!#bC~Kkt8z06Rb^9!#Sg+_Qo_053M%Nf%nVd`E;JAezGYGGB4i!@UWH$CxOu=287Xi}e&F1N;kG`UvcDprmX zjo)z5;4A#eZDK_C`hMYT4vHSDMuLwn=~APp@DHPVz`-a~%ona)?6s5e52M>{HD{ct z6zFHc@d#K@rf6_Qck#mHF16|VWowbu57y^Jn?DHdiSaYkI(8Rgu}bhW;FQHv4otgf zKkn%aW4~-D7DcA)FUWbDp<1yUR&@g#o1FCaxY(DO-^t~jJh=~3*|wd&DsQuN=QXU>(LS9X?8r%zT1r=^|dgH_tO z@69G^Icb~57VFy$UKZQ#tCn{0{D<>FOR2*CO17=+;UVji*|O>D^Z+r!CF2mqoA<4A z>MEU>yIG~WyTXtS+Y!6G44}gqm5YWemMY(Z@ra|cVb^}R1~I^&Mwd)i>`C1OyW4^% zY*=lLwqVty4uX>tujrDcS@lPU(MgF{bje1qy6VH|q{J&a!3T2+ zoZgdh)@SW)9^2Z}bh!NKN|$}Mva8G=(AiAmYZPWd0EXfg>kOBa4bSi6@t4mZ=k2-9 zW*8x~q|-_;M}9iIG?Slo9hi$5;oQJH?}ByU9Ey@`$zYQRVa?Y?;F|mx&7vL2lwaA+ zITyD~eiRyQbw(cfk#tRt}BpCTR_Q4w{ynn!I4caB|EFM=Nf78e+*E};Swz>fjr24Wa9rLK+^ zN?3ELz>ffnyRHNidpdv#;KzXN_H*c>;{sd-egK%EgB8GMfTd^;IH-N&H8@Srzu(Kz zu@~bv;vjD`Djmr%i0`MmPaOQp!u%O!=rJyIs|Uxi8MpX`8()QmseP;%CITTAuX#?d zYo#;ccwraPZtI#7QWab-KNKRwO(EiR_whBTP%(PQ1q)!pYEa^>Z;zY7BvjO_Lx?L< zmrQ;rW##}P`U3$;3bOsFnzX0UdZ2QQ)C12@NlAAN@h~X7;_X|mZ912shgyS$Trpte ziz2pav&I@hJ%0$jYIqwHbi7@xuA9KXwjZ@j{o?)_RE;=HwH-g!E-Q7c4>q z-~?AO8qCp4`m%?M5l+D68ip*r1cHje7QmN_f!D*u_$6M0!p7C-*u&N5YDzh#uqp#v zIm9j*w#FZh*(Qs1uNT;77N!OkrEos<{BK|Q=g)ur{l{Nl|M>IIe}?~=%Lvy=zj^J; z>QlQ!+cy7z*UT}R;P#8QZ)?9`A02Vi!9JWjZJj>-LKp7@I-L*QK5Ei-dQV7y`-Oal z4zISq@F23h{yQ$a^XGbM;Xn4!{lLwWAklrMzWOf2Y6Zw37hkt)CKu! zetQ9*zn|wP$_H11tbgcYo*BNFT7`3yDotM<4y3J<>QQiOotB&SC)WPwlr%-rroV70 zkfttTF2)$oDfYLZuFO+*sO>M@^}&VQrq+vW$W;3itH@iuT{T8k_G;V%#}O&C`w$CC zD24VXp9F5x5^!Yw%1Y7x!d@v%169GuskMMu{6Y$_1-08>cn~cERr~$jg4c85TSBl5 zR0W`zd@_YX#muRfrQCeMTq{vxR#VQNdRGZrescj6PHWih$J^2^pUbVf`-N3LLksD? zt%|e9U(^nRrRnb^LCc_3wA>yH#J3A8w&qcOKZVOlM&KRMsQIaWU@dt{`*<_pZxH!{ zKxE4Jqe`p9_#CR2q^l+E2h8mqdkv~xKlu388*)m!bK%Ay!l+(91Dj&hd(&=} zYu`5u7pkGFLJpGJWTcCSbbrS7gZ2Z~`Y53)vbtGXUHcE1m34QbeOgVA&WT@rSh~k; ze_<8(2efTcJ&aNj`V5=JWouVD&PuIf{M+hb^#f@X=zrkhQw@;*^Lyp3<{;a5#x7}p z+^Oiq#M8--k$KmBz+4sCmun5%n|N0_+YgwF)?iw$XXJ;{l!=R`W%Y%kZt6vAXc)fK zbG^zfr~E=uH*~r@>&|~E^$=;%1%GH-j---lOSM0RyC1p7lAkKW=61s+xeG(uMDxQ0m)j^+E2`8tiwBQ6-NLZorKVGfBk@%~(A6WK)^~61 zw)*x?;*z{Izg@p|_s2epTX19dp5p3DxTz!ZM&ADkZJm?^Q)?&miuDhC;$Gk{9f$Fo zK8&NLR?;;rZNS+!GwpM84;c&&J7}9u%TWxQRSDO1y2`0b)W`dlHZG~IGQ-edlVkd+ zzKnB2ZD03jT66CA15S)q^7eJJo`&J4{dQ9;*T?Ifq9e5Rxm7`ZtIqx_@ zE$Uf5cj)QHEYoS_G-N}l78Wy3-IcINwD5e`s-YsWSwehK8v=tYjDLwhWSkF zDvaq$k`~ll@=abRr(BVJtXWS#9cX&lYLStk{fn40fq+Y6X#dEWKKf%;M_Onqu z^{9D%a+ouY#-TQKa%`0?jbgZN`YsK|&0~j_F32VsspgeR+iHYi=)eG6&jW1pm62M> z7OcWzSwrr(9v4Kbbn~*gRvN~V=F?3Xrl;%ahxdf%$o{lKc98?;NQMcL0u^VBJ*-DA4L6cpvc5*20C zx;7VlzkKe~)5lq+BXMw5YAbmmAJucaqBLFiJDOGm5e_5tDx$zv=FP03#i-_{nmuWa z+^m|R8w^!%A1#unfQVx@XT(IkFU)9a+Ob&(C0eR(md#>PZza0J7OPXG%QpIUnX}h7 zdqXfLEtP4-ZddLntL{}&QW=IGC51tiSYww`#YwdpTj5koT9{)mXxiXqgw7C=RYKA7 zQa$&|icNv2uXaWxRIXCBPSxOFu?1l5b5cJy*UgCM;H=Z>IpQwICV7{S=DAr>7CL5u zI3^t?feV5jYo*^rIqg~NymYAb{*U@$lr3?A^ z)UC_g{@CsNMk$qI#UsgEpCjnq{NjVKO-cewQ#-8M8@s^=;zot;@S?hrKw6zPp2{E1 zuKG_{r43VRAFLNe(7yRZ`h`(i*HQqK2{9wK%Q|$Lz9t-s+a%W0sQIaXV66#;fyX8$ zBiw9qYxo{IWe|c{9HQ%((-x~jMQ^W|rU7Z?leY$-?)n3HHL(AIhfh85)_=Y)ycJN* zLAlJUw`;>mgMx0Dc&hki+U59E!`o|~?ur9ASK30&tKPSltJmZXGBQTaw(+B}^p)T^ z)GDPOWbG;ko0olFt!17Un)6>u@6$wO6jW_!t=Z9APiD-2DYWcrs#?&}XxV9=n}s#> zlj+lIY|KtcG3ngSo5%L1WLOkEH6I_SrlGIT&8oRu`J2Ui|GL9Dhk@@$8rC44hU;Uy zhHlWNuvi`MBk5}1aiDcd z9f+2X`nk0l=KeVUrFS#Cil)I3P5q2RGfF;wg;Q}>UCkUDNLMlHY}jk4p*KvQK4C+g zmt81Hw+j9oOz#WpZx2$|xYy_Yvdyh~e;HR3Fg5xUT@J1oZb=IsY<{Y;~4^V~9YqxacwIw&Mp z(o&VIK47nshMsYy!__lo5S`AjXp|X0_t5Fxqa8Je1hGggn zQOflL>vIpC-chz+Z)@fHT*Y61;45jyKZuQ;2L<;VyNa@|GGifLju^5|G)|v~^|N%< zvj2p==(i5k+~m`iQqWGeDtn%`vh=_BEHOL85T9XC+?G6{R}Nw1Xvg3Hm9_d>tV>Js zutVYvEmiutBkjK70aO|ki_4k1SV`+|n2Q{4W$zo@>rq9Q^XsYwHbTv$Pd~R3QD(yZ zy5R?B%+r}KTzlAewfsW)1GAPtAT84oR5N6y%Bx#dho})1cY&h}x*2$1re~=GujloKRt;fqFN7Y~g3O?mH?Tbm?(akUr?RgQaHI*m5I#}; z!mjL3Xse_IX$|?2YKleN=i~8at7ZhFC4}!+w8;x3y6Q-pZ zUV(=NoZ&K|2$K7Q=CP;3`ay%0omPkhLA898&pm=-VHOiFD2iV3c2?J9s3=y?x0Tth zTWTb?<-}A?xrXdTEec;EQFBuMz^CdBuLkS(dNYX{SG&W)tf*;EQq@zbP^_wYQ8g4T zE5&nIabR_2AH0!pQ6_1q(>k5wbdBiJY}-7g%vCgaLuTSZ&t{{0FURrRab zjr0*FE8Ed}r2PSIw2P8<5{#ao>K6`ilcDXH6I3a6{Q#wlvxfWk1Il(Y2M9+*v*>wh+ zHfk)&R=No=aVuun*^1fK>uk1UeS1n)4lN@NO`AbM*R)bh1d02FL))PGfW4+RplVIM ze0wt$^c5>T32V67&WehW8v zr?t)Wmr`dDK;w-4nYaVXhn9-HN)=eE|1id8B%_5Aowf0vHDd2UtE za4e_!@=nU3t+cH=zg{*aLz_k>?V5?AJQv*Pa%C$HkH=)iV z_$yLgiE$fQI88Zx4AMo>_D{{r=JLi2n|FL-bcy$A(xq%yN;#pe-r?~XH|xMyl&(N% zUbafvL#m8+2tmp6WwVlo5ju-=4aXguz0CZ0pxsZo)Dha6vVt8Rn+sLH)Foqy37;;Q zLBT(dGZX3=Qx>XX@l+p^d8T#0dim0A>sR}>xq?|{8vBYANz3sR^Xo+o)FsnxQ%A~0 zVQocOyk6D>oeaiH+rOF1b|BIIZ1{%?{(#fP(O1Iyb#o<5yInXy6t|RA2QF;sVb7eW zx#aW8eEx=6I`TtopPRdvxGm=c)j+h2RL}jIIwXyx@&VsY^0xH5AGk$zkV=|t4Lg_a zI4f0FJ)*jf|7MbScDET!!o~rP>9d-Oe#qSq9GW^ov4ycuQn#osC-q~8qS4U|EuUL- zs#n}Vk)rG$xb>AgE`t-w{6O^syQF^7Dxto?G@5ssHqRZRCKoe~0G8th15qkfufer< za5R}8sD5Bq^#`a`N|LOV?t-k zH0{fyqNaVh-FYGvDM2NW7uJ$SC*|7r?SlF_JsfI29E$qR`BIUJv`0ZCo1Fv6-3RQN zdP$uiYEB%YVjy=MNao;EX(plE!(G8R=BvRX|l1w3w6&Ma_#xSAWB*SbG+X`nU1<<3VOk6X_OJ)zyij=Eb9{ zcMxb;C6*+sIQloQJ8EkSYEabyqU6J)X!68D155r+%J7c^@Ub3JFp1*kd6zOoN^d5H%kjMcwA~3z3}IXAb8}uWv0c)$URDi7%}etGhpfJHySx#QyK1biQXE1)uVn93ZJv8-s~=TE z(XvuL_h{+~{um_1o;nTr5c{$3j%v*XNlQ+bqHfTl>?IC0ALS3+igJNckEWUH=)lRc zQ{0#nQ`6_6ZEn1pNqa?#{&X$*y_|$1sa9HTpq}H!xm^$3a68c@O-oW&HT9y#_E2e3 zi5mNbovc(paMaV-@tfCD*M5KCzuu`Xh+2_)M0KLB{dN+qBT=)`{Jt!=dKGqi9;52*-#KqIiFspNdqZ zJ<7T&Bp-n6KH#XNPEsd`niG$xafxy};;M<-ph_rl2{WC5?fS6h0}fH$q%IIOCuULO z&bj^AFsDxys)Q0(utznu`G8f_j#Mvw7l)b=ho()FQWt&JMgJsOkFsvHj5^fj19nXt zQcY7Qhnf+GrcKwcYTBSmC~-ru8ifj5s`-Fj(}q;n)WxA@#Gz^0?2U#LV+<;bsF;_8 zP3PgjzwYJB=U%x`P<_CzX+x@m#+`m6hoous0f(kuJ6e}4`Wy^rTB}z|Wr*w6R4jD3 z!kK3$O+u<@v2?2z^;1!uQ@(~&0EsS3!+A8c3_eZOoYA7G8?;JClC&y)At%*yM?G~N zx@F6)NIQ_#iz_W%^f_sM5IA9bR1?Y5BTkMfQT@V zpPE&3@>Pj+2$e={sa6kN0zTd`2t6dc;A)P2Qwz1H(4j@V@#+2R0udS9pk=Jy^=Rlq z^gt*XFzZOS1Wc7tL-^PEdQ-1Z!U@SUeh#T_@IO#E8X=n;ev)#xK$SdHIkXnHVN|V? zZME4_eVkDmov`&|JC%0)Jwqw!vbcxLMO`qMO30qlTotN2)wr?}2IwJH@zjW=3>B_~ z+cIokwpV}MILe1?$TPtW*-Y#-OJx@2?`S{Vcpi&xDep7r6P7Dh;S zfq^)bt$?!17MKjx&6w;yu~{j@S$ftI-eWhIuBOLBsR|uERO&ckNmpTBAKQyiofzt3 z(Kn<{xNNMY(jF|ekFX~z)U5Jldm+XSEMAroCavhxc30sk9_JMo+#cH7vv^u^M0HB- z%BP>DEK}+^_VZ9YwH9z3QRzPwBn_9??+O{m#}j6-4=%>In6&Ph9`YeSs8<#Uo?SNJEJ#->^E=F+eLR)P0q)ngBuI(o>3vo(U^F`^&sqKD_^veiSeXi2Ae?xyNkH8QxzqypNd3aR zH$5@lUl#;o#!HQgcz8o@FW*mTq^qCWHFVySS0~eosPPw>b5ukiLc<{8Q@u}n16*k9 z^%C|7TU(LnjfL#u+ee6HJfJTgdIYS(>1cPiZ3>2Z)+=~lu3ukn>ZpWX zz#}-I+WGyfkUfTIT$QnEuPvXbORQt2oe?o_YxKl z9TEnww6N?_W=V%qLR>=&2_LuuUaEz~Q@ez2z#VLqynw*Eh_{WGAX!BKE|yOdZ7w6E14_?%iANWuVBOqpV>)Lq5uQ!%1`1ff5&q-=Xzra$GUC)v|@7N!TD%3U1Gw0{Zy2R0Q>cv_tm%)T3V+OUBTS z*+>?|lEg?P>DMw;0_KM<1)YSk8HlT`v7;H|7nyTNn7V8Gh!V~#;_!mtlAp$#gxFVs zg3zO(8?i{IhuG&Yo;pNK=8fIDq2;h3OtrLT9Y@|JN^IfR_XJ=txDh)g%GR*YUp#e) zNXroGe-TwXr-Z6jq|!C!XiVeMC?RrX{p!a6?Fjqyo|Y1!+Zm~AD?U4QewwfF2nl?4DNhnf$Eq-|r;ByCXz7H$~ij-jok?Fa0lwy3J8 zJ`go04prM;Ustte6`p4z)cFCTqK#t4PHy@16-hk#WK z7j^AIP@xpC_rn@IwF~Iw+eawm?FB3znguj?cfS}~2CL;*H=~DQlWuytV3UETG1^ws zJhtklyLLAp9;CYuy*@Ro73@RaXN?*0`Hd^x_IqS7#^~i?JRC{aP;50W<#2s$mCnyt zmad?ql7;HATgkAOZj+LjYc=aDAu*QQ_aa@wk;-9x>{Zgis8H-@p?vBQ@_v8gh9OX1 z-dEl+WU7?47`f8n3?OgT!iB?J^XaNX{n(+T6S7XH!-x%Ql!yAML(11{d1Av9Qo;-G zf%>LMSyQ%^@`?*IzZOI^q>p)*h3ctYNI&8}L|NK>2Fj-n9iPt|c38tc_4V?E;il?X zK(-Y0eZuV;kMGMJpX_w3AKQiWGS=yI7(#KDjjG6>L&wMUdWFr2`iOIr@C?;-R2XmH zj2i?cpNtc+ud`i9Kct24< zK8u#=iWkyD(Megq?2z*EM(Ylqwr}iT!7ov1-C{ynN;GT~45YlGR5~f^m+iIE3+bWg zq^w_dNEyt?=x>YIXlg$xrjwO?hO>E4^7ar6_4;MIl1@esL?>kZvRz1w3tBA{Kb^JX zT^^wpirUpLo3$gBvO@RrB;4s$ziiekShQH14^|_#5NLTSjaW>nlQm#y+i zl)9RB4nfWGWsjPnw+V+}LYJsE<;|ai2_VGU&qVq3 zgOvLiN*?ORjskz-&blRZm^Z8{UNv+4jWtLpKU$W+<5KFjTGmfJTKX~fIh0J4j~!yZ zVTI$24Em(Y`%K@T{X<)DWX5Uqb@8NYAGOrImL;S|ODE+%hLVT+u}4a**JBFI+cILiOAuX6y}P zX9$^;-Z1tvSXcbMJcRYd)Py&!ZTYb2=>v_u#SlcxNAuhv=nElEUf5Q^82h~HhmPWC zOF`daL=zDtSI_3Lr&n}?awywMzAafj9~|qqd^!Y$9eKlAHoYb;SUuHhXtdBy3&IIX zdos!RX+TOrD^8D~PS8fNR!}V;&2xvK(2?diR>^~buC(|jov!zcQ=k(D^@ZV$lx%zu zGw!I{Ftl8FianU*)H9gB+R{*(^=*1}ByoDq=QrsPyC}D*19fuxIJ9hd1ch17(A*e8 z@908}>lvG1EeVzkxq8Is{8(2(#eA9s^>I2mv}||;g>n9RB1lXyN|gSy#S}QW^h-Iz zl(cE@?dy*A?xgfkXqhmJX}B;63RGxa+HrM!N5JZJtAP5QNiSc*8n<1uI5}ikiq&*i zR;*gm4kd2RjGA=&x>>>=bboAo`8c#}I1~+C4;_X>7s(m;?jlAD+L6S4LkcPlI_>Lr zL0e7*(}$tu!l5U}#tSAtaSZ21&%T}wXh#zF!>Ola6up|)?RvJH3Z@T3%Y{SFV5)P# zNj9;jX9Fsb(5q!L>Z4$r(VpB78oBi`JWVMIPE}72hL#J5p24Ao?LD}UXv=KSW0x~{ z-)u9W4zqr2ubfWEI+>0_$wTwlp(S?7&bKf@f8xRtZ7uy(W41L94IB=D+pM_DMf2P) zrkhgZfKSy{lV>d>;HY%v-K;7-iuxm`>rW|L0Gp=6_Z?2*$K zJL1Vmxz9DeMWZGj-gvE&96_Xh>QK^6xDT<*Up(}QXpbMU=^#ZvsP%2DLH*Pvp^L9q zVH@}~`lx*w{=zaSVtM_-8S|O30`96Gz%EiMwY9Ur*U&48Z`l&-gH{m`+QAaJU z$Rgqk{*&*xW&1wgIQibSC?zGzV&-ulY@0m<-)OvAJhhAHCoGZ?8bcv*FJke~(Ujo~ zeS3%f#RuFS@0zo|q(mv=>v@BSk25!en)^@iYVp)AqMxuxMt~?J?nNvfIz*&&=_Xmq zscrGpN_2?u;f=xO=pNi77P+&F=q0o>?BhE`gu5vN1Y?2-Uu9Z6`>nYm6d-PA2AX^G z^hB#+^{QP%H=q?^pWY$i6?Z~K_k7mEi?&eygkx@2NuYS1?~GF_YgoK$*U(RBW!T4e zh`21v4K8JUV?g(y&9!)MSTR&QD>BCuLOT|^_p zF1<&>+k3$lY#de2xB^MnFcS(8?@I_|FAdBH6V&Kys)rq*uAvcPAKxQljQW7`PH`#J zdRP#46bSHzAu8F3ZI8&6VQLvDvghb?U>&|tM^GDYuh&_(aS&b+9xbEUamCoy#_FL*Mn7YxMV?e? z87Q*nknw$onG>v>D?)eOHJ_g+f-PLfOI;OXFJpn|k}7Q;&#u-2KL#wkzXTXy*@6+1Oeb8%J6;tRxmh%!Ixc?L>^N zQd~LK_>0^*M0CX$f`;t48UH9aUWQs*7IViic<9m4OSsFhk6%1>Na%`j1qo?Fz~@fz zb*}a8Yhl6XQP2xmB-1nO(&vW`{leW=bma-0hLJg^l2pjGEE?2u9J@;T&+(ZN_TfDR z+y*67hLeg=puohAZb0y!>%DKWFu*BGrLbu{aWmQ}v@Cd}^o62?8WpBM!ex|U9MblE zN3C>&xVo)=XgGA|rkvhs*6g;84|#>LXFJVwSa!M60a< z#FfLWTF3JI=JIUTJ<3-0tx{(7#^0kV{gW3&&51)*+LGaD2>L&qxzR*zQ3Vw48;rZt z_5;?s8m-=fRMphSp=QLP>Fsq3Q$_BFzTR{L*q`piZJMl^z``BFY7ENNw0+yIXv?W$ zIwcc(07AG z+Pjt&${};5=}`65UJKoP+`}JD$@bJOpE>lyxsNAe%V9l|dkyL?ji5qqtI?HbG$*f~ z+68n2(vxJ&P{`Z1kScEu3D@0fOaifit*%@MI+POjE?I-8b_v~p`wWG^y@bU>vxFQ& zltr@>&TKH|_vr?ATg10$y&|^fm-F{M9z(5{GrAvG&|5} z23WYlp=`f{rVM9nB%W?JYzg-sI-5)l%2o%vA6Rw#5o%TBNtFsk%S-j#DJy0rSQ&?| z4>btLrpj6cnuf8-zPxeBP#9jiANXW-q6Ss=P=f9|d8wXzWW6KsChhR=%L}1bHK)gc zDn$*zsE0dFP7BsCq`SXPIGI%az#*#_wMl7MTUXtURm5VX;iP_uip!V+56pSgPM~4! zP~aLK!jHecFYGM(yfigBA{F&1u-k0zgv_KyvbGp;Ozq9L|`ws>^HK{!pa3+_Lrrr|(SSCQ-Y z?UMcg)C1CMen*d3WW=FqI<^l@P4NY&sgzVvzPE42JwGwTAA^bsqE;WUtLjE|lJv4R zA8^Qec`xiqAuC3f2hV=)&dg6ZQ&*|hvmm|z9m~;r_}@;|=6$=WZc-nJmJx@h=lAP= z#i}Glg?oe=y5WQaVWnn03Ql6ZIR4|Hld!$fzHismPwFF4b7EH&xmW9E1J|dH0>R{J zC}Z=!Sx2%d>w~A4FKvz8EF3DKzm#iMi3JzQ2O;G~UcYbEQA9Q9>S0my;t`fz60ea( zcG-FA<2-g1O5Hjb?xlxww4*Vp`G7;&j#U%Z%c5q+qij0h4`st>uMSHsY!8D?&(iXU z%4KVy{eVN+j#X9G$)aY)qbyCn;I3{8dv)SwZ>gKaa^^{l)!y%fZ9d=-wna7Q>OxWT z;?WgyhP%x}FolI1?E8ik&h^~sl!!UKJo$w3T5hW6ABELe)XX$LaMS`s0Jz7P^N8?` zQ$Ge_m*D9&S}bXm?`mwr>Jjz_uvIM(Sk%l^KX3?(F)O&OGit$QQ7<<+VOI&8C#bQb z#XSfsuoQi4^V}n>8@5TS6IRVk^8=5t*ookB9eoI*E2YvEV4aGqrRz#$(xnhiWEnqq z3G0WgYJniEnwjbcW?>Cm6x{fvlEY>F^#`leMtXf2EzAJauBj>LQR*uG`UA6euu$Vw zF}6Dhx3<3SpGZ}*QregmgOEQ!)ks2x-OEb#1COXx+!yoEbi2oRSdyv&O5f0%yx3HA zvZg*~O{y#4)WMGP()_?7Yr3uu>-@Y>Pn}k+13FMbP3UD6Q3_d`=brx4&l<+aRW?D^ zU=Zx(rTT$GR+y+)uJ7}d&{MsKl%{_$FmG7Odob!)6D#7>>Tb-7skVAqlg+lu)}g3* zX@204m1;)cCdjJ}0Zlr+sA;|g)k7p~EhirY4HG{rhnf*jqYCYwH8r#@i>MWA&yvBP>s?xxUKdqr*-h== ziRvX$v*M98+;xXhYPGTURc%ov6s}T3v`{D8y4t?)sH<*J4~Lcyv!aIJ!s}}Ks!^YI zTFPI4Ac)xKO|O`Gbm0@PjpkmBF=dt9E?YG1b3N3S%UaSNC2mV0Ct~Yv-?vu8FfD%L zvPo-$@nLA$a0nVYA$pyq{!&%6ChbYm<|h;thoQ6&SPO2bmGKVm0#sRhTsLuz9BMus zl7`_joP*)5*<2)1ddo(#o+a(`kL(mVuNF~TRE^XLqUOY*YB1AL!&)4de95-qvR{? z+fq`et7jI{Q;C*_*kXd`I22EE_X5Emoo9xu$ke=bheTfgBeoX-sTS~xWB_4}7Ho%l}98b+P@pbA$zI;9G z=XVrO+1hoY7>U@QcK8S?eGx+9l*B~Epd4GE3mJ;H)2(lfwtYHX!*~&Yn=szwWGXDw zzvL4W|5D*=EL}{vBdgKWGt1E4I+>sg364*kc_bUcq5FBF$;_I{kcD!%J9f}*84p2N z^!%+$>lkT?x|*4yfjnU}r3A;e+Xb9Q#zibQC(|196l7(c4(%oD~NsA;@%qY#x1WMUQpl^}gHWJ7ZZXK&xhiuIt z*|vB<0ZOB?j*=Ehs7Op8P|BzW+i$@u+bAPPX;gY0*cnm2ClQq5os(CZo9ie^k(7$W zgfdDHZ2Oxa@u;!HKax(z$()5;f8dS_w{$mGSwoOwgQECNwD>i4hFVwk1dVwp%t{##yDu zLv?&8kFk?DUzF={Y=kTQRh35%HM2omNIda2GixN<smq+vK9mr6xw<%>% zvMNnQ6UxK}Q%s;7OB!=hQ!QD)tWJR_qZcW9E(%j6T907yYuor?FQ9X)ei_E}=GxkBA zNt&AplB7mL#0=8h%z$jcHiRoBZdr-7MHMNMEp90!B`0$7Npmwnk`+m)m{FRW%P3pe zvMqe~2(ZM04@W{H^0=|`I&groMAMf}X;fBG&LWRBQX&!y2$Cb@KSphs5mG8=9c|?S zB%_8hG%+7i_TerX-d$v-kr0tsK#=r}c}mi#oOSed$GG<%%R`oPg`^jmkt9SU77!%I z;^@ABo02pty$@9?8_qDsyybyzBixMhf(v92 zdBp{?U8Pex{Xm^2E0tB^k$?FgAY5~US*7}euaN)?RB!k=HH9`w^^b+7`Y(I__skSm zUWSTj;Qeuv%pqBML`+2vzd0PLuO8t3)_+|f=7DHCoV9(e?VZ(oKox7GH5qx(S|%Ux z#+1p*NIgZFk$RW+ty97uTYM`olRF{mNRSKFUC-YqN%Vye zDlnmss`5hHF4_{OW9#-l=kG6r6Kn}M_1pTP>|j*6;<7Aeq@}Mzz3xo9^2fp>Wm`a{ zb0q|)L@YaNe|zBL`J}6THqHeQ_ONVaVWrd|h`Yy_Hv~6}BZ%%EGF@)EHLPy>~7Cen#5y>%i9R zUzh3r@)IpQ(CNqB6V>Hy7IUOdO>^>oFMkoJx}#^Re?U7$F0L)X{A?QuVuRr<0|4i8 zk1*ot5`MlQ7rdmwIiJpb(|b>HzM|}dvdqD%&BgRs*nvIvg0fq7xcDwXmO$V$*%#gl z42IKk2#a%4xggZCzuof{99vFou4TYqn`19v&`O$L`y{6=d1eXwitTXAiR~Rz8MGwg zw{mLN)SaJC{tALEtJYUleTj@Ggsxv{6#CKP7_POn?%Z#^+JG%K+3RfOtb&lOy`s*R z7i(*p(H6`JU8REdflotkEev$OKCg&E9(StZbXIP__KKtO;J31s8QzG<9(zTd?FVXY zRgsv~9(%#~i3(gP&AE+g@L~!j-5O7;3CgWJi z8cman#OuPU6kGXFw>7zF#pl`6{0nuzWwo+OX0YxT2(HND`RQj7v|OXyY2&I4*IV1# z06yEkDWBS7_X~BdA86&IL}2YNl*z(T|7p3A9BhZu+k?<&u}fUQK5q^pwMldt3yaw4 zml2bi!@%X=F(Y=?@N21<}YA;_XE8xJ$erxP0zYwkTsdXEBlPK$r*-a z4}`C>nJ?7bTGKGXxN}S8^;QikId9vsgw$)?AyShYWUk=wA~x8@yf{#+z_x20anF!# zAjPS;j=hN=CtDv*LfNK?4 zx#Nvqiy5uPfj#yL0xo(8gct$$=lPU0oy>3d9s>J|he29TKX?hPScWaDHWiba<1Qe` zK9G1S5io2XfDQDseJ{`?Z^NuBzEYB?%;dJA7S$lQat16fb_}7q8%z(mV$2xF4RZ;y z_n+$xOJ6d7xXD4pxzF0FBC>rxgq?zd??2~f^Q&SxDXB4x8*FPi2;W}P4Xy->(Hcn^ z5rr%ErNvMp@DuY31Xo%rrzE$9;d(vaFEA95Tg=sQ#&+(pR_&~255?enTYQfffVICs zkY&ZPQc`0WvT#BfZMDxtG5Si@a-7si$%q~Tt8Az|adp2yU}cqZLUL2eRQDn5fSN`; z_K@p<7HJs^4GVAezfi^MrRL9{(~(+2K=rRx0jm)^YuOigR;}y4%%HL7^8<{u$@Yp> zlG{Rnbv;4K)r*b9j3vd@c)uZYM zbc;S9YcF8Xa)DXIyU_-;BhVKKsqKpPmFhAy9$Z4;{XlR*PHvOEf!Y>WSF@zEl$M^_LKQxrL^h9BiB; z--YjQoNFOa;IAP3ccjz37yFL~H-X|=&gJ`gkzCN#%5VD-dr2MfCxUHVm=M}zFR3H`M6j(Zl#|(=_RQ7?!sPg?B~|2I8@_Kc^g=yn`Tk4*2Z^|iulA3T65P&DWIbm8(!6XJT-&J_Up`cqkLvKBJ@IOL8o)lLgvw8|f zF_dM*Lwp_uCq%NiK^O|U%BMSWZIquI{0KpLQe2_T>M0n-P$si<8=!MLdh1}ahK??! zY_Irj$+ousO!epo%Xhg^_7cJ|*eU4ih0U`1d^r5LH+TwVlkzYMdOcRKyiXCGH{#SJ ze*uA)jryP}WSw@tk2BWRr*|qAlUh?^`+-{H4E{-%tg-eoY$d=7R&9OzffFE;nTDv5 z!wn^F)((t}*hXp$Tzdi2IJ8kEsn_^Igf}MX& z8#!$x#<+pKfN@$IVb6300he3hZg9ugW~|0fbQfygbf*g#x*zBr1BDJR zqFXS?UPAEYQZuT2$Gjs>jR}6_cLlR*LYJ{W!ng#LSk&Nzby)`;0f;!iEcg+EFt3*t z69TqB!T`RWZ`YG#og;@gO*(IE!n!nId~(@CXgWVnU$6%s%o8YeZme8dOMut?216Gy zRhblw0A;qF5b(xzX?S}KbEKutjh_1r!h1iEJA$EAF(F?28)d#eO*W5^cy^(h5rSVi zum6oIUavNp`?Ll3K3A(M$*m#K`drxxTthBUgOfI7zG2>a>)PfQ>SVpxlr5)f!3}>y*nOgZ+s*SEsdrl~YnMh9K)dpsJv?dP6;9sXk6ng*#)u*;ncf{=7Gn zj11l!VDdUnD6?}KuOg2~4eV5j1>M3yRQgr*} z?Ip;{#1c6*{ex8r;vA-=ueew-Bh_pbgOKNAFR8=*K(4JSYK^$4l!isEHqT!DA{dS&NinRkufWFPZpiP{Ah)`npwo5eqBgF9EaBdVoR$` zH}b#<3vW&nMA=vx5bvjGs|2hxzDw&6X@$C)8RDUST}VJ|*$(1}O>4F=*pE_NVZvkw zBPo>1kcyrN+6ula*l_PVLf|m*iRP)!x#3&_YCc=b%wM;IUcp7 zVTP!0B_Lk0X^mtEN;vfOO2;u4)2u=c6~-}Frx2o+Scga}ENeKHPe8S4kl1{L)>ww7yw_90Isj>6_Ev)9Br)Y!R&i_q!?BGFF<%?wn{0ZFZdZ}=GSC!aHVckz zkT|{5`c{JDBr)Mgs5mx&;rO`UUy=kQp;JJ}K4$wtWVU%+I43!@z!v_h#)GGs8KBK0 zo^_j5HH_`;$=vY=r>r)I3#Z0bqjN`F$Y7*3&MfwhE;B%zM_@$qrEI2Dj6M8deu&|0 z9N4l7Cx}`g1Cdpz>zPCx%2$O9K`t@}gcwPWu;JjK9`d9iE~5a_0^iSg26!m`UC03> zqI0_owg_AR&}+~D-(@5~PT;$mnO|qS60b@bg7VS4ENQh*3-cbOy&?!ev|Lmd<+6M$ z`tt~^jA2QM<2{JNtfQS->etp05JzJ@;)r>F(%NdoRByqdO;+LrQ7dE|k(H?HnM54x z*QEr+F}Nv@ZQ8g2QT?-QC^32BEJD4^x{!g$O4RjC5RdiiQUYQd#!A9f3nXR}zcI>N zKpewxq*I;dwHABpuPG!ncptF0GLN~XeaM;*mU&MYL1(k)Hsu(YW)*EtD6JU$)H#8b zNI+y2mNgv9XCSuzL{{{r`OYHRWBNNN%_3R^Mbaj*S~D@6jVpC4q`q-n+g=G!L^2-q4>+$^)d07QdAZm$T#fZ4B z98up|eVJ#4#{vln$La}&}^{oWMHn@?!_uJq`;@gQI2KDTtz_Exr z#y*oD>Ram!y~1OGgapsf-byeWi{a(f`nFsgLpt}R{KY)Rmevun0^5rFQp2HqT}U8o zQz^`p`w4A%)`(W<{A}daEas!Ow2qJ!*fKws8V=>_LINQ-rH?qM_jt~niVN!iS$T&F zG~LSM&j((zwwz2#zMj}690$K#?#MBm2hCgY&kM!TNBiUUt-Oj3gVmz2?U#MSwkb=5 zZ^ewy;i<}jE#Ift>mi#*9XHM*_Tb&Cu;IR)zAti|*~*Nqyy}rVPeP{f*y@RN2<`(jbTNbTh6CbTn(pO= zBZjirjR!XI#BTPd%OAJ%_eoCQo9(dW1W#6{t!Ng~-?I()WQQ##fIe}Ci0nv$j{5$P zfOYo5TcMK>G^I$a1JH-GsIwimybkmOotY5*b>uyPlBvi~O&CLW# z><04cUWo`UPFl%GM)fF?@(B}qbOg)iWYDjtxw%e~)kuh#L7JQEAkjOd?4qAm>@W^| zF438L%jiT^5`y}A*6W>V>3hqt&;+uNG^odrleNg@3#@Ohq6;(@K$c}hB=yY<%hu5J zRN7i=2>c4yB<1nKa0k}NqR8s zv3Ck479Kg@IbT;2wfoG zFq*4g7S|D07Egw@?eQ+CWzx6uGBvy}eVW+4FiSl9f=qe1+X_YGg&J|qjM{t6>P&QG zX6SMT=NPj0b~24uj&=~A3!*CsB9e}Gz*Fn2yX4+Zjs`s!Y9IV0q_?7LJ8U@tbaatK zUoJhQe7zd3GCJTjJ4z193zfcjBNhnB?9k-|&^FkVBjj70HGkv#C=MUL-J%4189dEG zRHJE&84qQJ+L|VynH{#A01A#LdMxvNlXc{_qPYp}(1s0Ot+Ky%GKoW7O&HnWGsZE4O=bR}=flc_gT zT?dBj7w3OjY|9CqrL?6S5DMRDcXzeVkt`jjGvmp~NQ@wGwsr@}8m)aqpG&EnW%LC` zzzqAFzG`Ms7n~6j3N+$xk(owDL}mhkvgN(VH#n{DP7|iTo>u3qq%WIqo%{4=+uQ4& z>2+o}DH)j+1Wy@U%BDz?vGMvT@U%iBCCGpQ&NiB#aN4`;IK9jqXI({N0|8SQN~hh_ zrUP|kY#fQ~Svbpy=E&07%Ihdek(rERBTOklawL!ud2W)HWnsK0iC`u9VcT4Ie&Dve z&XSjz=}64b#RN`_%Ow$0f-yKTJRNmJI228rMLg5A<#n2*N?Xk=BeB93mtmHIt%yb; ziurZrw#P%XHjf9Aqq`8?QdB;+StZqZ@1)H}} zDkmK`=s>pQ1t_Jp3mkC*T|>#Kq-119lxYgYGbpxiARedd555CQaNgjU@I3I6ozycW z9;Y+&SA`xw*vt-NX0-vTbiTIY3D92e9V5bkuPv_&OTQ9(>&j{lw$T52->uxD@S;dY zXW8RoVOK#S4%vzmpjBWe5tcR5RL#??V(+fM3Wbr>{?qDVygQG*Gz4Z#8Cm%!lJ>X# zquNW4RlnV@;9qq6W<&%EF{Ro&i|CQ+^0KpiqEc5B3F+^|8&>fA73Umf>u|YF4J;2; zo~3*>h;cVpSw=Fm_n6T!p*AUkmSbTun8GQ8iK!r#@n zexSJl%D(F3ZtZl^f#em-r;3Z2h`pJTRdKs&#i851Z>~SnLhm8oBDoH$+3qM`15-E| zVR`>isyWlWmDitTJ`yM(6X&*7zguK?JEN@T`^AbQFVni~PqR;S`;O=`<;7pQQnVcq z8h+{vLRv^CWB}^oU)HIs3X~k1@h+`C=04SJ2wV6dXF2-LueJsked#L>x5KWOP#hoh z2VGQoC?Yk%Ur?nvI$qh9qIJCK{3EXD?RzN4SW8&nu#3SwWpm}fsWa0dqp{s7{A2fa z)?cDRpYnzvA0!kZWsD0>S(%Z)wY3Kra2Z@P>8-r{d<$tGZ)I`SW7gdssbEc{Gt!dQ znyh*1Sp5BEXRAC=|KlEuD!-{Y(A(Yo1yyi`7s3B@O6EYkc8bEgu=mODKaPXYBU-n& z7)M$g$OEk!^si`@Ru~a8X@;XoZ*EJE7w*PZpZOc+*6n5E{!|KI#0M@X+1^P$ zw0b_UJ5To1WwQg!{;o2f3Hp==a%bdQ4U}K7RzG*;{(?Hu52U72GFwbJhZTqYHK^Bo z=P1SGc?=)hlxDLaOG1I@J%Pnwlc4 znJuQAz}jGc7-~~>!UT~lQo)fs9<#}b?>sV>2q>>rC`vC%LJ8}y>HIkAa z*B{xCGZ|0CRjJMhLxUHd6R@6ePS=dp{XiY-2T~~|5mxg91lD$%L2Crs=Cx_s;=@sk zv|L`&wjvS#iV@r7t?mcvSU-?TDM?Ksu(ksZ;8gN$QQ-`RFJLuVXD#Ue9~j^R>r(Re_Y$ z7IOiE_4Ol19<{*?b{)uP2jGg$nf9>jz+!wL(6TP4xPBm3J3$0CHAY`Rf<@#>2DG;; zjseLgvu}TG@yd|vEX8uwbOwHKzEb~Q}Xxrg$LQb{GLDU1VbFMT`JHXi{vsgaaEyZyldGjQd}L);G#RB5G@ zkkk?eDtGYY7bdPoYow)zj<983xIdQr0fH(ol~R(L!eEu~AeQ?_bTA!NZ4syeEt1lM zu5xO1)B?C4AgIzxDIuvPWvDIW`g4-5sztJ8sUTT+*&?O`+N@=Zb+3IjFg8!Onx$q+ zNg=5v1l6{fA*mO#?1E;Hlp0CtOF*k;HMF$?)hW$|QaVyY2&S(6FEBMyBPo61bu|Fk zma+`<3R9;vXG-Zv4I!Ae@L$`y2#eX0ol9z+wQS4XV+1($|J$;wfnI^?rDjS=A*m$< z)s`91H!(uyMLwv?q~Z+smd~=9aoO@}H#IUCD4m&(p6alA_Rda%s7(B1X9{_<3iGK5 zh?*{KIaSaT#|7L4b)vM+p51dGL=&H0CTl0bQ@SNt1pIEze;!E*ff%A&?$;vd^G+U9 z;f=~`&nr!p80G;}Q_esovshnvPmrB@m2E153>6gL@GT6AvDI!66maErCuLJuT}6Y) z`|0O)XfrvWds=APioR8ze-P95&((>n8BuajWPof*wiS^93xjez^OX_0m_cb)P_Q>m z(tW;ZHs=dyO77bg`(!_(3`^Xu%L(7)b?Spx5x*Qrxb~>p(xysVj1b)X;U)D=ZQHShqaE+&8qMp?b6W~w?Ovrr7((OW&gpXVU)&)r?;Ny}tpBt{T4 z$6F4XH~=lOw7LPur>0aOBx{Z#WYy35^D3!Rlnn6Cjn%N}2Wf9l)oKxv(n zj?9cQ(3TQ`gW{$2l)xwkcu8+$bw)z&x5wH+?d?^bv&<}j^OBf$Sx06D!&7FOGLPvo zQEZc)6V*y1DOY5)E?dyZ(0n`(d6UorQ$k5*2*Z?a?q!|m%`B2~!oH)+KHlC=c^OerOqAq>;U{f@Yuy!-bb z97~fXM7<=fvH9U*Hk4Rmi+@?^;nU3x(S{OFpPtttc=~8=xR|k9rIVZ5Vg~64N@pf& zVwW4D4JDAuQ1qQ;S{Rg~ufR7d>j0fq8X(m|8KfU5)l~&bGDCDZgH%GI^4@O?;>joq zM6o~777-mt%(I_`EQ=|kyioP%BcPcbs+InXPgdu6QQ|mqZboY_hM5G;EjWVk zFOJK|qoSi*xnq;~80W0R;MBzoPF|<3DR9r$Wv$In#RSbZZfbd?GHl9&_G8?0#~da~ zBi)8oU1rIM(u|3hIpHu5wT-9_jL_u-%`srEeoh8jx}y1AA0ziWP9ljGob2ttsFTu> znZdk7T%OA|Q5w7=A#HMs^Nu8CYI4uW%#wT3G6@-(6%5W1cpw5KT4wOX)#fhU!oU&M4Sxol7sR(2_2akWuSc! zk7;@1DPQNO0f!OQ9KdEJlC_8+vmvH>0(*PaLuZ{?q>+-5SwZj|s|)Rgmqn12rxhA0 zX{#iw7S!He=jnCkJP8?@6$DS$&=+uOoske(@LcupV@=7x&R=(oyvJu&wJ$EPbX6CT zm_VQ$tFrsrae<|hIqMj!?PE|k^+kb^6_j3O=9r9%%mxA``H|JOl)i#BQbAUe4O3iy z$$612FJY~sWj(BI(8UBxcH$P$P(92@Q(8{vZFwCgud-#$9OzK6r?weQy6u?oUts_8h6brD&9GU#c)qi zT;8K}4GhC`Y*C8xF!d9UL)%&BN$aF^%)IUGgnv%yE6Gp^`#ox4krMef5kSN2Pj`DA z=m$Cp9hn&f&?(0%2dafeN@Rb`RsQGL*3|N@yh$JEBy?nE5I`k_SkG1*`;l(AW*riF zL-PC!>-ItRr@OuGpQK7kMP@`9=EzoHvT3n_gXR@UkzEru-cw6&Z?E!eyWwuQm_t;rF$?9^FQ6~1k*`q%9K))8Nx7avBjSM zDf^9L3F$a(3HxHoHdA1>m=GnF*y3MSdiZp6L$sm9)0e4TBf2doq(o&eG!R`(*{#qn zM75^2m?6pworxGBnH{>E07}P5&{N>^x^;jK!2v})AgYTQq8}*LRRu~iLv%TV^n)!s zvA5(FN*qkg!=IHbiz%cZC{+(XLYf((%1NZ}-8$3!Iy9t%m<}0QWRs9(F-w#bnh5E< z*LJ9K1}L=#GB#|+nsA)|>3Bzep=44#S)Ka12Rd4daA1ZmCvf)G{=LYZ_DZd>Uo0Xz z+BGXmV|-fXjKjPoi504tVA)1ZE&Ef3qc9$J%)lfwE0O0d zn?df!DS0I*msHmEF;@Npf+#OFm6F+F$~mliie-LOonoSPnteN=hd#N7zkq_u35|#t zr5p2=C8nG~YVs`8?SB>1@DzKLOO}}&4;UX~=Pw|b(n?b$8?==vrksE}a{iG)Fjl*h zp-2qHJby|0Umv=NA21ixseT~U)D*omhI^M{Y%%2o))rnQ&Z>;57%B4U$$kiEWQ)0= zj`ahnrlv@W;T~W$}#Pq1*cjrtQ6N zi}LLS%bA8XDOc^E7z)$y4Ez3VphI4pgJN?IPN;k-Srrl?HTM%tTey)pxO!~$xl4_- z$VbP^BfWqG zSV0qFB}m%2;vZS26ZRZ1*dj5qd&1gX-49f`Mq0BN&)6WLtR*#uA=^GuYmg75@;{{sZsNoz`$)RG#*kZoH|$-!!U zN6~x=E6EStCF2w9$8Jw+vd-FH7JK}Z3&t302{)jphM4Z++i~HxnEN}iU5jdFT{#2x z1F-=Yqa`)QTtI-eS(_Dyl^y&Jf`1Ntz|}})xbj*}Re_Y$7IOiERU(I2&AmbDXhF!?E(?j)E0dKhgEIgnNJUZbx4g507LU?xEF27C$rl~ zTh@c%0za6hk}eQQNo~;=Fj!^iT0eIU)cT8s;7fQ?onW1%gx;#3OARZnHItIsVlE)C zj((sVdEL4k#I2(v>^=6tLyS_U4dA7kssbs!M_Zes%L%6Zrk;JwG7f)?8rE5f@l;*R zAmx?nngXJ!A?5;tX&Ymsk1C#F4?i?D%}gaLQbx7rG*tuD{J<|tC6%P6Fb=?_)a-Ml z0WFf!C*$VeUqv;vwbZ84N+}_!B@EOS!;pgw$LjlWCO@DWsgaZ($66ci^ySb*4^ej+Bv+nLz-R5tV#T-bPe~ z1MKl?Yo)W2ZJB#-yiSzY*>fe< zI(mY`+744r5M}3l5fRmp!hn`-wG0Zl3+hODp{WwhybCdw=wgDXj7ga|N=U>A*|NTL zm}GrH9VxFgRbrS2Oig(i>KDfP*?9DP`uUcFMf!j6cN-JDG4+D;`P8mDF5d3WhfPrS zRg{)gohjeS&qI1a8-)FFJ{}q!Q`saBv>sY7-YzQZ%4Kaoxu|!b*sk)jc2f5C99ZF5 zZgtw9-o30BkBc@hic9OyF?aq-wL2A$%bK)_&S}YG{3^NER`vGVF_1;6zd08sFJz|d znAlcltufhz=gLIZKiQ7ir?olJPSh#i%8SyHF+W%LhGo}gZ{Lb5(&WWFY{yEEbE`jo z0bFTK*0HMbFx)RY9;0-_v6tGLx8gt+{@4Hg@^B;fx J+u#4~{{eLAe{cW* diff --git a/resources/meshes/mendel90_platform.stl b/resources/meshes/mendel90_platform.stl index 706c90539d578ca4e44a0aa71810279f6b7c5e14..e9cccea41ab056421a0524ade5a0ace192ba4001 100644 GIT binary patch literal 170484 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 oS6V*aRJlT28seOsOeHq)$ literal 589730 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 diff --git a/resources/meshes/printrbot_simple_metal_upgrade.stl b/resources/meshes/printrbot_simple_metal_upgrade.stl index 3ff934c4782004d1cb1ef8edddb32e2e5546b965..4df4ee62170efb026df29188a3825435c1e36aca 100644 GIT binary patch literal 98084 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

e`tie^|pSx?Y0h&kITNeo%HkYSb=^@ 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 diff --git a/resources/meshes/prusai3_xl_platform.stl b/resources/meshes/prusai3_xl_platform.stl index c4b8dd1c99f0e896a2420d867d24a82f493bbfff..ad66835c065d04bef0e99e6b76a1dd13e0d785e4 100644 GIT binary patch literal 153884 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 K|F5tA@qYneBS+-` From 6f355d900648f561181ac669811bf47eb24d9974 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 12:01:59 +0200 Subject: [PATCH 695/816] Make 3DMaker Starter visible again For some reason it was made invisible in 4e3e466a11e8c063cf64cc4426c19fa4a36276e3. It just works fine. --- resources/definitions/maker_starter.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/maker_starter.def.json b/resources/definitions/maker_starter.def.json index 74cdc694ee..305a35d0ca 100644 --- a/resources/definitions/maker_starter.def.json +++ b/resources/definitions/maker_starter.def.json @@ -4,6 +4,7 @@ "name": "3DMaker Starter", "inherits": "fdmprinter", "metadata": { + "visible": true, "author": "tvlgiao", "manufacturer": "3DMaker", "category": "Other", From 577fc0f08210c6f68ab4dd17400e2167051f080e Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 10 May 2017 12:52:48 +0200 Subject: [PATCH 696/816] Fix WorkspaceDialog to include resolve for definition_changes CURA-3756 --- plugins/3MFReader/WorkspaceDialog.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 1bae9575f2..9d6c70cf8b 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -1,7 +1,7 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QObject, pyqtProperty, QCoreApplication +from PyQt5.QtCore import QUrl, pyqtSignal, QObject, pyqtProperty, QCoreApplication from UM.FlameProfiler import pyqtSlot from PyQt5.QtQml import QQmlComponent, QQmlContext from UM.PluginRegistry import PluginRegistry @@ -29,11 +29,13 @@ class WorkspaceDialog(QObject): self._default_strategy = "override" self._result = {"machine": self._default_strategy, "quality_changes": self._default_strategy, + "definition_changes": self._default_strategy, "material": self._default_strategy} self._visible = False self.showDialogSignal.connect(self.__show) self._has_quality_changes_conflict = False + self._has_definition_changes_conflict = False self._has_machine_conflict = False self._has_material_conflict = False self._num_visible_settings = 0 @@ -51,6 +53,7 @@ class WorkspaceDialog(QObject): machineConflictChanged = pyqtSignal() qualityChangesConflictChanged = pyqtSignal() + definitionChangesConflictChanged = pyqtSignal() materialConflictChanged = pyqtSignal() numVisibleSettingsChanged = pyqtSignal() activeModeChanged = pyqtSignal() @@ -185,6 +188,10 @@ class WorkspaceDialog(QObject): def qualityChangesConflict(self): return self._has_quality_changes_conflict + @pyqtProperty(bool, notify=definitionChangesConflictChanged) + def definitionChangesConflict(self): + return self._has_definition_changes_conflict + @pyqtProperty(bool, notify=materialConflictChanged) def materialConflict(self): return self._has_material_conflict @@ -214,11 +221,18 @@ class WorkspaceDialog(QObject): self._has_quality_changes_conflict = quality_changes_conflict self.qualityChangesConflictChanged.emit() + def setDefinitionChangesConflict(self, definition_changes_conflict): + if self._has_definition_changes_conflict != definition_changes_conflict: + self._has_definition_changes_conflict = definition_changes_conflict + self.definitionChangesConflictChanged.emit() + def getResult(self): if "machine" in self._result and not self._has_machine_conflict: self._result["machine"] = None if "quality_changes" in self._result and not self._has_quality_changes_conflict: self._result["quality_changes"] = None + if "definition_changes" in self._result and not self._has_definition_changes_conflict: + self._result["definition_changes"] = None if "material" in self._result and not self._has_material_conflict: self._result["material"] = None return self._result @@ -240,6 +254,7 @@ class WorkspaceDialog(QObject): # Reset the result self._result = {"machine": self._default_strategy, "quality_changes": self._default_strategy, + "definition_changes": self._default_strategy, "material": self._default_strategy} self._visible = True self.showDialogSignal.emit() From 77864f4237ea51713a3ca71ab8cc2ae1fee8b23d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 10 May 2017 13:06:58 +0200 Subject: [PATCH 697/816] WIP: Fix definition_changes handling in 3mf reader CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 68 ++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index c0c3493f71..5dccf9e981 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -352,7 +352,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Get quality_changes and user profiles saved in the workspace instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)] user_instance_containers = [] - quality_changes_instance_containers = [] + quality_and_definition_changes_instance_containers = [] for instance_container_file in instance_container_files: container_id = self._stripFileToId(instance_container_file) instance_container = InstanceContainer(container_id) @@ -387,18 +387,18 @@ class ThreeMFWorkspaceReader(WorkspaceReader): instance_container.setMetaDataEntry("machine", self.getNewId(machine_id)) containers_to_add.append(instance_container) user_instance_containers.append(instance_container) - elif container_type == "quality_changes": + elif container_type in ("quality_changes", "definition_changes"): # Check if quality changes already exists. - quality_changes = self._container_registry.findInstanceContainers(id = container_id) - if not quality_changes: + changes_containers = self._container_registry.findInstanceContainers(id = container_id) + if not changes_containers: containers_to_add.append(instance_container) else: - if self._resolve_strategies["quality_changes"] == "override": - quality_changes[0].deserialize(archive.open(instance_container_file).read().decode("utf-8")) - elif self._resolve_strategies["quality_changes"] is None: + if self._resolve_strategies[container_type] == "override": + changes_containers[0].deserialize(archive.open(instance_container_file).read().decode("utf-8")) + elif self._resolve_strategies[container_type] is None: # The ID already exists, but nothing in the values changed, so do nothing. pass - quality_changes_instance_containers.append(instance_container) + quality_and_definition_changes_instance_containers.append(instance_container) else: existing_container = self._container_registry.findInstanceContainers(id = container_id) if not existing_container: @@ -411,10 +411,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Get the stack(s) saved in the workspace. Logger.log("d", "Workspace loading is checking stacks containers...") - global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, - cura_file_names) + global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, cura_file_names) global_stack = None + old_extruder_stacks = Application.getInstance().getGlobalContainerStack().extruders extruder_stacks = [] extruder_stacks_added = [] container_stacks_added = [] @@ -535,29 +535,30 @@ class ThreeMFWorkspaceReader(WorkspaceReader): global_stack.replaceContainer(0, container) continue - if self._resolve_strategies["quality_changes"] == "new": - # Quality changes needs to get a new ID, added to registry and to the right stacks - for container in quality_changes_instance_containers: - old_id = container.getId() - container.setName(self._container_registry.uniqueName(container.getName())) - # We're not really supposed to change the ID in normal cases, but this is an exception. - container._id = self.getNewId(container.getId()) + for container_type in ("quality_changes", "definition_changes"): + if self._resolve_strategies[container_type] == "new": + # Quality changes needs to get a new ID, added to registry and to the right stacks + for container in quality_and_definition_changes_instance_containers: + old_id = container.getId() + container.setName(self._container_registry.uniqueName(container.getName())) + # We're not really supposed to change the ID in normal cases, but this is an exception. + container._id = self.getNewId(container.getId()) - # The container was not added yet, as it didn't have an unique ID. It does now, so add it. - self._container_registry.addContainer(container) + # The container was not added yet, as it didn't have an unique ID. It does now, so add it. + self._container_registry.addContainer(container) - # Replace the quality changes container - old_container = global_stack.findContainer({"type": "quality_changes"}) - if old_container.getId() == old_id: - quality_changes_index = global_stack.getContainerIndex(old_container) - global_stack.replaceContainer(quality_changes_index, container) - continue - - for stack in extruder_stacks: - old_container = stack.findContainer({"type": "quality_changes"}) + # Replace the quality/definition changes container + old_container = global_stack.findContainer({"type": container_type}) if old_container.getId() == old_id: - quality_changes_index = stack.getContainerIndex(old_container) - stack.replaceContainer(quality_changes_index, container) + changes_index = global_stack.getContainerIndex(old_container) + global_stack.replaceContainer(changes_index, container) + continue + + for stack in extruder_stacks: + old_container = stack.findContainer({"type": container_type}) + if old_container.getId() == old_id: + changes_index = stack.getContainerIndex(old_container) + stack.replaceContainer(changes_index, container) if self._resolve_strategies["material"] == "new": for material in material_containers: @@ -587,10 +588,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # if we are reusing an existing global stack, it can already have extruders associated, so we need to remove # them first - if global_stack.extruders: - for extruder_stack in global_stack.extruders: - if extruder_stack not in extruder_stacks_added: # skip new ones - self._container_registry.removeContainer(extruder_stack.getId()) + for extruder_stack in old_extruder_stacks: + if extruder_stack not in extruder_stacks: # skip new ones + self._container_registry.removeContainer(extruder_stack.getId()) for stack in extruder_stacks: stack.setNextStack(global_stack) From e313794b1269a7c2e7ea6ea16c8362c0d0b7041b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 13:16:49 +0200 Subject: [PATCH 698/816] Fixed posponing of certain events CURA-3780 --- cura/Settings/CuraContainerStack.py | 12 ++++++------ cura/Settings/MachineManager.py | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index b76062b7aa..6cffa6030b 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -66,8 +66,8 @@ class CuraContainerStack(ContainerStack): ## Set the quality changes container. # # \param new_quality_changes The new quality changes container. It is expected to have a "type" metadata entry with the value "quality_changes". - def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + def setQualityChanges(self, new_quality_changes: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes, postpone_emit = postpone_emit) ## Set the quality changes container by an ID. # @@ -93,8 +93,8 @@ class CuraContainerStack(ContainerStack): ## Set the quality container. # # \param new_quality The new quality container. It is expected to have a "type" metadata entry with the value "quality". - def setQuality(self, new_quality: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Quality, new_quality) + def setQuality(self, new_quality: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.Quality, new_quality, postpone_emit = postpone_emit) ## Set the quality container by an ID. # @@ -131,8 +131,8 @@ class CuraContainerStack(ContainerStack): ## Set the material container. # # \param new_quality_changes The new material container. It is expected to have a "type" metadata entry with the value "quality_changes". - def setMaterial(self, new_material: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Material, new_material) + def setMaterial(self, new_material: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.Material, new_material, postpone_emit = postpone_emit) ## Set the material container by an ID. # diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ba8ef39e54..f9bdd0805a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -835,8 +835,8 @@ class MachineManager(QObject): name_changed_connect_stacks.append(stack_quality) name_changed_connect_stacks.append(stack_quality_changes) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes) + self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit=True) + self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit=True) # Send emits that are postponed in replaceContainer. # Here the stacks are finished replacing and every value can be resolved based on the current state. @@ -955,13 +955,13 @@ class MachineManager(QObject): container_type = container.getMetaDataEntry("type") if container_type == "quality": stack.quality.nameChanged.disconnect(self._onQualityNameChanged) - stack.setQuality(container) + stack.setQuality(container, postpone_emit = postpone_emit) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) elif container_type == "quality_changes" or container_type is None: # If the container is an empty container, we need to change the quality_changes. # Quality can never be set to empty. stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) - stack.setQualityChanges(container) + stack.setQualityChanges(container, postpone_emit = postpone_emit) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) self._onQualityNameChanged() From bfb76540d01ec754211a7f8afbe9d98cb90de5aa Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 13:22:34 +0200 Subject: [PATCH 699/816] InstanceContainerchanged is now also on a timer. This greatly reduces the signal storm resulting from changing quality / material in multi extrusion machines. CURA-3780 --- cura/Settings/MachineManager.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f9bdd0805a..fcdc5a2b46 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -51,6 +51,11 @@ class MachineManager(QObject): self._error_check_timer.setSingleShot(True) self._error_check_timer.timeout.connect(self._updateStacksHaveErrors) + self._instance_container_timer = QTimer() + self._instance_container_timer.setInterval(250) + self._instance_container_timer.setSingleShot(True) + self._instance_container_timer.timeout.connect(self.__onInstanceContainersChanged) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) @@ -317,23 +322,15 @@ class MachineManager(QObject): # on _active_container_stack. If it changes, then the properties change. self.activeQualityChanged.emit() - def _onInstanceContainersChanged(self, container): - container_type = container.getMetaDataEntry("type") - - if container_type == "quality": - self.activeQualityChanged.emit() - elif container_type == "variant": - self.activeVariantChanged.emit() - elif container_type == "material": - self.activeMaterialChanged.emit() - else: - # We don't know which one it is, send all the signals - self.activeQualityChanged.emit() - self.activeVariantChanged.emit() - self.activeMaterialChanged.emit() - + def __onInstanceContainersChanged(self): + self.activeQualityChanged.emit() + self.activeVariantChanged.emit() + self.activeMaterialChanged.emit() self._error_check_timer.start() + def _onInstanceContainersChanged(self, container): + self._instance_container_timer.start() + def _onPropertyChanged(self, key, property_name): if property_name == "value": # Notify UI items, such as the "changed" star in profile pull down menu. From 9bb6aadc660b4c0cf5cbe919124ef37517f819ed Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 13:59:02 +0200 Subject: [PATCH 700/816] Remove non-existing nozzle offset settings They seem to be auto-generated or some sort. --- resources/definitions/alya3dp.def.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/definitions/alya3dp.def.json b/resources/definitions/alya3dp.def.json index a0e9f03fbb..1ea16773d6 100644 --- a/resources/definitions/alya3dp.def.json +++ b/resources/definitions/alya3dp.def.json @@ -42,12 +42,6 @@ "machine_nozzle_gantry_distance": { "default_value": 55 }, - "machine_nozzle_offset_x_1": { - "default_value": 18 - }, - "machine_nozzle_offset_y_1": { - "default_value": 0 - }, "machine_gcode_flavor": { "default_value": "RepRap" }, From 69eb9812596d44176801a1d1c2f4bd9cf4d5d4c4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 14:02:38 +0200 Subject: [PATCH 701/816] Remove nozzle offsets from printer definition This setting is only defined in fdmextruder, so it can't be used here. --- resources/definitions/innovo_inventor.def.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/definitions/innovo_inventor.def.json b/resources/definitions/innovo_inventor.def.json index 40a2849979..4b169c5e31 100644 --- a/resources/definitions/innovo_inventor.def.json +++ b/resources/definitions/innovo_inventor.def.json @@ -44,12 +44,6 @@ "gantry_height": { "default_value": 82.3 }, - "machine_nozzle_offset_x": { - "default_value": 0 - }, - "machine_nozzle_offset_y": { - "default_value": 15 - }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, From d18e96972e40c41b6fd89fd7e9ca60a5ad67f8ff Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 15:28:19 +0200 Subject: [PATCH 702/816] Rename TPU Normal Print to TPU Draft Print The profile name is 'Draft' so this makes it easier to find. This also makes it consistent with the rest of the profile file names. It's good to do this before we need to make a version upgrade for it. --- ...U_Normal_Print.inst.cfg => um3_aa0.8_TPU_Draft_Print.inst.cfg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/quality/ultimaker3/{um3_aa0.8_TPU_Normal_Print.inst.cfg => um3_aa0.8_TPU_Draft_Print.inst.cfg} (100%) diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg similarity index 100% rename from resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg rename to resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg From d9f0e1fd4bf6a5a5639651f106ae31456334c106 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 10 May 2017 15:37:22 +0200 Subject: [PATCH 703/816] WIP project loading - at least it mostly works again. CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 100 +++++++++++++------- 1 file changed, 65 insertions(+), 35 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 5dccf9e981..4aa1f17ba1 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -305,6 +305,23 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # We do this so that if something goes wrong, it's easier to clean up. containers_to_add = [] + global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, cura_file_names) + + global_stack = None + extruder_stacks = [] + extruder_stacks_added = [] + container_stacks_added = [] + + global_stack_id_original = self._stripFileToId(global_stack_file) + global_stack_id_new = global_stack_id_original + global_stack_need_rename = False + if self._resolve_strategies["machine"] == "new": + # We need a new id if the id already exists + if self._container_registry.findContainerStacks(id = global_stack_id_original): + global_stack_id_new = self.getNewId(global_stack_id_original) + global_stack_need_rename = True + + # TODO: For the moment we use pretty naive existence checking. If the ID is the same, we assume in quite a few # TODO: cases that the container loaded is the same (most notable in materials & definitions). # TODO: It might be possible that we need to add smarter checking in the future. @@ -403,6 +420,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): existing_container = self._container_registry.findInstanceContainers(id = container_id) if not existing_container: containers_to_add.append(instance_container) + if global_stack_need_rename: + if instance_container.getMetaDataEntry("machine"): + instance_container.setMetaDataEntry("machine", global_stack_id_new) # Add all the containers right before we try to add / serialize the stack for container in containers_to_add: @@ -411,17 +431,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Get the stack(s) saved in the workspace. Logger.log("d", "Workspace loading is checking stacks containers...") - global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, cura_file_names) - - global_stack = None - old_extruder_stacks = Application.getInstance().getGlobalContainerStack().extruders - extruder_stacks = [] - extruder_stacks_added = [] - container_stacks_added = [] # load extruder stack files try: - for extruder_stack_file in extruder_stack_files: + for index, extruder_stack_file in enumerate(extruder_stack_files): container_id = self._stripFileToId(extruder_stack_file) container_stacks = self._container_registry.findContainerStacks(id = container_id) @@ -442,12 +455,36 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._container_registry.addContainer(stack) extruder_stacks_added.append(stack) else: - # container not found, create a new one - stack = ExtruderStack(container_id) - stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - self._container_registry.addContainer(stack) - extruder_stacks_added.append(stack) + if self._resolve_strategies["machine"] == "override": + global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) + # deserialize new extruder stack over the current ones + if global_stacks: + old_extruder_stack_id = global_stacks[0].extruders[index].getId() + # HACK delete file + self._container_registry._deleteFiles(global_stacks[0].extruders[index]) + global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + # HACK + global_stacks[0]._extruders = global_stacks[0]._extruders[:2] + # HACK update cache + del self._container_registry._id_container_cache[old_extruder_stack_id] + new_extruder_stack_id = global_stacks[0].extruders[index].getId() + self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] + stack = global_stacks[0].extruders[index] + else: + Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) + elif self._resolve_strategies["machine"] == "new": + # container not found, create a new one + stack = ExtruderStack(container_id) + stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + self._container_registry.addContainer(stack) + extruder_stacks_added.append(stack) + else: + Logger.log("w", "Unknown resolve strategy: %s" % str(self._resolve_strategies["machine"])) + + if global_stack_need_rename: + if stack.getMetaDataEntry("machine"): + stack.setMetaDataEntry("machine", global_stack_id_new) extruder_stacks.append(stack) except: @@ -460,10 +497,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # load global stack file try: - container_id = self._stripFileToId(global_stack_file) - # Check if a stack by this ID already exists; - container_stacks = self._container_registry.findContainerStacks(id = container_id) + container_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) if container_stacks: stack = container_stacks[0] @@ -478,17 +513,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if network_authentication_key: container_stacks[0].addMetaDataEntry("network_authentication_key", network_authentication_key) elif self._resolve_strategies["machine"] == "new": - new_id = self.getNewId(container_id) - stack = GlobalStack(new_id) + stack = GlobalStack(global_stack_id_new) stack.deserialize(archive.open(global_stack_file).read().decode("utf-8")) # Ensure a unique ID and name - stack._id = new_id + stack._id = global_stack_id_new # Extruder stacks are "bound" to a machine. If we add the machine as a new one, the id of the # bound machine also needs to change. if stack.getMetaDataEntry("machine", None): - stack.setMetaDataEntry("machine", self.getNewId(stack.getMetaDataEntry("machine"))) + stack.setMetaDataEntry("machine", global_stack_id_new) # Only machines need a new name, stacks may be non-unique stack.setName(self._container_registry.uniqueName(stack.getName())) @@ -498,7 +532,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Logger.log("w", "Resolve strategy of %s for machine is not supported", self._resolve_strategies["machine"]) else: # no existing container stack, so we create a new one - stack = GlobalStack(container_id) + stack = GlobalStack(global_stack_id_new) # Deserialize stack by converting read data from bytes to string stack.deserialize(archive.open(global_stack_file).read().decode("utf-8")) container_stacks_added.append(stack) @@ -575,30 +609,26 @@ class ThreeMFWorkspaceReader(WorkspaceReader): stack.replaceContainer(material_index, material) continue - for stack in extruder_stacks: - ExtruderManager.getInstance().registerExtruder(stack, global_stack.getId()) + if extruder_stacks: + for stack in extruder_stacks: + ExtruderManager.getInstance().registerExtruder(stack, global_stack.getId()) else: # Machine has no extruders, but it needs to be registered with the extruder manager. ExtruderManager.getInstance().registerExtruder(None, global_stack.getId()) Logger.log("d", "Workspace loading is notifying rest of the code of changes...") - # Notify everything/one that is to notify about changes. - global_stack.containersChanged.emit(global_stack.getTop()) - - # if we are reusing an existing global stack, it can already have extruders associated, so we need to remove - # them first - for extruder_stack in old_extruder_stacks: - if extruder_stack not in extruder_stacks: # skip new ones - self._container_registry.removeContainer(extruder_stack.getId()) - - for stack in extruder_stacks: - stack.setNextStack(global_stack) - stack.containersChanged.emit(stack.getTop()) + if self._resolve_strategies["machine"] == "new": + for stack in extruder_stacks: + stack.setNextStack(global_stack) + stack.containersChanged.emit(stack.getTop()) # Actually change the active machine. Application.getInstance().setGlobalContainerStack(global_stack) + # Notify everything/one that is to notify about changes. + global_stack.containersChanged.emit(global_stack.getTop()) + # Load all the nodes / meshdata of the workspace nodes = self._3mf_mesh_reader.read(file_name) if nodes is None: From 27d6bebf3202180b75ebf7483dd9c9a4a0249c86 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 16:12:01 +0200 Subject: [PATCH 704/816] Adding a new printer now activates it again CURA-3783 --- cura/Settings/MachineManager.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index fcdc5a2b46..9d66bc7030 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -350,9 +350,7 @@ class MachineManager(QObject): def addMachine(self, name: str, definition_id: str) -> None: new_stack = CuraStackBuilder.createMachine(name, definition_id) if new_stack: - # only set the global container stack if there was none - if self._global_container_stack is None: - Application.getInstance().setGlobalContainerStack(new_stack) + Application.getInstance().setGlobalContainerStack(new_stack) else: Logger.log("w", "Failed creating a new machine!") From 79561f44b13f821bc00b00ca6c642cf0b8bd2dd1 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 10 May 2017 16:16:57 +0200 Subject: [PATCH 705/816] Fix project load, new non existing machine. CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 4aa1f17ba1..e751211d04 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -262,6 +262,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return WorkspaceReader.PreReadResult.cancelled self._resolve_strategies = self._dialog.getResult() + # Default values + for k, v in self._resolve_strategies.items(): + if v is None: + self._resolve_strategies[k] = "new" return WorkspaceReader.PreReadResult.accepted @@ -582,7 +586,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._container_registry.addContainer(container) # Replace the quality/definition changes container - old_container = global_stack.findContainer({"type": container_type}) + if container_type == "quality_changes": + old_container = global_stack.qualityChanges + elif container_type == "definition_changes": + old_container = global_stack.definitionChanges + # old_container = global_stack.findContainer({"type": container_type}) if old_container.getId() == old_id: changes_index = global_stack.getContainerIndex(old_container) global_stack.replaceContainer(changes_index, container) From fd340a12707900cc6f391924cfd604c5c57f9ca5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 16:25:23 +0200 Subject: [PATCH 706/816] Empty containers now also trigger extruder model update --- cura/Settings/ExtrudersModel.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index e24d4d559a..d2922ebcc5 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -117,10 +117,12 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self._active_extruder_stack = active_extruder_stack def _onExtruderStackContainersChanged(self, container): - if container.getMetaDataEntry("type") == "material": + # Update when there is an empty container or material change + if container.getMetaDataEntry("type") == "material" or container.getMetaDataEntry("type") is None: # The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name self._updateExtruders() + modelChanged = pyqtSignal() def _updateExtruders(self): @@ -137,7 +139,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): changed = True items = [] - global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: if self._add_global: From 2b1ca5422714715453b16bcea1911f0168e6fc6b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 16:28:34 +0200 Subject: [PATCH 707/816] Reset all first start actions for UM2go CURA-3742 --- resources/definitions/ultimaker2_go.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json index e679f25f40..5873dfbc90 100644 --- a/resources/definitions/ultimaker2_go.def.json +++ b/resources/definitions/ultimaker2_go.def.json @@ -13,7 +13,7 @@ "platform": "ultimaker2go_platform.obj", "platform_texture": "Ultimaker2Gobackplate.png", "platform_offset": [0, 0, 0], - "first_start_actions": [""], + "first_start_actions": [], "supported_actions":["UpgradeFirmware"] }, From 4abcc8b3f15d7a3d4aa3e0ace2a9b4d8c0bcb46c Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Wed, 10 May 2017 16:31:41 +0200 Subject: [PATCH 708/816] JSON fix: magic_spiralize had child setting (CURA-3771) it shouldn't have a child setting because that child is not the underlying setting used by the engine. Parent settings are frontend-only settings which are merely used to let the user edit multiple leaf settings at once. --- resources/definitions/fdmprinter.def.json | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index d9fe2a72e0..46b3b125a4 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4587,18 +4587,15 @@ "type": "bool", "default_value": false, "settable_per_mesh": false, - "settable_per_extruder": false, - "children": - { - "smooth_spiralized_contours": - { - "label": "Smooth Spiralized Contours", - "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", - "type": "bool", - "default_value": true, - "enabled": "magic_spiralize" - } - } + "settable_per_extruder": false + }, + "smooth_spiralized_contours": + { + "label": "Smooth Spiralized Contours", + "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", + "type": "bool", + "default_value": true, + "enabled": "magic_spiralize" } } }, From e187b9645589e78aa3d21f5cd6dc5e122663f2a9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 17:15:47 +0200 Subject: [PATCH 709/816] Add period after sentence Contributes to issue CURA-3742. --- .../UM2UpgradeSelectionMachineAction.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml b/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml index d59686e34e..5e0096c6b0 100644 --- a/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml +++ b/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml @@ -34,7 +34,7 @@ Cura.MachineAction anchors.topMargin: UM.Theme.getSize("default_margin").height width: parent.width wrapMode: Text.WordWrap - text: catalog.i18nc("@label","Please select any upgrades made to this Ultimaker 2"); + text: catalog.i18nc("@label","Please select any upgrades made to this Ultimaker 2."); } CheckBox From 93c5b382ba3482e7f621a32be44fbca267f33f3c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 10 May 2017 17:37:35 +0200 Subject: [PATCH 710/816] Fix selecting settings for Per Model Settings with single extrusion printers --- .../PerObjectSettingVisibilityHandler.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py index b283608cb0..65159888b0 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py @@ -63,17 +63,20 @@ class PerObjectSettingVisibilityHandler(UM.Settings.Models.SettingVisibilityHand stack_nr = -1 stack = None # Check from what stack we should copy the raw property of the setting from. - if definition.limit_to_extruder != "-1" and self._stack.getProperty("machine_extruder_count", "value") > 1: - # A limit to extruder function was set and it's a multi extrusion machine. Check what stack we do need to use. - stack_nr = str(int(round(float(self._stack.getProperty(item, "limit_to_extruder"))))) + if self._stack.getProperty("machine_extruder_count", "value") > 1: + if definition.limit_to_extruder != "-1": + # A limit to extruder function was set and it's a multi extrusion machine. Check what stack we do need to use. + stack_nr = str(int(round(float(self._stack.getProperty(item, "limit_to_extruder"))))) - # Check if the found stack_number is in the extruder list of extruders. - if stack_nr not in ExtruderManager.getInstance().extruderIds and self._stack.getProperty("extruder_nr", "value") is not None: - stack_nr = -1 + # Check if the found stack_number is in the extruder list of extruders. + if stack_nr not in ExtruderManager.getInstance().extruderIds and self._stack.getProperty("extruder_nr", "value") is not None: + stack_nr = -1 - # Use the found stack number to get the right stack to copy the value from. - if stack_nr in ExtruderManager.getInstance().extruderIds: - stack = ContainerRegistry.getInstance().findContainerStacks(id = ExtruderManager.getInstance().extruderIds[stack_nr])[0] + # Use the found stack number to get the right stack to copy the value from. + if stack_nr in ExtruderManager.getInstance().extruderIds: + stack = ContainerRegistry.getInstance().findContainerStacks(id = ExtruderManager.getInstance().extruderIds[stack_nr])[0] + else: + stack = self._stack # Use the raw property to set the value (so the inheritance doesn't break) if stack is not None: From 04611b06af3a79ba0fbe25a3f30effcf003837f3 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 10 May 2017 20:14:03 +0200 Subject: [PATCH 711/816] Fix two spelling errors TRI-1450 --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 2 +- resources/qml/Preferences/GeneralPage.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 459de3248d..9b0eee7096 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -638,7 +638,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): if self._json_printer_state["heads"][0]["extruders"][index]["hotend"]["id"] == "": Logger.log("e", "No cartridge loaded in slot %s, unable to start print", index + 1) self._error_message = Message( - i18n_catalog.i18nc("@info:status", "Unable to start a new print job. No PrinterCore loaded in slot {0}".format(index + 1))) + i18n_catalog.i18nc("@info:status", "Unable to start a new print job. No Printcore loaded in slot {0}".format(index + 1))) self._error_message.show() return if self._json_printer_state["heads"][0]["extruders"][index]["active_material"]["guid"] == "": diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 689f7aafa9..f825cfc08c 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -322,7 +322,7 @@ UM.PreferencesPage 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 an 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 { From 9060bbf3b23239a09c20a48dbedda875321804e0 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 11 May 2017 09:42:56 +0200 Subject: [PATCH 712/816] Update extruderCount when extrudersModel got changed CURA-3755 The Timer delay is not reliable for updating the extruder Tabs. So we now rely on the modelChanged signal of the ExtrudersModel to do the update. --- .../MachineSettingsAction.qml | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 5a84642db5..654030b013 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -16,23 +16,13 @@ Cura.MachineAction property var extrudersModel: Cura.ExtrudersModel{} property int extruderTabsCount: 0 - Component.onCompleted: + Connections { - // Populate extruder tabs after a short delay, because otherwise the tabs that are added when - // the dialog is created are stuck. - extruderTabsCountDelay.start(); - } - - Timer - { - id: extruderTabsCountDelay - repeat: false - interval: 1 - - onTriggered: + target: base.extrudersModel + onModelChanged: { - var extruderCount = parseInt(machineExtruderCountProvider.properties.value); - base.extruderTabsCount = (extruderCount > 1) ? extruderCount : 0; + var extruderCount = base.extrudersModel.rowCount(); + base.extruderTabsCount = extruderCount > 1 ? extruderCount : 0; } } @@ -46,7 +36,6 @@ Cura.MachineAction onAccepted: manager.onFinishAction() onRejected: manager.onFinishAction() onClosing: manager.onFinishAction() - onVisibilityChanged: extruderTabsCountDelay.start() } anchors.fill: parent; @@ -383,7 +372,6 @@ Cura.MachineAction onActivated: { manager.setMachineExtruderCount(index + 1); - base.extruderTabsCount = (index > 0) ? index + 1 : 0; } } From 00aff6d2f2809443c3fbb35395dbdaef5d681c33 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 10:29:18 +0200 Subject: [PATCH 713/816] Make feature labels more accurate for support It's used a bit differently. Contributes to issue CURA-3773. --- resources/qml/JobSpecs.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 8e89dc6dbc..13d855d993 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -180,9 +180,9 @@ Item { "inset_x": catalog.i18nc("@tooltip", "Inner Walls"), "skin": catalog.i18nc("@tooltip", "Skin"), "infill": catalog.i18nc("@tooltip", "Infill"), - "support_infill": catalog.i18nc("@tooltip", "Support"), + "support_infill": catalog.i18nc("@tooltip", "Support Infill"), "support_interface": catalog.i18nc("@tooltip", "Support Interface"), - "support": catalog.i18nc("@tooltip", "Helper Structures"), + "support": catalog.i18nc("@tooltip", "Support"), "travel": catalog.i18nc("@tooltip", "Travel"), "retract": catalog.i18nc("@tooltip", "Retractions"), "none": catalog.i18nc("@tooltip", "Other") From e2b39e7e33ef4136544dfb1f9605326aef46188c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 11 May 2017 11:08:23 +0200 Subject: [PATCH 714/816] Fixed spacing of infill options CURA-3732 --- resources/qml/SidebarSimple.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 8066e2665a..eb58344013 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -53,7 +53,8 @@ Item id: infillCellRight height: childrenRect.height; - width: base.width * .55 + width: base.width * .5 + spacing: UM.Theme.getSize("default_margin").width anchors.left: infillCellLeft.right From e3236bec4deda9d1450e8604c9f4250d2ed7f34b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 11:22:02 +0200 Subject: [PATCH 715/816] Make wording more consistent Contributes to issue CURA-3732. --- resources/qml/SidebarSimple.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index eb58344013..3eaf0797e8 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -192,7 +192,7 @@ Item percentageMax: 0, stepsMin: -1, stepsMax: 0, - text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength"), + text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength."), icon: "hollow" }) infillModel.append({ @@ -203,7 +203,7 @@ Item percentageMax: 30, stepsMin: -1, stepsMax: 0, - text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength"), + text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength."), icon: "sparse" }) infillModel.append({ @@ -214,7 +214,7 @@ Item percentageMax: 70, stepsMin: -1, stepsMax: 0, - text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength"), + text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength."), icon: "dense" }) infillModel.append({ @@ -225,7 +225,7 @@ Item percentageMax: 9999999999, stepsMin: -1, stepsMax: 0, - text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid"), + text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid."), icon: "solid" }) infillModel.append({ @@ -237,7 +237,7 @@ Item stepsMin: 0, stepsMax: 9999999999, infill_layer_height: 1.5, - text: catalog.i18nc("@label", "This will gradually increase the amount of infill towards the top"), + text: catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top."), icon: "gradual" }) } From 8ff3079b3e1477f8b49a147b28bddffc94ee1d0f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 12:00:54 +0200 Subject: [PATCH 716/816] Let CPE always use prime tower Also 0.8mm. --- resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg | 1 + 3 files changed, 3 insertions(+) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index dbee576a94..ec1a384804 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -14,6 +14,7 @@ brim_width = 15 line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 15 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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 9aa8b69381..372b5a41c1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -15,6 +15,7 @@ layer_height = 0.4 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) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index 3f897c91d3..ec2f024141 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -15,6 +15,7 @@ layer_height = 0.3 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) From 0d67d42300c51e43d4bf6f6a7ef0db81975bce56 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 12:53:53 +0200 Subject: [PATCH 717/816] Fix created materials being a linked to themselves --- cura/Settings/ContainerManager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index ff83134ce8..24f7c64e7a 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -738,6 +738,7 @@ class ContainerManager(QObject): return [] material_container = containers[0] + material_base_file = material_container.getMetaDataEntry("base_file", "") material_guid = material_container.getMetaDataEntry("GUID", "") if not material_guid: Logger.log("d", "Unable to find materials linked to material with id %s, because it doesn't have a GUID.", material_id) @@ -746,7 +747,7 @@ class ContainerManager(QObject): containers = self._container_registry.findInstanceContainers(type = "material", GUID = material_guid) linked_material_names = [] for container in containers: - if container.getId() == material_id or container.getMetaDataEntry("base_file") != container.getId(): + if container.getId() in [material_id, material_base_file] or container.getMetaDataEntry("base_file") != container.getId(): continue linked_material_names.append(container.getName()) From 5339055f9a38b3fb2e3195f68077af989f4a372c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 13:10:32 +0200 Subject: [PATCH 718/816] Fix unlinking materials --- cura/Settings/ContainerManager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 24f7c64e7a..13381221a4 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -721,7 +721,6 @@ class ContainerManager(QObject): with open(containers[0].getPath(), encoding="utf-8") as f: duplicated_container.deserialize(f.read()) - duplicated_container.setMetaDataEntry("base_file", new_id) duplicated_container.setMetaDataEntry("GUID", str(uuid.uuid4())) duplicated_container.setMetaDataEntry("brand", catalog.i18nc("@label", "Custom")) duplicated_container.setMetaDataEntry("material", catalog.i18nc("@label", "Custom")) @@ -760,7 +759,6 @@ class ContainerManager(QObject): Logger.log("d", "Unable to make the material with id %s unique, because it doesn't exist.", material_id) return "" - containers[0].setMetaDataEntry("base_file", material_id) containers[0].setMetaDataEntry("GUID", str(uuid.uuid4())) From 6fa83a91105ca8baccbfb3d4d1374f5cafaa9dc7 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 13:22:14 +0200 Subject: [PATCH 719/816] Fix selecting a material when an edit field has the focus --- resources/qml/Preferences/MaterialsPage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index ba822b9522..d4d9a2dec7 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -81,6 +81,7 @@ UM.ManagementPage anchors.fill: parent; onClicked: { + forceActiveFocus(); if(!parent.ListView.isCurrentItem) { parent.ListView.view.currentIndex = index; From 24159aaf6672daa4681a24c35083b3f600ba56c0 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 14:08:15 +0200 Subject: [PATCH 720/816] Fix activating newly created materials --- cura/Settings/ContainerManager.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 13381221a4..476d0c5b58 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -9,6 +9,7 @@ from typing import Dict, Union from PyQt5.QtCore import QObject, QUrl, QVariant from UM.FlameProfiler import pyqtSlot from PyQt5.QtWidgets import QMessageBox +from UM.Util import parseBool from UM.PluginRegistry import PluginRegistry from UM.SaveFile import SaveFile @@ -696,7 +697,7 @@ class ContainerManager(QObject): duplicated_container.deserialize(f.read()) duplicated_container.setDirty(True) self._container_registry.addContainer(duplicated_container) - return new_id + return self._getMaterialContainerIdForActiveMachine(new_id) ## Create a new material by cloning Generic PLA and setting the GUID to something unqiue # \return \type{str} the id of the newly created container. @@ -727,7 +728,27 @@ class ContainerManager(QObject): duplicated_container.setName(catalog.i18nc("@label", "Custom Material")) self._container_registry.addContainer(duplicated_container) - return new_id + return self._getMaterialContainerIdForActiveMachine(new_id) + + def _getMaterialContainerIdForActiveMachine(self, base_file): + global_stack = Application.getInstance().getGlobalContainerStack() + if not global_stack: + return base_file + + has_machine_materials = parseBool(global_stack.getMetaDataEntry("has_machine_materials", default = False)) + has_variant_materials = parseBool(global_stack.getMetaDataEntry("has_variant_materials", default = False)) + has_variants = parseBool(global_stack.getMetaDataEntry("has_variants", default = False)) + if has_machine_materials or has_variant_materials: + if has_variants: + materials = self._container_registry.findInstanceContainers(type = "material", base_file = base_file, definition = global_stack.getBottom().getId(), variant = self._machine_manager.activeVariantId) + else: + materials = self._container_registry.findInstanceContainers(type = "material", base_file = base_file, definition = global_stack.getBottom().getId()) + + if materials: + return materials[0].getId() + return "" # do not activate a new material if a container can not be found + + return base_file @pyqtSlot(str, result = "QStringList") def getLinkedMaterials(self, material_id: str): From f436da867429781943473b04c723e5126434b11d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 11 May 2017 14:00:29 +0200 Subject: [PATCH 721/816] WIP: fix project loading and container renaming CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 103 ++++++++++++++------ 1 file changed, 75 insertions(+), 28 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index e751211d04..65a4858257 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -167,6 +167,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): quality_type = "" num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes num_user_settings = 0 + quality_changes_conflict = False for instance_container_file in instance_container_files: container_id = self._stripFileToId(instance_container_file) instance_container = InstanceContainer(container_id) @@ -202,7 +203,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): file_name, cura_file_names) self._resolve_strategies = {"machine": None, "quality_changes": None, "material": None} machine_conflict = False - quality_changes_conflict = False for container_stack_file in [global_stack_file] + extruder_stack_files: container_id = self._stripFileToId(container_stack_file) serialized = archive.open(container_stack_file).read().decode("utf-8") @@ -262,6 +262,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return WorkspaceReader.PreReadResult.cancelled self._resolve_strategies = self._dialog.getResult() + # + # There can be 3 resolve strategies coming from the dialog: + # - new: create a new container + # - override: override the existing container + # - None: There is no conflict, which means containers with the same IDs may or may not be there already. + # If they are there, there is no conflict between the them. + # In this case, you can either create a new one, or safely override the existing one. + # # Default values for k, v in self._resolve_strategies.items(): if v is None: @@ -325,7 +333,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): global_stack_id_new = self.getNewId(global_stack_id_original) global_stack_need_rename = True - # TODO: For the moment we use pretty naive existence checking. If the ID is the same, we assume in quite a few # TODO: cases that the container loaded is the same (most notable in materials & definitions). # TODO: It might be possible that we need to add smarter checking in the future. @@ -352,21 +359,24 @@ class ThreeMFWorkspaceReader(WorkspaceReader): for material_container_file in material_container_files: container_id = self._stripFileToId(material_container_file) materials = self._container_registry.findInstanceContainers(id = container_id) + if not materials: material_container = xml_material_profile(container_id) material_container.deserialize(archive.open(material_container_file).read().decode("utf-8")) containers_to_add.append(material_container) else: - if not materials[0].isReadOnly(): # Only create new materials if they are not read only. + material_container = materials[0] + if not material_container.isReadOnly(): # Only create new materials if they are not read only. if self._resolve_strategies["material"] == "override": - materials[0].deserialize(archive.open(material_container_file).read().decode("utf-8")) + material_container.deserialize(archive.open(material_container_file).read().decode("utf-8")) elif self._resolve_strategies["material"] == "new": # Note that we *must* deserialize it with a new ID, as multiple containers will be # auto created & added. material_container = xml_material_profile(self.getNewId(container_id)) material_container.deserialize(archive.open(material_container_file).read().decode("utf-8")) containers_to_add.append(material_container) - material_containers.append(material_container) + + material_containers.append(material_container) Job.yieldThread() Logger.log("d", "Workspace loading is checking instance containers...") @@ -394,18 +404,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # The machine is going to get a spiffy new name, so ensure that the id's of user settings match. extruder_id = instance_container.getMetaDataEntry("extruder", None) if extruder_id: - new_id = self.getNewId(extruder_id) + "_current_settings" + new_extruder_id = self.getNewId(extruder_id) + new_id = new_extruder_id + "_current_settings" instance_container._id = new_id instance_container.setName(new_id) - instance_container.setMetaDataEntry("extruder", self.getNewId(extruder_id)) + instance_container.setMetaDataEntry("extruder", new_extruder_id) containers_to_add.append(instance_container) machine_id = instance_container.getMetaDataEntry("machine", None) if machine_id: - new_id = self.getNewId(machine_id) + "_current_settings" + new_machine_id = self.getNewId(machine_id) + new_id = new_machine_id + "_current_settings" instance_container._id = new_id instance_container.setName(new_id) - instance_container.setMetaDataEntry("machine", self.getNewId(machine_id)) + instance_container.setMetaDataEntry("machine", new_machine_id) containers_to_add.append(instance_container) user_instance_containers.append(instance_container) elif container_type in ("quality_changes", "definition_changes"): @@ -558,53 +570,88 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return None + # + # Replacing the old containers if resolve is "new". + # When resolve is "new", some containers will get renamed, so all the other containers that reference to those + # MUST get updated too. + # if self._resolve_strategies["machine"] == "new": # A new machine was made, but it was serialized with the wrong user container. Fix that now. for container in user_instance_containers: + # replacing the container ID for user instance containers for the extruders extruder_id = container.getMetaDataEntry("extruder", None) if extruder_id: for extruder in extruder_stacks: if extruder.getId() == extruder_id: extruder.replaceContainer(0, container) continue + + # replacing the container ID for user instance containers for the machine machine_id = container.getMetaDataEntry("machine", None) if machine_id: if global_stack.getId() == machine_id: global_stack.replaceContainer(0, container) continue - for container_type in ("quality_changes", "definition_changes"): - if self._resolve_strategies[container_type] == "new": + for changes_container_type in ("quality_changes", "definition_changes"): + if self._resolve_strategies[changes_container_type] == "new": # Quality changes needs to get a new ID, added to registry and to the right stacks - for container in quality_and_definition_changes_instance_containers: - old_id = container.getId() - container.setName(self._container_registry.uniqueName(container.getName())) + for each_changes_container in quality_and_definition_changes_instance_containers: + old_id = each_changes_container.getId() + each_changes_container.setName(self._container_registry.uniqueName(each_changes_container.getName())) # We're not really supposed to change the ID in normal cases, but this is an exception. - container._id = self.getNewId(container.getId()) + each_changes_container._id = self.getNewId(each_changes_container.getId()) # The container was not added yet, as it didn't have an unique ID. It does now, so add it. - self._container_registry.addContainer(container) + self._container_registry.addContainer(each_changes_container) - # Replace the quality/definition changes container - if container_type == "quality_changes": + # Find the old (current) changes container in the global stack + if changes_container_type == "quality_changes": old_container = global_stack.qualityChanges - elif container_type == "definition_changes": + elif changes_container_type == "definition_changes": old_container = global_stack.definitionChanges - # old_container = global_stack.findContainer({"type": container_type}) + + # sanity checks + # NOTE: The following cases SHOULD NOT happen!!!! + if not old_container: + Logger.log("e", "We try to get [%s] from the global stack [%s] but we got None instead!", + changes_container_type, global_stack.getId()) + + # Replace the quality/definition changes container if it's in the GlobalStack + # NOTE: we can get an empty container here, but the IDs will not match, + # so this comparison is fine. if old_container.getId() == old_id: - changes_index = global_stack.getContainerIndex(old_container) - global_stack.replaceContainer(changes_index, container) + if changes_container_type == "quality_changes": + global_stack.qualityChanges = each_changes_container + elif changes_container_type == "definition_changes": + global_stack.definitionChanges = each_changes_container continue - for stack in extruder_stacks: - old_container = stack.findContainer({"type": container_type}) - if old_container.getId() == old_id: - changes_index = stack.getContainerIndex(old_container) - stack.replaceContainer(changes_index, container) + # Replace the quality/definition changes container if it's in one of the ExtruderStacks + for each_extruder_stack in extruder_stacks: + changes_container = None + if changes_container_type == "quality_changes": + changes_container = each_extruder_stack.qualityChanges + elif changes_container_type == "definition_changes": + changes_container = each_extruder_stack.definitionChanges + + # sanity checks + # NOTE: The following cases SHOULD NOT happen!!!! + if not changes_container: + Logger.log("e", "We try to get [%s] from the extruder stack [%s] but we got None instead!", + changes_container_type, each_extruder_stack.getId()) + + # NOTE: we can get an empty container here, but the IDs will not match, + # so this comparison is fine. + if changes_container.getId() == old_id: + if changes_container_type == "quality_changes": + each_extruder_stack.qualityChanges = each_changes_container + elif changes_container_type == "definition_changes": + each_extruder_stack.definitionChanges = each_changes_container if self._resolve_strategies["material"] == "new": for material in material_containers: - old_material = global_stack.findContainer({"type": "material"}) + old_material = global_stack.material if old_material.getId() in self._id_mapping: material_index = global_stack.getContainerIndex(old_material) global_stack.replaceContainer(material_index, material) From bb0e7115775d67feeda7401ab4de1057c4248e4c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 11 May 2017 14:18:58 +0200 Subject: [PATCH 722/816] WIP: fix material container renaming in project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 28 ++++++++++++++------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 65a4858257..0d244c4492 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -650,20 +650,30 @@ class ThreeMFWorkspaceReader(WorkspaceReader): each_extruder_stack.definitionChanges = each_changes_container if self._resolve_strategies["material"] == "new": - for material in material_containers: + for each_material in material_containers: old_material = global_stack.material - if old_material.getId() in self._id_mapping: - material_index = global_stack.getContainerIndex(old_material) - global_stack.replaceContainer(material_index, material) + + # check if the old material container has been renamed to this material container ID + # if the container hasn't been renamed, we do nothing. + new_id = self._id_mapping.get(old_material.getId()) + if new_id is None or new_id != each_material.getId(): continue - for stack in extruder_stacks: - old_material = stack.findContainer({"type": "material"}) - if old_material.getId() in self._id_mapping: - material_index = stack.getContainerIndex(old_material) - stack.replaceContainer(material_index, material) + if old_material.getId() in self._id_mapping: + global_stack.material = each_material + + for each_extruder_stack in extruder_stacks: + old_material = each_extruder_stack.material + + # check if the old material container has been renamed to this material container ID + # if the container hasn't been renamed, we do nothing. + new_id = self._id_mapping.get(old_material.getId()) + if new_id is None or new_id != each_material.getId(): continue + if old_material.getId() in self._id_mapping: + each_extruder_stack.material = each_material + if extruder_stacks: for stack in extruder_stacks: ExtruderManager.getInstance().registerExtruder(stack, global_stack.getId()) From e7fc36587d7108dac0be7743258a54f7549fd1d4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 14:27:56 +0200 Subject: [PATCH 723/816] Remove Cubic Subdivision Radius setting Just removes the definition. No version upgrade yet. That is next up. Contributes to issue CURA-3427. --- 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 46b3b125a4..628ca1688e 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1217,19 +1217,6 @@ "enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled", "settable_per_mesh": true }, - "sub_div_rad_mult": - { - "label": "Cubic Subdivision Radius", - "description": "A multiplier on the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to more subdivisions, i.e. more small cubes.", - "unit": "%", - "type": "float", - "default_value": 100, - "minimum_value": "0", - "minimum_value_warning": "100", - "maximum_value_warning": "200", - "enabled": "infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'", - "settable_per_mesh": true - }, "sub_div_rad_add": { "label": "Cubic Subdivision Shell", From 99cb8bc169850d90fb9b4630cddf0e536ca20688 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 14:29:25 +0200 Subject: [PATCH 724/816] Re-enable Version 2.4 to 2.5 upgrade So that we can remove settings again, among which the Cubic Subdivision Radius setting. Contributes to issue CURA-3427. --- plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py b/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py index 701224787c..a7480e802d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py @@ -41,5 +41,4 @@ def getMetaData(): } def register(app): - return {} return { "version_upgrade": upgrade } From b57cb16f6d345c458ba78a53bebb9b67007e3722 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 14:32:45 +0200 Subject: [PATCH 725/816] Rename 24to25 to 25to26 The upgrade now upgrades profiles from the 2.5 format to 2.6, since we delayed the update for the 2.5 release. Contributes to issue CURA-3427. --- .../VersionUpgrade25to26.py} | 12 ++++++------ .../__init__.py | 6 +++--- .../tests/TestVersionUpgrade24to25.py | 0 3 files changed, 9 insertions(+), 9 deletions(-) rename plugins/VersionUpgrade/{VersionUpgrade24to25/VersionUpgrade24to25.py => VersionUpgrade25to26/VersionUpgrade25to26.py} (93%) rename plugins/VersionUpgrade/{VersionUpgrade24to25 => VersionUpgrade25to26}/__init__.py (89%) rename plugins/VersionUpgrade/{VersionUpgrade24to25 => VersionUpgrade25to26}/tests/TestVersionUpgrade24to25.py (100%) diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py similarity index 93% rename from plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py rename to plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 1af2e7405a..bfcf8c9828 100644 --- a/plugins/VersionUpgrade/VersionUpgrade24to25/VersionUpgrade24to25.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -15,13 +15,13 @@ _split_settings = { #These settings should be copied to all settings it was spli } ## A collection of functions that convert the configuration of the user in Cura -# 2.4 to a configuration for Cura 2.5. +# 2.5 to a configuration for Cura 2.6. # # All of these methods are essentially stateless. -class VersionUpgrade24to25(VersionUpgrade): - ## Gets the version number from a CFG file in Uranium's 2.4 format. +class VersionUpgrade25to26(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 2.5 format. # - # Since the format may change, this is implemented for the 2.4 format only + # Since the format may change, this is implemented for the 2.5 format only # and needs to be included in the version upgrade system rather than # globally in Uranium. # @@ -35,7 +35,7 @@ class VersionUpgrade24to25(VersionUpgrade): parser.read_string(serialised) return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - ## Upgrades the preferences file from version 2.4 to 2.5. + ## Upgrades the preferences file from version 2.5 to 2.6. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. @@ -66,7 +66,7 @@ class VersionUpgrade24to25(VersionUpgrade): parser.write(output) return [filename], [output.getvalue()] - ## Upgrades an instance container from version 2.4 to 2.5. + ## Upgrades an instance container from version 2.5 to 2.6. # # \param serialised The serialised form of a quality profile. # \param filename The name of the file to upgrade. diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py similarity index 89% rename from plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py rename to plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index a7480e802d..e586d1758c 100644 --- a/plugins/VersionUpgrade/VersionUpgrade24to25/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -6,15 +6,15 @@ from . import VersionUpgrade24to25 from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") -upgrade = VersionUpgrade24to25.VersionUpgrade24to25() +upgrade = VersionUpgrade25to26.VersionUpgrade25to26() def getMetaData(): return { "plugin": { - "name": catalog.i18nc("@label", "Version Upgrade 2.4 to 2.5"), + "name": catalog.i18nc("@label", "Version Upgrade 2.5 to 2.6"), "author": "Ultimaker", "version": "1.0", - "description": catalog.i18nc("@info:whatsthis", "Upgrades configurations from Cura 2.4 to Cura 2.5."), + "description": catalog.i18nc("@info:whatsthis", "Upgrades configurations from Cura 2.5 to Cura 2.6."), "api": 3 }, "version_upgrade": { diff --git a/plugins/VersionUpgrade/VersionUpgrade24to25/tests/TestVersionUpgrade24to25.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade24to25.py similarity index 100% rename from plugins/VersionUpgrade/VersionUpgrade24to25/tests/TestVersionUpgrade24to25.py rename to plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade24to25.py From 833ad65507d6ed7b6e1b6f4b4a7625d6b61e113c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 14:34:11 +0200 Subject: [PATCH 726/816] Also rename test Forgot that, sorry. Contributes to issue CURA-3427. --- ...ionUpgrade24to25.py => TestVersionUpgrade25to26.py} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename plugins/VersionUpgrade/VersionUpgrade25to26/tests/{TestVersionUpgrade24to25.py => TestVersionUpgrade25to26.py} (96%) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade24to25.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py similarity index 96% rename from plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade24to25.py rename to plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index cb7300ad87..d371d5cbbe 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade24to25.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -9,7 +9,7 @@ import VersionUpgrade24to25 #The module we're testing. ## Creates an instance of the upgrader to test with. @pytest.fixture def upgrader(): - return VersionUpgrade24to25.VersionUpgrade24to25() + return VersionUpgrade25to26.VersionUpgrade25to26() test_cfg_version_good_data = [ { @@ -121,7 +121,7 @@ foo = bar } ] -## Tests whether the settings that should be removed are removed for the 2.5 +## Tests whether the settings that should be removed are removed for the 2.6 # version of preferences. @pytest.mark.parametrize("data", test_upgrade_preferences_removed_settings_data) def test_upgradePreferencesRemovedSettings(data, upgrader): @@ -137,7 +137,7 @@ def test_upgradePreferencesRemovedSettings(data, upgrader): upgraded_preferences = upgraded_preferences[0] #Find whether the removed setting is removed from the file now. - settings -= VersionUpgrade24to25._removed_settings + settings -= VersionUpgrade25to26._removed_settings parser = configparser.ConfigParser(interpolation = None) parser.read_string(upgraded_preferences) assert (parser.has_section("general") and "visible_settings" in parser["general"]) == (len(settings) > 0) #If there are settings, there must also be a preference. @@ -166,7 +166,7 @@ type = instance_container } ] -## Tests whether the settings that should be removed are removed for the 2.5 +## Tests whether the settings that should be removed are removed for the 2.6 # version of instance containers. @pytest.mark.parametrize("data", test_upgrade_instance_container_removed_settings_data) def test_upgradeInstanceContainerRemovedSettings(data, upgrader): @@ -182,7 +182,7 @@ def test_upgradeInstanceContainerRemovedSettings(data, upgrader): upgraded_container = upgraded_container[0] #Find whether the forbidden setting is still in the container. - settings -= VersionUpgrade24to25._removed_settings + settings -= VersionUpgrade25to26._removed_settings parser = configparser.ConfigParser(interpolation = None) parser.read_string(upgraded_container) assert parser.has_section("values") == (len(settings) > 0) #If there are settings, there must also be the values category. From 22cfaddba528c4c1cdef162be162a58fb3d60b52 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 14:35:54 +0200 Subject: [PATCH 727/816] Fix import Oops. The test passes again now. Contributes to issue CURA-3427. --- .../VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index d371d5cbbe..9f8f1e8590 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -4,7 +4,7 @@ import configparser #To check whether the appropriate exceptions are raised. import pytest #To register tests with. -import VersionUpgrade24to25 #The module we're testing. +import VersionUpgrade25to26 #The module we're testing. ## Creates an instance of the upgrader to test with. @pytest.fixture From 3baec9b74221a5fa9209dada26d4695da5fb4429 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 11 May 2017 14:53:02 +0200 Subject: [PATCH 728/816] WIP: set dirty after overriding a user container with deserialize() CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 0d244c4492..8cb34e6681 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -398,8 +398,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if not user_containers: containers_to_add.append(instance_container) else: + instance_container = user_containers[0] if self._resolve_strategies["machine"] == "override" or self._resolve_strategies["machine"] is None: - user_containers[0].deserialize(archive.open(instance_container_file).read().decode("utf-8")) + instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) + instance_container.setDirty(True) elif self._resolve_strategies["machine"] == "new": # The machine is going to get a spiffy new name, so ensure that the id's of user settings match. extruder_id = instance_container.getMetaDataEntry("extruder", None) From 8a94f9425806107f73983f407c9d44f1a8ee25b0 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 11 May 2017 14:53:56 +0200 Subject: [PATCH 729/816] WIP: use .userChanges property to replace user containers in project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 8cb34e6681..2a3719a4cc 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -585,14 +585,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if extruder_id: for extruder in extruder_stacks: if extruder.getId() == extruder_id: - extruder.replaceContainer(0, container) + extruder.userChanges = container continue # replacing the container ID for user instance containers for the machine machine_id = container.getMetaDataEntry("machine", None) if machine_id: if global_stack.getId() == machine_id: - global_stack.replaceContainer(0, container) + global_stack.userChanges = container continue for changes_container_type in ("quality_changes", "definition_changes"): From 30321607d0b43d9eb9ba14952add5623339a8e9c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 15:30:24 +0200 Subject: [PATCH 730/816] Remove Cubic Subdivision Radius from users' configuration The setting no longer exists. This removes it from all instance containers and preference files. Contributes to issue CURA-3427. --- .../VersionUpgrade25to26/VersionUpgrade25to26.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index bfcf8c9828..f354c24f7d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -7,7 +7,8 @@ import io #To serialise configparser output to a string. from UM.VersionUpgrade import VersionUpgrade _removed_settings = { #Settings that were removed in 2.5. - "start_layers_at_same_position" + "start_layers_at_same_position", + "sub_div_rad_mult" } _split_settings = { #These settings should be copied to all settings it was split into. From f5347a4593b6eafd5ce6559db98c50b7400f182b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 16:37:32 +0200 Subject: [PATCH 731/816] Add documentation and a spot of logging --- cura/Settings/ContainerManager.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 476d0c5b58..6cd3ad0630 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -674,6 +674,7 @@ class ContainerManager(QObject): return new_change_instances ## Create a duplicate of a material, which has the same GUID and base_file metadata + # # \return \type{str} the id of the newly created container. @pyqtSlot(str, result = str) def duplicateMaterial(self, material_id: str) -> str: @@ -700,6 +701,7 @@ class ContainerManager(QObject): return self._getMaterialContainerIdForActiveMachine(new_id) ## Create a new material by cloning Generic PLA and setting the GUID to something unqiue + # # \return \type{str} the id of the newly created container. @pyqtSlot(result = str) def createMaterial(self) -> str: @@ -730,6 +732,10 @@ class ContainerManager(QObject): self._container_registry.addContainer(duplicated_container) return self._getMaterialContainerIdForActiveMachine(new_id) + ## Find the id of a material container based on the new material + # Utilty function that is shared between duplicateMaterial and createMaterial + # + # \param base_file \type{str} the id of the created container. def _getMaterialContainerIdForActiveMachine(self, base_file): global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack: @@ -746,10 +752,16 @@ class ContainerManager(QObject): if materials: return materials[0].getId() + + Logger.log("w", "Unable to find a suitable container based on %s for the current machine .", base_file) return "" # do not activate a new material if a container can not be found return base_file + ## Get a list of materials that have the same GUID as the reference material + # + # \param material_id \type{str} the id of the material for which to get the linked materials. + # \return \type{list} a list of names of materials with the same GUID @pyqtSlot(str, result = "QStringList") def getLinkedMaterials(self, material_id: str): containers = self._container_registry.findInstanceContainers(id=material_id) @@ -773,6 +785,8 @@ class ContainerManager(QObject): linked_material_names.append(container.getName()) 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(str) def unlinkMaterial(self, material_id: str): containers = self._container_registry.findInstanceContainers(id=material_id) From 639e86ca597464eadf1826193c0c4adfd0ddb948 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 16:53:59 +0200 Subject: [PATCH 732/816] Set setting_version in 2.6's profiles Contributes to issue CURA-3427. --- .../VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index f354c24f7d..3e72fdddf9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -86,7 +86,7 @@ class VersionUpgrade25to26(VersionUpgrade): #Change the version number in the file. if parser.has_section("general"): - parser["general"]["version"] = "3" + parser["general"]["setting_version"] = "1" #Re-serialise the file. output = io.StringIO() From 0a84a181c466957a6c2980f694abb657b333c53f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 17:31:37 +0200 Subject: [PATCH 733/816] Track cfg version numbers with major-minor, sorta We now have a (format) version and a setting version. Ideally we'd like major-minor version numbers in our profiles. However, introducing major-minor version numbers requires substantial changes to the version upgrade manager to compare version numbers, find a path towards the current version, or even keeping track of the current version. Therefore we just collapse the two version numbers into one: Multiply the major version number by a million and you'll never exceed it in the minor versioning. The only problem is that we now have to update the versioning for all of our three upgrade plug-ins, because they all need to know locally how to find the version number of their file types (because the upgrade manager has no knowledge of the file types) and they have no access to each other because a plug-in may be disabled. Contributes to issue CURA-3427. --- .../VersionUpgrade21to22/VersionUpgrade21to22.py | 4 +++- .../VersionUpgrade/VersionUpgrade21to22/__init__.py | 8 ++++---- .../VersionUpgrade22to24/VersionUpgrade.py | 4 +++- .../VersionUpgrade/VersionUpgrade22to24/__init__.py | 8 ++++---- .../VersionUpgrade25to26/VersionUpgrade25to26.py | 4 +++- .../VersionUpgrade/VersionUpgrade25to26/__init__.py | 10 +++++----- 6 files changed, 22 insertions(+), 16 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index 7a9b102758..855425053a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -249,7 +249,9 @@ class VersionUpgrade21to22(VersionUpgrade): def getCfgVersion(self, serialised): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) - return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("general", "version", fallback = 0)) + return format_version * 1000000 + setting_version ## Gets the fallback quality to use for a specific machine-variant-material # combination. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py index f2803ca62f..74d74e61ae 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py @@ -18,10 +18,10 @@ def getMetaData(): "api": 3 }, "version_upgrade": { - # From To Upgrade function - ("profile", 1): ("quality", 2, upgrade.upgradeProfile), - ("machine_instance", 1): ("machine_stack", 2, upgrade.upgradeMachineInstance), - ("preferences", 2): ("preferences", 3, upgrade.upgradePreferences) + # From To Upgrade function + ("profile", 1000000): ("quality", 2000000, upgrade.upgradeProfile), + ("machine_instance", 1000000): ("machine_stack", 2000000, upgrade.upgradeMachineInstance), + ("preferences", 2000000): ("preferences", 3000000, upgrade.upgradePreferences) }, "sources": { "profile": { diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index b28124f16b..7a4ff70fb7 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -144,4 +144,6 @@ class VersionUpgrade22to24(VersionUpgrade): def getCfgVersion(self, serialised): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) - return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("general", "version", fallback = 0)) + return format_version * 1000000 + setting_version diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py index e1114922d6..0df2c94b75 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py @@ -18,10 +18,10 @@ def getMetaData(): "api": 3 }, "version_upgrade": { - # From To Upgrade function - ("machine_instance", 2): ("machine_stack", 3, upgrade.upgradeMachineInstance), - ("extruder_train", 2): ("extruder_train", 3, upgrade.upgradeExtruderTrain), - ("preferences", 3): ("preferences", 4, upgrade.upgradePreferences) + # From To Upgrade function + ("machine_instance", 2000000): ("machine_stack", 3000000, upgrade.upgradeMachineInstance), + ("extruder_train", 2000000): ("extruder_train", 3000000, upgrade.upgradeExtruderTrain), + ("preferences", 3000000): ("preferences", 4000000, upgrade.upgradePreferences) }, "sources": { diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 3e72fdddf9..da899b03e5 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -34,7 +34,9 @@ class VersionUpgrade25to26(VersionUpgrade): def getCfgVersion(self, serialised): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) - return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("general", "version", fallback = 0)) + return format_version * 1000000 + setting_version ## Upgrades the preferences file from version 2.5 to 2.6. # diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index e586d1758c..05e8e0e4cf 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -18,11 +18,11 @@ def getMetaData(): "api": 3 }, "version_upgrade": { - # From To Upgrade function - ("preferences", 4): ("preferences", 5, upgrade.upgradePreferences), - ("quality", 2): ("quality", 3, upgrade.upgradeInstanceContainer), - ("variant", 2): ("variant", 3, upgrade.upgradeInstanceContainer), #We can re-use upgradeContainerStack since there is nothing specific to quality, variant or user profiles being changed. - ("user", 2): ("user", 3, upgrade.upgradeInstanceContainer) + # From To Upgrade function + ("preferences", 4000000): ("preferences", 4000001, upgrade.upgradePreferences), + ("quality", 2000000): ("quality", 2000001, upgrade.upgradeInstanceContainer), + ("variant", 2000000): ("variant", 2000001, upgrade.upgradeInstanceContainer), #We can re-use upgradeContainerStack since there is nothing specific to quality, variant or user profiles being changed. + ("user", 2000000): ("user", 2000001, upgrade.upgradeInstanceContainer) }, "sources": { "quality": { From 6e01c6ba60ff1177366ff6da9ee8086a1d32dabc Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 11 May 2017 17:33:46 +0200 Subject: [PATCH 734/816] Initialise config_name Just a mistake that I saw because my IDE warned me about this. If a variant in Cura 2.3 has no general/name keyword, then it would break here. Now it doesn't break any more and gives a nonsensical name. Contributes to issue CURA-3427. --- plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index 7a4ff70fb7..e1da456c48 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -77,6 +77,7 @@ class VersionUpgrade22to24(VersionUpgrade): with open(variant_path, "r") as fhandle: variant_config.read_file(fhandle) + config_name = "Unknown Variant" if variant_config.has_section("general") and variant_config.has_option("general", "name"): config_name = variant_config.get("general", "name") if config_name.endswith("_variant"): From a727e4ffd09d365dfaa3f532c912a952f30e7089 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 11 May 2017 18:16:36 +0200 Subject: [PATCH 735/816] Make sure all materials are shown Without this workaround, some materials that are listed above the generic materials do not show up untill the user scrolls the scrollview. --- resources/qml/Preferences/MaterialsPage.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index d4d9a2dec7..c46b482d10 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -14,6 +14,12 @@ UM.ManagementPage title: catalog.i18nc("@title:tab", "Materials"); + Component.onCompleted: + { + // Workaround to make sure all of the items are visible + objectList.positionViewAtBeginning(); + } + model: UM.InstanceContainersModel { filter: From 9de041ade51d4ba9f0b33529b8d7d1b06a1d5d3b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 09:45:53 +0200 Subject: [PATCH 736/816] Remove theme font from system-themed dialogue See commit 36dedabd11a36bd40669fbcf3b0e1f820c47acf1. --- resources/qml/DiscardOrKeepProfileChangesDialog.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/DiscardOrKeepProfileChangesDialog.qml index 1cdde17840..f3c790e416 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/DiscardOrKeepProfileChangesDialog.qml @@ -56,7 +56,6 @@ UM.Dialog { text: catalog.i18nc("@text:window", "You have customized some profile settings.\nWould you like to keep or discard those settings?") anchors.margins: UM.Theme.getSize("default_margin").width - font: UM.Theme.getFont("default") wrapMode: Text.WordWrap } } From 396f4381dd13e34a144aa3c5d0a5a0569f6c9341 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 10:00:24 +0200 Subject: [PATCH 737/816] Resolve bed adhesion type via limit-to-extruder The cause for this change is that TPU says we want to print with brim but CPE wants to print with raft. In those cases the resolve function would choose the raft because that's safer. However if the default extruder happens to be the TPU one you then get a raft made of TPU which is flexible. That defeats the purpose of the raft, and causes the raft to warp, clog on the nozzle, destroy the world, etc. So there, I saved the world once more. --- 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 628ca1688e..d5c6fe2609 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3623,7 +3623,7 @@ "none": "None" }, "default_value": "brim", - "resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')", + "limit_to_extruder": "adhesion_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": false }, From 31684da9a67ed3dc8ab000b1def7a23be3b05e83 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 10:01:29 +0200 Subject: [PATCH 738/816] Add Gradual Infill Steps to default advanced settings It's visible by default now. Contributes to issue CURA-3732. --- cura/CuraApplication.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 3b5557b7d8..7e047cae0a 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -294,6 +294,7 @@ class CuraApplication(QtApplication): z_seam_y infill infill_sparse_density + gradual_infill_steps material material_print_temperature material_bed_temperature From bf80e6efd5e064ad11d36648b34d4643d631dcf6 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Fri, 12 May 2017 09:10:21 +0100 Subject: [PATCH 739/816] Just like magic_spiralize, smooth_spiralized_contours should not be settable per model/extruder. --- resources/definitions/fdmprinter.def.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 46b3b125a4..838a1d975d 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4595,7 +4595,9 @@ "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", "type": "bool", "default_value": true, - "enabled": "magic_spiralize" + "enabled": "magic_spiralize", + "settable_per_mesh": false, + "settable_per_extruder": false } } }, From 7508a0a98155ef16a9c42fe9fdc1d5dc3f8178ee Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 10:24:15 +0200 Subject: [PATCH 740/816] Changed infill buttons so they work with all languages CURA-3634 --- resources/qml/SidebarSimple.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 3eaf0797e8..1e4a715095 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -125,7 +125,7 @@ Item { id: infillIcon anchors.fill: parent; - anchors.margins: UM.Theme.getSize("infill_button_margin").width + anchors.margins: 2 sourceSize.width: width sourceSize.height: width @@ -185,7 +185,7 @@ Item Component.onCompleted: { infillModel.append({ - name: catalog.i18nc("@label", "Empty"), + name: catalog.i18nc("@label", "0%"), percentage: 0, steps: 0, percentageMin: -1, @@ -196,7 +196,7 @@ Item icon: "hollow" }) infillModel.append({ - name: catalog.i18nc("@label", "Light"), + name: catalog.i18nc("@label", "20%"), percentage: 20, steps: 0, percentageMin: 0, @@ -207,7 +207,7 @@ Item icon: "sparse" }) infillModel.append({ - name: catalog.i18nc("@label", "Dense"), + name: catalog.i18nc("@label", "50%"), percentage: 50, steps: 0, percentageMin: 30, @@ -218,7 +218,7 @@ Item icon: "dense" }) infillModel.append({ - name: catalog.i18nc("@label", "Solid"), + name: catalog.i18nc("@label", "100%"), percentage: 100, steps: 0, percentageMin: 70, From 502e977c24d8fe821b3021be1bf1f40e3b79b22b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 10:27:13 +0200 Subject: [PATCH 741/816] UM2E now has olson block upgrade selection as machine action CURA-3742 --- resources/definitions/ultimaker2_extended.def.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/definitions/ultimaker2_extended.def.json b/resources/definitions/ultimaker2_extended.def.json index 803e9fe896..ac9d98c5eb 100644 --- a/resources/definitions/ultimaker2_extended.def.json +++ b/resources/definitions/ultimaker2_extended.def.json @@ -11,8 +11,7 @@ "file_formats": "text/x-gcode", "icon": "icon_ultimaker2.png", "platform": "ultimaker2_platform.obj", - "platform_texture": "Ultimaker2Extendedbackplate.png", - "supported_actions": ["UpgradeFirmware"] + "platform_texture": "Ultimaker2Extendedbackplate.png" }, "overrides": { From 0f5814e52f8b7ae2373dede03c16c0883589ba67 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 12:58:15 +0200 Subject: [PATCH 742/816] Add setting_version and check against it This breaks all profiles since they have the wrong setting version, of course. Have to change that in every instance container now... Contributes to issue CURA-3427. --- cura/Settings/CuraContainerRegistry.py | 8 ++++++++ resources/definitions/fdmprinter.def.json | 1 + 2 files changed, 9 insertions(+) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 72b94a6f8d..91327ceb54 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -41,6 +41,14 @@ class CuraContainerRegistry(ContainerRegistry): if type(container) == ContainerStack: container = self._convertContainerStack(container) + if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()): + #Check against setting version of the definition. + required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version")) + actual_setting_version = int(container.getMetaDataEntry("setting_version", default = "0")) + if required_setting_version != actual_setting_version: + Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version)) + return #Don't add. + super().addContainer(container) ## Create a name that is not empty and unique diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 7c8782de69..bd34d8c7d8 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -8,6 +8,7 @@ "author": "Ultimaker B.V.", "category": "Ultimaker", "manufacturer": "Ultimaker", + "setting_version": 1, "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g", "visible": false, "has_materials": true, From 67aa6767c59732588c2412ddae64ca2c9e148d11 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 May 2017 13:23:29 +0200 Subject: [PATCH 743/816] Add .DS_Store and *.qmlc --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 527e5dc049..1db07180c0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,10 @@ resources/firmware resources/materials LC_MESSAGES .cache +*.qmlc + +#MacOS +.DS_Store # Editors and IDEs. *kdev* From f60765c56c5ab73266009ecc56a66ded60a59ac2 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 May 2017 13:24:58 +0200 Subject: [PATCH 744/816] Fix workspace dialog layout so checkbox and buttons dont get hidden --- resources/qml/WorkspaceSummaryDialog.qml | 64 ++++++++++++------------ 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/resources/qml/WorkspaceSummaryDialog.qml b/resources/qml/WorkspaceSummaryDialog.qml index 7da8495da0..cbde055138 100644 --- a/resources/qml/WorkspaceSummaryDialog.qml +++ b/resources/qml/WorkspaceSummaryDialog.qml @@ -13,13 +13,10 @@ UM.Dialog { title: catalog.i18nc("@title:window", "Save Project") - width: 550 * Screen.devicePixelRatio - minimumWidth: 550 * Screen.devicePixelRatio + width: 500 + height: 400 - height: 350 * Screen.devicePixelRatio - minimumHeight: 350 * Screen.devicePixelRatio - - property int spacerHeight: 10 * Screen.devicePixelRatio + property int spacerHeight: 10 property bool dontShowAgain: true @@ -42,7 +39,6 @@ UM.Dialog Item { anchors.fill: parent - anchors.margins: 20 * Screen.devicePixelRatio UM.SettingDefinitionsModel { @@ -232,42 +228,48 @@ UM.Dialog height: spacerHeight width: height } + } + + Row + { + id: buttonRow + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + height: childrenRect.height CheckBox { id: dontShowAgainCheckbox + anchors.left: parent.left + text: catalog.i18nc("@action:label", "Don't show project summary on save again") checked: dontShowAgain } - } + Button + { + id: ok_button + anchors.right: parent.right - Button - { - id: ok_button - text: catalog.i18nc("@action:button","Save"); - enabled: true - onClicked: { - close() - yes() + text: catalog.i18nc("@action:button","Save"); + enabled: true + onClicked: { + close() + yes() + } } - anchors.bottomMargin: - 0.5 * height - anchors.bottom: parent.bottom - anchors.right: parent.right - } - Button - { - id: cancel_button - text: catalog.i18nc("@action:button","Cancel"); - enabled: true - onClicked: close() - - anchors.bottom: parent.bottom - anchors.right: ok_button.left - anchors.bottomMargin: - 0.5 * height - anchors.rightMargin:2 + Button + { + id: cancel_button + anchors.right: ok_button.left + anchors.rightMargin: 2 + text: catalog.i18nc("@action:button","Cancel"); + enabled: true + onClicked: close() + } } } } \ No newline at end of file From f0f8871496b3be8f3331af427f14ccab64455320 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 13:40:54 +0200 Subject: [PATCH 745/816] Add setting_version to all profiles This represents the data version number (as opposed to the format version). Contributes to issue CURA-3427. --- resources/quality/abax_pri3/apri3_pla_fast.inst.cfg | 2 +- resources/quality/abax_pri3/apri3_pla_high.inst.cfg | 2 +- resources/quality/abax_pri3/apri3_pla_normal.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_fast.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_high.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_normal.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_fast.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_high.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_normal.inst.cfg | 2 +- resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg | 1 + .../quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg | 1 + resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg | 1 + .../quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg | 1 + .../quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg | 1 + .../cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg | 1 + resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg | 1 + .../quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg | 1 + .../cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg | 1 + .../cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg | 1 + .../quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg | 1 + .../cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg | 1 + .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 1 + .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg | 1 + .../cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg | 1 + .../quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg | 1 + .../cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg | 1 + .../quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg | 1 + .../quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg | 1 + resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg | 1 + .../cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg | 1 + .../quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg | 1 + resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg | 1 + .../quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg | 1 + resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg | 1 + .../quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg | 1 + .../quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg | 1 + .../cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg | 1 + resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg | 1 + .../quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg | 1 + resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg | 1 + .../quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg | 1 + resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg | 1 + .../quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg | 1 + .../quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg | 1 + .../cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg | 1 + resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg | 1 + .../quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg | 1 + resources/quality/coarse.inst.cfg | 1 + resources/quality/draft.inst.cfg | 1 + resources/quality/extra_coarse.inst.cfg | 1 + resources/quality/high.inst.cfg | 1 + .../quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg | 1 + .../imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg | 1 + .../quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg | 1 + .../imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg | 1 + .../quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg | 1 + .../imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg | 1 + .../quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg | 1 + .../imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg | 1 + .../quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg | 1 + .../imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg | 1 + .../imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg | 1 + .../imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg | 1 + resources/quality/low.inst.cfg | 1 + resources/quality/normal.inst.cfg | 1 + resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg | 1 + resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg | 1 + resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg | 1 + .../quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg | 1 + resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg | 1 + .../ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_CPEP_Not_Supported_Quality.inst.cfg | 1 + .../um3_aa0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_PC_Not_Supported_Quality.inst.cfg | 1 + .../um3_aa0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_PVA_Not_Supported_Quality.inst.cfg | 1 + .../um3_aa0.8_PVA_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg | 1 + .../ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg | 1 + .../um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_ABS_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_CPEP_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_CPEP_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_CPE_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_Nylon_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_PC_Not_Supported_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_PLA_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.4_TPU_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.4_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_ABS_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_ABS_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_CPEP_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_CPE_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_CPE_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_Nylon_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_Nylon_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_PC_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_PLA_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_PLA_Not_Supported_Superdraft_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg | 1 + .../ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg | 1 + .../um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 1 + resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg | 1 + resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg | 1 + resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_global_Normal_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg | 3 ++- .../quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg | 3 ++- resources/variants/cartesio_0.25.inst.cfg | 1 + resources/variants/cartesio_0.4.inst.cfg | 1 + resources/variants/cartesio_0.8.inst.cfg | 1 + resources/variants/imade3d_jellybox_0.4.inst.cfg | 1 + resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg | 1 + resources/variants/ultimaker2_0.25.inst.cfg | 1 + resources/variants/ultimaker2_0.4.inst.cfg | 1 + resources/variants/ultimaker2_0.6.inst.cfg | 1 + resources/variants/ultimaker2_0.8.inst.cfg | 1 + resources/variants/ultimaker2_extended_plus_0.25.inst.cfg | 1 + resources/variants/ultimaker2_extended_plus_0.4.inst.cfg | 1 + resources/variants/ultimaker2_extended_plus_0.6.inst.cfg | 1 + resources/variants/ultimaker2_extended_plus_0.8.inst.cfg | 1 + resources/variants/ultimaker2_plus_0.25.inst.cfg | 1 + resources/variants/ultimaker2_plus_0.4.inst.cfg | 1 + resources/variants/ultimaker2_plus_0.6.inst.cfg | 1 + resources/variants/ultimaker2_plus_0.8.inst.cfg | 1 + resources/variants/ultimaker3_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_aa04.inst.cfg | 1 + resources/variants/ultimaker3_bb0.8.inst.cfg | 1 + resources/variants/ultimaker3_bb04.inst.cfg | 1 + resources/variants/ultimaker3_extended_aa0.8.inst.cfg | 1 + resources/variants/ultimaker3_extended_aa04.inst.cfg | 1 + resources/variants/ultimaker3_extended_bb0.8.inst.cfg | 1 + resources/variants/ultimaker3_extended_bb04.inst.cfg | 1 + 251 files changed, 253 insertions(+), 11 deletions(-) diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index 7f3bf240ac..c803cd6196 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index be93de160e..f22daa56a5 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = High Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index a116ff4485..198676d024 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 4bfb02fe77..8ef82f2f76 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index 4c89f5cf28..79af56ff3d 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = High Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index fc11c5af19..50a01e9de1 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index 63189c1ed1..f76df7c3c9 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index 7d6f8bb3d7..cb0b9fa238 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = High Quality @@ -8,6 +7,7 @@ type = quality material = generic_pla weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index 6de6a1df32..5d9867db81 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -1,4 +1,3 @@ - [general] version = 2 name = Normal Quality @@ -9,6 +8,7 @@ type = quality material = generic_pla weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index 6d7fe3b0eb..8359e17a9b 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index f59b39a94b..75338a4d83 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index d34b6dfb3b..62a473ac02 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index 2780eea101..19d08ae41b 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index e22b61a456..8ab0733977 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_abs_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 602a11457f..097669c688 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_abs_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index 02e82c81e9..5ae8911ceb 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_abs_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index b9b66fd4c0..ef2571113c 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_abs_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 1d20414f7e..74390b0d82 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index 2437f41b09..86309f2754 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 4ed6a3a28b..81f8f09c47 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.4 diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index a6b9aae464..07282666e3 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.6 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 17638b0e9b..c0b5895d7e 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 56c7db0f4a..ed3cb68326 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index ed1d1ae00d..3c2b42bb1c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index f259d31022..cf4ce231d5 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index f3d3fb29c4..140655af2c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index 96217fa849..1e62e1ba8f 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index 7e169f54bd..d15ffa60e1 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_hips_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index 707932a7ed..00c2438197 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_hips_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index 3cc8f7dc25..e7fc711492 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_hips_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index d9c10d815a..56b0ee0c2c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_hips_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index 6cceba99c3..125699fe5f 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index 07be2462f4..e039486f8a 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index 271278143b..5c9fbc3b04 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 32aaddf4cb..3fc80db1a4 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index f019fec205..62f6e4da1f 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_nylon_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index b19df96222..813fde3915 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_nylon_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index adc278188d..cc18ceeda6 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_nylon_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index 87e8515872..baaf108d6e 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_nylon_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index cb8b52cf12..531cfb3519 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index 8cb4ebc94b..ad07bcd2c7 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 3aa4211c0a..e03ebb8c95 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index 42fc39d6f2..0acc0b5b2b 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index ba2a33d4cf..2b760d6067 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_pc_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index 443f009ba4..c2bb4d8df4 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_pc_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index 9dc821ad27..e0dd2cc81e 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pc_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 893a8f0939..9d4169427f 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pc_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index a197b70f1b..cc96f3f37f 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index c34c7f8eae..fe5bdb2e77 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index 8130f8563e..0a019b60d6 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index 84c7525b0b..8984f430f5 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index a3a8d324fb..b8e06b8db6 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_petg_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index 295b3c3e2c..cba49998f4 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_petg_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index df496e5e06..7b85c230b0 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_petg_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index fa787830b2..d45d7a0d2c 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_petg_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 633aeca2d2..7afd300aa2 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index a212b65676..057215d70d 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index 7a7f7f31a3..77d3008c1b 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index 16ad34b9f0..3d08fd9514 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index c6a680dfcc..1aca489096 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_pla_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index a1ea49ba92..c4acfd0c8d 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_pla_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index 622cb124eb..ad4980d2e9 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pla_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index c24f46f30d..650431e0a9 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pla_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index 34b7dcf0f1..580969fbaa 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.25_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 5f6b8c846d..189ab1caec 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.25_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.3 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index 26e476abb0..61a8b5f37c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.4_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index 14e6c6a956..e91cd56272 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.4_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.5 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index e009409d52..c109e8c20e 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse material = generic_pva_175_cartesio_0.8_mm weight = 3 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index bc9dc55912..59c3530dba 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = extra coarse material = generic_pva_175_cartesio_0.8_mm weight = 4 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index 9f5ea8a070..b651c5bd57 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pva_175_cartesio_0.8_mm weight = 1 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index 275ff906d2..9354602854 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pva_175_cartesio_0.8_mm weight = 2 +setting_version = 1 [values] infill_line_width = 0.9 diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index 94612afcc0..7722e9d0ae 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = coarse global_quality = True weight = -3 +setting_version = 1 [values] layer_height = 0.4 diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index 134626365f..21a7c81d6c 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -9,6 +9,7 @@ type = quality quality_type = draft global_quality = True weight = -2 +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 1462464b59..4c2bced7d2 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = Extra coarse global_quality = True weight = -4 +setting_version = 1 [values] layer_height = 0.6 diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 921dae9ae0..955b19dcf4 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high global_quality = True weight = 1 +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg index cd1356cf3c..674ed17e44 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg index a0ad58711f..e98c0a38ee 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm_2-fans weight = -1 quality_type = fast +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg index 5a51c3059f..2a947aceec 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg index c85b4f74d0..67078b9cde 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_petg_imade3d_jellybox_0.4_mm_2-fans weight = 0 quality_type = normal +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg index fb21ef1b9f..c82d42120d 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg index a382d98b6e..634b1219f7 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = -1 quality_type = fast +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg index cba83980df..9d1ece2ea9 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 1 quality_type = high +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg index e26c1406fb..2cc8a57a73 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 1 quality_type = high +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg index 59506db09a..c30943b4f2 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg index 785941fbca..076d90334b 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 0 quality_type = normal +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg index 737d1acf59..c8db03506a 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm weight = 2 quality_type = ultrahigh +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg index 5a5a0c96dc..01d5d601dd 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_imade3d_jellybox_0.4_mm_2-fans weight = 2 quality_type = ultrahigh +setting_version = 1 [values] adhesion_type = skirt diff --git a/resources/quality/low.inst.cfg b/resources/quality/low.inst.cfg index 82d4e0d327..8c8200395b 100644 --- a/resources/quality/low.inst.cfg +++ b/resources/quality/low.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = low global_quality = True weight = -1 +setting_version = 1 [values] infill_sparse_density = 10 diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index 26da3b48da..47d47f97f1 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -8,5 +8,6 @@ type = quality quality_type = normal global_quality = True weight = 0 +setting_version = 1 [values] diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 27848d4301..4c0cec96a7 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -7,6 +7,7 @@ definition = peopoly_moai type = quality weight = 1 quality_type = high +setting_version = 1 [values] infill_sparse_density = 70 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg index 253070569f..720b98b1b0 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg @@ -7,6 +7,7 @@ definition = peopoly_moai type = quality weight = 2 quality_type = extra_high +setting_version = 1 [values] infill_sparse_density = 70 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index c4ff8360fa..7d0053fc11 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -7,6 +7,7 @@ definition = peopoly_moai type = quality weight = 0 quality_type = normal +setting_version = 1 [values] infill_sparse_density = 70 diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index db2b48b3cc..e288ce3db5 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.25_mm weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index d3f2740202..be01142816 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index d3347b4712..9d4469c1e4 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index 758225535a..f9b27a3627 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pla_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index 5eed5965e4..bcebb06221 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ material = generic_pla_ultimaker2_plus_0.6_mm type = quality weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index 96a81d874e..a090910641 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ material = generic_pla_ultimaker2_plus_0.8_mm type = quality weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index cd99fc0f8a..f93fcca48c 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.25_mm weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index e52a201789..8c7b34eeff 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 4cbe9f4b88..7040a8ba38 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index 3cfa744787..740dadd493 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index 848441de61..d501703514 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 20a35f157f..674f17958c 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_abs_ultimaker2_plus_0.8_mm weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index 29f1577d12..27d850162e 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.25_mm weight = -1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index edba5d2c79..6b882b1bbf 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index a2442e6c96..6c4d24b195 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = 1 quality_type = high +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index 4993e97bb0..d26cc8782c 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index ceaf31e153..10a4e5bd71 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index f81e931218..f4730bbd41 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_ultimaker2_plus_0.8_mm weight = -1 quality_type = fast +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 294db7c10d..517d42ada2 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.4_mm weight = -2 quality_type = draft +setting_version = 1 [values] speed_wall_x = 25 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index 91059f94b3..6d77792901 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] speed_wall_x = 30 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index 6d1cb47835..ed87b21b15 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.6_mm weight = -2 quality_type = draft +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index 1dbe3a56c8..7b20aa424d 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index 1b92686d50..d07e33e124 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft +setting_version = 1 [values] support_z_distance = 0.26 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index 30746a1ac2..b2cd9478c6 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_cpe_plus_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_z_distance = 0.26 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index fea97a2621..94eac599b0 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.25_mm weight = 1 quality_type = high +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index 56be2489a5..663f67c56e 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.25_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 80948add53..f37365585e 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 8385b3f895..0bb3bcc12d 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index d9e393b778..dfeb02991f 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast +setting_version = 1 [values] support_xy_distance = 0.7 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index e438dca035..259a581ccf 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.7 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index 575109e588..1607d71d01 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft +setting_version = 1 [values] support_xy_distance = 0.75 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index abd8f499bc..8d3767e4c6 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_nylon_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.75 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 06f67b7298..33dc5551fd 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.25_mm weight = 1 quality_type = high +setting_version = 1 [values] support_z_distance = 0.19 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index be595385a4..2d26718f1b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.25_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_z_distance = 0.19 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index f20351cbb4..4c5dbf080b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.4_mm weight = -1 quality_type = fast +setting_version = 1 [values] speed_wall_x = 30 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index 469cab12cc..e49dcd52a7 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] speed_wall_x = 30 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index bfd239e3cc..dc1d569ab9 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast +setting_version = 1 [values] speed_travel = 150 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index bf65d1b8aa..1c041e1567 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.6_mm weight = 0 quality_type = normal +setting_version = 1 [values] speed_travel = 150 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 53fab6b028..782d44cdcc 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.8_mm weight = -2 quality_type = draft +setting_version = 1 [values] support_z_distance = 0.26 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 9d79bf9faa..83c30e583d 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_pc_ultimaker2_plus_0.8_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_z_distance = 0.26 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index 5c37a8432a..d1632b3482 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.25_mm weight = 1 quality_type = high +setting_version = 1 [values] support_xy_distance = 0.6 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 106476d57c..10a8cbded5 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.4_mm weight = 0 quality_type = normal +setting_version = 1 [values] support_xy_distance = 0.65 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index e0a0388227..e96015c6bd 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -8,6 +8,7 @@ type = quality material = generic_tpu_ultimaker2_plus_0.6_mm weight = -1 quality_type = fast +setting_version = 1 [values] support_xy_distance = 0.7 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index f0f07f7973..4c7b194893 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_abs_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 0b062b0cc0..debb49caa8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_abs_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] cool_min_speed = 7 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 26ca695cf8..9e08d12b78 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_abs_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] cool_min_speed = 12 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index c3f3fb83b9..344593be0e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_abs_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 8f37595632..7833e3756c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index 3ae04bba2f..ebe8646000 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index c32eb2cf54..a9bd0db101 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index 515d6e6424..e9834620bb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 1df6d2dc6c..05e8a6540d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_cpe_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] material_print_temperature = =default_material_print_temperature + 10 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 6216c1140f..86ce49a964 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_cpe_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] cool_min_speed = 7 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index 390d3466bb..3e7d5ab4b3 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_cpe_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] cool_min_speed = 12 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index f0f5228387..62fa68d862 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_cpe_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] machine_nozzle_cool_down_speed = 0.85 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 6899989100..b7c2381840 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_nylon_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 76a2491079..eb76b27f2a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_nylon_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index ba50bc4d31..74cd67af23 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_nylon_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index bebd9976f5..626629c746 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_nylon_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] adhesion_type = brim diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index a601ec9531..6cbb2ba357 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_pc_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index 8fbaea6da9..2402c8e7fa 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_pc_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index 4e0baac3d4..c54db7f99f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pc_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 8ee6cbd2d0..a7a1b6ba5c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pc_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index eb56b0aa4c..2ae33b91a9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_pla_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index c5faa17a2b..57faaacb65 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_pla_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 1a6db5e3b5..7fda6c2e7d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high material = generic_pla_ultimaker3_AA_0.4 weight = 1 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index c7a7be37c0..3bd268a257 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_pla_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg index f4abd6f696..6d878cd4b7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PVA_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = normal material = generic_pva_ultimaker3_AA_0.4 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 14ec88fe6b..55170f8c79 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_tpu_ultimaker3_AA_0.4 weight = -2 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index 4d14349ab0..89536c9308 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast material = generic_tpu_ultimaker3_AA_0.4 weight = -1 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index 98d6b42cb7..51e77de9e7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal material = generic_tpu_ultimaker3_AA_0.4 weight = 0 +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index 7fb96d0cea..06ec67d7ee 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_abs_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] line_width = =machine_nozzle_size * 0.875 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 63f27c180d..3df0ce08ea 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft material = generic_abs_ultimaker3_AA_0.8 weight = -4 +setting_version = 1 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 1eeb95fcd2..4c99a7a286 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft material = generic_abs_ultimaker3_AA_0.8 weight = -3 +setting_version = 1 [values] layer_height = 0.3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Quality.inst.cfg index 68b694b922..ddde16205e 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_cpe_plus_ultimaker3_AA_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg index 9cc2999ed2..8d65a8a653 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_cpe_plus_ultimaker3_AA_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index ec1a384804..aae6e21061 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_cpe_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 372b5a41c1..af33717e7f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft material = generic_cpe_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index ec2f024141..cc87ac82cc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft material = generic_cpe_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] brim_width = 15 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index c425cd3e56..16dbd87bcd 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_nylon_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 071606b8b8..61a2c3add1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft material = generic_nylon_ultimaker3_AA_0.8 weight = -4 +setting_version = 1 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index fe023b9e32..73bf6a1fdf 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft material = generic_nylon_ultimaker3_AA_0.8 weight = -3 +setting_version = 1 [values] brim_width = 5.6 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Quality.inst.cfg index e47a866584..a047bc4496 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = normal material = generic_pc_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg index 14b08854b8..a73c5a121a 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = superdraft material = generic_pc_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 75ebfb6a45..1b8026d963 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_pla_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 8b46d9d22a..4b23cdbf5a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft material = generic_pla_ultimaker3_AA_0.8 weight = -4 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index a8fc688b56..0f5a0eb102 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft material = generic_pla_ultimaker3_AA_0.8 weight = -3 +setting_version = 1 [values] cool_fan_full_at_height = =layer_height_0 + 2 * layer_height diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Quality.inst.cfg index ce306fad95..abbfe3f184 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = normal material = generic_pva_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Superdraft_Quality.inst.cfg index 5dbfab6341..ddd2dd6ca9 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PVA_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = superdraft material = generic_pva_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index 3f3eeb145e..678a12d5a8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft material = generic_tpu_ultimaker3_AA_0.8 weight = -2 +setting_version = 1 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg index 7973ac08cc..b7ddab1a97 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = normal material = generic_tpu_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg index ec04652763..0693986d1e 100755 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ type = quality quality_type = superdraft material = generic_tpu_ultimaker3_AA_0.8 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index 38930d1507..dfe159013b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft material = generic_tpu_ultimaker3_AA_0.8 weight = -4 +setting_version = 1 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index edc9f61f0e..be41c23cdb 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft material = generic_tpu_ultimaker3_AA_0.8 weight = -3 +setting_version = 1 [values] brim_width = 8.75 diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg index 7d2e7aa585..31d74c33a6 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_abs_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Superdraft_Quality.inst.cfg index a2d097ee09..16cc6c76b7 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_ABS_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_abs_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Quality.inst.cfg index d90ac7f126..ef3ae39c9a 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_cpe_plus_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Superdraft_Quality.inst.cfg index c7a19c3299..f6a5338f41 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_cpe_plus_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg index 1d222bec93..4c05ed019e 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_cpe_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Superdraft_Quality.inst.cfg index 2c92677a40..9401ac061d 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_CPE_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_cpe_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg index 4894ea3e79..b2db6334c0 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_nylon_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Superdraft_Quality.inst.cfg index d8c202efe8..ac99f78d04 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_nylon_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PC_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PC_Not_Supported_Quality.inst.cfg index 919e3e952b..dfba41dfb6 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_PC_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PC_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_pc_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg index 4dba9ea8c6..1b831fd1e2 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_pla_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Superdraft_Quality.inst.cfg index f394ea40b4..153ae27d12 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PLA_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_pla_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 83fd52a1fd..14d8a31c0a 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft weight = -2 material = generic_pva_ultimaker3_BB_0.4 +setting_version = 1 [values] acceleration_support = =math.ceil(acceleration_print * 500 / 4000) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 582d6e9c76..f7034e278e 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -8,6 +8,7 @@ weight = -1 type = quality quality_type = fast material = generic_pva_ultimaker3_BB_0.4 +setting_version = 1 [values] acceleration_support = =math.ceil(acceleration_print * 500 / 4000) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index fc6be3ea3d..e929de3d78 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -8,6 +8,7 @@ weight = 0 type = quality quality_type = high material = generic_pva_ultimaker3_BB_0.4 +setting_version = 1 [values] acceleration_support = =math.ceil(acceleration_print * 500 / 4000) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 5eb690fa99..92eebb1a0b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ weight = 0 type = quality quality_type = normal material = generic_pva_ultimaker3_BB_0.4 +setting_version = 1 [values] acceleration_support = =math.ceil(acceleration_print * 500 / 4000) diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Quality.inst.cfg index 18bbdb6c12..106ef29f8e 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_tpu_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Superdraft_Quality.inst.cfg index 7d00e9e0df..95e0622c1a 100755 --- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_TPU_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_tpu_ultimaker3_BB_0.4 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Quality.inst.cfg index 81b6ff8f4b..def07a3a80 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_abs_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Superdraft_Quality.inst.cfg index 2b65cf0aee..fe4ec5bbc6 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_ABS_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_abs_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Quality.inst.cfg index 7b60406d2b..279e1c9c89 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_cpe_plus_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg index 6cec304241..3490da81a6 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_cpe_plus_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Quality.inst.cfg index dcb12e250f..b70fe13061 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_cpe_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Superdraft_Quality.inst.cfg index cc38d9956f..137a651ddd 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_CPE_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_cpe_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Quality.inst.cfg index 2bb282ad56..dfbf2754e2 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_nylon_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Superdraft_Quality.inst.cfg index 6f5099e267..9242228f50 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_nylon_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Quality.inst.cfg index 7e3df6c22b..f206fd4368 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_pc_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg index f0c4723a42..cb18b565d7 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PC_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_pc_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Quality.inst.cfg index 651b32be57..223b5a06fe 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_pla_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Superdraft_Quality.inst.cfg index 2ec598e2df..a4f6a6dfeb 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PLA_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_pla_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index 17e406cdc8..83960d1491 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft weight = -2 material = generic_pva_ultimaker3_BB_0.8 +setting_version = 1 [values] material_print_temperature = =default_material_print_temperature + 5 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 7e87761349..f907d0e492 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = superdraft weight = -4 material = generic_pva_ultimaker3_BB_0.8 +setting_version = 1 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index d79f0c6848..335d1f5c6d 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = verydraft weight = -3 material = generic_pva_ultimaker3_BB_0.8 +setting_version = 1 [values] layer_height = 0.3 diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg index 47652d807b..84e5c6d3d3 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = normal material = generic_tpu_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg index eb37c60507..222a4935d5 100755 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg @@ -9,5 +9,6 @@ quality_type = superdraft material = generic_tpu_ultimaker3_BB_0.8 weight = 0 supported = False +setting_version = 1 [values] diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg index 96e25c6ad8..ee35746983 100644 --- a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = draft global_quality = True weight = -2 +setting_version = 1 [values] layer_height = 0.2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg index 6b1c3c4208..274533485e 100644 --- a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = fast global_quality = True weight = -1 +setting_version = 1 [values] layer_height = 0.15 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index af0741ff88..a4f8b60fba 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = high global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.06 diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index a875b0f1ce..e3400f2c5f 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -8,6 +8,7 @@ type = quality quality_type = normal global_quality = True weight = 0 +setting_version = 1 [values] layer_height = 0.1 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg index fd3fd1f642..d9c8d00eee 100755 --- a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -7,7 +7,8 @@ definition = ultimaker3 type = quality quality_type = superdraft global_quality = True -weight = -2 +weight = -4 +setting_version = 1 [values] layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg index 83afa35e2e..35a62bd63e 100755 --- a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -7,7 +7,8 @@ definition = ultimaker3 type = quality quality_type = verydraft global_quality = True -weight = -2 +weight = -3 +setting_version = 1 [values] layer_height = 0.3 diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index 2c7ecc7b03..b789eef732 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -6,6 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant +setting_version = 1 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 43bed9bfbd..46140ccc24 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -6,6 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index 0f6fda119a..118d79144a 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -6,6 +6,7 @@ definition = cartesio [metadata] author = Cartesio type = variant +setting_version = 1 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/imade3d_jellybox_0.4.inst.cfg b/resources/variants/imade3d_jellybox_0.4.inst.cfg index b33fa0fea6..8bce86482b 100644 --- a/resources/variants/imade3d_jellybox_0.4.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4.inst.cfg @@ -6,6 +6,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg index 65c330e58b..e02c1fe29f 100644 --- a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg @@ -6,6 +6,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_0.25.inst.cfg index 9d59e47b89..1891124ce9 100644 --- a/resources/variants/ultimaker2_0.25.inst.cfg +++ b/resources/variants/ultimaker2_0.25.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_0.4.inst.cfg index 7ebcbb69b7..622c97e6ff 100644 --- a/resources/variants/ultimaker2_0.4.inst.cfg +++ b/resources/variants/ultimaker2_0.4.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_0.6.inst.cfg index accf507750..e64880932f 100644 --- a/resources/variants/ultimaker2_0.6.inst.cfg +++ b/resources/variants/ultimaker2_0.6.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_0.8.inst.cfg index 97452046cb..f4b86e58ed 100644 --- a/resources/variants/ultimaker2_0.8.inst.cfg +++ b/resources/variants/ultimaker2_0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2 [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg index b499db6163..044bec5731 100644 --- a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg index d2fb6f76b1..70cfbb81d1 100644 --- a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg index e4f9f0ce45..0bd4d181ac 100644 --- a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg index 18570ea75d..d83f23859f 100644 --- a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_extended_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker2_plus_0.25.inst.cfg b/resources/variants/ultimaker2_plus_0.25.inst.cfg index 7cab771101..f493fecb71 100644 --- a/resources/variants/ultimaker2_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.25.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.25 diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index 748f367250..b7a7d8c7a7 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.4 diff --git a/resources/variants/ultimaker2_plus_0.6.inst.cfg b/resources/variants/ultimaker2_plus_0.6.inst.cfg index 34d0f7a5cf..9954359cc5 100644 --- a/resources/variants/ultimaker2_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.6.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.6 diff --git a/resources/variants/ultimaker2_plus_0.8.inst.cfg b/resources/variants/ultimaker2_plus_0.8.inst.cfg index e719409060..de21ac87ab 100644 --- a/resources/variants/ultimaker2_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker2_plus [metadata] author = Ultimaker type = variant +setting_version = 1 [values] machine_nozzle_size = 0.8 diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 925346c66d..e0486289a1 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index dae256c990..4cf31caef0 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant +setting_version = 1 [values] brim_width = 7 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index d0c2c9c661..72d4143370 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index b813e8474d..b72d849796 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3 [metadata] author = ultimaker type = variant +setting_version = 1 [values] cool_fan_speed_max = =cool_fan_speed diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 9dec070e20..0fd110c76c 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index 6fa09c32ea..99daa082e4 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant +setting_version = 1 [values] brim_width = 7 diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index e4fb152ee0..f88dc818c8 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant +setting_version = 1 [values] acceleration_enabled = True diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index a7c43ea376..229bde1916 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -6,6 +6,7 @@ definition = ultimaker3_extended [metadata] author = ultimaker type = variant +setting_version = 1 [values] cool_fan_speed_max = 100 From ef2aa3b2b212b48ca75df9da6c9bd7f139a83fd4 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 13:59:31 +0200 Subject: [PATCH 746/816] Empty InstanceContainers are now correctly handled by setActiveMaterial again CURA-3789 --- cura/Settings/MachineManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 9d66bc7030..0837c577a5 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -721,7 +721,7 @@ class MachineManager(QObject): Logger.log("w", "While trying to set the active material, no material was found to replace it.") return - if old_quality_changes and old_quality_changes.getId() == "empty_quality_changes": + if old_quality_changes and isinstance(old_quality_changes, type(self._empty_quality_changes_container)): old_quality_changes = None self.blurSettings.emit() @@ -754,7 +754,7 @@ class MachineManager(QObject): candidate_quality = quality_manager.findQualityByQualityType(quality_type, quality_manager.getWholeMachineDefinition(machine_definition), [material_container]) - if not candidate_quality or candidate_quality.getId() == "empty_quality": + if not candidate_quality or isinstance(candidate_quality, type(self._empty_quality_changes_container)): # Fall back to a quality (which must be compatible with all other extruders) new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders( self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks()) From 38f081539a41c3935786815e2597f6dcdfe435cb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:01:06 +0200 Subject: [PATCH 747/816] Fix deserialising density That density variable was never used. Hope this fixes some unaccounted-for bug. Doesn't contribute to CURA-3427 but I'm listing it as if it does anyway. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index e813f6e686..0da3afa125 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -441,8 +441,8 @@ class XmlMaterialProfile(InstanceContainer): tag_name = _tag_without_namespace(entry) property_values[tag_name] = entry.text - diameter = float(property_values.get("diameter", 2.85)) # In mm - density = float(property_values.get("density", 1.3)) # In g/cm3 + meta_data["approximate_diameter"] = round(float(property_values.get("diameter", 2.85))) # In mm + meta_data["density"] = float(property_values.get("density", 1.3)) # In g/cm3 meta_data["properties"] = property_values self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0]) @@ -461,7 +461,6 @@ class XmlMaterialProfile(InstanceContainer): Logger.log("d", "Unsupported material setting %s", key) self._cached_values = global_setting_values - meta_data["approximate_diameter"] = round(diameter) meta_data["compatible"] = global_compatibility self.setMetaData(meta_data) self._dirty = False From c8295434f36a406b5328c0202ee84691339aa49d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:04:56 +0200 Subject: [PATCH 748/816] Load setting_version from XML material profile The setting_version is translated from the version number. The setting_version number currently happens to be the same as the version number of XML but that won't always be the case so we introduce a translation-step as well. Contributes to issue CURA-3427. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 0da3afa125..2878369cdd 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -21,6 +21,17 @@ class XmlMaterialProfile(InstanceContainer): super().__init__(container_id, *args, **kwargs) self._inherited_files = [] + ## Translates the version number in the XML files to the setting_version + # metadata entry. + # + # Since the two may increment independently we need a way to say which + # versions of the XML specification are compatible with our setting data + # version numbers. + def xmlVersionToSettingVersion(self, xml_version): + if xml_version == 1: #Only one known version and it happens to be the same as our current setting_version. + return 1 + return 0 + def getInheritedFiles(self): return self._inherited_files @@ -403,6 +414,7 @@ class XmlMaterialProfile(InstanceContainer): meta_data["type"] = "material" meta_data["base_file"] = self.id meta_data["status"] = "unknown" # TODO: Add material verfication + meta_data["setting_version"] = self.getVersionFromSerialized(serialized) inherits = data.find("./um:inherits", self.__namespaces) if inherits is not None: From 98662bc6f64e700fc255f0f921d70e09d55b1d2a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:07:21 +0200 Subject: [PATCH 749/816] Also update import to renamed package Oops. Contributes to issue CURA-3427. --- plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index 05e8e0e4cf..3aee161e3c 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -1,7 +1,7 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from . import VersionUpgrade24to25 +from . import VersionUpgrade25to26 from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") From 1e4c394b71359d83094b7a43c3cdedfa0bbd3b84 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:12:36 +0200 Subject: [PATCH 750/816] Remove getting superfluous material density The density is already put in the 'properties' metadata entry. Don't need to put it in there doubly. Turns out that this density line was originally just superfluous. Contributes to issue CURA-3427 or something. --- 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 2878369cdd..1b76a40016 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -454,7 +454,6 @@ class XmlMaterialProfile(InstanceContainer): property_values[tag_name] = entry.text meta_data["approximate_diameter"] = round(float(property_values.get("diameter", 2.85))) # In mm - meta_data["density"] = float(property_values.get("density", 1.3)) # In g/cm3 meta_data["properties"] = property_values self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0]) @@ -476,6 +475,7 @@ class XmlMaterialProfile(InstanceContainer): meta_data["compatible"] = global_compatibility self.setMetaData(meta_data) self._dirty = False + print(self.getMetaData()) machines = data.iterfind("./um:settings/um:machine", self.__namespaces) for machine in machines: From a472fd8163f6ca9ab808e877545afbe65a206b88 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:33:44 +0200 Subject: [PATCH 751/816] Remove debug print Oops again. Contributes to issue CURA-3427. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 1b76a40016..95e38457c9 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -475,7 +475,6 @@ class XmlMaterialProfile(InstanceContainer): meta_data["compatible"] = global_compatibility self.setMetaData(meta_data) self._dirty = False - print(self.getMetaData()) machines = data.iterfind("./um:settings/um:machine", self.__namespaces) for machine in machines: From 9ea0f4834105c8d0921f2f3a05f58ce37340a112 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 12 May 2017 14:14:58 +0200 Subject: [PATCH 752/816] Check definition changes conflicts in preRead() CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 58 +++++++++++++++------ 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 2a3719a4cc..16b08e90c4 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -109,7 +109,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): machine_type = "" variant_type_name = i18n_catalog.i18nc("@label", "Nozzle") - num_extruders = 0 # Check if there are any conflicts, so we can ask the user. archive = zipfile.ZipFile(file_name, "r") cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")] @@ -121,31 +120,41 @@ class ThreeMFWorkspaceReader(WorkspaceReader): instance_container_list = [] material_container_list = [] + # + # Read definition containers + # + machine_definition_container_count = 0 + extruder_definition_container_count = 0 definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] - for definition_container_file in definition_container_files: - container_id = self._stripFileToId(definition_container_file) + for each_definition_container_file in definition_container_files: + container_id = self._stripFileToId(each_definition_container_file) definitions = self._container_registry.findDefinitionContainers(id=container_id) if not definitions: definition_container = DefinitionContainer(container_id) - definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8")) + definition_container.deserialize(archive.open(each_definition_container_file).read().decode("utf-8")) else: definition_container = definitions[0] - definition_container_list.append(definition_container) - if definition_container.getMetaDataEntry("type") != "extruder": + definition_container_type = definition_container.getMetaDataEntry("type") + if definition_container_type == "machine": machine_type = definition_container.getName() variant_type_name = definition_container.getMetaDataEntry("variants_name", variant_type_name) + + machine_definition_container_count += 1 + elif definition_container_type == "extruder": + extruder_definition_container_count += 1 else: - num_extruders += 1 + Logger.log("w", "Unknown definition container type %s for %s", + definition_container_type, each_definition_container_file) Job.yieldThread() - - if num_extruders == 0: - num_extruders = 1 # No extruder stacks found, which means there is one extruder - - extruders = num_extruders * [""] + # sanity check + if machine_definition_container_count != 1: + msg = "Expecting one machine definition container but got %s" % machine_definition_container_count + Logger.log("e", msg) + raise RuntimeError(msg) material_labels = [] material_conflict = False @@ -161,20 +170,22 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if materials and not materials[0].isReadOnly(): # Only non readonly materials can be in conflict material_conflict = True Job.yieldThread() + # Check if any quality_changes instance container is in conflict. instance_container_files = [name for name in cura_file_names if name.endswith(self._instance_container_suffix)] quality_name = "" quality_type = "" num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes + num_settings_overriden_by_definition_changes = 0 # How many settings are changed by the definition changes num_user_settings = 0 quality_changes_conflict = False - for instance_container_file in instance_container_files: - container_id = self._stripFileToId(instance_container_file) + definition_changes_conflict = False + for each_instance_container_file in instance_container_files: + container_id = self._stripFileToId(each_instance_container_file) instance_container = InstanceContainer(container_id) # Deserialize InstanceContainer by converting read data from bytes to string - instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) - + instance_container.deserialize(archive.open(each_instance_container_file).read().decode("utf-8")) instance_container_list.append(instance_container) container_type = instance_container.getMetaDataEntry("type") @@ -187,6 +198,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Check if there really is a conflict by comparing the values if quality_changes[0] != instance_container: quality_changes_conflict = True + elif container_type == "definition_changes": + definition_name = instance_container.getName() + num_settings_overriden_by_definition_changes += len(instance_container._instances) + definition_changes = self._container_registry.findDefinitionContainers(id = container_id) + if definition_changes: + if definition_changes[0] != instance_container: + definition_changes_conflict = True elif container_type == "quality": # If the quality name is not set (either by quality or changes, set it now) # Quality changes should always override this (as they are "on top") @@ -237,9 +255,17 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if not show_dialog: return WorkspaceReader.PreReadResult.accepted + # prepare data for the dialog + num_extruders = extruder_definition_container_count + if num_extruders == 0: + num_extruders = 1 # No extruder stacks found, which means there is one extruder + + extruders = num_extruders * [""] + # Show the dialog, informing the user what is about to happen. self._dialog.setMachineConflict(machine_conflict) self._dialog.setQualityChangesConflict(quality_changes_conflict) + self._dialog.setDefinitionChangesConflict(definition_changes_conflict) self._dialog.setMaterialConflict(material_conflict) self._dialog.setNumVisibleSettings(num_visible_settings) self._dialog.setQualityName(quality_name) From fe11819ce9e9b077aa7d7585b9af236bf1eb3267 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 12 May 2017 14:17:40 +0200 Subject: [PATCH 753/816] Handle "new" resolve strategy for definition&quality changes CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 27 ++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 16b08e90c4..1485e6422f 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -455,7 +455,32 @@ class ThreeMFWorkspaceReader(WorkspaceReader): containers_to_add.append(instance_container) else: if self._resolve_strategies[container_type] == "override": - changes_containers[0].deserialize(archive.open(instance_container_file).read().decode("utf-8")) + instance_container = changes_containers[0] + instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) + instance_container.setDirty(True) + elif self._resolve_strategies[container_type] == "new": + # TODO: how should we handle the case "new" for quality_changes and definition_changes? + + new_changes_container_id = self.getNewId(instance_container.getId()) + instance_container._id = new_changes_container_id + instance_container.setName(new_changes_container_id) + + # TODO: we don't know the following is correct or not, need to verify + # AND REFACTOR!!! + if self._resolve_strategies["machine"] == "new": + # The machine is going to get a spiffy new name, so ensure that the id's of user settings match. + extruder_id = instance_container.getMetaDataEntry("extruder", None) + if extruder_id: + new_extruder_id = self.getNewId(extruder_id) + instance_container.setMetaDataEntry("extruder", new_extruder_id) + + machine_id = instance_container.getMetaDataEntry("machine", None) + if machine_id: + new_machine_id = self.getNewId(machine_id) + instance_container.setMetaDataEntry("machine", new_machine_id) + + containers_to_add.append(instance_container) + elif self._resolve_strategies[container_type] is None: # The ID already exists, but nothing in the values changed, so do nothing. pass From 167f616a7c5c81344921b895a9e7028f069c7bf7 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 14:34:45 +0200 Subject: [PATCH 754/816] Decreased interval of extruder timer --- cura/Settings/ExtrudersModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index d2922ebcc5..7491f8aa93 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -59,7 +59,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.VariantRole, "variant") self._update_extruder_timer = QTimer() - self._update_extruder_timer.setInterval(250) + self._update_extruder_timer.setInterval(100) self._update_extruder_timer.setSingleShot(True) self._update_extruder_timer.timeout.connect(self.__updateExtruders) From ebd730a68d059579b9bcc63c30b2f798b5264aae Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:43:05 +0200 Subject: [PATCH 755/816] Also add setting_version to fdmextruder Since it obviously doesn't inherit from fdmprinter. Contributes to issue CURA-3427. --- resources/definitions/fdmextruder.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index ff54582885..be006dfe59 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -7,6 +7,7 @@ "type": "extruder", "author": "Ultimaker B.V.", "manufacturer": "Ultimaker", + "setting_version": 1, "visible": false }, "settings": From 5bc613c3e0526dc0f44c18c4632c8ce6546c11fe Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:44:46 +0200 Subject: [PATCH 756/816] Don't use string for default version No need to go via string and cast that to int, just return int directly. Contributes to issue CURA-3427. --- cura/Settings/CuraContainerRegistry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 91327ceb54..a4dbcc4ca1 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. import os @@ -44,7 +44,7 @@ class CuraContainerRegistry(ContainerRegistry): if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()): #Check against setting version of the definition. required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version")) - actual_setting_version = int(container.getMetaDataEntry("setting_version", default = "0")) + actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0)) if required_setting_version != actual_setting_version: Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version)) return #Don't add. From 20e9d195876b2a20a6fa85521b9ae50f86cea75d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:50:43 +0200 Subject: [PATCH 757/816] Update tests to account for new way of getting version numbers The normal version number is multiplied by a million. Currently these tests fail, so nice to have them. Contributes to issue CURA-3427. --- .../VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index 9f8f1e8590..f965a6db2a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -17,7 +17,7 @@ test_cfg_version_good_data = [ "file_data": """[general] version = 1 """, - "version": 1 + "version": 1000000 }, { "test_name": "Other Data Around", @@ -31,14 +31,14 @@ version = 3 layer_height = 0.12 infill_sparse_density = 42 """, - "version": 3 + "version": 3000000 }, { "test_name": "Negative Version", #Why not? "file_data": """[general] version = -20 """, - "version": -20 + "version": -20000000 } ] From 9820dac4a6f0dbe942cbd66e8e13536361af68d0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:51:44 +0200 Subject: [PATCH 758/816] Actually use setting_version to get the setting version number This was sort of hidden because we've always incremented the normal version number up until now. Contributes to issue CURA-3427. --- .../VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py | 2 +- plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 2 +- .../VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index 855425053a..0785efa875 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -250,7 +250,7 @@ class VersionUpgrade21to22(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "version", fallback = 0)) + setting_version = int(parser.get("general", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version ## Gets the fallback quality to use for a specific machine-variant-material diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index e1da456c48..a9310e6c63 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -146,5 +146,5 @@ class VersionUpgrade22to24(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "version", fallback = 0)) + setting_version = int(parser.get("general", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index da899b03e5..939c0b5c78 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -35,7 +35,7 @@ class VersionUpgrade25to26(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "version", fallback = 0)) + setting_version = int(parser.get("general", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version ## Upgrades the preferences file from version 2.5 to 2.6. From 55b2392a1d2ca282d2ecf27cff95abe9a6887a79 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:54:33 +0200 Subject: [PATCH 759/816] Load setting version from metadata I'm not really awake today, am I? The functionality happened to still work because of how our real data is structured right now, but the tests still failed. Those are successful now. Contributes to issue CURA-3427. --- .../VersionUpgrade21to22/VersionUpgrade21to22.py | 4 ++-- .../VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 4 ++-- .../VersionUpgrade25to26/VersionUpgrade25to26.py | 2 +- .../VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py | 7 +++++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index 0785efa875..055d28b3ab 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. import configparser #To get version numbers from config files. @@ -250,7 +250,7 @@ class VersionUpgrade21to22(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version ## Gets the fallback quality to use for a specific machine-variant-material diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index a9310e6c63..ab934210f6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. import configparser #To get version numbers from config files. @@ -146,5 +146,5 @@ class VersionUpgrade22to24(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 939c0b5c78..c61962d276 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -35,7 +35,7 @@ class VersionUpgrade25to26(VersionUpgrade): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("general", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) return format_version * 1000000 + setting_version ## Upgrades the preferences file from version 2.5 to 2.6. diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index f965a6db2a..6d9819bd82 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -39,6 +39,13 @@ infill_sparse_density = 42 version = -20 """, "version": -20000000 + }, + { + "test_name": "Setting Version", + "file_data": """[general] +version = 1 +[metadata] +setting_version = 1""" } ] From 04ef2bf1f0249e9183f49acad13c06dbff562e32 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 14:58:11 +0200 Subject: [PATCH 760/816] Update setting_version tests Included a bit of a more difficult case. Contributes to issue CURA-3427. --- .../tests/TestVersionUpgrade25to26.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index 6d9819bd82..e62635561d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -45,7 +45,18 @@ version = -20 "file_data": """[general] version = 1 [metadata] -setting_version = 1""" +setting_version = 1 +""", + "version": 1000001 + }, + { + "test_name": "Negative Setting Version", + "file_data": """[general] +version = 1 +[metadata] +setting_version = -3 +""", + "version": 999997 } ] From adefbaf72ea6ed4b84a0c807294c6368f606458c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 15:01:27 +0200 Subject: [PATCH 761/816] Add more unhappy-path tests One for the new setting_version. One for the misconception of version numbers being a major-minor version or something, because it's not stored that way. Contributes to issue CURA-3427. --- .../tests/TestVersionUpgrade25to26.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index e62635561d..78cd8a03c5 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -95,6 +95,22 @@ true = false "test_name": "Not a Number", "file_data": """[general] version = not-a-text-version-number +""", + "exception": ValueError + }, + { + "test_name": "Setting Value NaN", + "file_data": """[general] +version = 4 +[metadata] +setting_version = latest_or_something +""", + "exception": ValueError + }, + { + "test_name": "Major-Minor", + "file_data": """[general] +version = 1.2 """, "exception": ValueError } From 3996230ff9f70da1564ac52545d7f99b1e70e2f0 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 12 May 2017 15:51:35 +0200 Subject: [PATCH 762/816] Load GlobalStack before ExtruderStacks for project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 143 ++++++++++---------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 1485e6422f..3b5d9dac77 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -350,6 +350,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_stacks_added = [] container_stacks_added = [] + containers_added = [] + global_stack_id_original = self._stripFileToId(global_stack_file) global_stack_id_new = global_stack_id_original global_stack_need_rename = False @@ -497,73 +499,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader): for container in containers_to_add: self._container_registry.addContainer(container) container.setDirty(True) + containers_added.append(container) # Get the stack(s) saved in the workspace. Logger.log("d", "Workspace loading is checking stacks containers...") - # load extruder stack files - try: - for index, extruder_stack_file in enumerate(extruder_stack_files): - container_id = self._stripFileToId(extruder_stack_file) - - container_stacks = self._container_registry.findContainerStacks(id = container_id) - if container_stacks: - # this container stack already exists, try to resolve - stack = container_stacks[0] - if self._resolve_strategies["machine"] == "override": - pass # do nothing - elif self._resolve_strategies["machine"] == "new": - # create a new extruder stack from this one - new_id = self.getNewId(container_id) - stack = ExtruderStack(new_id) - stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - - # Ensure a unique ID and name - stack._id = new_id - - self._container_registry.addContainer(stack) - extruder_stacks_added.append(stack) - else: - if self._resolve_strategies["machine"] == "override": - global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) - # deserialize new extruder stack over the current ones - if global_stacks: - old_extruder_stack_id = global_stacks[0].extruders[index].getId() - # HACK delete file - self._container_registry._deleteFiles(global_stacks[0].extruders[index]) - global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - # HACK - global_stacks[0]._extruders = global_stacks[0]._extruders[:2] - # HACK update cache - del self._container_registry._id_container_cache[old_extruder_stack_id] - new_extruder_stack_id = global_stacks[0].extruders[index].getId() - self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] - - stack = global_stacks[0].extruders[index] - else: - Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) - elif self._resolve_strategies["machine"] == "new": - # container not found, create a new one - stack = ExtruderStack(container_id) - stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - self._container_registry.addContainer(stack) - extruder_stacks_added.append(stack) - else: - Logger.log("w", "Unknown resolve strategy: %s" % str(self._resolve_strategies["machine"])) - - if global_stack_need_rename: - if stack.getMetaDataEntry("machine"): - stack.setMetaDataEntry("machine", global_stack_id_new) - extruder_stacks.append(stack) - - except: - Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") - # Something went really wrong. Try to remove any data that we added. - for container in extruder_stacks: - self._container_registry.removeContainer(container.getId()) - - return None - + # -- # load global stack file try: # Check if a stack by this ID already exists; @@ -606,22 +547,80 @@ class ThreeMFWorkspaceReader(WorkspaceReader): stack.deserialize(archive.open(global_stack_file).read().decode("utf-8")) container_stacks_added.append(stack) self._container_registry.addContainer(stack) + containers_added.append(stack) global_stack = stack Job.yieldThread() + except: + Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") + # Something went really wrong. Try to remove any data that we added. + for container in containers_added: + self._container_registry.removeContainer(container.getId()) + return + + # -- + # load extruder stack files + try: + for index, extruder_stack_file in enumerate(extruder_stack_files): + container_id = self._stripFileToId(extruder_stack_file) + + container_stacks = self._container_registry.findContainerStacks(id = container_id) + if container_stacks: + # this container stack already exists, try to resolve + stack = container_stacks[0] + if self._resolve_strategies["machine"] == "override": + pass # do nothing + elif self._resolve_strategies["machine"] == "new": + # create a new extruder stack from this one + new_id = self.getNewId(container_id) + stack = ExtruderStack(new_id) + stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + + # Ensure a unique ID and name + stack._id = new_id + + self._container_registry.addContainer(stack) + extruder_stacks_added.append(stack) + containers_added.append(stack) + else: + if self._resolve_strategies["machine"] == "override": + global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) + # deserialize new extruder stack over the current ones + if global_stacks: + old_extruder_stack_id = global_stacks[0].extruders[index].getId() + # HACK delete file + self._container_registry._deleteFiles(global_stacks[0].extruders[index]) + global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + # HACK + global_stacks[0]._extruders = global_stacks[0]._extruders[:2] + # HACK update cache + del self._container_registry._id_container_cache[old_extruder_stack_id] + new_extruder_stack_id = global_stacks[0].extruders[index].getId() + self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] + + stack = global_stacks[0].extruders[index] + else: + Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) + elif self._resolve_strategies["machine"] == "new": + # container not found, create a new one + stack = ExtruderStack(container_id) + stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + self._container_registry.addContainer(stack) + extruder_stacks_added.append(stack) + containers_added.append(stack) + else: + Logger.log("w", "Unknown resolve strategy: %s" % str(self._resolve_strategies["machine"])) + + if global_stack_need_rename: + if stack.getMetaDataEntry("machine"): + stack.setMetaDataEntry("machine", global_stack_id_new) + extruder_stacks.append(stack) except: Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") # Something went really wrong. Try to remove any data that we added. - for container in containers_to_add: + for container in containers_added: self._container_registry.removeContainer(container.getId()) - - for container in container_stacks_added: - self._container_registry.removeContainer(container.getId()) - - for container in extruder_stacks_added: - self._container_registry.removeContainer(container.getId()) - - return None + return # # Replacing the old containers if resolve is "new". From e50b0884f09c032530cf518474ca9c7c4a9ff99d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 15:59:38 +0200 Subject: [PATCH 763/816] Add test for registring containers This test tests adding container stacks and seeing if they convert well. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 7b191a8376..031875df8c 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -11,6 +11,7 @@ from cura.Settings.CuraContainerRegistry import CuraContainerRegistry #The class from cura.Settings.ExtruderStack import ExtruderStack #Testing for returning the correct types of stacks. from cura.Settings.GlobalStack import GlobalStack #Testing for returning the correct types of stacks. from UM.Resources import Resources #Mocking some functions of this. +import UM.Settings.InstanceContainer #Creating instance containers to register. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. from UM.Settings.DefinitionContainer import DefinitionContainer @@ -18,7 +19,10 @@ from UM.Settings.DefinitionContainer import DefinitionContainer ## Gives a fresh CuraContainerRegistry instance. @pytest.fixture() def container_registry(): - return CuraContainerRegistry() + registry = CuraContainerRegistry() + UM.Settings.InstanceContainer.setContainerRegistry(registry) + UM.Settings.ContainerStack.setContainerRegistry(registry) + return registry def teardown(): #If the temporary file for the legacy file rename test still exists, remove it. @@ -26,6 +30,23 @@ def teardown(): if os.path.isfile(temporary_file): os.remove(temporary_file) +## Tests whether the addContainer function properly converts ContainerStacks. +def test_addContainerExtruderStack(container_registry): + definition = DefinitionContainer(container_id = "Test Definition") #Need some definition first to be able to register stacks. + container_registry.addContainer(definition) + + container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Container Stack") #A container we're going to convert. + container_stack.addMetaDataEntry("type", "extruder_train") #This is now an extruder train. + container_stack.insertContainer(0, definition) #Add a definition to it so it doesn't complain. + + mock_super_add_container = unittest.mock.MagicMock() + with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): + container_registry.addContainer(container_stack) + + assert len(mock_super_add_container.call_args_list) == 1 #Called only once. + assert len(mock_super_add_container.call_args_list[0][0]) == 1 #Called with one parameter. + assert type(mock_super_add_container.call_args_list[0][0][0]) == ExtruderStack + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From ab7b9913c763c983375605da045b100cd8fd792c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:11:51 +0200 Subject: [PATCH 764/816] Add test for registering global stacks This test tests adding container stacks and seeing if they convert well. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 031875df8c..fae843f820 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -30,7 +30,7 @@ def teardown(): if os.path.isfile(temporary_file): os.remove(temporary_file) -## Tests whether the addContainer function properly converts ContainerStacks. +## Tests whether addContainer properly converts to ExtruderStack. def test_addContainerExtruderStack(container_registry): definition = DefinitionContainer(container_id = "Test Definition") #Need some definition first to be able to register stacks. container_registry.addContainer(definition) @@ -39,7 +39,7 @@ def test_addContainerExtruderStack(container_registry): container_stack.addMetaDataEntry("type", "extruder_train") #This is now an extruder train. container_stack.insertContainer(0, definition) #Add a definition to it so it doesn't complain. - mock_super_add_container = unittest.mock.MagicMock() + mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): container_registry.addContainer(container_stack) @@ -47,6 +47,23 @@ def test_addContainerExtruderStack(container_registry): assert len(mock_super_add_container.call_args_list[0][0]) == 1 #Called with one parameter. assert type(mock_super_add_container.call_args_list[0][0][0]) == ExtruderStack +## Tests whether addContainer properly converts to GlobalStack. +def test_addContainerGlobalStack(container_registry): + definition = DefinitionContainer(container_id = "Test Definition") #Need some definition first to be able to register stacks. + container_registry.addContainer(definition) + + container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Container Stack") #A container we're going to convert. + container_stack.addMetaDataEntry("type", "machine") #This is now a global stack. + container_stack.insertContainer(0, definition) #Must have a definition. + + mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. + with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): + container_registry.addContainer(container_stack) + + assert len(mock_super_add_container.call_args_list) == 1 #Called only once. + assert len(mock_super_add_container.call_args_list[0][0]) == 1 #Called with one parameter. + assert type(mock_super_add_container.call_args_list[0][0][0]) == GlobalStack + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From 2b64e92a99aba7ba3b60ab8e4af3bd6adbfe8e9d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:13:09 +0200 Subject: [PATCH 765/816] Removed unused imports --- cura/Settings/MachineManager.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 0837c577a5..f2c91f9e74 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -11,14 +11,11 @@ from UM.Application import Application from UM.Preferences import Preferences from UM.Logger import Logger from UM.Message import Message -from UM.Decorators import deprecated from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer -from UM.Settings.SettingDefinition import SettingDefinition from UM.Settings.SettingFunction import SettingFunction -from UM.Settings.Validator import ValidatorState from UM.Signal import postponeSignals import UM.FlameProfiler @@ -39,6 +36,7 @@ if TYPE_CHECKING: import os + class MachineManager(QObject): def __init__(self, parent = None): super().__init__(parent) @@ -105,8 +103,6 @@ class MachineManager(QObject): self._material_incompatible_message = Message(catalog.i18nc("@info:status", "The selected material is incompatible with the selected machine or configuration.")) - - globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) activeMaterialChanged = pyqtSignal() activeVariantChanged = pyqtSignal() From 08c0779ddedaeca057f91f531556f2dfa004b9cb Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 May 2017 16:18:46 +0200 Subject: [PATCH 766/816] Remove unused file, context menu takes care of the multiply object dialog --- resources/qml/MultiplyObjectOptions.qml | 66 ------------------------- 1 file changed, 66 deletions(-) delete mode 100644 resources/qml/MultiplyObjectOptions.qml diff --git a/resources/qml/MultiplyObjectOptions.qml b/resources/qml/MultiplyObjectOptions.qml deleted file mode 100644 index a079369d0d..0000000000 --- a/resources/qml/MultiplyObjectOptions.qml +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the AGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Window 2.1 - -import UM 1.1 as UM - -UM.Dialog -{ - id: base - - //: Dialog title - title: catalog.i18nc("@title:window", "Multiply Model") - - minimumWidth: 400 * Screen.devicePixelRatio - minimumHeight: 80 * Screen.devicePixelRatio - width: minimumWidth - height: minimumHeight - - property var objectId: 0; - onAccepted: CuraApplication.multiplyObject(base.objectId, parseInt(copiesField.text)) - - property variant catalog: UM.I18nCatalog { name: "cura" } - - signal reset() - onReset: { - copiesField.text = "1"; - copiesField.selectAll(); - copiesField.focus = true; - } - - Row - { - spacing: UM.Theme.getSize("default_margin").width - - Label { - text: "Number of copies:" - anchors.verticalCenter: copiesField.verticalCenter - } - - TextField { - id: copiesField - validator: RegExpValidator { regExp: /^\d{0,2}/ } - maximumLength: 2 - } - } - - - rightButtons: - [ - Button - { - text: catalog.i18nc("@action:button","OK") - onClicked: base.accept() - enabled: base.objectId != 0 && parseInt(copiesField.text) > 0 - }, - Button - { - text: catalog.i18nc("@action:button","Cancel") - onClicked: base.reject() - } - ] -} - From 52ffac677f8eda122727ab40354245684cd20703 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:21:33 +0200 Subject: [PATCH 767/816] Add test for happy path of filtering by setting_version If the setting_version is correct, the container should get registered. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index fae843f820..bbeab3b1c3 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -64,6 +64,21 @@ def test_addContainerGlobalStack(container_registry): assert len(mock_super_add_container.call_args_list[0][0]) == 1 #Called with one parameter. assert type(mock_super_add_container.call_args_list[0][0][0]) == GlobalStack +def test_addContainerGoodSettingVersion(container_registry): + definition = DefinitionContainer(container_id = "Test Definition") + definition.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition) + + instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") + instance.addMetaDataEntry("setting_version", 3) + instance.setDefinition(definition) + + mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered. + with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): + container_registry.addContainer(instance) + + mock_super_add_container.assert_called_once_with(instance) #The instance must have been registered now. + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From 2888189f570c8486ed975a7d0f2dd4c5db321b05 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:25:14 +0200 Subject: [PATCH 768/816] Add test for when an instance container has no setting_version The setting_version is interpreted as 0 then. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index bbeab3b1c3..befdcd5fe4 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -79,6 +79,21 @@ def test_addContainerGoodSettingVersion(container_registry): mock_super_add_container.assert_called_once_with(instance) #The instance must have been registered now. +def test_addContainerNoSettingVersion(container_registry): + definition = DefinitionContainer(container_id = "Test Definition") + definition.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition) + + instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") + #Don't add setting_version metadata. + instance.setDefinition(definition) + + mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. + with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): + container_registry.addContainer(instance) + + mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version is interpreted as 0! + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From 77204fc4b010506849dbc2be58f9e4000b23a7cf Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:27:37 +0200 Subject: [PATCH 769/816] Type hinting & unused code removal --- cura/Settings/MachineManager.py | 188 ++++++-------------------------- 1 file changed, 34 insertions(+), 154 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f2c91f9e74..57cc296bdf 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -327,7 +327,7 @@ class MachineManager(QObject): def _onInstanceContainersChanged(self, container): self._instance_container_timer.start() - def _onPropertyChanged(self, key, property_name): + def _onPropertyChanged(self, key: str, property_name: str): if property_name == "value": # Notify UI items, such as the "changed" star in profile pull down menu. self.activeStackValueChanged.emit() @@ -411,7 +411,7 @@ class MachineManager(QObject): ## Delete a user setting from the global stack and all extruder stacks. # \param key \type{str} the name of the key to delete @pyqtSlot(str) - def clearUserSettingAllCurrentStacks(self, key): + def clearUserSettingAllCurrentStacks(self, key: str): if not self._global_container_stack: return @@ -567,7 +567,7 @@ class MachineManager(QObject): # \return The layer height of the currently active quality profile. If # there is no quality profile, this returns 0. @pyqtProperty(float, notify=activeQualityChanged) - def activeQualityLayerHeight(self): + def activeQualityLayerHeight(self) -> float: if not self._global_container_stack: return 0 @@ -584,7 +584,7 @@ class MachineManager(QObject): value = value(self._global_container_stack) return value - return 0 #No quality profile. + return 0 # No quality profile. ## Get the Material ID associated with the currently active material # \returns MaterialID (string) if found, empty string otherwise @@ -606,7 +606,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify=activeQualityChanged) - def activeQualityName(self): + def activeQualityName(self) -> str: if self._active_container_stack and self._global_container_stack: quality = self._global_container_stack.qualityChanges if quality and not isinstance(quality, type(self._empty_quality_changes_container)): @@ -617,7 +617,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify=activeQualityChanged) - def activeQualityId(self): + def activeQualityId(self) -> str: if self._active_container_stack: quality = self._active_container_stack.qualityChanges if quality and not isinstance(quality, type(self._empty_quality_changes_container)): @@ -628,7 +628,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify=activeQualityChanged) - def globalQualityId(self): + def globalQualityId(self) -> str: if self._global_container_stack: quality = self._global_container_stack.qualityChanges if quality and not isinstance(quality, type(self._empty_quality_changes_container)): @@ -639,7 +639,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = activeQualityChanged) - def activeQualityType(self): + def activeQualityType(self) -> str: if self._active_container_stack: quality = self._active_container_stack.quality if quality: @@ -647,7 +647,7 @@ class MachineManager(QObject): return "" @pyqtProperty(bool, notify = activeQualityChanged) - def isActiveQualitySupported(self): + def isActiveQualitySupported(self) -> bool: if self._active_container_stack: quality = self._active_container_stack.quality if quality: @@ -661,7 +661,7 @@ class MachineManager(QObject): # \todo Ideally, this method would be named activeQualityId(), and the other one # would be named something like activeQualityOrQualityChanges() for consistency @pyqtProperty(str, notify = activeQualityChanged) - def activeQualityContainerId(self): + def activeQualityContainerId(self) -> str: # We're using the active stack instead of the global stack in case the list of qualities differs per extruder if self._global_container_stack: quality = self._active_container_stack.quality @@ -670,7 +670,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = activeQualityChanged) - def activeQualityChangesId(self): + def activeQualityChangesId(self) -> str: if self._active_container_stack: changes = self._active_container_stack.qualityChanges if changes and changes.getId() != "empty": @@ -687,7 +687,7 @@ class MachineManager(QObject): ## Copy the value of the setting of the current extruder to all other extruders as well as the global container. @pyqtSlot(str) - def copyValueToExtruders(self, key): + def copyValueToExtruders(self, key: str): if not self._active_container_stack or self._global_container_stack.getProperty("machine_extruder_count", "value") <= 1: return @@ -701,7 +701,7 @@ class MachineManager(QObject): ## Set the active material by switching out a container # Depending on from/to material+current variant, a quality profile is chosen and set. @pyqtSlot(str) - def setActiveMaterial(self, material_id): + def setActiveMaterial(self, material_id: str): with postponeSignals(*self._getContainerChangedSignals(), compress = True): containers = ContainerRegistry.getInstance().findInstanceContainers(id = material_id) if not containers or not self._active_container_stack: @@ -766,7 +766,7 @@ class MachineManager(QObject): self.setActiveQuality(new_quality_id) @pyqtSlot(str) - def setActiveVariant(self, variant_id): + def setActiveVariant(self, variant_id: str): with postponeSignals(*self._getContainerChangedSignals(), compress = True): containers = ContainerRegistry.getInstance().findInstanceContainers(id = variant_id) if not containers or not self._active_container_stack: @@ -789,7 +789,7 @@ class MachineManager(QObject): ## set the active quality # \param quality_id The quality_id of either a quality or a quality_changes @pyqtSlot(str) - def setActiveQuality(self, quality_id): + def setActiveQuality(self, quality_id: str): with postponeSignals(*self._getContainerChangedSignals(), compress = True): self.blurSettings.emit() @@ -848,7 +848,7 @@ class MachineManager(QObject): # \param quality_name \type{str} the name of the quality. # \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes". @UM.FlameProfiler.profile - def determineQualityAndQualityChangesForQualityType(self, quality_type): + def determineQualityAndQualityChangesForQualityType(self, quality_type: str): quality_manager = QualityManager.getInstance() result = [] empty_quality_changes = self._empty_quality_changes_container @@ -885,7 +885,7 @@ class MachineManager(QObject): # # \param quality_changes_name \type{str} the name of the quality changes. # \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes". - def _determineQualityAndQualityChangesForQualityChanges(self, quality_changes_name): + def _determineQualityAndQualityChangesForQualityChanges(self, quality_changes_name: str): result = [] quality_manager = QualityManager.getInstance() @@ -960,7 +960,7 @@ class MachineManager(QObject): Application.getInstance().discardOrKeepProfileChanges() @pyqtProperty(str, notify = activeVariantChanged) - def activeVariantName(self): + def activeVariantName(self) -> str: if self._active_container_stack: variant = self._active_container_stack.variant if variant: @@ -969,7 +969,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = activeVariantChanged) - def activeVariantId(self): + def activeVariantId(self) -> str: if self._active_container_stack: variant = self._active_container_stack.variant if variant: @@ -978,7 +978,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify = globalContainerChanged) - def activeDefinitionId(self): + def activeDefinitionId(self) -> str: if self._global_container_stack: definition = self._global_container_stack.getBottom() if definition: @@ -987,7 +987,7 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify=globalContainerChanged) - def activeDefinitionName(self): + def activeDefinitionName(self) -> str: if self._global_container_stack: definition = self._global_container_stack.getBottom() if definition: @@ -999,7 +999,7 @@ class MachineManager(QObject): # \returns DefinitionID (string) if found, empty string otherwise # \sa getQualityDefinitionId @pyqtProperty(str, notify = globalContainerChanged) - def activeQualityDefinitionId(self): + def activeQualityDefinitionId(self) -> str: if self._global_container_stack: return self.getQualityDefinitionId(self._global_container_stack.getBottom()) return "" @@ -1008,14 +1008,14 @@ class MachineManager(QObject): # This is normally the id of the definition itself, but machines can specify a different definition to inherit qualities from # \param definition (DefinitionContainer) machine definition # \returns DefinitionID (string) if found, empty string otherwise - def getQualityDefinitionId(self, definition): + def getQualityDefinitionId(self, definition: "DefinitionContainer") -> str: return QualityManager.getInstance().getParentMachineDefinition(definition).getId() ## Get the Variant ID to use to select quality profiles for the currently active variant # \returns VariantID (string) if found, empty string otherwise # \sa getQualityVariantId @pyqtProperty(str, notify = activeVariantChanged) - def activeQualityVariantId(self): + def activeQualityVariantId(self) -> str: if self._active_container_stack: variant = self._active_container_stack.variant if variant: @@ -1026,9 +1026,9 @@ class MachineManager(QObject): # This is normally the id of the variant itself, but machines can specify a different definition # to inherit qualities from, which has consequences for the variant to use as well # \param definition (DefinitionContainer) machine definition - # \param variant (DefinitionContainer) variant definition + # \param variant (InstanceContainer) variant definition # \returns VariantID (string) if found, empty string otherwise - def getQualityVariantId(self, definition, variant): + def getQualityVariantId(self, definition: "DefinitionContainer", variant: "InstanceContainer") -> str: variant_id = variant.getId() definition_id = definition.getId() quality_definition_id = self.getQualityDefinitionId(definition) @@ -1040,7 +1040,7 @@ class MachineManager(QObject): ## Gets how the active definition calls variants # Caveat: per-definition-variant-title is currently not translated (though the fallback is) @pyqtProperty(str, notify = globalContainerChanged) - def activeDefinitionVariantsName(self): + def activeDefinitionVariantsName(self) -> str: fallback_title = catalog.i18nc("@label", "Nozzle") if self._global_container_stack: return self._global_container_stack.getBottom().getMetaDataEntry("variants_name", fallback_title) @@ -1048,7 +1048,7 @@ class MachineManager(QObject): return fallback_title @pyqtSlot(str, str) - def renameMachine(self, machine_id, new_name): + def renameMachine(self, machine_id: str, new_name: str): containers = ContainerRegistry.getInstance().findContainerStacks(id = machine_id) if containers: new_name = self._createUniqueName("machine", containers[0].getName(), new_name, containers[0].getBottom().getName()) @@ -1056,7 +1056,7 @@ class MachineManager(QObject): self.globalContainerChanged.emit() @pyqtSlot(str) - def removeMachine(self, machine_id): + def removeMachine(self, machine_id: str): # If the machine that is being removed is the currently active machine, set another machine as the active machine. activate_new_machine = (self._global_container_stack and self._global_container_stack.getId() == machine_id) @@ -1074,14 +1074,14 @@ class MachineManager(QObject): @pyqtProperty(bool, notify = globalContainerChanged) - def hasMaterials(self): + def hasMaterials(self) -> bool: if self._global_container_stack: return bool(self._global_container_stack.getMetaDataEntry("has_materials", False)) return False @pyqtProperty(bool, notify = globalContainerChanged) - def hasVariants(self): + def hasVariants(self) -> bool: if self._global_container_stack: return bool(self._global_container_stack.getMetaDataEntry("has_variants", False)) @@ -1090,7 +1090,7 @@ class MachineManager(QObject): ## Property to indicate if a machine has "specialized" material profiles. # Some machines have their own material profiles that "override" the default catch all profiles. @pyqtProperty(bool, notify = globalContainerChanged) - def filterMaterialsByMachine(self): + def filterMaterialsByMachine(self) -> bool: if self._global_container_stack: return bool(self._global_container_stack.getMetaDataEntry("has_machine_materials", False)) @@ -1099,7 +1099,7 @@ class MachineManager(QObject): ## Property to indicate if a machine has "specialized" quality profiles. # Some machines have their own quality profiles that "override" the default catch all profiles. @pyqtProperty(bool, notify = globalContainerChanged) - def filterQualityByMachine(self): + def filterQualityByMachine(self) -> bool: if self._global_container_stack: return bool(self._global_container_stack.getMetaDataEntry("has_machine_quality", False)) return False @@ -1108,7 +1108,7 @@ class MachineManager(QObject): # \param machine_id string machine id to get the definition ID of # \returns DefinitionID (string) if found, None otherwise @pyqtSlot(str, result = str) - def getDefinitionByMachineId(self, machine_id): + def getDefinitionByMachineId(self, machine_id: str) -> str: containers = ContainerRegistry.getInstance().findContainerStacks(id=machine_id) if containers: return containers[0].getBottom().getId() @@ -1117,22 +1117,6 @@ class MachineManager(QObject): def createMachineManager(engine=None, script_engine=None): return MachineManager() - def _updateVariantContainer(self, definition: "DefinitionContainer"): - if not definition.getMetaDataEntry("has_variants"): - return self._empty_variant_container - machine_definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(definition) - containers = [] - preferred_variant = definition.getMetaDataEntry("preferred_variant") - if preferred_variant: - containers = ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = machine_definition_id, id = preferred_variant) - if not containers: - containers = ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = machine_definition_id) - - if containers: - return containers[0] - - return self._empty_variant_container - def _updateMaterialContainer(self, definition: "DefinitionContainer", stack: "ContainerStack", variant_container: Optional["InstanceContainer"] = None, preferred_material_name: Optional[str] = None): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container @@ -1170,110 +1154,6 @@ class MachineManager(QObject): Logger.log("w", "Unable to find a material container with provided criteria, returning an empty one instead.") return self._empty_material_container - def _updateQualityContainer(self, definition: "DefinitionContainer", variant_container: "ContainerStack", material_container = None, preferred_quality_name: Optional[str] = None): - container_registry = ContainerRegistry.getInstance() - search_criteria = { "type": "quality" } - - if definition.getMetaDataEntry("has_machine_quality"): - search_criteria["definition"] = self.getQualityDefinitionId(definition) - - if definition.getMetaDataEntry("has_materials") and material_container: - search_criteria["material"] = material_container.id - else: - search_criteria["definition"] = "fdmprinter" - - if preferred_quality_name and preferred_quality_name != "empty": - search_criteria["name"] = preferred_quality_name - else: - preferred_quality = definition.getMetaDataEntry("preferred_quality") - if preferred_quality: - search_criteria["id"] = preferred_quality - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - if "material" in search_criteria: - # First check if we can solve our material not found problem by checking if we can find quality containers - # that are assigned to the parents of this material profile. - try: - inherited_files = material_container.getInheritedFiles() - except AttributeError: # Material_container does not support inheritance. - inherited_files = [] - - if inherited_files: - for inherited_file in inherited_files: - # Extract the ID from the path we used to load the file. - search_criteria["material"] = os.path.basename(inherited_file).split(".")[0] - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - # We still weren't able to find a quality for this specific material. - # Try to find qualities for a generic version of the material. - material_search_criteria = { "type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} - if definition.getMetaDataEntry("has_machine_quality"): - if material_container: - material_search_criteria["definition"] = material_container.getDefinition().id - - if definition.getMetaDataEntry("has_variants"): - material_search_criteria["variant"] = material_container.getMetaDataEntry("variant") - else: - material_search_criteria["definition"] = self.getQualityDefinitionId(definition) - - if definition.getMetaDataEntry("has_variants") and variant_container: - material_search_criteria["variant"] = self.getQualityVariantId(definition, variant_container) - else: - material_search_criteria["definition"] = "fdmprinter" - material_containers = container_registry.findInstanceContainers(**material_search_criteria) - # Try all materials to see if there is a quality profile available. - for material_container in material_containers: - search_criteria["material"] = material_container.getId() - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - if "name" in search_criteria or "id" in search_criteria: - # If a quality by this name can not be found, try a wider set of search criteria - search_criteria.pop("name", None) - search_criteria.pop("id", None) - - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - # Notify user that we were unable to find a matching quality - message = Message(catalog.i18nc("@info:status", "Unable to find a quality profile for this combination. Default settings will be used instead.")) - message.show() - return self._empty_quality_container - - ## Finds a quality-changes container to use if any other container - # changes. - # - # \param quality_type The quality type to find a quality-changes for. - # \param preferred_quality_changes_name The name of the quality-changes to - # pick, if any such quality-changes profile is available. - def _updateQualityChangesContainer(self, quality_type, preferred_quality_changes_name = None): - container_registry = ContainerRegistry.getInstance() # Cache. - search_criteria = { "type": "quality_changes" } - - search_criteria["quality"] = quality_type - if preferred_quality_changes_name: - search_criteria["name"] = preferred_quality_changes_name - - # Try to search with the name in the criteria first, since we prefer to have the correct name. - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: # Found one! - return containers[0] - - if "name" in search_criteria: - del search_criteria["name"] # Not found, then drop the name requirement (if we had one) and search again. - containers = container_registry.findInstanceContainers(**search_criteria) - if containers: - return containers[0] - - return self._empty_quality_changes_container # Didn't find anything with the required quality_type. - def _onMachineNameChanged(self): self.globalContainerChanged.emit() From a2b0b1076ac42c6041aef3ceb1a73a91a919324e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:28:31 +0200 Subject: [PATCH 770/816] Add test for when setting_version doesn't match its definition Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index befdcd5fe4..14ea9ea528 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -94,6 +94,21 @@ def test_addContainerNoSettingVersion(container_registry): mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version is interpreted as 0! +def test_addContainerBadSettingVersion(container_registry): + definition = DefinitionContainer(container_id = "Test Definition") + definition.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition) + + instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") + instance.addMetaDataEntry("setting_version", 9001) #Wrong version! + instance.setDefinition(definition) + + mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. + with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): + container_registry.addContainer(instance) + + mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version doesn't match its definition! + ## Tests whether loading gives objects of the correct type. @pytest.mark.parametrize("filename, output_class", [ ("ExtruderLegacy.stack.cfg", ExtruderStack), From def93f8dc94420129391bcb7054454ef7cdd1923 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:31:18 +0200 Subject: [PATCH 771/816] Define fixture for DefinitionContainer instances Removes a few lines from the tests, making them simpler. Not much though. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 46 ++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 14ea9ea528..268ad7fb90 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -24,6 +24,11 @@ def container_registry(): UM.Settings.ContainerStack.setContainerRegistry(registry) return registry +## Gives an arbitrary definition container. +@pytest.fixture() +def definition_container(): + return DefinitionContainer(container_id = "Test Definition") + def teardown(): #If the temporary file for the legacy file rename test still exists, remove it. temporary_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", "temporary.stack.cfg") @@ -31,13 +36,12 @@ def teardown(): os.remove(temporary_file) ## Tests whether addContainer properly converts to ExtruderStack. -def test_addContainerExtruderStack(container_registry): - definition = DefinitionContainer(container_id = "Test Definition") #Need some definition first to be able to register stacks. - container_registry.addContainer(definition) +def test_addContainerExtruderStack(container_registry, definition_container): + container_registry.addContainer(definition_container) container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Container Stack") #A container we're going to convert. container_stack.addMetaDataEntry("type", "extruder_train") #This is now an extruder train. - container_stack.insertContainer(0, definition) #Add a definition to it so it doesn't complain. + container_stack.insertContainer(0, definition_container) #Add a definition to it so it doesn't complain. mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -48,13 +52,12 @@ def test_addContainerExtruderStack(container_registry): assert type(mock_super_add_container.call_args_list[0][0][0]) == ExtruderStack ## Tests whether addContainer properly converts to GlobalStack. -def test_addContainerGlobalStack(container_registry): - definition = DefinitionContainer(container_id = "Test Definition") #Need some definition first to be able to register stacks. - container_registry.addContainer(definition) +def test_addContainerGlobalStack(container_registry, definition_container): + container_registry.addContainer(definition_container) container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Container Stack") #A container we're going to convert. container_stack.addMetaDataEntry("type", "machine") #This is now a global stack. - container_stack.insertContainer(0, definition) #Must have a definition. + container_stack.insertContainer(0, definition_container) #Must have a definition. mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -64,14 +67,13 @@ def test_addContainerGlobalStack(container_registry): assert len(mock_super_add_container.call_args_list[0][0]) == 1 #Called with one parameter. assert type(mock_super_add_container.call_args_list[0][0][0]) == GlobalStack -def test_addContainerGoodSettingVersion(container_registry): - definition = DefinitionContainer(container_id = "Test Definition") - definition.getMetaData()["setting_version"] = 3 - container_registry.addContainer(definition) +def test_addContainerGoodSettingVersion(container_registry, definition_container): + definition_container.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") instance.addMetaDataEntry("setting_version", 3) - instance.setDefinition(definition) + instance.setDefinition(definition_container) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -79,14 +81,13 @@ def test_addContainerGoodSettingVersion(container_registry): mock_super_add_container.assert_called_once_with(instance) #The instance must have been registered now. -def test_addContainerNoSettingVersion(container_registry): - definition = DefinitionContainer(container_id = "Test Definition") - definition.getMetaData()["setting_version"] = 3 - container_registry.addContainer(definition) +def test_addContainerNoSettingVersion(container_registry, definition_container): + definition_container.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") #Don't add setting_version metadata. - instance.setDefinition(definition) + instance.setDefinition(definition_container) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -94,14 +95,13 @@ def test_addContainerNoSettingVersion(container_registry): mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version is interpreted as 0! -def test_addContainerBadSettingVersion(container_registry): - definition = DefinitionContainer(container_id = "Test Definition") - definition.getMetaData()["setting_version"] = 3 - container_registry.addContainer(definition) +def test_addContainerBadSettingVersion(container_registry, definition_container): + definition_container.getMetaData()["setting_version"] = 3 + container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") instance.addMetaDataEntry("setting_version", 9001) #Wrong version! - instance.setDefinition(definition) + instance.setDefinition(definition_container) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): From 7ee5a66c6448afef8c99d9338707c7454e7da870 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:32:00 +0200 Subject: [PATCH 772/816] CuraContainerStack now overrides getBottom, so it always returns a definition --- cura/Settings/CuraContainerStack.py | 4 ++++ cura/Settings/MachineManager.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 6cffa6030b..4c5b7b08a0 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -254,6 +254,10 @@ class CuraContainerStack(ContainerStack): def definition(self) -> DefinitionContainer: return self._containers[_ContainerIndexes.Definition] + @override(ContainerStack) + def getBottom(self) -> "DefinitionContainer": + return self.definition + ## Check whether the specified setting has a 'user' value. # # A user value here is defined as the setting having a value in either diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 57cc296bdf..98526f00a5 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -33,6 +33,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from UM.Settings.DefinitionContainer import DefinitionContainer + from cura.Settings.GlobalStack import GlobalStack import os @@ -42,7 +43,7 @@ class MachineManager(QObject): super().__init__(parent) self._active_container_stack = None # type: ContainerStack - self._global_container_stack = None # type: ContainerStack + self._global_container_stack = None # type: GlobalStack self._error_check_timer = QTimer() self._error_check_timer.setInterval(250) From 1bac7c2b2a91166d42cb56e8c937d6a116d3b46b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:32:55 +0200 Subject: [PATCH 773/816] Don't register registry at ContainerStack class any more The fixture does this for us automatically now. It's not entirely neat since this is not cleaned up afterwards, but it does make sense to put it there in the fixture, logically. Contributes to issue CURA-3427. --- tests/Settings/TestCuraContainerRegistry.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 268ad7fb90..ad79f74dd4 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -119,7 +119,6 @@ def test_addContainerBadSettingVersion(container_registry, definition_container) ]) def test_loadTypes(filename, output_class, container_registry): #Mock some dependencies. - UM.Settings.ContainerStack.setContainerRegistry(container_registry) Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. def findContainers(container_type = 0, id = None): From fb6d86dc88e9f2b472bf4933d800a7f8b6a0e225 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:39:24 +0200 Subject: [PATCH 774/816] Also override getTop(), as curaContainerStack enforces it being a instanceContainer This helps with the type hinting. --- cura/Settings/CuraContainerStack.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 4c5b7b08a0..d14f2d04c9 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -258,6 +258,10 @@ class CuraContainerStack(ContainerStack): def getBottom(self) -> "DefinitionContainer": return self.definition + @override(ContainerStack) + def getTop(self) -> "InstanceContainer": + return self.userChanges + ## Check whether the specified setting has a 'user' value. # # A user value here is defined as the setting having a value in either From bfc65cb4a96403403a908f4ac5ee1fd911b5ce47 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:40:02 +0200 Subject: [PATCH 775/816] Added typing to active stack --- cura/Settings/MachineManager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 98526f00a5..e5fcf735db 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -34,6 +34,7 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from UM.Settings.DefinitionContainer import DefinitionContainer from cura.Settings.GlobalStack import GlobalStack + from cura.Settings.CuraContainerStack import CuraContainerStack import os @@ -42,7 +43,7 @@ class MachineManager(QObject): def __init__(self, parent = None): super().__init__(parent) - self._active_container_stack = None # type: ContainerStack + self._active_container_stack = None # type: CuraContainerStack self._global_container_stack = None # type: GlobalStack self._error_check_timer = QTimer() From aee3b4322779dad571e41805b326a766bc57f704 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 12 May 2017 16:43:50 +0200 Subject: [PATCH 776/816] Row element was not used --- resources/qml/WorkspaceSummaryDialog.qml | 63 +++++++++++------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/resources/qml/WorkspaceSummaryDialog.qml b/resources/qml/WorkspaceSummaryDialog.qml index cbde055138..3a66d04625 100644 --- a/resources/qml/WorkspaceSummaryDialog.qml +++ b/resources/qml/WorkspaceSummaryDialog.qml @@ -230,45 +230,40 @@ UM.Dialog } } - Row + + CheckBox { - id: buttonRow + id: dontShowAgainCheckbox anchors.bottom: parent.bottom anchors.left: parent.left + + text: catalog.i18nc("@action:label", "Don't show project summary on save again") + checked: dontShowAgain + } + + Button + { + id: cancel_button + anchors.bottom: parent.bottom + anchors.right: ok_button.left + anchors.rightMargin: 2 + + text: catalog.i18nc("@action:button","Cancel"); + enabled: true + onClicked: close() + } + + Button + { + id: ok_button + anchors.bottom: parent.bottom anchors.right: parent.right - height: childrenRect.height - CheckBox - { - id: dontShowAgainCheckbox - anchors.left: parent.left - - text: catalog.i18nc("@action:label", "Don't show project summary on save again") - checked: dontShowAgain - } - - Button - { - id: ok_button - anchors.right: parent.right - - text: catalog.i18nc("@action:button","Save"); - enabled: true - onClicked: { - close() - yes() - } - } - - Button - { - id: cancel_button - anchors.right: ok_button.left - anchors.rightMargin: 2 - - text: catalog.i18nc("@action:button","Cancel"); - enabled: true - onClicked: close() + text: catalog.i18nc("@action:button","Save"); + enabled: true + onClicked: { + close() + yes() } } } From ba4d62e8cab1877fccd669725bb243e45b13b20a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:45:58 +0200 Subject: [PATCH 777/816] Added missing typehinting --- cura/Settings/MachineManager.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e5fcf735db..0eafd33e94 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -23,7 +23,6 @@ from cura.QualityManager import QualityManager from cura.PrinterOutputDevice import PrinterOutputDevice from cura.Settings.ExtruderManager import ExtruderManager -from .GlobalStack import GlobalStack from .CuraStackBuilder import CuraStackBuilder from UM.i18n import i18nCatalog @@ -33,8 +32,8 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from UM.Settings.DefinitionContainer import DefinitionContainer - from cura.Settings.GlobalStack import GlobalStack from cura.Settings.CuraContainerStack import CuraContainerStack + from cura.Settings.GlobalStack import GlobalStack import os @@ -140,7 +139,7 @@ class MachineManager(QObject): return self._printer_output_devices @pyqtProperty(int, constant=True) - def totalNumberOfSettings(self): + def totalNumberOfSettings(self) -> int: return len(ContainerRegistry.getInstance().findDefinitionContainers(id="fdmprinter")[0].getAllKeys()) def _onHotendIdChanged(self, index: Union[str, int], hotend_id: str) -> None: @@ -164,7 +163,7 @@ class MachineManager(QObject): else: Logger.log("w", "No variant found for printer definition %s with id %s" % (self._global_container_stack.getBottom().getId(), hotend_id)) - def _onMaterialIdChanged(self, index, material_id): + def _onMaterialIdChanged(self, index: Union[str, int], material_id: str): if not self._global_container_stack: return @@ -470,7 +469,7 @@ class MachineManager(QObject): return "" @pyqtProperty("QObject", notify = globalContainerChanged) - def activeMachine(self) -> GlobalStack: + def activeMachine(self) -> "GlobalStack": return self._global_container_stack @pyqtProperty(str, notify = activeStackChanged) @@ -681,7 +680,7 @@ class MachineManager(QObject): ## Check if a container is read_only @pyqtSlot(str, result = bool) - def isReadOnly(self, container_id) -> bool: + def isReadOnly(self, container_id: str) -> bool: containers = ContainerRegistry.getInstance().findInstanceContainers(id = container_id) if not containers or not self._active_container_stack: return True @@ -943,7 +942,7 @@ class MachineManager(QObject): return result - def _replaceQualityOrQualityChangesInStack(self, stack, container, postpone_emit = False): + def _replaceQualityOrQualityChangesInStack(self, stack: "CuraContainerStack", container: "InstanceContainer", postpone_emit = False): # Disconnect the signal handling from the old container. container_type = container.getMetaDataEntry("type") if container_type == "quality": From 598751817a6ccce3d17f939466acbaa87f13260f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 12 May 2017 16:51:33 +0200 Subject: [PATCH 778/816] Fix resolve strategy "new" for user instance container CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 3b5d9dac77..f6e407efb2 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -426,8 +426,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if not user_containers: containers_to_add.append(instance_container) else: - instance_container = user_containers[0] if self._resolve_strategies["machine"] == "override" or self._resolve_strategies["machine"] is None: + instance_container = user_containers[0] instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) instance_container.setDirty(True) elif self._resolve_strategies["machine"] == "new": From 81d3ce46f15efe444e00281e5c2b7e08609a6329 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 12 May 2017 16:56:12 +0200 Subject: [PATCH 779/816] Added bunch of typing to extruder manager --- cura/Settings/ExtruderManager.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 359cd74f09..5a2e0cb818 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -16,7 +16,11 @@ from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer -from typing import Optional, List +from typing import Optional, List, TYPE_CHECKING, Union + +if TYPE_CHECKING: + from cura.Settings.ExtruderStack import ExtruderStack + ## Manages all existing extruder stacks. # @@ -166,7 +170,7 @@ class ExtruderManager(QObject): self._selected_object_extruders = [] self.selectedObjectExtrudersChanged.emit() - def getActiveExtruderStack(self) -> ContainerStack: + def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: @@ -176,7 +180,7 @@ class ExtruderManager(QObject): return None ## Get an extruder stack by index - def getExtruderStack(self, index): + def getExtruderStack(self, index) -> Optional["ExtruderStack"]: global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: if global_container_stack.getId() in self._extruder_trains: @@ -185,7 +189,7 @@ class ExtruderManager(QObject): return None ## Get all extruder stacks - def getExtruderStacks(self): + def getExtruderStacks(self) -> List["ExtruderStack"]: result = [] for i in range(self.extruderCount): result.append(self.getExtruderStack(i)) @@ -397,7 +401,7 @@ class ExtruderManager(QObject): # list. # # \return A list of extruder stacks. - def getUsedExtruderStacks(self): + def getUsedExtruderStacks(self) -> List["ContainerStack"]: global_stack = Application.getInstance().getGlobalContainerStack() container_registry = ContainerRegistry.getInstance() @@ -451,7 +455,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): + def removeMachineExtruders(self, machine_id: str): for extruder in self.getMachineExtruders(machine_id): containers = ContainerRegistry.getInstance().findInstanceContainers(type = "user", extruder = extruder.getId()) for container in containers: @@ -461,7 +465,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): + def getMachineExtruders(self, machine_id: str): if machine_id not in self._extruder_trains: return [] return [self._extruder_trains[machine_id][name] for name in self._extruder_trains[machine_id]] @@ -470,7 +474,7 @@ class ExtruderManager(QObject): # # The first element is the global container stack, followed by any extruder stacks. # \return \type{List[ContainerStack]} - def getActiveGlobalAndExtruderStacks(self): + def getActiveGlobalAndExtruderStacks(self) -> Optional[List[Union["ExtruderStack", "GlobalStack"]]]: global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack: return None @@ -482,7 +486,7 @@ class ExtruderManager(QObject): ## Returns the list of active extruder stacks. # # \return \type{List[ContainerStack]} a list of - def getActiveExtruderStacks(self): + def getActiveExtruderStacks(self) -> List["ExtruderStack"]: global_stack = Application.getInstance().getGlobalContainerStack() result = [] From 365f7cad4c323b92551fe478ab7ff57a63278dd9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 16:57:36 +0200 Subject: [PATCH 780/816] Read setting_version from version attribute on root As per the new specification for v1.3 of the spec. Contributes to issue CURA-3427. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 95e38457c9..d7a9f47836 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -27,10 +27,13 @@ class XmlMaterialProfile(InstanceContainer): # Since the two may increment independently we need a way to say which # versions of the XML specification are compatible with our setting data # version numbers. - def xmlVersionToSettingVersion(self, xml_version): - if xml_version == 1: #Only one known version and it happens to be the same as our current setting_version. + # + # \param xml_version: The version number found in an XML file. + # \return The corresponding setting_version. + def xmlVersionToSettingVersion(self, xml_version: str) -> int: + if xml_version == "1.3": return 1 - return 0 + return 0 #Older than 1.3. def getInheritedFiles(self): return self._inherited_files @@ -414,13 +417,13 @@ class XmlMaterialProfile(InstanceContainer): meta_data["type"] = "material" meta_data["base_file"] = self.id meta_data["status"] = "unknown" # TODO: Add material verfication - meta_data["setting_version"] = self.getVersionFromSerialized(serialized) inherits = data.find("./um:inherits", self.__namespaces) if inherits is not None: inherited = self._resolveInheritance(inherits.text) data = self._mergeXML(inherited, data) + meta_data["setting_version"] = self.xmlVersionToSettingVersion(data.attrib["version"]) metadata = data.iterfind("./um:metadata/*", self.__namespaces) for entry in metadata: tag_name = _tag_without_namespace(entry) From 2365267f35f2d120eaf9853f91b419d24abb67d9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 12 May 2017 17:08:47 +0200 Subject: [PATCH 781/816] Be robust against older specification version numbers 1.2 and lower didn't specify a version number. Assume that it was 1.2. We feed this through our translation function for form, mostly, because we know that the setting_version should be 0 then. Contributes to issue CURA-3427. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index d7a9f47836..197a7b778f 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -423,7 +423,10 @@ class XmlMaterialProfile(InstanceContainer): inherited = self._resolveInheritance(inherits.text) data = self._mergeXML(inherited, data) - meta_data["setting_version"] = self.xmlVersionToSettingVersion(data.attrib["version"]) + if "version" in data.attrib: + meta_data["setting_version"] = self.xmlVersionToSettingVersion(data.attrib["version"]) + else: + meta_data["setting_version"] = self.xmlVersionToSettingVersion("1.2") #1.2 and lower didn't have that version number there yet. metadata = data.iterfind("./um:metadata/*", self.__namespaces) for entry in metadata: tag_name = _tag_without_namespace(entry) From 7e715277f9e82799ebf941a1f4a6b7566a0374bb Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Sat, 13 May 2017 17:32:18 +0200 Subject: [PATCH 782/816] fix: don't make disallowed area if blob is disabled (CURA-3634) --- cura/BuildVolume.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 9c22d5ae3a..2f70f9dd39 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -675,11 +675,12 @@ class BuildVolume(SceneNode): machine_width = self._global_container_stack.getProperty("machine_width", "value") machine_depth = self._global_container_stack.getProperty("machine_depth", "value") for extruder in used_extruders: + prime_blob_enabled = extruder.getProperty("prime_blob_enable", "value") prime_x = extruder.getProperty("extruder_prime_pos_x", "value") prime_y = - extruder.getProperty("extruder_prime_pos_y", "value") #Ignore extruder prime position if it is not set - if prime_x == 0 and prime_y == 0: + if (prime_x == 0 and prime_y == 0) or not prime_blob_enabled: result[extruder.getId()] = [] continue @@ -952,7 +953,7 @@ class BuildVolume(SceneNode): _skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist"] _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] - _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"] + _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z", "prime_blob_enable"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts"] From f4f6be103ea572ed8c60df1b5b94fb4ebbf9cb18 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Sat, 13 May 2017 17:37:49 +0200 Subject: [PATCH 783/816] cleanup: prime => prime blob and lil doc (CURA-3634) --- cura/BuildVolume.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 2f70f9dd39..164cd00fde 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -562,7 +562,7 @@ class BuildVolume(SceneNode): used_extruders = [self._global_container_stack] result_areas = self._computeDisallowedAreasStatic(disallowed_border_size, used_extruders) #Normal machine disallowed areas can always be added. - prime_areas = self._computeDisallowedAreasPrime(disallowed_border_size, used_extruders) + prime_areas = self._computeDisallowedAreasPrimeBlob(disallowed_border_size, used_extruders) prime_disallowed_areas = self._computeDisallowedAreasStatic(0, used_extruders) #Where the priming is not allowed to happen. This is not added to the result, just for collision checking. #Check if prime positions intersect with disallowed areas. @@ -658,7 +658,7 @@ class BuildVolume(SceneNode): return result - ## Computes the disallowed areas for the prime locations. + ## Computes the disallowed areas for the prime blobs. # # These are special because they are not subject to things like brim or # travel avoidance. They do get a dilute with the border size though @@ -669,7 +669,7 @@ class BuildVolume(SceneNode): # \param used_extruders The extruder stacks to generate disallowed areas # for. # \return A dictionary with for each used extruder ID the prime areas. - def _computeDisallowedAreasPrime(self, border_size, used_extruders): + def _computeDisallowedAreasPrimeBlob(self, border_size, used_extruders): result = {} machine_width = self._global_container_stack.getProperty("machine_width", "value") @@ -679,7 +679,7 @@ class BuildVolume(SceneNode): prime_x = extruder.getProperty("extruder_prime_pos_x", "value") prime_y = - extruder.getProperty("extruder_prime_pos_y", "value") - #Ignore extruder prime position if it is not set + #Ignore extruder prime position if it is not set or if blob is disabled if (prime_x == 0 and prime_y == 0) or not prime_blob_enabled: result[extruder.getId()] = [] continue From c48017e174e8e5c282708ec38c0f3bf6507fa62a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 15 May 2017 09:37:29 +0200 Subject: [PATCH 784/816] Convert all metadata fields to string The XML builder expects string, strictly. Only None is handled separately. Contributes to issue CURA-3808. --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 197a7b778f..7bdfaf404d 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -159,10 +159,10 @@ class XmlMaterialProfile(InstanceContainer): for key, value in metadata.items(): builder.start(key) - # Normally value is a string. - # Nones get handled well. - if isinstance(value, bool): - value = str(value) # parseBool in deserialize expects 'True'. + if value is not None: #Nones get handled well by the builder. + #Otherwise the builder always expects a string. + #Deserialize expects the stringified version. + value = str(value) builder.data(value) builder.end(key) From c61baf33557f929305e742fd19e363002b397059 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 15 May 2017 09:53:47 +0200 Subject: [PATCH 785/816] Increase warning value for gradual infill steps We set gradual infill steps to 5 if you choose Gradual Infill from recommended mode. This value was provided by the materials testers, so apparently it works fine and we shouldn't give a warning about that. Contributes to issue CURA-3732. --- 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 bd34d8c7d8..2fc5302eea 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1323,7 +1323,7 @@ "default_value": 0, "type": "int", "minimum_value": "0", - "maximum_value_warning": "4", + "maximum_value_warning": "5", "maximum_value": "0 if spaghetti_infill_enabled else (999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2)))", "enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv' and not spaghetti_infill_enabled", "settable_per_mesh": true From ccda1558820c34a441183cdb03029be3126548a1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 15 May 2017 10:39:53 +0200 Subject: [PATCH 786/816] Add setting_version every time we create InstanceContainer Except when we fill the instancecontainer via deserialising. Because then we want to retain the original version number. Contributes to issue CURA-3427. --- cura/Settings/ContainerManager.py | 3 ++- cura/Settings/CuraContainerRegistry.py | 2 +- cura/Settings/CuraStackBuilder.py | 2 ++ cura/Settings/ExtruderManager.py | 3 ++- plugins/3MFReader/ThreeMFWorkspaceReader.py | 3 +++ plugins/MachineSettingsAction/MachineSettingsAction.py | 1 + plugins/UltimakerMachineActions/UMOUpgradeSelection.py | 1 + 7 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 817df7e46e..afdffa1f77 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. import os.path @@ -815,6 +815,7 @@ class ContainerManager(QObject): quality_changes.setDefinition(self._container_registry.findContainers(id = "fdmprinter")[0]) else: quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition)) + quality_changes.addMetaDataEntry("setting_version", quality_changes.getDefinition().getMetaDataEntry("setting_version", default = 0)) return quality_changes diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index a4dbcc4ca1..2943ed009d 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -43,7 +43,7 @@ class CuraContainerRegistry(ContainerRegistry): if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()): #Check against setting version of the definition. - required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version")) + required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version", default = 0)) actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0)) if required_setting_version != actual_setting_version: Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version)) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index a85bae76af..652425ba6a 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -76,6 +76,7 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("extruder", new_stack_id) + user_container.addMetaDataEntry("setting_version", machine_definition.getMetaDataEntry("setting_version", default = 0)) user_container.setDefinition(machine_definition) stack.setUserChanges(user_container) @@ -124,6 +125,7 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("machine", new_stack_id) + user_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) user_container.setDefinition(definition) stack.setUserChanges(user_container) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 5a2e0cb818..19d3ab4f5b 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant #For communicating data and events to Qt. @@ -362,6 +362,7 @@ class ExtruderManager(QObject): user_profile = InstanceContainer(extruder_stack_id + "_current_settings") # Add an empty user profile. user_profile.addMetaDataEntry("type", "user") user_profile.addMetaDataEntry("extruder", extruder_stack_id) + user_profile.addMetaDataEntry("setting_version", machine_definition.getMetaDataEntry("setting_version", default = 0)) user_profile.setDefinition(machine_definition) container_registry.addContainer(user_profile) container_stack.addContainer(user_profile) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index f6e407efb2..e1b65805c1 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -1,3 +1,6 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + from UM.Workspace.WorkspaceReader import WorkspaceReader from UM.Application import Application diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index bfade90f2b..f09d1f2b1d 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -99,6 +99,7 @@ class MachineSettingsAction(MachineAction): definition = container_stack.getBottom() definition_changes_container.setDefinition(definition) definition_changes_container.addMetaDataEntry("type", "definition_changes") + definition_changes_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) self._container_registry.addContainer(definition_changes_container) container_stack.definitionChanges = definition_changes_container diff --git a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py index 0428c0f5c2..d2c3b31359 100644 --- a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py +++ b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py @@ -49,6 +49,7 @@ class UMOUpgradeSelection(MachineAction): definition = global_container_stack.getBottom() definition_changes_container.setDefinition(definition) definition_changes_container.addMetaDataEntry("type", "definition_changes") + definition_changes_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().addContainer(definition_changes_container) # Insert definition_changes between the definition and the variant From 635b97a9616ef2b343da499e726ecbcf3cefc700 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Mon, 15 May 2017 12:01:29 +0200 Subject: [PATCH 787/816] JSON description fix: warn users when not to use spiralize (CURA-3636) --- 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 2fc5302eea..a87cebdc28 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4571,7 +4571,7 @@ "magic_spiralize": { "label": "Spiralize Outer Contour", - "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature used to be called Joris in older versions.", + "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature should only be enabled when each layer only contains a single part.", "type": "bool", "default_value": false, "settable_per_mesh": false, From c4fc797c45bc1203c91fc4e2fc5478f9d70b710d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 15 May 2017 13:53:13 +0200 Subject: [PATCH 788/816] Added a type hinting to QualityManager --- cura/QualityManager.py | 74 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index f0f095b912..bda713ef8f 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -3,7 +3,7 @@ # This collects a lot of quality and quality changes related code which was split between ContainerManager # and the MachineManager and really needs to usable from both. -from typing import List +from typing import List, Optional, Dict, TYPE_CHECKING from UM.Application import Application from UM.Settings.ContainerRegistry import ContainerRegistry @@ -11,6 +11,10 @@ from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer from cura.Settings.ExtruderManager import ExtruderManager +if TYPE_CHECKING: + from cura.Settings.GlobalStack import GlobalStack + from cura.Settings.ExtruderStack import ExtruderStack + from UM.Settings.DefinitionContainer import DefinitionContainerInterface class QualityManager: @@ -27,12 +31,12 @@ class QualityManager: ## Find a quality by name for a specific machine definition and materials. # # \param quality_name - # \param machine_definition (Optional) \type{ContainerInstance} If nothing is + # \param machine_definition (Optional) \type{DefinitionContainerInterface} If nothing is # specified then the currently selected machine definition is used. - # \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then + # \param material_containers (Optional) \type{List[InstanceContainer]} If nothing is specified then # the current set of selected materials is used. - # \return the matching quality container \type{ContainerInstance} - def findQualityByName(self, quality_name, machine_definition=None, material_containers=None): + # \return the matching quality container \type{InstanceContainer} + def findQualityByName(self, quality_name: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers: List[InstanceContainer] = None) -> Optional[InstanceContainer]: criteria = {"type": "quality", "name": quality_name} result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) @@ -46,12 +50,10 @@ class QualityManager: ## Find a quality changes container by name. # # \param quality_changes_name \type{str} the name of the quality changes container. - # \param machine_definition (Optional) \type{ContainerInstance} If nothing is - # specified then the currently selected machine definition is used. - # \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then - # the current set of selected materials is used. - # \return the matching quality changes containers \type{List[ContainerInstance]} - def findQualityChangesByName(self, quality_changes_name, machine_definition=None): + # \param machine_definition (Optional) \type{DefinitionContainer} If nothing is + # specified then the currently selected machine definition is used.. + # \return the matching quality changes containers \type{List[InstanceContainer]} + def findQualityChangesByName(self, quality_changes_name: str, machine_definition: Optional["DefinitionContainerInterface"] = None): criteria = {"type": "quality_changes", "name": quality_changes_name} result = self._getFilteredContainersForStack(machine_definition, [], **criteria) @@ -62,7 +64,7 @@ class QualityManager: # \param machine_definition \type{DefinitionContainer} # \param material_containers \type{List[InstanceContainer]} # \return \type{List[str]} - def findAllQualityTypesForMachineAndMaterials(self, machine_definition, material_containers): + def findAllQualityTypesForMachineAndMaterials(self, machine_definition: "DefinitionContainerInterface", material_containers: List[InstanceContainer]) -> List[str]: # Determine the common set of quality types which can be # applied to all of the materials for this machine. quality_type_dict = self.__fetchQualityTypeDictForMaterial(machine_definition, material_containers[0]) @@ -76,9 +78,9 @@ class QualityManager: ## Fetches a dict of quality types names to quality profiles for a combination of machine and material. # # \param machine_definition \type{DefinitionContainer} the machine definition. - # \param material \type{ContainerInstance} the material. - # \return \type{Dict[str, ContainerInstance]} the dict of suitable quality type names mapping to qualities. - def __fetchQualityTypeDictForMaterial(self, machine_definition, material): + # \param material \type{InstanceContainer} the material. + # \return \type{Dict[str, InstanceContainer]} the dict of suitable quality type names mapping to qualities. + def __fetchQualityTypeDictForMaterial(self, machine_definition: "DefinitionContainerInterface", material: InstanceContainer) -> Dict[str, InstanceContainer]: qualities = self.findAllQualitiesForMachineMaterial(machine_definition, material) quality_type_dict = {} for quality in qualities: @@ -88,12 +90,12 @@ class QualityManager: ## Find a quality container by quality type. # # \param quality_type \type{str} the name of the quality type to search for. - # \param machine_definition (Optional) \type{ContainerInstance} If nothing is + # \param machine_definition (Optional) \type{InstanceContainer} If nothing is # specified then the currently selected machine definition is used. - # \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then + # \param material_containers (Optional) \type{List[InstanceContainer]} If nothing is specified then # the current set of selected materials is used. - # \return the matching quality container \type{ContainerInstance} - def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None, **kwargs): + # \return the matching quality container \type{InstanceContainer} + def findQualityByQualityType(self, quality_type: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers: List[InstanceContainer] = None, **kwargs) -> InstanceContainer: criteria = kwargs criteria["type"] = "quality" if quality_type: @@ -110,9 +112,9 @@ class QualityManager: ## Find all suitable qualities for a combination of machine and material. # # \param machine_definition \type{DefinitionContainer} the machine definition. - # \param material_container \type{ContainerInstance} the material. - # \return \type{List[ContainerInstance]} the list of suitable qualities. - def findAllQualitiesForMachineMaterial(self, machine_definition, material_container): + # \param material_container \type{InstanceContainer} the material. + # \return \type{List[InstanceContainer]} the list of suitable qualities. + def findAllQualitiesForMachineMaterial(self, machine_definition: "DefinitionContainerInterface", material_container: InstanceContainer) -> List[InstanceContainer]: criteria = {"type": "quality" } result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria) if not result: @@ -125,7 +127,7 @@ class QualityManager: # # \param machine_definition \type{DefinitionContainer} the machine definition. # \return \type{List[InstanceContainer]} the list of quality changes - def findAllQualityChangesForMachine(self, machine_definition: DefinitionContainer) -> List[InstanceContainer]: + def findAllQualityChangesForMachine(self, machine_definition: "DefinitionContainerInterface") -> List[InstanceContainer]: if machine_definition.getMetaDataEntry("has_machine_quality"): definition_id = machine_definition.getId() else: @@ -141,19 +143,19 @@ class QualityManager: # Only one quality per quality type is returned. i.e. if there are 2 qualities with quality_type=normal # then only one of then is returned (at random). # - # \param global_container_stack \type{ContainerStack} the global machine definition - # \param extruder_stacks \type{List[ContainerStack]} the list of extruder stacks + # \param global_container_stack \type{GlobalStack} the global machine definition + # \param extruder_stacks \type{List[ExtruderStack]} the list of extruder stacks # \return \type{List[InstanceContainer]} the list of the matching qualities. The quality profiles # return come from the first extruder in the given list of extruders. - def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack, extruder_stacks): + def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack: "GlobalStack", extruder_stacks: List["ExtruderStack"]) -> List[InstanceContainer]: global_machine_definition = global_container_stack.getBottom() if extruder_stacks: # Multi-extruder machine detected. - materials = [stack.findContainer(type="material") for stack in extruder_stacks] + materials = [stack.material for stack in extruder_stacks] else: # Machine with one extruder. - materials = [global_container_stack.findContainer(type="material")] + materials = [global_container_stack.material] quality_types = self.findAllQualityTypesForMachineAndMaterials(global_machine_definition, materials) @@ -170,7 +172,7 @@ class QualityManager: # This tries to find a generic or basic version of the given material. # \param material_container \type{InstanceContainer} the material # \return \type{List[InstanceContainer]} a list of the basic materials or an empty list if one could not be found. - def _getBasicMaterials(self, material_container): + def _getBasicMaterials(self, material_container: InstanceContainer): base_material = material_container.getMetaDataEntry("material") material_container_definition = material_container.getDefinition() if material_container_definition and material_container_definition.getMetaDataEntry("has_machine_quality"): @@ -192,7 +194,7 @@ class QualityManager: def _getFilteredContainers(self, **kwargs): return self._getFilteredContainersForStack(None, None, **kwargs) - def _getFilteredContainersForStack(self, machine_definition=None, material_containers=None, **kwargs): + def _getFilteredContainersForStack(self, machine_definition: "DefinitionContainerInterface" = None, material_containers: List[InstanceContainer] = None, **kwargs): # Fill in any default values. if machine_definition is None: machine_definition = Application.getInstance().getGlobalContainerStack().getBottom() @@ -202,7 +204,8 @@ class QualityManager: if material_containers is None: active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() - material_containers = [stack.findContainer(type="material") for stack in active_stacks] + if active_stacks: + material_containers = [stack.findContainer(type="material") for stack in active_stacks] criteria = kwargs filter_by_material = False @@ -216,12 +219,11 @@ class QualityManager: filter_by_material = whole_machine_definition.getMetaDataEntry("has_materials") else: criteria["definition"] = "fdmprinter" - + material_ids = set() # Stick the material IDs in a set if material_containers is None or len(material_containers) == 0: filter_by_material = False else: - material_ids = set() for material_instance in material_containers: if material_instance is not None: # Add the parent material too. @@ -245,7 +247,7 @@ class QualityManager: # an extruder definition. # \return \type{DefinitionContainer} the parent machine definition. If the given machine # definition doesn't have a parent then it is simply returned. - def getParentMachineDefinition(self, machine_definition: DefinitionContainer) -> DefinitionContainer: + def getParentMachineDefinition(self, machine_definition: "DefinitionContainerInterface") -> "DefinitionContainerInterface": container_registry = ContainerRegistry.getInstance() machine_entry = machine_definition.getMetaDataEntry("machine") @@ -274,8 +276,8 @@ class QualityManager: # # \param machine_definition \type{DefinitionContainer} This may be a normal machine definition or # an extruder definition. - # \return \type{DefinitionContainer} - def getWholeMachineDefinition(self, machine_definition): + # \return \type{DefinitionContainerInterface} + def getWholeMachineDefinition(self, machine_definition: "DefinitionContainerInterface") -> "DefinitionContainerInterface": machine_entry = machine_definition.getMetaDataEntry("machine") if machine_entry is None: # This already is a 'global' machine definition. From f7f958c5407ebf0c2785212767b4b434c95a21cb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 15 May 2017 13:58:02 +0200 Subject: [PATCH 789/816] Directly use property instead of searching --- cura/QualityManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index bda713ef8f..e4a09ca8ea 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -205,7 +205,7 @@ class QualityManager: if material_containers is None: active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() if active_stacks: - material_containers = [stack.findContainer(type="material") for stack in active_stacks] + material_containers = [stack.material for stack in active_stacks] criteria = kwargs filter_by_material = False From d93c5e667bd20dcc6ae0dbb2d79b8d0b38cd10cc Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 15 May 2017 14:02:07 +0200 Subject: [PATCH 790/816] Changed final spot where we still used findContainer when looking for container with specific type --- 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 19d3ab4f5b..dc602a4597 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -85,7 +85,7 @@ class ExtruderManager(QObject): for position in self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()]: extruder = self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()][position] if extruder.getId() == id: - return extruder.findContainer(type = "quality_changes").getId() + return extruder.qualityChanges.getId() ## The instance of the singleton pattern. # From 910a55fd50fad21f4668082344935ee4d8ad85d5 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 15 May 2017 14:17:42 +0200 Subject: [PATCH 791/816] Simplified some code --- cura/Settings/ExtruderManager.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index dc602a4597..0aceabca6c 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -458,9 +458,7 @@ class ExtruderManager(QObject): # \param machine_id The machine to remove the extruders for. def removeMachineExtruders(self, machine_id: str): for extruder in self.getMachineExtruders(machine_id): - containers = ContainerRegistry.getInstance().findInstanceContainers(type = "user", extruder = extruder.getId()) - for container in containers: - ContainerRegistry.getInstance().removeContainer(container.getId()) + ContainerRegistry.getInstance().removeContainer(extruder.user.getId()) ContainerRegistry.getInstance().removeContainer(extruder.getId()) ## Returns extruders for a specific machine. From e40f60a52b0f672782866704ab028cfc53e31bb2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 15 May 2017 16:52:25 +0200 Subject: [PATCH 792/816] Changed profile names CURA-3777 --- cura/PrintInformation.py | 4 ++-- plugins/ChangeLogPlugin/ChangeLog.txt | 2 +- .../VersionUpgrade21to22/VersionUpgrade21to22.py | 4 ++-- resources/quality/abax_pri3/apri3_pla_fast.inst.cfg | 2 +- resources/quality/abax_pri3/apri3_pla_high.inst.cfg | 2 +- resources/quality/abax_pri3/apri3_pla_normal.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_fast.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_high.inst.cfg | 2 +- resources/quality/abax_pri5/apri5_pla_normal.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_fast.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_high.inst.cfg | 2 +- resources/quality/abax_titan/atitan_pla_normal.inst.cfg | 2 +- .../quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg | 2 +- .../quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg | 2 +- resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg | 2 +- .../quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg | 2 +- resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg | 2 +- .../quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg | 2 +- .../cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg | 2 +- .../cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg | 2 +- .../quality/cartesio/cartesio_global_High_Quality.inst.cfg | 2 +- .../quality/cartesio/cartesio_global_Normal_Quality.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg | 2 +- .../quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg | 2 +- .../quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg | 2 +- .../cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg | 2 +- .../quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg | 2 +- .../quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg | 2 +- .../quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg | 2 +- .../quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg | 2 +- resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg | 2 +- .../quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg | 2 +- resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg | 2 +- resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg | 2 +- resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg | 2 +- resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg | 2 +- .../quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg | 2 +- .../quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg | 2 +- .../quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg | 2 +- resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg | 2 +- .../quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg | 2 +- resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg | 2 +- .../quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg | 2 +- .../quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg | 2 +- .../quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg | 2 +- resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg | 2 +- .../quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg | 2 +- resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg | 2 +- .../quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg | 2 +- resources/quality/high.inst.cfg | 2 +- resources/quality/normal.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg | 2 +- resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg | 2 +- .../quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg | 2 +- resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg | 2 +- .../ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg | 2 +- resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg | 2 +- .../ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg | 2 +- .../quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg | 2 +- resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg | 2 +- .../quality/ultimaker3/um3_global_Normal_Quality.inst.cfg | 2 +- 156 files changed, 158 insertions(+), 158 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index c6412e2f6f..47672a9823 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -31,8 +31,8 @@ catalog = i18nCatalog("cura") # - This triggers a new slice with the current settings - this is the "current settings pass". # - When the slice is done, we update the current print time and material amount. # - If the source of the slice was not a Setting change, we start the second slice pass, the "low quality settings pass". Otherwise we stop here. -# - When that is done, we update the minimum print time and start the final slice pass, the "high quality settings pass". -# - When the high quality pass is done, we update the maximum print time. +# - When that is done, we update the minimum print time and start the final slice pass, the "Extra Fine settings pass". +# - When the Extra Fine pass is done, we update the maximum print time. # # This class also mangles the current machine name and the filename of the first loaded mesh into a job name. # This job name is requested by the JobSpecs qml file. diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index c7b63be889..508d5ecbe2 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -79,7 +79,7 @@ The initial and final printing temperatures reduce the amount of oozing during P Initial and final printing temperature settings have been tuned for higher quality results. For all materials the initial print temperature is 5 degrees above the default value. *Printing temperature of the materials -The printing temperature of the materials in the material profiles is now the same as the printing temperature for the Normal Quality profile. +The printing temperature of the materials in the material profiles is now the same as the printing temperature for the Fine profile. *Improved PLA-PVA layer adhesion The PVA jerk and acceleration have been optimized to improve the layer adhesion between PVA and PLA. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index 055d28b3ab..d5bb08bb5c 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -70,8 +70,8 @@ _printer_translations_profiles = { # as a set for which profiles were built-in. _profile_translations = { "Low Quality": "low", - "Normal Quality": "normal", - "High Quality": "high", + "Fine": "normal", + "Extra Fine": "high", "Ulti Quality": "high", #This one doesn't have an equivalent. Map it to high. "abs_0.25_normal": "um2p_abs_0.25_normal", "abs_0.4_fast": "um2p_abs_0.4_fast", diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index c803cd6196..aa73d04f4a 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_pri3 [metadata] diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index f22daa56a5..9b2af23ffc 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = abax_pri3 [metadata] diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 198676d024..0b566a7ae0 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_pri3 [metadata] diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 8ef82f2f76..7729ae3772 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_pri5 [metadata] diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index 79af56ff3d..04f4e82604 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = abax_pri5 [metadata] diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index 50a01e9de1..3f3dd7a1e3 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_pri5 [metadata] diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index f76df7c3c9..5fae85c117 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_titan [metadata] diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index cb0b9fa238..71c42fbdb7 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = abax_titan [metadata] type = quality diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index 5d9867db81..2ae819ed50 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = abax_titan [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index 8359e17a9b..3d59d7fc7e 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index 75338a4d83..04aa5c1e13 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index 62a473ac02..f8e0a91abe 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index 19d08ae41b..5a08728ac7 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index 5ae8911ceb..e4692a3723 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index ef2571113c..1017658a16 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 74390b0d82..e66a8cd50c 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index 86309f2754..3e68abc3be 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index c0b5895d7e..13ad5e14af 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index ed3cb68326..b747d0b11f 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 3c2b42bb1c..f533e90b1d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index cf4ce231d5..153bbc8b04 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index 140655af2c..d3dc36b1b5 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index 1e62e1ba8f..04deb1f5f6 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index e7fc711492..204bbc2393 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 56b0ee0c2c..b704693b9c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index 125699fe5f..2ec794df68 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index e039486f8a..da1dfb38c1 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index 5c9fbc3b04..9650573a35 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 3fc80db1a4..974c8a5ae1 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index cc18ceeda6..2161094c77 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index baaf108d6e..bda69cd6c4 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index 531cfb3519..876d2d2d35 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index ad07bcd2c7..2c33b118b0 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index e03ebb8c95..d45e391fa1 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index 0acc0b5b2b..5ae254cb4e 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index e0dd2cc81e..36ecd369b5 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 9d4169427f..96e457cf48 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index cc96f3f37f..e76f3451f7 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index fe5bdb2e77..e2e2eec2f5 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index 0a019b60d6..e116df16b0 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index 8984f430f5..1d6ed7de0b 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 7b85c230b0..07c7816653 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index d45d7a0d2c..d0b03747b8 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 7afd300aa2..53b152b3dd 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index 057215d70d..bce549cd23 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index 77d3008c1b..ba87d1d753 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index 3d08fd9514..8e6adac026 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index ad4980d2e9..9a2e51a16f 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index 650431e0a9..5a604f8f83 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index 580969fbaa..02937ca2b4 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 189ab1caec..f83031a258 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index 61a8b5f37c..5284b0078c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index e91cd56272..6cd711306b 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index b651c5bd57..2201da3e0a 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = cartesio [metadata] diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index 9354602854..a28b9ca59f 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = cartesio [metadata] diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 955b19dcf4..d9965f0829 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = fdmprinter [metadata] diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index 47d47f97f1..b945e1e94f 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = fdmprinter [metadata] diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 4c0cec96a7..187462b4e5 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 = 2 -name = High Quality +name = Extra Fine definition = peopoly_moai [metadata] diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index 7d0053fc11..faad40dc70 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = peopoly_moai [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index e288ce3db5..e17051a56d 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index be01142816..19d09b9e5c 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index 9d4469c1e4..342629e87a 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index f9b27a3627..9da2847b2a 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index bcebb06221..1c65c2acb1 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index a090910641..28de80d60f 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index f93fcca48c..946e524d87 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index 8c7b34eeff..0e0235184d 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 7040a8ba38..302e3951d1 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index 740dadd493..028ee1c0ea 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index d501703514..545b1e4776 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 674f17958c..772fe1f8c8 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index 27d850162e..a9c64db3de 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index 6b882b1bbf..d953b1e44b 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index 6c4d24b195..db295419a1 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index d26cc8782c..0801789185 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index 10a4e5bd71..f57b4acd75 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index f4730bbd41..0a5285dcf3 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 517d42ada2..8e3ee22877 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index 6d77792901..b43b6acbb1 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index ed87b21b15..9bd1597170 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index 7b20aa424d..a914f1f88a 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index d07e33e124..020b50b61a 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index b2cd9478c6..ca84a137da 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index 94eac599b0..ff517a6bc0 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index 663f67c56e..0dd6836896 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index f37365585e..3c4748ecf7 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 0bb3bcc12d..6d94746c18 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index dfeb02991f..6a00f13b8e 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index 259a581ccf..5a5c39fc2b 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index 1607d71d01..4c8aea5b29 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index 8d3767e4c6..b959cb3189 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 33dc5551fd..d0b2daabb8 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index 2d26718f1b..4b68931888 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index 4c5dbf080b..873fb92a37 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index e49dcd52a7..1b7ecd58b8 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index dc1d569ab9..c062bc9900 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index 1c041e1567..d1edaa628b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 782d44cdcc..4887d4ca43 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 83c30e583d..9719ebec64 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index d1632b3482..ed526b705c 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 10a8cbded5..76f09c0db9 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index e96015c6bd..22fda17c62 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker2_plus [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 4c7b194893..15fdb08c92 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index debb49caa8..ada4357f2b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 9e08d12b78..3582df61e1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index 344593be0e..25b9ed51b5 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 7833e3756c..2e99229d95 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index ebe8646000..57f784a923 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index a9bd0db101..91daa94988 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index e9834620bb..c11ed30ed4 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 05e8a6540d..2c18b4baea 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 86ce49a964..0d3321f0a8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index 3e7d5ab4b3..baa1e2e785 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 62fa68d862..4331fe5a0f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index b7c2381840..82486eed70 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index eb76b27f2a..62c534ebc8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index 74cd67af23..48e978868d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 626629c746..58096e52b3 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 6cbb2ba357..a7d3f76ac6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index 2402c8e7fa..7fdcb28d82 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index c54db7f99f..72e9d918c9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index a7a1b6ba5c..6a271f548b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index 2ae33b91a9..89c7717ca8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index 57faaacb65..a4507e5a2b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 7fda6c2e7d..99cb9693d3 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index 3bd268a257..f3719a875c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 55170f8c79..1982ba2c11 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index 89536c9308..8e65408ea4 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index 51e77de9e7..4ab5a3072f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index 06ec67d7ee..7dd0957b28 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 3df0ce08ea..31b091e65d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 4c99a7a286..100307250f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index aae6e21061..354e1a2d08 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index af33717e7f..182684087a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index cc87ac82cc..189d64b5bb 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index 16dbd87bcd..b966aeb4d8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 61a2c3add1..8b96115251 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 73bf6a1fdf..fa304b1007 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 1b8026d963..d89d52e965 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 4b23cdbf5a..6c20468c10 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index 0f5a0eb102..3c9f8e94cb 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index 678a12d5a8..eefaeaaa58 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index dfe159013b..bd527242d8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index be41c23cdb..054309c705 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 14d8a31c0a..a746a29213 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index f7034e278e..22d527e1dd 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Fast Print +name = Normal definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index e929de3d78..2bbe33ba31 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 92eebb1a0b..b2323d5a6f 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index 83960d1491..fd3a392a23 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Draft Print +name = Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index f907d0e492..d987e3b61c 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Superdraft Print +name = Sprint definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index 335d1f5c6d..612e2a1de9 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Verydraft Print +name = Extra Fast definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index a4f8b60fba..6deaf1127b 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = High Quality +name = Extra Fine definition = ultimaker3 [metadata] diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index e3400f2c5f..67dc2b4b1f 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -1,6 +1,6 @@ [general] version = 2 -name = Normal Quality +name = Fine definition = ultimaker3 [metadata] From 2fb73cccb20d512921d1f6a66820bc3f6a7ed3f3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 15 May 2017 17:11:22 +0200 Subject: [PATCH 793/816] Update PVA profiles These updates bring different speeds for support-top vs. support-bottom, and changes the bottom pattern now that they are separately configurable. I also sorted the BB0.8 variant alphabetically (raft settings were out of place). --- .../um3_bb0.4_PVA_Draft_Print.inst.cfg | 5 ----- .../um3_bb0.4_PVA_Fast_Print.inst.cfg | 4 ---- .../um3_bb0.4_PVA_High_Quality.inst.cfg | 5 ----- .../um3_bb0.4_PVA_Normal_Quality.inst.cfg | 4 ---- resources/variants/ultimaker3_bb0.8.inst.cfg | 14 +++++++++++--- resources/variants/ultimaker3_bb04.inst.cfg | 18 ++++++++++++++---- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index a746a29213..767e321da0 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -11,10 +11,6 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support = =math.ceil(acceleration_print * 500 / 4000) -acceleration_support_infill = =acceleration_support -jerk_support = =math.ceil(jerk_print * 5 / 25) -jerk_support_infill = =jerk_support material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 skin_overlap = 20 @@ -24,4 +20,3 @@ speed_support_interface = =math.ceil(speed_support * 20 / 25) jerk_support_interface = =math.ceil(jerk_support * 1 / 5) acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) support_xy_distance = =round(line_width * 1.5, 2) - diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 22d527e1dd..f266a26ef0 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -11,10 +11,6 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support = =math.ceil(acceleration_print * 500 / 4000) -acceleration_support_infill = =acceleration_support -jerk_support = =math.ceil(jerk_print * 5 / 25) -jerk_support_infill = =jerk_support material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 skin_overlap = 15 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index 2bbe33ba31..b2abfff2e7 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -11,10 +11,6 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support = =math.ceil(acceleration_print * 500 / 4000) -acceleration_support_infill = =acceleration_support -jerk_support = =math.ceil(jerk_print * 5 / 25) -jerk_support_infill = =jerk_support support_infill_rate = 25 support_interface_height = 0.8 material_standby_temperature = 100 @@ -23,4 +19,3 @@ speed_support_interface = =math.ceil(speed_support * 20 / 25) jerk_support_interface = =math.ceil(jerk_support * 1 / 5) acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) support_xy_distance = =round(line_width * 1.5, 2) - diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index b2323d5a6f..f6bb460359 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -11,10 +11,6 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support = =math.ceil(acceleration_print * 500 / 4000) -acceleration_support_infill = =acceleration_support -jerk_support = =math.ceil(jerk_print * 5 / 25) -jerk_support_infill = =jerk_support support_infill_rate = 25 support_interface_height = 0.8 material_standby_temperature = 100 diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index 72d4143370..c0e09e808c 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -11,7 +11,9 @@ setting_version = 1 [values] acceleration_enabled = True acceleration_print = 4000 -acceleration_support_interface = =math.ceil(acceleration_topbottom * 100 / 500) +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) brim_width = 3 cool_fan_speed = 50 cool_min_speed = 5 @@ -21,7 +23,9 @@ infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True jerk_print = 25 -jerk_support_interface = =math.ceil(jerk_topbottom * 1 / 5) +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) layer_height = 0.2 machine_min_cool_heat_time_window = 15 machine_nozzle_heat_up_speed = 1.5 @@ -54,14 +58,18 @@ retraction_prime_speed = 15 skin_overlap = 5 speed_layer_0 = 20 speed_print = 35 -speed_support_interface = =math.ceil(speed_topbottom * 15 / 20) +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) support_angle = 60 support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag support_bottom_stair_step_height = =layer_height support_infill_rate = 25 support_interface_enable = True support_interface_height = =layer_height * 5 +support_interface_skip_height = =layer_height support_join_distance = 3 support_line_width = =round(line_width * 0.4 / 0.35, 2) support_offset = 1.5 diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index b72d849796..654de8a986 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -9,22 +9,32 @@ type = variant setting_version = 1 [values] +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) cool_fan_speed_max = =cool_fan_speed +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) machine_nozzle_heat_up_speed = 1.5 material_print_temperature = 215 +raft_base_speed = 20 +raft_interface_speed = 20 +raft_speed = 25 retraction_extrusion_window = =retraction_amount speed_layer_0 = 20 +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag support_bottom_stair_step_height = =layer_height -raft_interface_speed = 20 -raft_base_speed = 20 support_infill_rate = 25 support_interface_enable = True +support_interface_skip_height = =layer_height support_join_distance = 3 support_line_width = =round(line_width * 0.4 / 0.35, 2) support_offset = 3 support_xy_distance = =wall_line_width_0 * 3 support_xy_distance_overhang = =wall_line_width_0 / 2 -raft_speed = 25 - From dd1ce700f766106d3139b1fab392f39b056b9714 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 09:38:10 +0200 Subject: [PATCH 794/816] Add Japanese translations for setting descriptions Not the labels yet (or anything else for that matter). Contributes to issue CURA-3817. --- resources/i18n/jp/fdmprinter.def.json.po | 4009 ++++++++++++++++++++++ 1 file changed, 4009 insertions(+) create mode 100644 resources/i18n/jp/fdmprinter.def.json.po diff --git a/resources/i18n/jp/fdmprinter.def.json.po b/resources/i18n/jp/fdmprinter.def.json.po new file mode 100644 index 0000000000..285c4a2e7d --- /dev/null +++ b/resources/i18n/jp/fdmprinter.def.json.po @@ -0,0 +1,4009 @@ +msgid "" +msgstr "" +"Project-Id-Version: Uranium json setting files\n" +"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" +"POT-Creation-Date: 2017-03-27 17:27+0000\n" +"PO-Revision-Date: 2017-05-12 10:53+0900\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 2.0.1\n" + +#: fdmprinter.def.json +msgctxt "machine_settings label" +msgid "Machine" +msgstr "Machine" + +#: fdmprinter.def.json +msgctxt "machine_settings description" +msgid "Machine specific settings" +msgstr "マシーン固有設定" + +#: fdmprinter.def.json +msgctxt "machine_name label" +msgid "Machine Type" +msgstr "Machine Type" + +#: fdmprinter.def.json +msgctxt "machine_name description" +msgid "The name of your 3D printer model." +msgstr "3Dプリンタのモデル" + +#: fdmprinter.def.json +msgctxt "machine_show_variants label" +msgid "Show machine variants" +msgstr "Show machine variants" + +#: fdmprinter.def.json +msgctxt "machine_show_variants description" +msgid "Whether to show the different variants of this machine, which are described in separate json files." +msgstr "このマシーンの形式を表示するかどうかは、別のjsonファイルに記述されています。" + +#: fdmprinter.def.json +msgctxt "machine_start_gcode label" +msgid "Start GCode" +msgstr "Start GCode" + +#: fdmprinter.def.json +msgctxt "machine_start_gcode description" +msgid "" +"Gcode commands to be executed at the very start - separated by \n" +"." +msgstr "開始時に実行されるGcodeのコマンドは −で区切られています。" + +#: fdmprinter.def.json +msgctxt "machine_end_gcode label" +msgid "End GCode" +msgstr "End GCode" + +#: fdmprinter.def.json +msgctxt "machine_end_gcode description" +msgid "" +"Gcode commands to be executed at the very end - separated by \n" +"." +msgstr "" +"開始時に実行されるGcodeのコマンドは \n" +"で区切られています。" + +#: fdmprinter.def.json +msgctxt "material_guid label" +msgid "Material GUID" +msgstr "Material GUID" + +#: fdmprinter.def.json +msgctxt "material_guid description" +msgid "GUID of the material. This is set automatically. " +msgstr "マテリアルのGUID。これは自動的に設定されます。" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_wait label" +msgid "Wait for build plate heatup" +msgstr "Wait for build plate heatup" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_wait description" +msgid "Whether to insert a command to wait until the build plate temperature is reached at the start." +msgstr "開始時にビルドプレートが温度に達するまで待つコマンドを挿入するかどうか。" + +#: fdmprinter.def.json +msgctxt "material_print_temp_wait label" +msgid "Wait for nozzle heatup" +msgstr "Wait for nozzle heatup" + +#: fdmprinter.def.json +msgctxt "material_print_temp_wait description" +msgid "Whether to wait until the nozzle temperature is reached at the start." +msgstr "開始時にノズルの温度が達するまで待つかどうか。" + +#: fdmprinter.def.json +msgctxt "material_print_temp_prepend label" +msgid "Include material temperatures" +msgstr "Include material temperatures" + +#: fdmprinter.def.json +msgctxt "material_print_temp_prepend description" +msgid "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting." +msgstr "gcodeの開始時にノズル温度設定を含めるかどうか。 既に最初のgcodeにノズル温度設定が含まれている場合、Curaフロントエンドは自動的にこの設定を無効にします。" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_prepend label" +msgid "Include build plate temperature" +msgstr "Include build plate temperature" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_prepend description" +msgid "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting." +msgstr "gcodeの開始時にビルドプレート温度設定を含めるかどうか。 既に最初のgcodeにビルドプレート温度設定が含まれている場合、Curaフロントエンドは自動的にこの設定を無効にします。" + +#: fdmprinter.def.json +msgctxt "machine_width label" +msgid "Machine width" +msgstr "Machine width" + +#: fdmprinter.def.json +msgctxt "machine_width description" +msgid "The width (X-direction) of the printable area." +msgstr "造形可能領域の幅(X方向)。" + +#: fdmprinter.def.json +msgctxt "machine_depth label" +msgid "Machine depth" +msgstr "Machine depth" + +#: fdmprinter.def.json +msgctxt "machine_depth description" +msgid "The depth (Y-direction) of the printable area." +msgstr "造形可能領域の幅(X方向)。" + +#: fdmprinter.def.json +msgctxt "machine_shape label" +msgid "Build plate shape" +msgstr "Build plate shape" + +#: fdmprinter.def.json +msgctxt "machine_shape description" +msgid "The shape of the build plate without taking unprintable areas into account." +msgstr "造形不能領域を考慮しないビルドプレートの形状。" + +#: fdmprinter.def.json +msgctxt "machine_shape option rectangular" +msgid "Rectangular" +msgstr "Rectangular" + +#: fdmprinter.def.json +msgctxt "machine_shape option elliptic" +msgid "Elliptic" +msgstr "Elliptic" + +#: fdmprinter.def.json +msgctxt "machine_height label" +msgid "Machine height" +msgstr "Machine height" + +#: fdmprinter.def.json +msgctxt "machine_height description" +msgid "The height (Z-direction) of the printable area." +msgstr "造形可能領域の幅(X方向)。" + +#: fdmprinter.def.json +msgctxt "machine_heated_bed label" +msgid "Has heated build plate" +msgstr "Has heated build plate" + +#: fdmprinter.def.json +msgctxt "machine_heated_bed description" +msgid "Whether the machine has a heated build plate present." +msgstr "マシーンに加熱式ビルドプレートが付属しているかどうか。" + +#: fdmprinter.def.json +msgctxt "machine_center_is_zero label" +msgid "Is center origin" +msgstr "Is center origin" + +#: fdmprinter.def.json +msgctxt "machine_center_is_zero description" +msgid "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area." +msgstr "プリンタのゼロポジションのX / Y座標が印刷可能領域の中心にあるかどうか。" + +#: fdmprinter.def.json +msgctxt "machine_extruder_count label" +msgid "Number of Extruders" +msgstr "Number of Extruders" + +#: fdmprinter.def.json +msgctxt "machine_extruder_count description" +msgid "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle." +msgstr "エクストルーダーの数。エクストルーダーの数は、フィーダー、ボーデンチューブ、およびノズルの組合せである。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_tip_outer_diameter label" +msgid "Outer nozzle diameter" +msgstr "Outer nozzle diameter" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_tip_outer_diameter description" +msgid "The outer diameter of the tip of the nozzle." +msgstr "ノズルの外径。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_head_distance label" +msgid "Nozzle length" +msgstr "Nozzle length" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_head_distance description" +msgid "The height difference between the tip of the nozzle and the lowest part of the print head." +msgstr "ノズル先端とプリントヘッドの最下部との高さの差。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_expansion_angle label" +msgid "Nozzle angle" +msgstr "Nozzle angle" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_expansion_angle description" +msgid "The angle between the horizontal plane and the conical part right above the tip of the nozzle." +msgstr "水平面とノズルの真上の円錐部分との間の角度。" + +#: fdmprinter.def.json +msgctxt "machine_heat_zone_length label" +msgid "Heat zone length" +msgstr "Heat zone length" + +#: fdmprinter.def.json +msgctxt "machine_heat_zone_length description" +msgid "The distance from the tip of the nozzle in which heat from the nozzle is transferred to the filament." +msgstr "ノズルからの熱がフィラメントに伝達される距離。" + +#: fdmprinter.def.json +msgctxt "machine_filament_park_distance label" +msgid "Filament Park Distance" +msgstr "Filament Park Distance" + +#: fdmprinter.def.json +msgctxt "machine_filament_park_distance description" +msgid "The distance from the tip of the nozzle where to park the filament when an extruder is no longer used." +msgstr "エクストルーダーが使用していない時、フィラメントを留めている場所からノズルまでの距離。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_temp_enabled label" +msgid "Enable Nozzle Temperature Control" +msgstr "Enable Nozzle Temperature Control" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_temp_enabled description" +msgid "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura." +msgstr "Curaから温度を制御するかどうか。これをオフにして、Cura外からノズル温度を制御することで無効化。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_heat_up_speed label" +msgid "Heat up speed" +msgstr "Heat up speed" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_heat_up_speed description" +msgid "The speed (°C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature." +msgstr "ノズルが加熱する速度(℃/ s)は、通常の印刷時温度とスタンバイ時温度にて平均化されています。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_cool_down_speed label" +msgid "Cool down speed" +msgstr "Cool down speed" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_cool_down_speed description" +msgid "The speed (°C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature." +msgstr "ノズルが冷却される速度(℃/ s)は、通常の印刷温度とスタンバイ温度のウィンドウにわたって平均化されています。" + +#: fdmprinter.def.json +msgctxt "machine_min_cool_heat_time_window label" +msgid "Minimal Time Standby Temperature" +msgstr "Minimal Time Standby Temperature" + +#: fdmprinter.def.json +msgctxt "machine_min_cool_heat_time_window description" +msgid "The minimal time an extruder has to be inactive before the nozzle is cooled. Only when an extruder is not used for longer than this time will it be allowed to cool down to the standby temperature." +msgstr "ノズルが冷却される前にエクストルーダーが静止しなければならない最短時間。この時間より長時間エクストルーダーを使用しない場合にのみ、スタンバイ温度に冷却することができます。" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor label" +msgid "Gcode flavour" +msgstr "Gcode flavour" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor description" +msgid "The type of gcode to be generated." +msgstr "生成するGコードの種類" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option RepRap (Marlin/Sprinter)" +msgid "RepRap (Marlin/Sprinter)" +msgstr "RepRap (Marlin/Sprinter)" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option RepRap (Volumatric)" +msgid "RepRap (Volumetric)" +msgstr "RepRap (Volumetric)" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option UltiGCode" +msgid "Ultimaker 2" +msgstr "Ultimaker 2" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Griffin" +msgid "Griffin" +msgstr "Griffin" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Makerbot" +msgid "Makerbot" +msgstr "Makerbot" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option BFB" +msgid "Bits from Bytes" +msgstr "Bits from Bytes" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option MACH3" +msgid "Mach3" +msgstr "Mach3" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Repetier" +msgid "Repetier" +msgstr "Repetier" + +#: fdmprinter.def.json +msgctxt "machine_disallowed_areas label" +msgid "Disallowed areas" +msgstr "Disallowed areas" + +#: fdmprinter.def.json +msgctxt "machine_disallowed_areas description" +msgid "A list of polygons with areas the print head is not allowed to enter." +msgstr "プリントヘッドの領域を持つポリゴンのリストは入力できません。" + +#: fdmprinter.def.json +msgctxt "nozzle_disallowed_areas label" +msgid "Nozzle Disallowed Areas" +msgstr "Nozzle Disallowed Areas" + +#: fdmprinter.def.json +msgctxt "nozzle_disallowed_areas description" +msgid "A list of polygons with areas the nozzle is not allowed to enter." +msgstr "ノズルが入ることができない領域を持つポリゴンのリスト。" + +#: fdmprinter.def.json +msgctxt "machine_head_polygon label" +msgid "Machine head polygon" +msgstr "Machine head polygon" + +#: fdmprinter.def.json +msgctxt "machine_head_polygon description" +msgid "A 2D silhouette of the print head (fan caps excluded)." +msgstr "プリントヘッドの2Dシルエット(ファンキャップは除く)。" + +#: fdmprinter.def.json +msgctxt "machine_head_with_fans_polygon label" +msgid "Machine head & Fan polygon" +msgstr "Machine head & Fan polygon" + +#: fdmprinter.def.json +msgctxt "machine_head_with_fans_polygon description" +msgid "A 2D silhouette of the print head (fan caps included)." +msgstr "プリントヘッドの2Dシルエット(ファンキャップが含まれています)。" + +#: fdmprinter.def.json +msgctxt "gantry_height label" +msgid "Gantry height" +msgstr "Gantry height" + +#: fdmprinter.def.json +msgctxt "gantry_height description" +msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes)." +msgstr "ノズルの先端とガントリーシステムの高さの差(X軸とY軸)。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_size label" +msgid "Nozzle Diameter" +msgstr "Nozzle Diameter" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_size description" +msgid "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size." +msgstr "ノズルの内径。標準以外のノズルを使用する場合は、この設定を変更してください。" + +#: fdmprinter.def.json +msgctxt "machine_use_extruder_offset_to_offset_coords label" +msgid "Offset With Extruder" +msgstr "Offset With Extruder" + +#: fdmprinter.def.json +msgctxt "machine_use_extruder_offset_to_offset_coords description" +msgid "Apply the extruder offset to the coordinate system." +msgstr "エクストルーダーのオフセットを座標システムに適用します。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_z label" +msgid "Extruder Prime Z Position" +msgstr "Extruder Prime Z Position" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_z description" +msgid "The Z coordinate of the position where the nozzle primes at the start of printing." +msgstr "印刷開始時にノズルがポジションを確認するZ座標。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_abs label" +msgid "Absolute Extruder Prime Position" +msgstr "Absolute Extruder Prime Position" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_abs description" +msgid "Make the extruder prime position absolute rather than relative to the last-known location of the head." +msgstr "最後のヘッドの既知位置からではなく、エクストルーダー現在位置を絶対位置にします。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_x label" +msgid "Maximum Speed X" +msgstr "Maximum Speed X" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_x description" +msgid "The maximum speed for the motor of the X-direction." +msgstr "X方向のモーターの最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_y label" +msgid "Maximum Speed Y" +msgstr "Maximum Speed Y" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_y description" +msgid "The maximum speed for the motor of the Y-direction." +msgstr "Y方向のモーターの最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_z label" +msgid "Maximum Speed Z" +msgstr "Maximum Speed Z" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_z description" +msgid "The maximum speed for the motor of the Z-direction." +msgstr "Z方向のモーターの最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_e label" +msgid "Maximum Feedrate" +msgstr "Maximum Feedrate" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_e description" +msgid "The maximum speed of the filament." +msgstr "フィラメントの最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_x label" +msgid "Maximum Acceleration X" +msgstr "Maximum Acceleration X" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_x description" +msgid "Maximum acceleration for the motor of the X-direction" +msgstr "X方向のモーターの最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_y label" +msgid "Maximum Acceleration Y" +msgstr "Maximum Acceleration Y" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_y description" +msgid "Maximum acceleration for the motor of the Y-direction." +msgstr "Y方向のモーターの最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_z label" +msgid "Maximum Acceleration Z" +msgstr "Maximum Acceleration Z" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_z description" +msgid "Maximum acceleration for the motor of the Z-direction." +msgstr "Z方向のモーターの最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_e label" +msgid "Maximum Filament Acceleration" +msgstr "Maximum Filament Acceleration" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_e description" +msgid "Maximum acceleration for the motor of the filament." +msgstr "フィラメントのモーターの最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_acceleration label" +msgid "Default Acceleration" +msgstr "Default Acceleration" + +#: fdmprinter.def.json +msgctxt "machine_acceleration description" +msgid "The default acceleration of print head movement." +msgstr "プリントヘッド移動のデフォルトの加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_xy label" +msgid "Default X-Y Jerk" +msgstr "Default X-Y Jerk" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_xy description" +msgid "Default jerk for movement in the horizontal plane." +msgstr "水平面内での移動のデフォルトジャーク。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_z label" +msgid "Default Z Jerk" +msgstr "Default Z Jerk" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_z description" +msgid "Default jerk for the motor of the Z-direction." +msgstr "Z方向のモーターのデフォルトジャーク。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_e label" +msgid "Default Filament Jerk" +msgstr "Default Filament Jerk" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_e description" +msgid "Default jerk for the motor of the filament." +msgstr "フィラメントのモーターのデフォルトジャーク。" + +#: fdmprinter.def.json +msgctxt "machine_minimum_feedrate label" +msgid "Minimum Feedrate" +msgstr "Minimum Feedrate" + +#: fdmprinter.def.json +msgctxt "machine_minimum_feedrate description" +msgid "The minimal movement speed of the print head." +msgstr "プリントヘッドの最小移動速度。" + +#: fdmprinter.def.json +msgctxt "resolution label" +msgid "Quality" +msgstr "Quality" + +#: fdmprinter.def.json +msgctxt "resolution description" +msgid "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)" +msgstr "プリントの解像度に影響を与えるすべての設定。これらの設定は、品質(および印刷時間)に大きな影響を与えます。" + +#: fdmprinter.def.json +msgctxt "layer_height label" +msgid "Layer Height" +msgstr "Layer Height" + +#: fdmprinter.def.json +msgctxt "layer_height description" +msgid "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution." +msgstr "各レイヤーの高さ(mm)。値を大きくすると早く印刷しますが荒くなり、小さくすると印刷が遅くなりますが造形が綺麗になります。" + +#: fdmprinter.def.json +msgctxt "layer_height_0 label" +msgid "Initial Layer Height" +msgstr "Initial Layer Height" + +#: fdmprinter.def.json +msgctxt "layer_height_0 description" +msgid "The height of the initial layer in mm. A thicker initial layer makes adhesion to the build plate easier." +msgstr "初期レイヤーの高さ(mm)。厚い初期層はビルドプレートへの接着を容易にする。" + +#: fdmprinter.def.json +msgctxt "line_width label" +msgid "Line Width" +msgstr "Line Width" + +#: fdmprinter.def.json +msgctxt "line_width description" +msgid "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints." +msgstr "1ラインの幅。一般に、各ラインの幅は、ノズルの幅に対応する必要があります。ただし、この値を少し小さくすると、より良い造形が得られます。" + +#: fdmprinter.def.json +msgctxt "wall_line_width label" +msgid "Wall Line Width" +msgstr "Wall Line Width" + +#: fdmprinter.def.json +msgctxt "wall_line_width description" +msgid "Width of a single wall line." +msgstr "ウォールラインの幅。" + +#: fdmprinter.def.json +msgctxt "wall_line_width_0 label" +msgid "Outer Wall Line Width" +msgstr "Outer Wall Line Width" + +#: fdmprinter.def.json +msgctxt "wall_line_width_0 description" +msgid "Width of the outermost wall line. By lowering this value, higher levels of detail can be printed." +msgstr "最も外側のウォールラインの幅。この値を下げると、より詳細な印刷できます。" + +#: fdmprinter.def.json +msgctxt "wall_line_width_x label" +msgid "Inner Wall(s) Line Width" +msgstr "Inner Wall(s) Line Width" + +#: fdmprinter.def.json +msgctxt "wall_line_width_x description" +msgid "Width of a single wall line for all wall lines except the outermost one." +msgstr "一番外側のウォールラインを除くすべてのウォールラインのラインの幅。" + +#: fdmprinter.def.json +msgctxt "skin_line_width label" +msgid "Top/Bottom Line Width" +msgstr "Top/Bottom Line Width" + +#: fdmprinter.def.json +msgctxt "skin_line_width description" +msgid "Width of a single top/bottom line." +msgstr "上辺/底辺線のライン幅。" + +#: fdmprinter.def.json +msgctxt "infill_line_width label" +msgid "Infill Line Width" +msgstr "Infill Line Width" + +#: fdmprinter.def.json +msgctxt "infill_line_width description" +msgid "Width of a single infill line." +msgstr "インフィル線の幅。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_line_width label" +msgid "Skirt/Brim Line Width" +msgstr "Skirt/Brim Line Width" + +#: fdmprinter.def.json +msgctxt "skirt_brim_line_width description" +msgid "Width of a single skirt or brim line." +msgstr "単一のスカートまたはブリムラインの幅。" + +#: fdmprinter.def.json +msgctxt "support_line_width label" +msgid "Support Line Width" +msgstr "Support Line Width" + +#: fdmprinter.def.json +msgctxt "support_line_width description" +msgid "Width of a single support structure line." +msgstr "単一のサポート構造のライン幅。" + +#: fdmprinter.def.json +msgctxt "support_interface_line_width label" +msgid "Support Interface Line Width" +msgstr "Support Interface Line Width" + +#: fdmprinter.def.json +msgctxt "support_interface_line_width description" +msgid "Width of a single support interface line." +msgstr "単一のサポートインタフェースラインの幅。" + +#: fdmprinter.def.json +msgctxt "prime_tower_line_width label" +msgid "Prime Tower Line Width" +msgstr "Prime Tower Line Width" + +#: fdmprinter.def.json +msgctxt "prime_tower_line_width description" +msgid "Width of a single prime tower line." +msgstr "単一のプライムタワーラインの幅。" + +#: fdmprinter.def.json +msgctxt "shell label" +msgid "Shell" +msgstr "Shell" + +#: fdmprinter.def.json +msgctxt "shell description" +msgid "Shell" +msgstr "外郭" + +#: fdmprinter.def.json +msgctxt "wall_thickness label" +msgid "Wall Thickness" +msgstr "Wall Thickness" + +#: fdmprinter.def.json +msgctxt "wall_thickness description" +msgid "The thickness of the outside walls in the horizontal direction. This value divided by the wall line width defines the number of walls." +msgstr "水平方向の外壁厚さ この値をウォールライン幅で割ることで、ウォール数を定義します。" + +#: fdmprinter.def.json +msgctxt "wall_line_count label" +msgid "Wall Line Count" +msgstr "Wall Line Count" + +#: fdmprinter.def.json +msgctxt "wall_line_count description" +msgid "The number of walls. When calculated by the wall thickness, this value is rounded to a whole number." +msgstr "ウォールの数。厚さから計算された場合、この値は整数になります。" + +#: fdmprinter.def.json +msgctxt "wall_0_wipe_dist label" +msgid "Outer Wall Wipe Distance" +msgstr "Outer Wall Wipe Distance" + +#: fdmprinter.def.json +msgctxt "wall_0_wipe_dist description" +msgid "Distance of a travel move inserted after the outer wall, to hide the Z seam better." +msgstr "外壁の後に挿入された移動の距離はZシームをよりよく隠します。" + +#: fdmprinter.def.json +msgctxt "top_bottom_thickness label" +msgid "Top/Bottom Thickness" +msgstr "Top/Bottom Thickness" + +#: fdmprinter.def.json +msgctxt "top_bottom_thickness description" +msgid "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers." +msgstr "プリント時の最上面、最底面の厚み。これを積層ピッチで割った値で最上面、最低面のレイヤーの数を定義します。" + +#: fdmprinter.def.json +msgctxt "top_thickness label" +msgid "Top Thickness" +msgstr "Top Thickness" + +#: fdmprinter.def.json +msgctxt "top_thickness description" +msgid "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers." +msgstr "プリント時の最上面の厚み。これを積層ピッチで割った値で最上面のレイヤーの数を定義します。" + +#: fdmprinter.def.json +msgctxt "top_layers label" +msgid "Top Layers" +msgstr "Top Layers" + +#: fdmprinter.def.json +msgctxt "top_layers description" +msgid "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number." +msgstr "最上面のレイヤー数。トップの厚さを計算する場合、この値は整数になります。" + +#: fdmprinter.def.json +msgctxt "bottom_thickness label" +msgid "Bottom Thickness" +msgstr "Bottom Thickness" + +#: fdmprinter.def.json +msgctxt "bottom_thickness description" +msgid "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers." +msgstr "プリント時の最底面の厚み。これを積層ピッチで割った値で最低面のレイヤーの数を定義します。" + +#: fdmprinter.def.json +msgctxt "bottom_layers label" +msgid "Bottom Layers" +msgstr "Bottom Layers" + +#: fdmprinter.def.json +msgctxt "bottom_layers description" +msgid "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number." +msgstr "最底面のレイヤー数。下の厚さで計算すると、この値は整数に変換されます。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern label" +msgid "Top/Bottom Pattern" +msgstr "Top/Bottom Pattern" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern description" +msgid "The pattern of the top/bottom layers." +msgstr "上層/底層のパターン。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option lines" +msgid "Lines" +msgstr "Lines" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option concentric" +msgid "Concentric" +msgstr "Concentric" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option zigzag" +msgid "Zig Zag" +msgstr "Zig Zag" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 label" +msgid "Bottom Pattern Initial Layer" +msgstr "Bottom Pattern Initial Layer" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 description" +msgid "The pattern on the bottom of the print on the first layer." +msgstr "第1層のプリントの底部のパターン。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option lines" +msgid "Lines" +msgstr "Lines" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option concentric" +msgid "Concentric" +msgstr "Concentric" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option zigzag" +msgid "Zig Zag" +msgstr "Zig Zag" + +#: fdmprinter.def.json +msgctxt "skin_angles label" +msgid "Top/Bottom Line Directions" +msgstr "Top/Bottom Line Directions" + +#: fdmprinter.def.json +msgctxt "skin_angles description" +msgid "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees)." +msgstr "上/下のレイヤーが線またはジグザグパターンを使う際の整数線の方向のリスト。リストの要素は、層が進行するにつれて順番に使用され、リストの終わりに達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは、従来のデフォルト角度(45度と135度)を使用する空のリストです。" + +#: fdmprinter.def.json +msgctxt "wall_0_inset label" +msgid "Outer Wall Inset" +msgstr "Outer Wall Inset" + +#: fdmprinter.def.json +msgctxt "wall_0_inset description" +msgid "Inset applied to the path of the outer wall. If the outer wall is smaller than the nozzle, and printed after the inner walls, use this offset to get the hole in the nozzle to overlap with the inner walls instead of the outside of the model." +msgstr "外壁の経路にはめ込む。外壁がノズルよりも小さく、内壁の後に造形されている場合は、オフセットを使用して、ノズルの穴をモデルの外側ではなく内壁と重なるようにします。" + +#: fdmprinter.def.json +msgctxt "outer_inset_first label" +msgid "Outer Before Inner Walls" +msgstr "Outer Before Inner Walls" + +#: fdmprinter.def.json +msgctxt "outer_inset_first description" +msgid "Prints walls in order of outside to inside when enabled. This can help improve dimensional accuracy in X and Y when using a high viscosity plastic like ABS; however it can decrease outer surface print quality, especially on overhangs." +msgstr "有効にすると、壁は外側から内側に順番に印刷します。これは、ABSのような高粘度のプラスチックを使用する際、XとYの寸法精度を改善するのに役立ちます。しかし、特にオーバーハング時に、外面の印刷品質を低下させる可能性があります。" + +#: fdmprinter.def.json +msgctxt "alternate_extra_perimeter label" +msgid "Alternate Extra Wall" +msgstr "Alternate Extra Wall" + +#: fdmprinter.def.json +msgctxt "alternate_extra_perimeter description" +msgid "Prints an extra wall at every other layer. This way infill gets caught between these extra walls, resulting in stronger prints." +msgstr "すべてのレイヤーごとに予備の壁を印刷します。このようにして、インフィルは余分な壁の間に挟まれ、より強い印刷物が得られる。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_enabled label" +msgid "Compensate Wall Overlaps" +msgstr "Compensate Wall Overlaps" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_enabled description" +msgid "Compensate the flow for parts of a wall being printed where there is already a wall in place." +msgstr "すでに壁が設置されている部品の壁の流れを補正します。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_0_enabled label" +msgid "Compensate Outer Wall Overlaps" +msgstr "Compensate Outer Wall Overlaps" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_0_enabled description" +msgid "Compensate the flow for parts of an outer wall being printed where there is already a wall in place." +msgstr "すでに壁が設置されている場所にプリントされている外壁の部分の流れを補う。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_x_enabled label" +msgid "Compensate Inner Wall Overlaps" +msgstr "Compensate Inner Wall Overlaps" + +#: fdmprinter.def.json +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 "fill_perimeter_gaps label" +msgid "Fill Gaps Between Walls" +msgstr "Fill Gaps Between Walls" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps description" +msgid "Fills the gaps between walls where no walls fit." +msgstr "壁が入らない壁の隙間を埋める。" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps option nowhere" +msgid "Nowhere" +msgstr "Nowhere" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps option everywhere" +msgid "Everywhere" +msgstr "Everywhere" + +#: fdmprinter.def.json +msgctxt "xy_offset label" +msgid "Horizontal Expansion" +msgstr "Horizontal Expansion" + +#: fdmprinter.def.json +msgctxt "xy_offset description" +msgid "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes." +msgstr "各レイヤーのすべてのポリゴンに適用されるオフセットの量。正の値は大きすぎる穴を補うことができます。負の値は小さすぎる穴を補うことができます。" + +#: fdmprinter.def.json +msgctxt "z_seam_type label" +msgid "Z Seam Alignment" +msgstr "Z Seam Alignment" + +#: fdmprinter.def.json +msgctxt "z_seam_type description" +msgid "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker." +msgstr "レイヤーの経路始点。連続するレイヤー経路が同じポイントで開始すると、縦のシームが印刷に表示されることがあります。ユーザーが指定した場所の近くでこれらを整列させる場合、継ぎ目は最も簡単に取り除くことができます。無作為に配置すると、経路開始時の粗さが目立たなくなります。最短経路をとると、印刷が速くなります。" + +#: fdmprinter.def.json +msgctxt "z_seam_type option back" +msgid "User Specified" +msgstr "User Specified" + +#: fdmprinter.def.json +msgctxt "z_seam_type option shortest" +msgid "Shortest" +msgstr "Shortest" + +#: fdmprinter.def.json +msgctxt "z_seam_type option random" +msgid "Random" +msgstr "Random" + +#: fdmprinter.def.json +msgctxt "z_seam_x label" +msgid "Z Seam X" +msgstr "Z Seam 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" +"標の位置。" + +#: fdmprinter.def.json +msgctxt "z_seam_y label" +msgid "Z Seam Y" +msgstr "Z Seam Y" + +#: fdmprinter.def.json +msgctxt "z_seam_y description" +msgid "The Y coordinate of the position near where to start printing each part in a layer." +msgstr "The Y coordinate of the position near where to start printing each part in a layer." + +#: fdmprinter.def.json +msgctxt "skin_no_small_gaps_heuristic label" +msgid "Ignore Small Z Gaps" +msgstr "Ignore Small Z Gaps" + +#: fdmprinter.def.json +msgctxt "skin_no_small_gaps_heuristic description" +msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +msgstr "モデルに垂直方向のギャップが小さくある場合、これらの狭いスペースにおいて上部および下部スキンを生成するために、約5%の計算時間が追加されます。そのような場合は、設定を無効にしてください。" + +#: fdmprinter.def.json +msgctxt "infill label" +msgid "Infill" +msgstr "Infill" + +#: fdmprinter.def.json +msgctxt "infill description" +msgid "Infill" +msgstr "インフィル" + +#: fdmprinter.def.json +msgctxt "infill_sparse_density label" +msgid "Infill Density" +msgstr "Infill Density" + +#: fdmprinter.def.json +msgctxt "infill_sparse_density description" +msgid "Adjusts the density of infill of the print." +msgstr "プリントのインフィルの密度を調整します。" + +#: fdmprinter.def.json +msgctxt "infill_line_distance label" +msgid "Infill Line Distance" +msgstr "Infill Line Distance" + +#: fdmprinter.def.json +msgctxt "infill_line_distance description" +msgid "Distance between the printed infill lines. This setting is calculated by the infill density and the infill line width." +msgstr "造形されたインフィルラインの距離。この設定は、インフィル密度およびライン幅によって計算される。" + +#: fdmprinter.def.json +msgctxt "infill_pattern label" +msgid "Infill Pattern" +msgstr "Infill Pattern" + +#: fdmprinter.def.json +msgctxt "infill_pattern description" +msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, tetrahedral and concentric patterns are fully printed every layer. Cubic and tetrahedral infill change with every layer to provide a more equal distribution of strength over each direction." +msgstr "印刷物のインフィルのパターン。ラインとジグザグのインフィルは交互のレイヤー方向をずらし、材料費を削減します。グリッド、三角形、キュービック、四面体、同心円のパターンは、各レイヤーに完全に印刷されます。立方体および四面体のインフィルは各層ごとに変化し、各方向に沿ってより均等な強度分布を提供する。" + +#: fdmprinter.def.json +msgctxt "infill_pattern option grid" +msgid "Grid" +msgstr "Grid" + +#: fdmprinter.def.json +msgctxt "infill_pattern option lines" +msgid "Lines" +msgstr "Lines" + +#: fdmprinter.def.json +msgctxt "infill_pattern option triangles" +msgid "Triangles" +msgstr "Triangles" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cubic" +msgid "Cubic" +msgstr "Cubic" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cubicsubdiv" +msgid "Cubic Subdivision" +msgstr "Cubic Subdivision" + +#: fdmprinter.def.json +msgctxt "infill_pattern option tetrahedral" +msgid "Tetrahedral" +msgstr "Tetrahedral" + +#: fdmprinter.def.json +msgctxt "infill_pattern option concentric" +msgid "Concentric" +msgstr "Concentric" + +#: fdmprinter.def.json +msgctxt "infill_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "Concentric 3D" + +#: fdmprinter.def.json +msgctxt "infill_pattern option zigzag" +msgid "Zig Zag" +msgstr "Zig Zag" + +#: fdmprinter.def.json +msgctxt "infill_angles label" +msgid "Infill Line Directions" +msgstr "Infill Line Directions" + +#: fdmprinter.def.json +msgctxt "infill_angles description" +msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns)." +msgstr "使用する整数線の方向のリスト。リストの要素は、レイヤの層に合わせて順番に使用され、リストの末尾に達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは空のリストです。これは、従来のデフォルト角度(線とジグザグのパターンでは45と135度、他のすべてのパターンでは45度)を使用することを意味します。" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_mult label" +msgid "Cubic Subdivision Radius" +msgstr "Cubic Subdivision Radius" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_mult description" +msgid "A multiplier on the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to more subdivisions, i.e. more small cubes." +msgstr "各立方体の中心からの半径上の乗数で、モデルの境界をチェックし、この立方体を細分するかどうかを決定します。値を大きくすると細分化が増えます。つまり、より小さなキューブになります。" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_add label" +msgid "Cubic Subdivision Shell" +msgstr "Cubic Subdivision Shell" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_add description" +msgid "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model." +msgstr "この立方体を細分するかどうかを決定するために、各立方体の中心から半径に加えてモデルの境界を調べます。値を大きくすると、モデルの境界付近に小さな立方体のより厚いシェルができます。" + +#: fdmprinter.def.json +msgctxt "infill_overlap label" +msgid "Infill Overlap Percentage" +msgstr "Infill Overlap Percentage" + +#: fdmprinter.def.json +msgctxt "infill_overlap description" +msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." +msgstr "インフィルと壁が交差する量、わずかな交差によって壁がインフィルにしっかりつながります。" + +#: fdmprinter.def.json +msgctxt "infill_overlap_mm label" +msgid "Infill Overlap" +msgstr "Infill Overlap" + +#: fdmprinter.def.json +msgctxt "infill_overlap_mm description" +msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." +msgstr "インフィルと壁が交差する量、わずかな交差によって壁がインフィルにしっかりつながります。" + +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Skin Overlap Percentage" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." +msgstr "スキンと壁の間のオーバーラップ量 わずかなオーバーラップによって壁がスキンにしっかりつながります。" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Skin Overlap" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin." +msgstr "スキンと壁の間の交差した量 わずかなオーバーラップによって壁がスキンにしっかりつながります。" + +#: fdmprinter.def.json +msgctxt "infill_wipe_dist label" +msgid "Infill Wipe Distance" +msgstr "Infill Wipe Distance" + +#: fdmprinter.def.json +msgctxt "infill_wipe_dist description" +msgid "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line." +msgstr "インフィルラインごとに挿入された移動距離は壁のインフィルへの接着をより良くします。このオプションは、インフィルオーバーラップに似ていますが、押出なく、インフィルラインの片側にのみあります。" + +#: fdmprinter.def.json +msgctxt "infill_sparse_thickness label" +msgid "Infill Layer Thickness" +msgstr "Infill Layer Thickness" + +#: fdmprinter.def.json +msgctxt "infill_sparse_thickness description" +msgid "The thickness per layer of infill material. This value should always be a multiple of the layer height and is otherwise rounded." +msgstr "インフィルマテリアルの層ごとの厚さ。この値は常にレイヤーの高さの倍数でなければなりません。" + +#: fdmprinter.def.json +msgctxt "gradual_infill_steps label" +msgid "Gradual Infill Steps" +msgstr "Gradual Infill Steps" + +#: fdmprinter.def.json +msgctxt "gradual_infill_steps description" +msgid "Number of times to reduce the infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Infill Density." +msgstr "天井面の表面に近づく際にインフィル密度が半減する回数。天井面に近い領域ほど高い密度となり、インフィル密度まで達します。" + +#: fdmprinter.def.json +msgctxt "gradual_infill_step_height label" +msgid "Gradual Infill Step Height" +msgstr "Gradual Infill Step Height" + +#: fdmprinter.def.json +msgctxt "gradual_infill_step_height description" +msgid "The height of infill of a given density before switching to half the density." +msgstr "密度が半分に切り替える前の所定のインフィルの高さ。" + +#: fdmprinter.def.json +msgctxt "infill_before_walls label" +msgid "Infill Before Walls" +msgstr "Infill Before Walls" + +#: 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" +"はじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" + +#: fdmprinter.def.json +msgctxt "min_infill_area label" +msgid "Minimum Infill Area" +msgstr "Minimum Infill Area" + +#: fdmprinter.def.json +msgctxt "min_infill_area description" +msgid "Don't generate areas of infill smaller than this (use skin instead)." +msgstr "これより小さいインフィルの領域を生成しないでください (代わりにスキンを使用してください)。" + +#: fdmprinter.def.json +msgctxt "expand_skins_into_infill label" +msgid "Expand Skins Into Infill" +msgstr "Expand Skins Into Infill" + +#: fdmprinter.def.json +msgctxt "expand_skins_into_infill description" +msgid "Expand skin areas of top and/or bottom skin of flat surfaces. By default, skins stop under the wall lines that surround infill but this can lead to holes appearing when the infill density is low. This setting extends the skins beyond the wall lines so that the infill on the next layer rests on skin." +msgstr "平らな面の上部または底部のスキン部の及びその領域を展開します。既定では、スキンインフィルの周りの壁の線で停止しますが、これはインフィル密度が低いときに現れる穴につながることがあります。この設定は、次の層の面材が皮膚にかかっているので、壁の線を超えてスキンを拡張します。" + +#: fdmprinter.def.json +msgctxt "expand_upper_skins label" +msgid "Expand Upper Skins" +msgstr "Expand Upper Skins" + +#: fdmprinter.def.json +msgctxt "expand_upper_skins description" +msgid "Expand upper skin areas (areas with air above) so that they support infill above." +msgstr "上部のインフィルをサポートするので、スキン面 (上記の空気を含んだ領域) を展開します。" + +#: fdmprinter.def.json +msgctxt "expand_lower_skins label" +msgid "Expand Lower Skins" +msgstr "Expand Lower Skins" + +#: fdmprinter.def.json +msgctxt "expand_lower_skins description" +msgid "Expand lower skin areas (areas with air below) so that they are anchored by the infill layers above and below." +msgstr "彼らは上と下の面材のレイヤーによって固定されますので、低い肌の部分 (空気を含んだ領域) を展開します。" + +#: fdmprinter.def.json +msgctxt "expand_skins_expand_distance label" +msgid "Skin Expand Distance" +msgstr "Skin Expand Distance" + +#: fdmprinter.def.json +msgctxt "expand_skins_expand_distance description" +msgid "The distance the skins are expanded into the infill. The default distance is enough to bridge the gap between the infill lines and will stop holes appearing in the skin where it meets the wall when the infill density is low. A smaller distance will often be sufficient." +msgstr "スキンがインフィルに展開される距離。デフォルトの距離は、インフィルの密度が低いときにスキンに現れる穴とインフィルの行間とギャップを埋めるのにに十分です。大抵の場合、距離は小さくても問題ありません。" + +#: fdmprinter.def.json +msgctxt "max_skin_angle_for_expansion label" +msgid "Maximum Skin Angle for Expansion" +msgstr "Maximum Skin Angle for Expansion" + +#: fdmprinter.def.json +msgctxt "max_skin_angle_for_expansion description" +msgid "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical." +msgstr "この設定より大きい角を持つオブジェクトの上部または底部の表面、その表面のスキンはを拡大しません。これは、モデルのサーフェスに近い垂直斜面がある場合に作成される狭いスキン領域の拡大を回避します。0 ° の角度は水平方向、90 ° の角度が垂直方向です。" + +#: fdmprinter.def.json +msgctxt "min_skin_width_for_expansion label" +msgid "Minimum Skin Width for Expansion" +msgstr "Minimum Skin Width for Expansion" + +#: fdmprinter.def.json +msgctxt "min_skin_width_for_expansion description" +msgid "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical." +msgstr "これより狭いスキン領域は展開されません。モデル表面に、垂直に近い斜面がある場合に作成される狭いスキン領域の拡大を回避するためです。" + +#: fdmprinter.def.json +msgctxt "material label" +msgid "Material" +msgstr "Material" + +#: fdmprinter.def.json +msgctxt "material description" +msgid "Material" +msgstr "マテリアル" + +#: fdmprinter.def.json +msgctxt "material_flow_dependent_temperature label" +msgid "Auto Temperature" +msgstr "Auto Temperature" + +#: fdmprinter.def.json +msgctxt "material_flow_dependent_temperature description" +msgid "Change the temperature for each layer automatically with the average flow speed of that layer." +msgstr "その画層の平均流速で自動的にレイヤーごとに温度を変更します。" + +#: fdmprinter.def.json +msgctxt "default_material_print_temperature label" +msgid "Default Printing Temperature" +msgstr "Default Printing Temperature" + +#: fdmprinter.def.json +msgctxt "default_material_print_temperature description" +msgid "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value" +msgstr "印刷中のデフォルトの温度。これはマテリアルの基本温度となります。他のすべての造形温度はこの値に基づいてオフセットする必要があります。" + +#: fdmprinter.def.json +msgctxt "material_print_temperature label" +msgid "Printing Temperature" +msgstr "Printing Temperature" + +#: fdmprinter.def.json +msgctxt "material_print_temperature description" +msgid "The temperature used for printing." +msgstr "印刷中の温度。" + +#: fdmprinter.def.json +msgctxt "material_print_temperature_layer_0 label" +msgid "Printing Temperature Initial Layer" +msgstr "Printing Temperature Initial Layer" + +#: fdmprinter.def.json +msgctxt "material_print_temperature_layer_0 description" +msgid "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer." +msgstr "最初のレイヤーを印刷する温度。初期レイヤーのみ特別設定が必要ない場合は 0 に設定します。" + +#: fdmprinter.def.json +msgctxt "material_initial_print_temperature label" +msgid "Initial Printing Temperature" +msgstr "Initial Printing Temperature" + +#: fdmprinter.def.json +msgctxt "material_initial_print_temperature description" +msgid "The minimal temperature while heating up to the Printing Temperature at which printing can already start." +msgstr "加熱中、印刷を開始することができる最低の温度。" + +#: fdmprinter.def.json +msgctxt "material_final_print_temperature label" +msgid "Final Printing Temperature" +msgstr "Final Printing Temperature" + +#: fdmprinter.def.json +msgctxt "material_final_print_temperature description" +msgid "The temperature to which to already start cooling down just before the end of printing." +msgstr "印刷終了直前に冷却を開始する温度。" + +#: fdmprinter.def.json +msgctxt "material_flow_temp_graph label" +msgid "Flow Temperature Graph" +msgstr "Flow Temperature Graph" + +#: fdmprinter.def.json +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 "material_extrusion_cool_down_speed label" +msgid "Extrusion Cool Down Speed Modifier" +msgstr "Extrusion Cool Down Speed Modifier" + +#: fdmprinter.def.json +msgctxt "material_extrusion_cool_down_speed description" +msgid "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding." +msgstr "印刷中にノズルが冷える際の速度。同じ値が、加熱する際の加熱速度に割当られます。" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature label" +msgid "Build Plate Temperature" +msgstr "Build Plate Temperature" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature description" +msgid "The temperature used for the heated build plate. If this is 0, the bed will not heat up for this print." +msgstr "加熱式ビルドプレート温度。これが 0 の場合、ベッドは加熱しません。" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature_layer_0 label" +msgid "Build Plate Temperature Initial Layer" +msgstr "Build Plate Temperature Initial Layer" + +#: fdmprinter.def.json +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 "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 "使用するフィラメントの太さの調整 この値を使用するフィラメントの太さと一致させてください。" + +#: fdmprinter.def.json +msgctxt "material_flow label" +msgid "Flow" +msgstr "Flow" + +#: fdmprinter.def.json +msgctxt "material_flow description" +msgid "Flow compensation: the amount of material extruded is multiplied by this value." +msgstr "流れの補修: 押出されるマテリアルの量は、この値から乗算されます。" + +#: fdmprinter.def.json +msgctxt "retraction_enable label" +msgid "Enable Retraction" +msgstr "Enable Retraction" + +#: fdmprinter.def.json +msgctxt "retraction_enable description" +msgid "Retract the filament when the nozzle is moving over a non-printed area. " +msgstr "ノズルが印刷しないで良い領域を移動する際にフィラメントを引き戻す。" + +#: fdmprinter.def.json +msgctxt "retract_at_layer_change label" +msgid "Retract at Layer Change" +msgstr "Retract at Layer Change" + +#: fdmprinter.def.json +msgctxt "retract_at_layer_change description" +msgid "Retract the filament when the nozzle is moving to the next layer." +msgstr "ノズルは次の層に移動するときフィラメントを引き戻します。" + +#: fdmprinter.def.json +msgctxt "retraction_amount label" +msgid "Retraction Distance" +msgstr "Retraction Distance" + +#: fdmprinter.def.json +msgctxt "retraction_amount description" +msgid "The length of material retracted during a retraction move." +msgstr "引き戻されるマテリアルの長さ" + +#: fdmprinter.def.json +msgctxt "retraction_speed label" +msgid "Retraction Speed" +msgstr "Retraction Speed" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "retraction_speed description" +msgid "The speed at which the filament is retracted and primed during a retraction move." +msgstr "フィラメントが引き戻される時のスピード" + +#: fdmprinter.def.json +msgctxt "retraction_retract_speed label" +msgid "Retraction Retract Speed" +msgstr "Retraction Retract Speed" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "retraction_retract_speed description" +msgid "The speed at which the filament is retracted during a retraction move." +msgstr "フィラメントが引き戻される時のスピード" + +#: fdmprinter.def.json +msgctxt "retraction_prime_speed label" +msgid "Retraction Prime Speed" +msgstr "Retraction Prime Speed" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "retraction_prime_speed description" +msgid "The speed at which the filament is primed during a retraction move." +msgstr "フィラメントが引き戻される時のスピード" + +#: fdmprinter.def.json +msgctxt "retraction_extra_prime_amount label" +msgid "Retraction Extra Prime Amount" +msgstr "Retraction Extra Prime Amount" + +#: fdmprinter.def.json +msgctxt "retraction_extra_prime_amount description" +msgid "Some material can ooze away during a travel move, which can be compensated for here." +msgstr "マテリアルによっては、移動中に滲み出てきてしまうときがあり、ここで調整することができます。" + +#: fdmprinter.def.json +msgctxt "retraction_min_travel label" +msgid "Retraction Minimum Travel" +msgstr "Retraction Minimum Travel" + +#: fdmprinter.def.json +msgctxt "retraction_min_travel description" +msgid "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area." +msgstr "フィラメントを引き戻す際に必要な最小移動距離。これは、短い距離内での引き戻しの回数を減らすために役立ちます。" + +#: fdmprinter.def.json +msgctxt "retraction_count_max label" +msgid "Maximum Retraction Count" +msgstr "Maximum Retraction Count" + +#: fdmprinter.def.json +msgctxt "retraction_count_max description" +msgid "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues." +msgstr "この設定は、決められた距離の中で起こる引き戻しの回数を制限します。制限数以上の引き戻しは無視されます。これによりフィーダーでフィラメントを誤って削ってしまう問題を軽減させます。" + +#: fdmprinter.def.json +msgctxt "retraction_extrusion_window label" +msgid "Minimum Extrusion Distance Window" +msgstr "Minimum Extrusion Distance Window" + +#: fdmprinter.def.json +msgctxt "retraction_extrusion_window description" +msgid "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited." +msgstr "最大の引き戻し回数。この値は引き戻す距離と同じであることで、引き戻しが効果的に行われます。" + +#: fdmprinter.def.json +msgctxt "material_standby_temperature label" +msgid "Standby Temperature" +msgstr "Standby Temperature" + +#: fdmprinter.def.json +msgctxt "material_standby_temperature description" +msgid "The temperature of the nozzle when another nozzle is currently used for printing." +msgstr "印刷していないノズルの温度(もう一方のノズルが印刷中)" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_amount label" +msgid "Nozzle Switch Retraction Distance" +msgstr "Nozzle Switch Retraction Distance" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_amount description" +msgid "The amount of retraction: Set at 0 for no retraction at all. This should generally be the same as the length of the heat zone." +msgstr "引き込み量:引き込みを行わない場合は0に設定します。これは通常、ヒートゾーンの長さと同じに設定します。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speeds label" +msgid "Nozzle Switch Retraction Speed" +msgstr "Nozzle Switch Retraction Speed" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speeds description" +msgid "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding." +msgstr "フィラメントを引き戻す速度。速度が早い程良いが早すぎるとフィラメントを削ってしまう可能性があります。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speed label" +msgid "Nozzle Switch Retract Speed" +msgstr "Nozzle Switch Retract Speed" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speed description" +msgid "The speed at which the filament is retracted during a nozzle switch retract." +msgstr "ノズル切り替え中のフィラメントの引き込み速度。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_prime_speed label" +msgid "Nozzle Switch Prime Speed" +msgstr "Nozzle Switch Prime Speed" + +#: fdmprinter.def.json +msgctxt "switch_extruder_prime_speed description" +msgid "The speed at which the filament is pushed back after a nozzle switch retraction." +msgstr "ノズル スイッチ後にフィラメントが押し戻される速度。" + +#: fdmprinter.def.json +msgctxt "speed label" +msgid "Speed" +msgstr "Speed" + +#: fdmprinter.def.json +msgctxt "speed description" +msgid "Speed" +msgstr "スピード" + +#: fdmprinter.def.json +msgctxt "speed_print label" +msgid "Print Speed" +msgstr "Print Speed" + +#: fdmprinter.def.json +msgctxt "speed_print description" +msgid "The speed at which printing happens." +msgstr "印刷スピード" + +#: fdmprinter.def.json +msgctxt "speed_infill label" +msgid "Infill Speed" +msgstr "Infill Speed" + +#: fdmprinter.def.json +msgctxt "speed_infill description" +msgid "The speed at which infill is printed." +msgstr "インフィルを印刷する速度" + +#: fdmprinter.def.json +msgctxt "speed_wall label" +msgid "Wall Speed" +msgstr "Wall Speed" + +#: fdmprinter.def.json +msgctxt "speed_wall description" +msgid "The speed at which the walls are printed." +msgstr "ウォールを印刷する速度" + +#: fdmprinter.def.json +msgctxt "speed_wall_0 label" +msgid "Outer Wall Speed" +msgstr "Outer Wall Speed" + +#: fdmprinter.def.json +msgctxt "speed_wall_0 description" +msgid "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way." +msgstr "最も外側のウォールをプリントする速度。外側の壁を低速でプリントすると表面の質が改善しますが、内壁と外壁のプリント速度の差が大きすぎると、印刷の質が悪化します。" + +#: fdmprinter.def.json +msgctxt "speed_wall_x label" +msgid "Inner Wall Speed" +msgstr "Inner Wall Speed" + +#: fdmprinter.def.json +msgctxt "speed_wall_x description" +msgid "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed." +msgstr "内側のウォールをプリントする速度 外壁より内壁を高速でプリントすると、印刷時間の短縮になります。外壁のプリント速度とインフィルのプリント速度の中間に設定するのが適切です。" + +#: fdmprinter.def.json +msgctxt "speed_topbottom label" +msgid "Top/Bottom Speed" +msgstr "Top/Bottom Speed" + +#: fdmprinter.def.json +msgctxt "speed_topbottom description" +msgid "The speed at which top/bottom layers are printed." +msgstr "トップ/ボトムのレイヤーのプリント速度" + +#: fdmprinter.def.json +msgctxt "speed_support label" +msgid "Support Speed" +msgstr "Support Speed" + +#: fdmprinter.def.json +msgctxt "speed_support description" +msgid "The speed at which the support structure is printed. Printing support at higher speeds can greatly reduce printing time. The surface quality of the support structure is not important since it is removed after printing." +msgstr "サポート材をプリントする速度です。高速でサポートをプリントすると、印刷時間を大幅に短縮できます。サポート材は印刷後に削除されますので、サポート構造の品質はそれほど重要ではありません。" + +#: fdmprinter.def.json +msgctxt "speed_support_infill label" +msgid "Support Infill Speed" +msgstr "Support Infill Speed" + +#: fdmprinter.def.json +msgctxt "speed_support_infill description" +msgid "The speed at which the infill of support is printed. Printing the infill at lower speeds improves stability." +msgstr "サポート材のインフィルをプリントする速度 低速でプリントすると安定性が向上します。" + +#: fdmprinter.def.json +msgctxt "speed_support_interface label" +msgid "Support Interface Speed" +msgstr "Support Interface Speed" + +#: fdmprinter.def.json +msgctxt "speed_support_interface description" +msgid "The speed at which the roofs and bottoms of support are printed. Printing the them at lower speeds can improve overhang quality." +msgstr "天井と底面のサポート材をプリントする速度 これらを低速でプリントするとオーバーハング部分の品質を向上できます。" + +#: fdmprinter.def.json +msgctxt "speed_prime_tower label" +msgid "Prime Tower Speed" +msgstr "Prime Tower Speed" + +#: fdmprinter.def.json +msgctxt "speed_prime_tower description" +msgid "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal." +msgstr "プライムタワーをプリントする速度です。異なるフィラメントの印刷で密着性が最適ではない場合、低速にてプライム タワーをプリントすることでより安定させることができます。" + +#: fdmprinter.def.json +msgctxt "speed_travel label" +msgid "Travel Speed" +msgstr "Travel Speed" + +#: fdmprinter.def.json +msgctxt "speed_travel description" +msgid "The speed at which travel moves are made." +msgstr "移動中のスピード" + +#: fdmprinter.def.json +msgctxt "speed_layer_0 label" +msgid "Initial Layer Speed" +msgstr "Initial Layer Speed" + +#: fdmprinter.def.json +msgctxt "speed_layer_0 description" +msgid "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate." +msgstr "一層目での速度。ビルトプレートへの接着を向上するため低速を推奨します" + +#: fdmprinter.def.json +msgctxt "speed_print_layer_0 label" +msgid "Initial Layer Print Speed" +msgstr "Initial Layer Print Speed" + +#: fdmprinter.def.json +msgctxt "speed_print_layer_0 description" +msgid "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate." +msgstr "一層目をプリントする速度 ビルトプレートへの接着を向上するため低速を推奨します" + +#: fdmprinter.def.json +msgctxt "speed_travel_layer_0 label" +msgid "Initial Layer Travel Speed" +msgstr "Initial Layer Travel Speed" + +#: fdmprinter.def.json +msgctxt "speed_travel_layer_0 description" +msgid "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed." +msgstr "最初のレイヤーを印刷する際のトラベルスピード。低速の方が、ビルドプレート剥がれるリスクを軽減することができます。この設定の値は、移動速度と印刷速度の比から自動的に計算されます。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_speed label" +msgid "Skirt/Brim Speed" +msgstr "Skirt/Brim Speed" + +#: fdmprinter.def.json +msgctxt "skirt_brim_speed description" +msgid "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed." +msgstr "スカートとブリムのプリント速度 通常は一層目のスピードと同じですが、異なる速度でスカートやブリムをプリントしたい場合に設定してください。" + +#: fdmprinter.def.json +msgctxt "max_feedrate_z_override label" +msgid "Maximum Z Speed" +msgstr "Maximum Z Speed" + +#: fdmprinter.def.json +msgctxt "max_feedrate_z_override description" +msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +msgstr "ビルトプレートが移動する最高速度 この値を0に設定すると、ファームウェアのデフォルト値のZの最高速度が適用されます。" + +#: fdmprinter.def.json +msgctxt "speed_slowdown_layers label" +msgid "Number of Slower Layers" +msgstr "Number of Slower Layers" + +#: fdmprinter.def.json +msgctxt "speed_slowdown_layers description" +msgid "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers." +msgstr "最初の数層は印刷失敗の可能性を軽減させるために、設定した印刷スピードよりも遅く印刷されます。" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_enabled label" +msgid "Equalize Filament Flow" +msgstr "Equalize Filament Flow" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_enabled description" +msgid "Print thinner than normal lines faster so that the amount of material extruded per second remains the same. Thin pieces in your model might require lines printed with smaller line width than provided in the settings. This setting controls the speed changes for such lines." +msgstr "通常より細いラインを高速プリントするので、時間当たりのフィラメント押出量は同じです。薄いモデル部品は、設定よりも細い線幅でプリントすることが要求される場合があり、本設定はそのような線の速度を変更します。" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_max label" +msgid "Maximum Speed for Flow Equalization" +msgstr "Maximum Speed for Flow Equalization" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_max description" +msgid "Maximum print speed when adjusting the print speed in order to equalize flow." +msgstr "吐出を均一にするための調整時の最高スピード" + +#: fdmprinter.def.json +msgctxt "acceleration_enabled label" +msgid "Enable Acceleration Control" +msgstr "Enable Acceleration Control" + +#: fdmprinter.def.json +msgctxt "acceleration_enabled description" +msgid "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality." +msgstr "プリントヘッドのスピード調整の有効化 加速度の増加は印刷時間を短縮しますが印刷の質を損ねます。" + +#: fdmprinter.def.json +msgctxt "acceleration_print label" +msgid "Print Acceleration" +msgstr "Print Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_print description" +msgid "The acceleration with which printing happens." +msgstr "印刷の加速スピードです。" + +#: fdmprinter.def.json +msgctxt "acceleration_infill label" +msgid "Infill Acceleration" +msgstr "Infill Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_infill description" +msgid "The acceleration with which infill is printed." +msgstr "インフィルの印刷の加速スピード。" + +#: fdmprinter.def.json +msgctxt "acceleration_wall label" +msgid "Wall Acceleration" +msgstr "Wall Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_wall description" +msgid "The acceleration with which the walls are printed." +msgstr "ウォールをプリントする際の加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_0 label" +msgid "Outer Wall Acceleration" +msgstr "Outer Wall Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_0 description" +msgid "The acceleration with which the outermost walls are printed." +msgstr "最も外側の壁をプリントする際の加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_x label" +msgid "Inner Wall Acceleration" +msgstr "Inner Wall Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_x description" +msgid "The acceleration with which all inner walls are printed." +msgstr "内側のウォールがが出力される際のスピード。" + +#: fdmprinter.def.json +msgctxt "acceleration_topbottom label" +msgid "Top/Bottom Acceleration" +msgstr "Top/Bottom Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_topbottom description" +msgid "The acceleration with which top/bottom layers are printed." +msgstr "トップとボトムのレイヤーの印刷加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_support label" +msgid "Support Acceleration" +msgstr "Support Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_support description" +msgid "The acceleration with which the support structure is printed." +msgstr "サポート材プリント時の加速スピード" + +#: fdmprinter.def.json +msgctxt "acceleration_support_infill label" +msgid "Support Infill Acceleration" +msgstr "Support Infill Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_support_infill description" +msgid "The acceleration with which the infill of support is printed." +msgstr "インフィルのサポート材のプリント時の加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_support_interface label" +msgid "Support Interface Acceleration" +msgstr "Support Interface Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_support_interface description" +msgid "The acceleration with which the roofs and bottoms of support are printed. Printing them at lower accelerations can improve overhang quality." +msgstr "サポート材の上面と底面が印刷されるスピード 低速度で印刷するとオーバーハングの品質が向上します。" + +#: fdmprinter.def.json +msgctxt "acceleration_prime_tower label" +msgid "Prime Tower Acceleration" +msgstr "Prime Tower Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_prime_tower description" +msgid "The acceleration with which the prime tower is printed." +msgstr "プライムタワーの印刷時のスピード。" + +#: fdmprinter.def.json +msgctxt "acceleration_travel label" +msgid "Travel Acceleration" +msgstr "Travel Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_travel description" +msgid "The acceleration with which travel moves are made." +msgstr "移動中の加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_layer_0 label" +msgid "Initial Layer Acceleration" +msgstr "Initial Layer Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_layer_0 description" +msgid "The acceleration for the initial layer." +msgstr "初期レイヤーの加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_print_layer_0 label" +msgid "Initial Layer Print Acceleration" +msgstr "Initial Layer Print Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_print_layer_0 description" +msgid "The acceleration during the printing of the initial layer." +msgstr "初期レイヤーの印刷中の加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_travel_layer_0 label" +msgid "Initial Layer Travel Acceleration" +msgstr "Initial Layer Travel Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_travel_layer_0 description" +msgid "The acceleration for travel moves in the initial layer." +msgstr "最初のレイヤー時の加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_skirt_brim label" +msgid "Skirt/Brim Acceleration" +msgstr "Skirt/Brim Acceleration" + +#: fdmprinter.def.json +msgctxt "acceleration_skirt_brim description" +msgid "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration." +msgstr "スカートとブリム印刷時の加速度。通常、初期レイヤーの印刷スピードにて適用されるが、異なる速度でスカートやブリムを印刷したい場合使用できる。" + +#: fdmprinter.def.json +msgctxt "jerk_enabled label" +msgid "Enable Jerk Control" +msgstr "Enable Jerk Control" + +#: fdmprinter.def.json +msgctxt "jerk_enabled description" +msgid "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality." +msgstr "X または Y 軸の速度が変更する際、プリントヘッドのジャークを調整することができます。ジャークを増やすことは、印刷時間を短縮できますがプリントの質を損ねます。" + +#: fdmprinter.def.json +msgctxt "jerk_print label" +msgid "Print Jerk" +msgstr "Print Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_print description" +msgid "The maximum instantaneous velocity change of the print head." +msgstr "プリントヘッドの最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_infill label" +msgid "Infill Jerk" +msgstr "Infill Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_infill description" +msgid "The maximum instantaneous velocity change with which infill is printed." +msgstr "インフィルの印刷時の瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_wall label" +msgid "Wall Jerk" +msgstr "Wall Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_wall description" +msgid "The maximum instantaneous velocity change with which the walls are printed." +msgstr "ウォールのプリント時の最大瞬間速度を変更。" + +#: fdmprinter.def.json +msgctxt "jerk_wall_0 label" +msgid "Outer Wall Jerk" +msgstr "Outer Wall Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_wall_0 description" +msgid "The maximum instantaneous velocity change with which the outermost walls are printed." +msgstr "外側のウォールが出力される際の最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_wall_x label" +msgid "Inner Wall Jerk" +msgstr "Inner Wall Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_wall_x description" +msgid "The maximum instantaneous velocity change with which all inner walls are printed." +msgstr "内側のウォールがプリントされれう際の最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_topbottom label" +msgid "Top/Bottom Jerk" +msgstr "Top/Bottom Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_topbottom description" +msgid "The maximum instantaneous velocity change with which top/bottom layers are printed." +msgstr "トップとボトムのレイヤーを印刷する際の最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_support label" +msgid "Support Jerk" +msgstr "Support Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_support description" +msgid "The maximum instantaneous velocity change with which the support structure is printed." +msgstr "サポート材の印刷時の最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_support_infill label" +msgid "Support Infill Jerk" +msgstr "Support Infill Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_support_infill description" +msgid "The maximum instantaneous velocity change with which the infill of support is printed." +msgstr "サポート材の印刷時、最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_support_interface label" +msgid "Support Interface Jerk" +msgstr "Support Interface Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_support_interface description" +msgid "The maximum instantaneous velocity change with which the roofs and bottoms of support are printed." +msgstr "サポート材の屋根とボトムのプリント時、最大瞬間速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_prime_tower label" +msgid "Prime Tower Jerk" +msgstr "Prime Tower Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_prime_tower description" +msgid "The maximum instantaneous velocity change with which the prime tower is printed." +msgstr "プライムタワーがプリントされる際の最大瞬間速度を変更します。" + +#: fdmprinter.def.json +msgctxt "jerk_travel label" +msgid "Travel Jerk" +msgstr "Travel Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_travel description" +msgid "The maximum instantaneous velocity change with which travel moves are made." +msgstr "移動する際の最大瞬時速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_layer_0 label" +msgid "Initial Layer Jerk" +msgstr "Initial Layer Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_layer_0 description" +msgid "The print maximum instantaneous velocity change for the initial layer." +msgstr "初期レイヤーの最大瞬時速度の変更。" + +#: fdmprinter.def.json +msgctxt "jerk_print_layer_0 label" +msgid "Initial Layer Print Jerk" +msgstr "Initial Layer Print Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_print_layer_0 description" +msgid "The maximum instantaneous velocity change during the printing of the initial layer." +msgstr "初期レイヤー印刷中の最大瞬時速度の変化。" + +#: fdmprinter.def.json +msgctxt "jerk_travel_layer_0 label" +msgid "Initial Layer Travel Jerk" +msgstr "Initial Layer Travel Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_travel_layer_0 description" +msgid "The acceleration for travel moves in the initial layer." +msgstr "移動加速度は最初のレイヤーに適用されます。" + +#: fdmprinter.def.json +msgctxt "jerk_skirt_brim label" +msgid "Skirt/Brim Jerk" +msgstr "Skirt/Brim Jerk" + +#: fdmprinter.def.json +msgctxt "jerk_skirt_brim description" +msgid "The maximum instantaneous velocity change with which the skirt and brim are printed." +msgstr "スカートとブリムがプリントされる最大瞬時速度の変更。" + +#: fdmprinter.def.json +msgctxt "travel label" +msgid "Travel" +msgstr "Travel" + +#: fdmprinter.def.json +msgctxt "travel description" +msgid "travel" +msgstr "移動" + +#: fdmprinter.def.json +msgctxt "retraction_combing label" +msgid "Combing Mode" +msgstr "Combing Mode" + +#: 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 "コーミングは、走行時にすでに印刷された領域内にノズルを保ちます。その結果、移動距離はわずかに長くなりますが、引き込みの必要性は減ります。コーミングがオフの場合、フィラメントの引き戻しを行い、ノズルは次のポイントまで直線移動します。また、インフィルのみにてコーミングすることにより、トップとボトムのスキン領域上での櫛通りを回避します。" + +#: fdmprinter.def.json +msgctxt "retraction_combing option off" +msgid "Off" +msgstr "Off" + +#: fdmprinter.def.json +msgctxt "retraction_combing option all" +msgid "All" +msgstr "All" + +#: fdmprinter.def.json +msgctxt "retraction_combing option noskin" +msgid "No Skin" +msgstr "No Skin" + +#: fdmprinter.def.json +msgctxt "travel_retract_before_outer_wall label" +msgid "Retract Before Outer Wall" +msgstr "Retract Before Outer Wall" + +#: fdmprinter.def.json +msgctxt "travel_retract_before_outer_wall description" +msgid "Always retract when moving to start an outer wall." +msgstr "移動して外側のウォールをプリントする際、毎回引き戻しをします。" + +#: fdmprinter.def.json +msgctxt "travel_avoid_other_parts label" +msgid "Avoid Printed Parts When Traveling" +msgstr "Avoid Printed Parts When Traveling" + +#: fdmprinter.def.json +msgctxt "travel_avoid_other_parts description" +msgid "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled." +msgstr "ノズルは、移動時に既に印刷されたパーツを避けます。このオプションは、コーミングが有効な場合にのみ使用できます。" + +#: fdmprinter.def.json +msgctxt "travel_avoid_distance label" +msgid "Travel Avoid Distance" +msgstr "Travel Avoid Distance" + +#: fdmprinter.def.json +msgctxt "travel_avoid_distance description" +msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." +msgstr "ノズルが既に印刷された部分を移動する際の間隔" + +#: fdmprinter.def.json +msgctxt "start_layers_at_same_position label" +msgid "Start Layers with the Same Part" +msgstr "Start Layers with the Same Part" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "start_layers_at_same_position description" +msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +msgstr "各レイヤーの印刷は決まった場所近い距離のポイントにて印刷を始めます。そのため、前のレイヤーが終わった部分から新しいレイヤーのプリントを開始しません。これによりオーバーハングや小さなパーツの印刷改善されますが、その代わり印刷時間が長くなります。" + +#: fdmprinter.def.json +msgctxt "layer_start_x label" +msgid "Layer Start X" +msgstr "Layer Start X" + +#: fdmprinter.def.json +msgctxt "layer_start_x description" +msgid "The X coordinate of the position near where to find the part to start printing each layer." +msgstr "各レイヤーのプリントを開始する部分をしめすX座標。" + +#: fdmprinter.def.json +msgctxt "layer_start_y label" +msgid "Layer Start Y" +msgstr "Layer Start Y" + +#: fdmprinter.def.json +msgctxt "layer_start_y description" +msgid "The Y coordinate of the position near where to find the part to start printing each layer." +msgstr "各レイヤーのプリントを開始する部分をしめすY座標。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled label" +msgid "Z Hop When Retracted" +msgstr "Z Hop When Retracted" + +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled description" +msgid "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate." +msgstr "引き戻しが完了すると、ビルドプレートが下降してノズルとプリントの間に隙間ができます。ノズルの走行中に造形物に当たるのを防ぎ、造形物をビルドプレートから剥がしてしまう現象を減らします。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides label" +msgid "Z Hop Only Over Printed Parts" +msgstr "Z Hop Only Over Printed Parts" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides description" +msgid "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling." +msgstr "走行時に印刷部品への衝突を避けるため、水平移動で回避できない造形物上を移動するときは、Zホップを実行します。" + +#: fdmprinter.def.json +msgctxt "retraction_hop label" +msgid "Z Hop Height" +msgstr "Z Hop Height" + +#: fdmprinter.def.json +msgctxt "retraction_hop description" +msgid "The height difference when performing a Z Hop." +msgstr "Zホップを実行するときの高さ。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch label" +msgid "Z Hop After Extruder Switch" +msgstr "Z Hop After Extruder Switch" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch description" +msgid "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print." +msgstr "マシーンが1つのエクストルーダーからもう一つのエクストルーダーに切り替えられた際、ビルドプレートが下降して、ノズルと印刷物との間に隙間が形成される。これによりノズルが造形物の外側にはみ出たマテリアルを残さないためである。" + +#: fdmprinter.def.json +msgctxt "cooling label" +msgid "Cooling" +msgstr "Cooling" + +#: fdmprinter.def.json +msgctxt "cooling description" +msgid "Cooling" +msgstr "冷却" + +#: fdmprinter.def.json +msgctxt "cool_fan_enabled label" +msgid "Enable Print Cooling" +msgstr "Enable Print Cooling" + +#: fdmprinter.def.json +msgctxt "cool_fan_enabled description" +msgid "Enables the print cooling fans while printing. The fans improve print quality on layers with short layer times and bridging / overhangs." +msgstr "印刷中の冷却ファンを有効にします。ファンは、短いレイヤープリントやブリッジ/オーバーハングのレイヤーがある印刷物の品質を向上させます。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed label" +msgid "Fan Speed" +msgstr "Fan Speed" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed description" +msgid "The speed at which the print cooling fans spin." +msgstr "冷却ファンが回転する速度。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_min label" +msgid "Regular Fan Speed" +msgstr "Regular Fan Speed" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "cool_fan_speed_min description" +msgid "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed." +msgstr "しきい値に達する前のファンの回転スピード。プリント速度がしきい値より速くなると、ファンの速度は上がっていきます。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_max label" +msgid "Maximum Fan Speed" +msgstr "Maximum Fan Speed" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_max description" +msgid "The speed at which the fans spin on the minimum layer time. The fan speed gradually increases between the regular fan speed and maximum fan speed when the threshold is hit." +msgstr "最小積層時間でファンが回転する速度。しきい値に達すると、通常のファンの速度と最速の間でファン速度が徐々に加速しはじめます。" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time_fan_speed_max label" +msgid "Regular/Maximum Fan Speed Threshold" +msgstr "Regular/Maximum Fan Speed Threshold" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time_fan_speed_max description" +msgid "The layer time which sets the threshold between regular fan speed and maximum fan speed. Layers that print slower than this time use regular fan speed. For faster layers the fan speed gradually increases towards the maximum fan speed." +msgstr "通常速度と最速の間でしきい値を設定する積層時間。この時間よりも遅く印刷する積層は、通常速度を使用します。より速い層の場合、ファンは最高速度に向かって徐々に加速します。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_0 label" +msgid "Initial Fan Speed" +msgstr "Initial Fan Speed" + +#: fdmprinter.def.json +#, fuzzy +msgctxt "cool_fan_speed_0 description" +msgid "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height." +msgstr "プリント開始時にファンが回転する速度。後続のレイヤーでは、ファン速度は、高さに応じて早くなります。" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_at_height label" +msgid "Regular Fan Speed at Height" +msgstr "Regular Fan Speed at Height" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_at_height description" +msgid "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed." +msgstr "通常速度でファンが回転するときの高さ。ここより下層レイヤーでは初期ファンのスピードから通常の速度まで徐々に増加します。" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_layer label" +msgid "Regular Fan Speed at Layer" +msgstr "Regular Fan Speed at Layer" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_layer description" +msgid "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number." +msgstr "ファンが通常の速度で回転する時のレイヤー。通常速度のファンの高さが設定されている場合、この値が計算され、整数に変換されます。" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time label" +msgid "Minimum Layer Time" +msgstr "Minimum Layer Time" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time description" +msgid "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated." +msgstr "一つのレイヤーに最低限費やす時間。1つの層に必ず設定された時間を費やすため、場合によってはプリントに遅れが生じます。しかしこれにより、次の層をプリントする前に造形物を適切に冷却することができます。 Lift Headが無効になっていて、最小速度を下回った場合、最小レイヤー時間よりも短くなる場合があります。" + +#: fdmprinter.def.json +msgctxt "cool_min_speed label" +msgid "Minimum Speed" +msgstr "Minimum Speed" + +#: fdmprinter.def.json +msgctxt "cool_min_speed description" +msgid "The minimum print speed, despite slowing down due to the minimum layer time. When the printer would slow down too much, the pressure in the nozzle would be too low and result in bad print quality." +msgstr "最遅印刷速度。印刷の速度が遅すぎると、ノズル内の圧力が低すぎて印刷品質が低下します。" + +#: fdmprinter.def.json +msgctxt "cool_lift_head label" +msgid "Lift Head" +msgstr "Lift Head" + +#: fdmprinter.def.json +msgctxt "cool_lift_head description" +msgid "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached." +msgstr "レイヤーの最小プリント時間より早く印刷が終わった場合、ヘッド部分を持ち上げてレイヤーの最小プリント時間に到達するまで待機します" + +#: fdmprinter.def.json +msgctxt "support label" +msgid "Support" +msgstr "Support" + +#: fdmprinter.def.json +msgctxt "support description" +msgid "Support" +msgstr "サポート" + +#: fdmprinter.def.json +msgctxt "support_enable label" +msgid "Enable Support" +msgstr "Enable Support" + +#: fdmprinter.def.json +msgctxt "support_enable description" +msgid "Enable support structures. These structures support parts of the model with severe overhangs." +msgstr "サポート材を印刷可能にします。これは、モデル上のオーバーハング部分にサポート材を構築します。" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr label" +msgid "Support Extruder" +msgstr "Support Extruder" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr description" +msgid "The extruder train to use for printing the support. This is used in multi-extrusion." +msgstr "サポート材を印刷するためのエクストルーダー。複数のエクストルーダーがある場合に使用されます。" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr label" +msgid "Support Infill Extruder" +msgstr "Support Infill Extruder" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr description" +msgid "The extruder train to use for printing the infill of the support. This is used in multi-extrusion." +msgstr "サポート材のインフィルを印刷に使用するためのエクストルーダー。複数のエクストルーダーがある場合に使用されます。" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 label" +msgid "First Layer Support Extruder" +msgstr "First Layer Support Extruder" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 description" +msgid "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion." +msgstr "サポートのインフィルの最初の層を印刷に使用するエクストルーダー。複数のエクストルーダーがある場合に使用されます。" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr label" +msgid "Support Interface Extruder" +msgstr "Support Interface Extruder" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr description" +msgid "The extruder train to use for printing the roofs and bottoms of the support. This is used in multi-extrusion." +msgstr "サポートの天井とボトム部分を印刷する際のエクストルーダー。複数のエクストルーダーがある場合に使用される。" + +#: fdmprinter.def.json +msgctxt "support_type label" +msgid "Support Placement" +msgstr "Support Placement" + +#: fdmprinter.def.json +msgctxt "support_type description" +msgid "Adjusts the placement of the support structures. The placement can be set to touching build plate or everywhere. When set to everywhere the support structures will also be printed on the model." +msgstr "サポート材の配置を調整します。配置はTouching BuildplateまたはEveryWhereに設定することができます。EveryWhereに設定した場合、サポート材がモデルの上にもプリントされます。" + +#: fdmprinter.def.json +msgctxt "support_type option buildplate" +msgid "Touching Buildplate" +msgstr "Touching Buildplate" + +#: fdmprinter.def.json +msgctxt "support_type option everywhere" +msgid "Everywhere" +msgstr "Everywhere" + +#: fdmprinter.def.json +msgctxt "support_angle label" +msgid "Support Overhang Angle" +msgstr "Support Overhang Angle" + +#: fdmprinter.def.json +msgctxt "support_angle description" +msgid "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." +msgstr "サポート材がつくオーバーハングの最小角度。0° のときはすべてのオーバーハングにサポートが生成され、90° ではサポートが生成されません。" + +#: fdmprinter.def.json +msgctxt "support_pattern label" +msgid "Support Pattern" +msgstr "Support Pattern" + +#: fdmprinter.def.json +msgctxt "support_pattern description" +msgid "The pattern of the support structures of the print. The different options available result in sturdy or easy to remove support." +msgstr "サポート材の形。サポート材の除去の方法を頑丈または容易にする設定が可能です。" + +#: fdmprinter.def.json +msgctxt "support_pattern option lines" +msgid "Lines" +msgstr "Lines" + +#: fdmprinter.def.json +msgctxt "support_pattern option grid" +msgid "Grid" +msgstr "Grid" + +#: fdmprinter.def.json +msgctxt "support_pattern option triangles" +msgid "Triangles" +msgstr "Triangles" + +#: fdmprinter.def.json +msgctxt "support_pattern option concentric" +msgid "Concentric" +msgstr "Concentric" + +#: fdmprinter.def.json +msgctxt "support_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "Concentric 3D" + +#: fdmprinter.def.json +msgctxt "support_pattern option zigzag" +msgid "Zig Zag" +msgstr "Zig Zag" + +#: fdmprinter.def.json +msgctxt "support_connect_zigzags label" +msgid "Connect Support ZigZags" +msgstr "Connect Support ZigZags" + +#: fdmprinter.def.json +msgctxt "support_connect_zigzags description" +msgid "Connect the ZigZags. This will increase the strength of the zig zag support structure." +msgstr "ジグザグを接続します。ジグザグ形のサポート材の強度が上がります。" + +#: fdmprinter.def.json +msgctxt "support_infill_rate label" +msgid "Support Density" +msgstr "Support Density" + +#: fdmprinter.def.json +msgctxt "support_infill_rate description" +msgid "Adjusts the density of the support structure. A higher value results in better overhangs, but the supports are harder to remove." +msgstr "サポート材の密度を調整します。大きな値ではオーバーハングが良くなりますが、サポート材が除去しにくくなります。" + +#: fdmprinter.def.json +msgctxt "support_line_distance label" +msgid "Support Line Distance" +msgstr "Support Line Distance" + +#: fdmprinter.def.json +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_z_distance label" +msgid "Support Z Distance" +msgstr "Support Z Distance" + +#: fdmprinter.def.json +msgctxt "support_z_distance description" +msgid "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height." +msgstr "サポート材のトップ/ボトム部分と印刷物との距離。この幅がプリント後のサポート材を除去する隙間を作ります。値は積層ピッチの倍数にて計算されます。" + +#: fdmprinter.def.json +msgctxt "support_top_distance label" +msgid "Support Top Distance" +msgstr "Support Top Distance" + +#: fdmprinter.def.json +msgctxt "support_top_distance description" +msgid "Distance from the top of the support to the print." +msgstr "サポートの上部から印刷物までの距離。" + +#: fdmprinter.def.json +msgctxt "support_bottom_distance label" +msgid "Support Bottom Distance" +msgstr "Support Bottom Distance" + +#: fdmprinter.def.json +msgctxt "support_bottom_distance description" +msgid "Distance from the print to the bottom of the support." +msgstr "印刷物とサポート材底部までの距離。" + +#: fdmprinter.def.json +msgctxt "support_xy_distance label" +msgid "Support X/Y Distance" +msgstr "Support X/Y Distance" + +#: fdmprinter.def.json +msgctxt "support_xy_distance description" +msgid "Distance of the support structure from the print in the X/Y directions." +msgstr "印刷物からX/Y方向へのサポート材との距離" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z label" +msgid "Support Distance Priority" +msgstr "Support Distance Priority" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z description" +msgid "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs." +msgstr "X /Y方向のサポートの距離がZ方向のサポートの距離を上書きしようとする時やまたその逆も同様。X または Y がZを上書きする際、X Y 方向の距離は印刷物からオーバーハングする Z 方向の距離に影響を及ぼしながらサポートを押しのけようとします。オーバー ハング周りのX Yの距離を無効にすることで、無効にできる。" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z option xy_overrides_z" +msgid "X/Y overrides Z" +msgstr "X/Y overrides Z" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z option z_overrides_xy" +msgid "Z overrides X/Y" +msgstr "Z overrides X/Y" + +#: fdmprinter.def.json +msgctxt "support_xy_distance_overhang label" +msgid "Minimum Support X/Y Distance" +msgstr "Minimum Support X/Y Distance" + +#: fdmprinter.def.json +msgctxt "support_xy_distance_overhang description" +msgid "Distance of the support structure from the overhang in the X/Y directions. " +msgstr "X/Y方向におけるオーバーハングからサポートまでの距離" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_height label" +msgid "Support Stair Step Height" +msgstr "Support Stair Step Height" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_height description" +msgid "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures." +msgstr "モデルにかかる階段形サポートの下部の高さです。低い値のサポートの除去は難しく、高すぎる値は不安定なサポート構造につながります。" + +#: fdmprinter.def.json +msgctxt "support_join_distance label" +msgid "Support Join Distance" +msgstr "Support Join Distance" + +#: fdmprinter.def.json +msgctxt "support_join_distance description" +msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +msgstr "X/Y方向のサポート構造間の最大距離。別の構造がこの値より近づいた場合、構造は 1 つにマージします。" + +#: fdmprinter.def.json +msgctxt "support_offset label" +msgid "Support Horizontal Expansion" +msgstr "Support Horizontal Expansion" + +#: fdmprinter.def.json +msgctxt "support_offset description" +msgid "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support." +msgstr "各レイヤーのサポート用ポリゴンに適用されるオフセットの量。正の値はサポート領域を円滑にし、より丈夫なサポートにつながります。" + +#: fdmprinter.def.json +msgctxt "support_interface_enable label" +msgid "Enable Support Interface" +msgstr "Enable Support Interface" + +#: fdmprinter.def.json +msgctxt "support_interface_enable description" +msgid "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model." +msgstr "モデルとサポートの間に密なインターフェースを生成します。これにより、モデルが印刷されているサポートの上部、モデル上のサポートの下部にスキンが作成されます。" + +#: fdmprinter.def.json +msgctxt "support_interface_height label" +msgid "Support Interface Thickness" +msgstr "Support Interface Thickness" + +#: fdmprinter.def.json +msgctxt "support_interface_height description" +msgid "The thickness of the interface of the support where it touches with the model on the bottom or the top." +msgstr "底面または上部のモデルと接触するサポートのインターフェイスの厚さ。" + +#: fdmprinter.def.json +msgctxt "support_roof_height label" +msgid "Support Roof Thickness" +msgstr "Support Roof Thickness" + +#: fdmprinter.def.json +msgctxt "support_roof_height description" +msgid "The thickness of the support roofs. This controls the amount of dense layers at the top of the support on which the model rests." +msgstr "サポートの屋根の厚さ。これは、モデルの下につくサポートの上部にある密度の量を制御します。" + +#: fdmprinter.def.json +msgctxt "support_bottom_height label" +msgid "Support Bottom Thickness" +msgstr "Support Bottom Thickness" + +#: fdmprinter.def.json +msgctxt "support_bottom_height description" +msgid "The thickness of the support bottoms. This controls the number of dense layers are printed on top of places of a model on which support rests." +msgstr "サポート材の底部の厚さ。これは、サモデルの上に印刷されるサポートの積層密度を制御します。" + +#: fdmprinter.def.json +msgctxt "support_interface_skip_height label" +msgid "Support Interface Resolution" +msgstr "Support Interface Resolution" + +#: fdmprinter.def.json +msgctxt "support_interface_skip_height description" +msgid "When checking where there's model above the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface." +msgstr "サポート上にモデルがあることを確認するときは、指定された高さのステップを実行します。値が小さいほどスライスが遅くなりますが、値が大きくなるとサポートインターフェイスが必要な場所で通常のサポートが印刷されることがあります。" + +#: fdmprinter.def.json +msgctxt "support_interface_density label" +msgid "Support Interface Density" +msgstr "Support Interface Density" + +#: fdmprinter.def.json +msgctxt "support_interface_density description" +msgid "Adjusts the density of the roofs and bottoms of the support structure. A higher value results in better overhangs, but the supports are harder to remove." +msgstr "サポート材の屋根と底部の密度を調整します 大きな値ではオーバーハングでの成功率があがりますが、サポート材が除去しにくくなります" + +#: fdmprinter.def.json +msgctxt "support_interface_line_distance label" +msgid "Support Interface Line Distance" +msgstr "Support Interface Line Distance" + +#: fdmprinter.def.json +msgctxt "support_interface_line_distance description" +msgid "Distance between the printed support interface lines. This setting is calculated by the Support Interface Density, but can be adjusted separately." +msgstr "印刷されたサポートインタフェースラインの間隔。この設定はSupport Interface Densityで計算されますが、個別に調整することができます。" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern label" +msgid "Support Interface Pattern" +msgstr "Support Interface Pattern" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern description" +msgid "The pattern with which the interface of the support with the model is printed." +msgstr "モデルとサポートのインタフェースが印刷されるパターン。" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option lines" +msgid "Lines" +msgstr "Lines" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option grid" +msgid "Grid" +msgstr "Grid" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option triangles" +msgid "Triangles" +msgstr "Triangles" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option concentric" +msgid "Concentric" +msgstr "Concentric" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "Concentric 3D" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option zigzag" +msgid "Zig Zag" +msgstr "Zig Zag" + +#: fdmprinter.def.json +msgctxt "support_use_towers label" +msgid "Use Towers" +msgstr "Use Towers" + +#: fdmprinter.def.json +msgctxt "support_use_towers description" +msgid "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof." +msgstr "特殊なタワーを使用して、小さなオーバーハングしているエリアをサポートします。これらの塔は、サポートできる領域より大きな直径を支えれます。オーバーハング付近では塔の直径が減少し、屋根を形成します。" + +#: fdmprinter.def.json +msgctxt "support_tower_diameter label" +msgid "Tower Diameter" +msgstr "Tower Diameter" + +#: fdmprinter.def.json +msgctxt "support_tower_diameter description" +msgid "The diameter of a special tower." +msgstr "特別な塔の直径。" + +#: fdmprinter.def.json +msgctxt "support_minimal_diameter label" +msgid "Minimum Diameter" +msgstr "Minimum Diameter" + +#: fdmprinter.def.json +msgctxt "support_minimal_diameter description" +msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "特殊なサポート塔によって支持される小さな領域のX / Y方向の最小直径。" + +#: fdmprinter.def.json +msgctxt "support_tower_roof_angle label" +msgid "Tower Roof Angle" +msgstr "Tower Roof Angle" + +#: fdmprinter.def.json +msgctxt "support_tower_roof_angle description" +msgid "The angle of a rooftop of a tower. A higher value results in pointed tower roofs, a lower value results in flattened tower roofs." +msgstr "タワーの屋上の角度。値が高いほど尖った屋根が得られ、値が低いほど屋根が平らになります。" + +#: fdmprinter.def.json +msgctxt "platform_adhesion label" +msgid "Build Plate Adhesion" +msgstr "Build Plate Adhesion" + +#: fdmprinter.def.json +msgctxt "platform_adhesion description" +msgid "Adhesion" +msgstr "密着性" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_x label" +msgid "Extruder Prime X Position" +msgstr "Extruder Prime X Position" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_x description" +msgid "The X coordinate of the position where the nozzle primes at the start of printing." +msgstr "プリント開始時のノズルの位置を表すX座標。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_y label" +msgid "Extruder Prime Y Position" +msgstr "Extruder Prime Y Position" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_y description" +msgid "The Y coordinate of the position where the nozzle primes at the start of printing." +msgstr "プリント開始時にノズル位置を表すY座標。" + +#: fdmprinter.def.json +msgctxt "adhesion_type label" +msgid "Build Plate Adhesion Type" +msgstr "Build Plate Adhesion Type" + +#: fdmprinter.def.json +msgctxt "adhesion_type description" +msgid "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model." +msgstr "エクストルーダーとビルドプレートへの接着両方を改善するのに役立つさまざまなオプション。 Brimは、モデルのベースの周りに単一レイヤーを平面的に追加して、ワーピングを防止します。 Raftは、モデルの下に太いグリッドを追加します。スカートはモデルの周りに印刷されたラインですが、モデルには接続されていません。" + +#: fdmprinter.def.json +msgctxt "adhesion_type option skirt" +msgid "Skirt" +msgstr "Skirt" + +#: fdmprinter.def.json +msgctxt "adhesion_type option brim" +msgid "Brim" +msgstr "Brim" + +#: fdmprinter.def.json +msgctxt "adhesion_type option raft" +msgid "Raft" +msgstr "Raft" + +#: fdmprinter.def.json +msgctxt "adhesion_type option none" +msgid "None" +msgstr "None" + +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr label" +msgid "Build Plate Adhesion Extruder" +msgstr "Build Plate Adhesion Extruder" + +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr description" +msgid "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion." +msgstr "スカート/ブリム/ラフトをプリントする際のエクストルーダー。これはマルチエクストルージョン時に使用されます。" + +#: fdmprinter.def.json +msgctxt "skirt_line_count label" +msgid "Skirt Line Count" +msgstr "Skirt Line Count" + +#: fdmprinter.def.json +msgctxt "skirt_line_count description" +msgid "Multiple skirt lines help to prime your extrusion better for small models. Setting this to 0 will disable the skirt." +msgstr "複数のスカートラインを使用すると、小さなモデル形成時の射出をより良く行うことができます。これを0に設定するとスカートが無効になります。" + +#: fdmprinter.def.json +msgctxt "skirt_gap label" +msgid "Skirt Distance" +msgstr "Skirt Distance" + +#: fdmprinter.def.json +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 "スカートとプリントの最初のレイヤーの間の水平距離。これが最小距離であり、複数のスカートラインがこの距離から外側に延びている。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_minimal_length label" +msgid "Skirt/Brim Minimum Length" +msgstr "Skirt/Brim Minimum Length" + +#: fdmprinter.def.json +msgctxt "skirt_brim_minimal_length description" +msgid "The minimum length of the skirt or brim. If this length is not reached by all skirt or brim lines together, more skirt or brim lines will be added until the minimum length is reached. Note: If the line count is set to 0 this is ignored." +msgstr "スカートまたはブリム最短の長さ。この長さにすべてのスカートまたはブリムが達していない場合は、最小限の長さに達するまで、スカートまたはブリムラインが追加されます。注:行数が0に設定されている場合、これは無視されます。" + +#: fdmprinter.def.json +msgctxt "brim_width label" +msgid "Brim Width" +msgstr "Brim Width" + +#: fdmprinter.def.json +msgctxt "brim_width description" +msgid "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area." +msgstr "モデルから最外線のブリムまでの距離。大きなブリムは、ビルドプレートへの接着を高めますが、有効な印刷面積も減少させます。" + +#: fdmprinter.def.json +msgctxt "brim_line_count label" +msgid "Brim Line Count" +msgstr "Brim Line Count" + +#: fdmprinter.def.json +msgctxt "brim_line_count description" +msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." +msgstr "ブリムに使用される線数。ブリムの線数は、ビルドプレートへの接着性を向上させるだけでなく、有効な印刷面積を減少させる。" + +#: fdmprinter.def.json +msgctxt "brim_outside_only label" +msgid "Brim Only on Outside" +msgstr "Brim Only on Outside" + +#: fdmprinter.def.json +msgctxt "brim_outside_only description" +msgid "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much." +msgstr "モデルの外側のみにブリムを印刷します。これにより、後で取り除くブリムの量が減少します。またプレートへの接着力はそれほど低下しません。" + +#: fdmprinter.def.json +msgctxt "raft_margin label" +msgid "Raft Extra Margin" +msgstr "Raft Extra Margin" + +#: fdmprinter.def.json +msgctxt "raft_margin description" +msgid "If the raft is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print." +msgstr "ラフトが有効になっている場合、モデルの周りに余分なラフト領域ができます。値を大きくするとより強力なラフトができますが、多くの材料を使用し、造形範囲は少なくなります。" + +#: fdmprinter.def.json +msgctxt "raft_airgap label" +msgid "Raft Air Gap" +msgstr "Raft Air Gap" + +#: fdmprinter.def.json +msgctxt "raft_airgap description" +msgid "The gap between the final raft layer and the first layer of the model. Only the first layer is raised by this amount to lower the bonding between the raft layer and the model. Makes it easier to peel off the raft." +msgstr "モデルの第一層のラフトと最終ラフト層の隙間。この値で第1層のみを上げることで、ラフトとモデルとの間の結合を低下させる。結果ラフトを剥がしやすくします。" + +#: fdmprinter.def.json +msgctxt "layer_0_z_overlap label" +msgid "Initial Layer Z Overlap" +msgstr "Initial Layer Z Overlap" + +#: fdmprinter.def.json +msgctxt "layer_0_z_overlap description" +msgid "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount." +msgstr "エアギャップ内で失われたフィラメントを補うために、モデルの第1層と第2層をZ方向にオーバーラップさせます。この値によって、最初のモデルレイヤーがシフトダウンされます。" + +#: fdmprinter.def.json +msgctxt "raft_surface_layers label" +msgid "Raft Top Layers" +msgstr "Raft Top Layers" + +#: fdmprinter.def.json +msgctxt "raft_surface_layers description" +msgid "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1." +msgstr "第2ラフト層の上の最上層の数。これらは、モデルが置かれる完全に塗りつぶされた積層です。 2つの層は、1よりも滑らかな上面をもたらす。" + +#: fdmprinter.def.json +msgctxt "raft_surface_thickness label" +msgid "Raft Top Layer Thickness" +msgstr "Raft Top Layer Thickness" + +#: fdmprinter.def.json +msgctxt "raft_surface_thickness description" +msgid "Layer thickness of the top raft layers." +msgstr "トップラフト層の層厚。" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_width label" +msgid "Raft Top Line Width" +msgstr "Raft Top Line Width" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_width description" +msgid "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth." +msgstr "ラフトの上面の線の幅。これらは細い線で、ラフトの頂部が滑らかになります。" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_spacing label" +msgid "Raft Top Spacing" +msgstr "Raft Top Spacing" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_spacing description" +msgid "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid." +msgstr "上のラフト層とラフト線の間の距離。間隔は線の幅と同じにして、サーフェスがソリッドになるようにします。" + +#: fdmprinter.def.json +msgctxt "raft_interface_thickness label" +msgid "Raft Middle Thickness" +msgstr "Raft Middle Thickness" + +#: fdmprinter.def.json +msgctxt "raft_interface_thickness description" +msgid "Layer thickness of the middle raft layer." +msgstr "中間のラフト層の層の厚さ。" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_width label" +msgid "Raft Middle Line Width" +msgstr "Raft Middle Line Width" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_width description" +msgid "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the build plate." +msgstr "中間ラフト層の線の幅。第2層をより押し出すと、ラインがビルドプレートに固着します。" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_spacing label" +msgid "Raft Middle Spacing" +msgstr "Raft Middle Spacing" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_spacing description" +msgid "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers." +msgstr "中間ラフト層とラフト線の間の距離。中央の間隔はかなり広くなければならず、トップラフト層を支えるために十分な密度でなければならない。" + +#: fdmprinter.def.json +msgctxt "raft_base_thickness label" +msgid "Raft Base Thickness" +msgstr "Raft Base Thickness" + +#: fdmprinter.def.json +msgctxt "raft_base_thickness description" +msgid "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate." +msgstr "ベースラフト層の層厚さ。プリンタのビルドプレートにしっかりと固着する厚い層でなければなりません。" + +#: fdmprinter.def.json +msgctxt "raft_base_line_width label" +msgid "Raft Base Line Width" +msgstr "Raft Base Line Width" + +#: fdmprinter.def.json +msgctxt "raft_base_line_width description" +msgid "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion." +msgstr "ベースラフト層の線幅。ビルドプレートの接着のため太い線でなければなりません。" + +#: fdmprinter.def.json +msgctxt "raft_base_line_spacing label" +msgid "Raft Line Spacing" +msgstr "Raft Line Spacing" + +#: fdmprinter.def.json +msgctxt "raft_base_line_spacing description" +msgid "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate." +msgstr "ベースラフト層のラフトライン間の距離。広い間隔は、ブルドプレートからのラフトの除去を容易にする。" + +#: fdmprinter.def.json +msgctxt "raft_speed label" +msgid "Raft Print Speed" +msgstr "Raft Print Speed" + +#: fdmprinter.def.json +msgctxt "raft_speed description" +msgid "The speed at which the raft is printed." +msgstr "ラフトが印刷される速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_speed label" +msgid "Raft Top Print Speed" +msgstr "Raft Top Print Speed" + +#: fdmprinter.def.json +msgctxt "raft_surface_speed description" +msgid "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines." +msgstr "トップラフト層が印刷される速度。この値はノズルが隣接するサーフェスラインをゆっくりと滑らかにするために、少し遅く印刷する必要があります。" + +#: fdmprinter.def.json +msgctxt "raft_interface_speed label" +msgid "Raft Middle Print Speed" +msgstr "Raft Middle Print Speed" + +#: fdmprinter.def.json +msgctxt "raft_interface_speed description" +msgid "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high." +msgstr "ミドルラフト層が印刷される速度。ノズルから出てくるマテリアルの量がかなり多いので、ゆっくりと印刷されるべきである。" + +#: fdmprinter.def.json +msgctxt "raft_base_speed label" +msgid "Raft Base Print Speed" +msgstr "Raft Base Print Speed" + +#: fdmprinter.def.json +msgctxt "raft_base_speed description" +msgid "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high." +msgstr "ベースラフト層が印刷される速度。これは、ノズルから出てくるマテリアルの量がかなり多いので、ゆっくりと印刷されるべきである。" + +#: fdmprinter.def.json +msgctxt "raft_acceleration label" +msgid "Raft Print Acceleration" +msgstr "Raft Print Acceleration" + +#: fdmprinter.def.json +msgctxt "raft_acceleration description" +msgid "The acceleration with which the raft is printed." +msgstr "ラフト印刷時の加速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_acceleration label" +msgid "Raft Top Print Acceleration" +msgstr "Raft Top Print Acceleration" + +#: fdmprinter.def.json +msgctxt "raft_surface_acceleration description" +msgid "The acceleration with which the top raft layers are printed." +msgstr "ラフトのトップ印刷時の加速度" + +#: fdmprinter.def.json +msgctxt "raft_interface_acceleration label" +msgid "Raft Middle Print Acceleration" +msgstr "Raft Middle Print Acceleration" + +#: fdmprinter.def.json +msgctxt "raft_interface_acceleration description" +msgid "The acceleration with which the middle raft layer is printed." +msgstr "ラフトの中間層印刷時の加速度" + +#: fdmprinter.def.json +msgctxt "raft_base_acceleration label" +msgid "Raft Base Print Acceleration" +msgstr "Raft Base Print Acceleration" + +#: fdmprinter.def.json +msgctxt "raft_base_acceleration description" +msgid "The acceleration with which the base raft layer is printed." +msgstr "ラフトの底面印刷時の加速度" + +#: fdmprinter.def.json +msgctxt "raft_jerk label" +msgid "Raft Print Jerk" +msgstr "Raft Print Jerk" + +#: fdmprinter.def.json +msgctxt "raft_jerk description" +msgid "The jerk with which the raft is printed." +msgstr "ラフトが印刷時のジャーク。" + +#: fdmprinter.def.json +msgctxt "raft_surface_jerk label" +msgid "Raft Top Print Jerk" +msgstr "Raft Top Print Jerk" + +#: fdmprinter.def.json +msgctxt "raft_surface_jerk description" +msgid "The jerk with which the top raft layers are printed." +msgstr "トップラフト層印刷時のジャーク" + +#: fdmprinter.def.json +msgctxt "raft_interface_jerk label" +msgid "Raft Middle Print Jerk" +msgstr "Raft Middle Print Jerk" + +#: fdmprinter.def.json +msgctxt "raft_interface_jerk description" +msgid "The jerk with which the middle raft layer is printed." +msgstr "ミドルラフト層印刷時のジャーク" + +#: fdmprinter.def.json +msgctxt "raft_base_jerk label" +msgid "Raft Base Print Jerk" +msgstr "Raft Base Print Jerk" + +#: fdmprinter.def.json +msgctxt "raft_base_jerk description" +msgid "The jerk with which the base raft layer is printed." +msgstr "ベースラフト層印刷時のジャーク" + +#: fdmprinter.def.json +msgctxt "raft_fan_speed label" +msgid "Raft Fan Speed" +msgstr "Raft Fan Speed" + +#: fdmprinter.def.json +msgctxt "raft_fan_speed description" +msgid "The fan speed for the raft." +msgstr "ラフト印刷時のファンの速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_fan_speed label" +msgid "Raft Top Fan Speed" +msgstr "Raft Top Fan Speed" + +#: fdmprinter.def.json +msgctxt "raft_surface_fan_speed description" +msgid "The fan speed for the top raft layers." +msgstr "トップラフト印刷時のファンの速度。" + +#: fdmprinter.def.json +msgctxt "raft_interface_fan_speed label" +msgid "Raft Middle Fan Speed" +msgstr "Raft Middle Fan Speed" + +#: fdmprinter.def.json +msgctxt "raft_interface_fan_speed description" +msgid "The fan speed for the middle raft layer." +msgstr "ミドルラフト印刷時のファンの速度。" + +#: fdmprinter.def.json +msgctxt "raft_base_fan_speed label" +msgid "Raft Base Fan Speed" +msgstr "Raft Base Fan Speed" + +#: fdmprinter.def.json +msgctxt "raft_base_fan_speed description" +msgid "The fan speed for the base raft layer." +msgstr "ベースラフト層印刷時のファン速度" + +#: fdmprinter.def.json +msgctxt "dual label" +msgid "Dual Extrusion" +msgstr "Dual Extrusion" + +#: fdmprinter.def.json +msgctxt "dual description" +msgid "Settings used for printing with multiple extruders." +msgstr "デュアルエクストルーダーで印刷するための設定" + +#: fdmprinter.def.json +msgctxt "prime_tower_enable label" +msgid "Enable Prime Tower" +msgstr "Enable Prime Tower" + +#: fdmprinter.def.json +msgctxt "prime_tower_enable description" +msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." +msgstr "印刷物の横にタワーを造形して、ノズル交換後にフィラメントの調整をします" + +#: fdmprinter.def.json +msgctxt "prime_tower_size label" +msgid "Prime Tower Size" +msgstr "Prime Tower Size" + +#: fdmprinter.def.json +msgctxt "prime_tower_size description" +msgid "The width of the prime tower." +msgstr "プライムタワーの幅。" + +#: fdmprinter.def.json +msgctxt "prime_tower_min_volume label" +msgid "Prime Tower Minimum Volume" +msgstr "Prime Tower Minimum Volume" + +#: fdmprinter.def.json +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 "Prime Tower Thickness" + +#: 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" +msgstr "Prime Tower X Position" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_x description" +msgid "The x coordinate of the position of the prime tower." +msgstr "プライムタワーの位置のx座標。" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_y label" +msgid "Prime Tower Y Position" +msgstr "Prime Tower Y Position" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_y description" +msgid "The y coordinate of the position of the prime tower." +msgstr "プライムタワーの位置のy座標。" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Prime Tower Flow" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation: the amount of material extruded is multiplied by this value." +msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算されます" + +#: fdmprinter.def.json +msgctxt "prime_tower_wipe_enabled label" +msgid "Wipe Inactive Nozzle on Prime Tower" +msgstr "Wipe Inactive Nozzle on Prime Tower" + +#: fdmprinter.def.json +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 "Wipe Nozzle After Switch" + +#: 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 "ooze_shield_enabled label" +msgid "Enable Ooze Shield" +msgstr "Enable Ooze Shield" + +#: fdmprinter.def.json +msgctxt "ooze_shield_enabled description" +msgid "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle." +msgstr "モデルの周りに壁(ooze shield)を作る。これを生成することで、一つ目のノズルの高さと2つ目のノズルが同じ高さであったとき、2つ目のノズルを綺麗にします。" + +#: fdmprinter.def.json +msgctxt "ooze_shield_angle label" +msgid "Ooze Shield Angle" +msgstr "Ooze Shield Angle" + +#: fdmprinter.def.json +msgctxt "ooze_shield_angle description" +msgid "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material." +msgstr "壁(ooze shield)作成時の最大の角度。 0度は垂直であり、90度は水平である。角度を小さくすると、壁が少なくなりますが、より多くの材料が使用されます。" + +#: fdmprinter.def.json +msgctxt "ooze_shield_dist label" +msgid "Ooze Shield Distance" +msgstr "Ooze Shield Distance" + +#: fdmprinter.def.json +msgctxt "ooze_shield_dist description" +msgid "Distance of the ooze shield from the print, in the X/Y directions." +msgstr "壁(ooze shield)の造形物からの距離" + +#: fdmprinter.def.json +msgctxt "meshfix label" +msgid "Mesh Fixes" +msgstr "Mesh Fixes" + +#: fdmprinter.def.json +msgctxt "meshfix description" +msgid "category_fixes" +msgstr "category_fixes" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all label" +msgid "Union Overlapping Volumes" +msgstr "Union Overlapping Volumes" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all description" +msgid "Ignore the internal geometry arising from overlapping volumes within a mesh and print the volumes as one. This may cause unintended internal cavities to disappear." +msgstr "メッシュ内の重なり合うボリュームから生じる内部ジオメトリを無視し、ボリュームを1つとして印刷します。これにより、意図しない内部空洞が消えることがあります。" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all_remove_holes label" +msgid "Remove All Holes" +msgstr "Remove All Holes" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all_remove_holes description" +msgid "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below." +msgstr "各レイヤーの穴を消し、外形のみを保持します。これにより、見えない部分の不要な部分が無視されますが、表面上にある穴も全て造形されなくなります。" + +#: fdmprinter.def.json +msgctxt "meshfix_extensive_stitching label" +msgid "Extensive Stitching" +msgstr "Extensive Stitching" + +#: fdmprinter.def.json +msgctxt "meshfix_extensive_stitching description" +msgid "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time." +msgstr "強めのスティッチングは、穴をメッシュで塞いでデータを作成します。このオプションは、長い処理時間が必要となります。" + +#: fdmprinter.def.json +msgctxt "meshfix_keep_open_polygons label" +msgid "Keep Disconnected Faces" +msgstr "Keep Disconnected Faces" + +#: fdmprinter.def.json +msgctxt "meshfix_keep_open_polygons description" +msgid "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper GCode." +msgstr "通常、Curaはメッシュ内の小さな穴をスティッチし、大きな穴のあるレイヤーの部分を削除しようとします。このオプションを有効にすると、スティッチできない部分が保持されます。このオプションは、他のすべてが適切なGCodeを生成できない場合の最後の手段として使用する必要があります。" + +#: fdmprinter.def.json +msgctxt "multiple_mesh_overlap label" +msgid "Merged Meshes Overlap" +msgstr "Merged Meshes Overlap" + +#: fdmprinter.def.json +msgctxt "multiple_mesh_overlap description" +msgid "Make meshes which are touching each other overlap a bit. This makes them bond together better." +msgstr "触れているメッシュを少し重ねてください。これによって、より良い接着をします。" + +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes label" +msgid "Remove Mesh Intersection" +msgstr "Remove Mesh Intersection" + +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes description" +msgid "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other." +msgstr "複数のメッシュが重なっている領域を削除します。これは、結合された2つのマテリアルのオブジェクトが互いに重なっている場合に使用されます。" + +#: fdmprinter.def.json +msgctxt "alternate_carve_order label" +msgid "Alternate Mesh Removal" +msgstr "Alternate Mesh Removal" + +#: fdmprinter.def.json +msgctxt "alternate_carve_order description" +msgid "Switch to which mesh intersecting volumes will belong with every layer, so that the overlapping meshes become interwoven. Turning this setting off will cause one of the meshes to obtain all of the volume in the overlap, while it is removed from the other meshes." +msgstr "交差するメッシュがどのレイヤーに属しているかを切り替えることで、オーバーラップしているメッシュを絡み合うようにします。この設定をオフにすると、一方のメッシュはオーバーラップ内のすべてのボリュームを取得し、他方のメッシュは他から削除されます。" + +#: fdmprinter.def.json +msgctxt "blackmagic label" +msgid "Special Modes" +msgstr "Special Modes" + +#: fdmprinter.def.json +msgctxt "blackmagic description" +msgid "category_blackmagic" +msgstr "category_blackmagic" + +#: fdmprinter.def.json +msgctxt "print_sequence label" +msgid "Print Sequence" +msgstr "Print Sequence" + +#: fdmprinter.def.json +msgctxt "print_sequence description" +msgid "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes." +msgstr "すべてのモデルをレイヤーごとに印刷するか、1つのモデルがプリント完了するのを待ち次のモデルに移動するかどうか。造形物の間にヘッドが通るだけのスペースがある場合のみ、一つずつ印刷する事が出来ます。" + +#: fdmprinter.def.json +msgctxt "print_sequence option all_at_once" +msgid "All at Once" +msgstr "All at Once" + +#: fdmprinter.def.json +msgctxt "print_sequence option one_at_a_time" +msgid "One at a Time" +msgstr "One at a Time" + +#: fdmprinter.def.json +msgctxt "infill_mesh label" +msgid "Infill Mesh" +msgstr "Infill Mesh" + +#: fdmprinter.def.json +msgctxt "infill_mesh description" +msgid "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh." +msgstr "このメッシュを使用して、重なる他のメッシュのインフィルを変更します。他のメッシュのインフィル領域を改なメッシュに置き換えます。これを利用する場合、1つのWallだけを印刷しTop / Bottom Skinは使用しないことをお勧めします。" + +#: fdmprinter.def.json +msgctxt "infill_mesh_order label" +msgid "Infill Mesh Order" +msgstr "Infill Mesh Order" + +#: fdmprinter.def.json +msgctxt "infill_mesh_order description" +msgid "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes." +msgstr "他のインフィルメッシュのインフィル内にあるインフィルメッシュを決定します。優先度の高いのインフィルメッシュは、低いメッシュと通常のメッシュのインフィルを変更します" + +#: fdmprinter.def.json +msgctxt "support_mesh label" +msgid "Support Mesh" +msgstr "Support Mesh" + +#: fdmprinter.def.json +msgctxt "support_mesh description" +msgid "Use this mesh to specify support areas. This can be used to generate support structure." +msgstr "このメッシュを使用してサポート領域を指定します。これは、サポート構造を生成するために使用できます。" + +#: fdmprinter.def.json +msgctxt "anti_overhang_mesh label" +msgid "Anti Overhang Mesh" +msgstr "Anti Overhang Mesh" + +#: fdmprinter.def.json +msgctxt "anti_overhang_mesh description" +msgid "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure." +msgstr "このメッシュを使用して、モデルのどの部分をオーバーハングとして検出する必要がないかを指定します。これは、不要なサポート構造を削除するために使用できます。" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode label" +msgid "Surface Mode" +msgstr "Surface Mode" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode description" +msgid "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces." +msgstr "モデルを表面のみ、ボリューム、または緩い表面のボリュームとして扱います。通常の印刷モードでは、囲まれた内部が印刷されます。 「Surface」は表面のみ印刷をして、インフィルもトップもボトムも印刷しません。 \"Both\"は通常と同様に囲まれた内部を印刷し残りのポリゴンをサーフェスとして印刷します。" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option normal" +msgid "Normal" +msgstr "Normal" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option surface" +msgid "Surface" +msgstr "Surface" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option both" +msgid "Both" +msgstr "Both" + +#: fdmprinter.def.json +msgctxt "magic_spiralize label" +msgid "Spiralize Outer Contour" +msgstr "Spiralize Outer Contour" + +#: fdmprinter.def.json +msgctxt "magic_spiralize description" +msgid "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature used to be called Joris in older versions." +msgstr "Spiralizeは外縁のZ移動を平滑化します。これにより、プリント全体にわたって安定したZ値が得られます。この機能は、ソリッドモデルを単一のウォールプリントに変換し、底面と側面のみ印刷します。この機能は以前のバージョンではJorisと呼ばれていました。" + +#: fdmprinter.def.json +msgctxt "experimental label" +msgid "Experimental" +msgstr "Experimental" + +#: fdmprinter.def.json +msgctxt "experimental description" +msgid "experimental!" +msgstr "実験的" + +#: fdmprinter.def.json +msgctxt "draft_shield_enabled label" +msgid "Enable Draft Shield" +msgstr "Enable Draft Shield" + +#: fdmprinter.def.json +msgctxt "draft_shield_enabled description" +msgid "This will create a wall around the model, which traps (hot) air and shields against exterior airflow. Especially useful for materials which warp easily." +msgstr "これにより、モデルの周囲に壁ができ、熱を閉じ込め、外気の流れを遮蔽します。特に反りやすい材料に有効です。" + +#: fdmprinter.def.json +msgctxt "draft_shield_dist label" +msgid "Draft Shield X/Y Distance" +msgstr "Draft Shield X/Y Distance" + +#: fdmprinter.def.json +msgctxt "draft_shield_dist description" +msgid "Distance of the draft shield from the print, in the X/Y directions." +msgstr "ドラフトシールドと造形物のX / Y方向の距離" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation label" +msgid "Draft Shield Limitation" +msgstr "Draft Shield Limitation" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation description" +msgid "Set the height of the draft shield. Choose to print the draft shield at the full height of the model or at a limited height." +msgstr "ドラフトシールドの高さを設定します。ドラフトシールドは、モデルの全高、または限られた高さで印刷するように選択します。" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation option full" +msgid "Full" +msgstr "Full" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation option limited" +msgid "Limited" +msgstr "Limited" + +#: fdmprinter.def.json +msgctxt "draft_shield_height label" +msgid "Draft Shield Height" +msgstr "Draft Shield Height" + +#: fdmprinter.def.json +msgctxt "draft_shield_height description" +msgid "Height limitation of the draft shield. Above this height no draft shield will be printed." +msgstr "ドラフトシールドの高さ制限。この高さを超えるとドラフトシールドが印刷されません。" + +#: fdmprinter.def.json +msgctxt "conical_overhang_enabled label" +msgid "Make Overhang Printable" +msgstr "Make Overhang Printable" + +#: fdmprinter.def.json +msgctxt "conical_overhang_enabled description" +msgid "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical." +msgstr "最小限のサポートが必要となるように印刷モデルのジオメトリを変更します。急なオーバーハングは浅いオーバーハングになります。オーバーハングした領域は、より垂直になるように下がります。" + +#: fdmprinter.def.json +msgctxt "conical_overhang_angle label" +msgid "Maximum Model Angle" +msgstr "Maximum Model Angle" + +#: fdmprinter.def.json +msgctxt "conical_overhang_angle description" +msgid "The maximum angle of overhangs after the they have been made printable. At a value of 0° all overhangs are replaced by a piece of model connected to the build plate, 90° will not change the model in any way." +msgstr "印刷可能になったオーバーハングの最大角度。 0°の値では、すべてのオーバーハングがビルドプレートに接続されたモデルの一部に置き換えられます。90°では、モデルは決して変更されません。" + +#: fdmprinter.def.json +msgctxt "coasting_enable label" +msgid "Enable Coasting" +msgstr "Enable Coasting" + +#: fdmprinter.def.json +msgctxt "coasting_enable description" +msgid "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to print the last piece of the extrusion path in order to reduce stringing." +msgstr "コースティングは、それぞれの造形ラインの最後の部分をトラベルパスで置き換えます。はみ出た材料は、糸引きを減らすために造形ライン最後の部分を印刷するために使用される。" + +#: fdmprinter.def.json +msgctxt "coasting_volume label" +msgid "Coasting Volume" +msgstr "Coasting Volume" + +#: fdmprinter.def.json +msgctxt "coasting_volume description" +msgid "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed." +msgstr "はみ出るフィラメントのボリューム。この値は、一般に、ノズル直径の3乗に近い値でなければならない。" + +#: fdmprinter.def.json +msgctxt "coasting_min_volume label" +msgid "Minimum Volume Before Coasting" +msgstr "Minimum Volume Before Coasting" + +#: fdmprinter.def.json +msgctxt "coasting_min_volume description" +msgid "The smallest volume an extrusion path should have before allowing coasting. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume." +msgstr "コースティングに必要な最小の容積。より小さい押出経路の場合、ボーデンチューブにはより少ない圧力しか蓄積されないので、コースティングの容積は比例する。この値は、常に、コースティングのボリュームよりも大きな必要があります。" + +#: fdmprinter.def.json +msgctxt "coasting_speed label" +msgid "Coasting Speed" +msgstr "Coasting Speed" + +#: fdmprinter.def.json +msgctxt "coasting_speed description" +msgid "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops." +msgstr "コースティング中の移動速度。印刷時の経路の速度設定に比例します。ボーデンチューブの圧力が低下するので、100%よりわずかに低い値が推奨される。" + +#: fdmprinter.def.json +msgctxt "skin_outline_count label" +msgid "Extra Skin Wall Count" +msgstr "Extra Skin Wall Count" + +#: fdmprinter.def.json +msgctxt "skin_outline_count description" +msgid "Replaces the outermost part of the top/bottom pattern with a number of concentric lines. Using one or two lines improves roofs that start on infill material." +msgstr "上部/下部パターンの最も外側の部分を同心円の線で置き換えます。 1つまたは2つの線を使用すると、トップ部分の造形が改善されます。" + +#: fdmprinter.def.json +msgctxt "skin_alternate_rotation label" +msgid "Alternate Skin Rotation" +msgstr "Alternate Skin Rotation" + +#: fdmprinter.def.json +msgctxt "skin_alternate_rotation description" +msgid "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions." +msgstr "トップ/ボトムのレイヤーが印刷される方向を変更します。通常、それらは斜めに印刷されます。この設定では、X方向のみとY方向のみが追加されます。" + +#: fdmprinter.def.json +msgctxt "support_conical_enabled label" +msgid "Enable Conical Support" +msgstr "Enable Conical Support" + +#: fdmprinter.def.json +msgctxt "support_conical_enabled description" +msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +msgstr "実験的機能:オーバーハング部分よりも底面のサポート領域を小さくする。" + +#: fdmprinter.def.json +msgctxt "support_conical_angle label" +msgid "Conical Support Angle" +msgstr "Conical Support Angle" + +#: fdmprinter.def.json +msgctxt "support_conical_angle description" +msgid "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top." +msgstr "円錐形のサポートの傾きの角度。 0度は垂直であり、90度は水平である。角度が小さいと、サポートはより頑丈になりますが、より多くのマテリアルが必要になります。負の角度は、サポートのベースがトップよりも広くなります。" + +#: fdmprinter.def.json +msgctxt "support_conical_min_width label" +msgid "Conical Support Minimum Width" +msgstr "Conical Support Minimum Width" + +#: fdmprinter.def.json +msgctxt "support_conical_min_width description" +msgid "Minimum width to which the base of the conical support area is reduced. Small widths can lead to unstable support structures." +msgstr "円錐形のサポート領域のベースが縮小される最小幅。幅が狭いと、サポートが不安定になる可能性があります。" + +#: fdmprinter.def.json +msgctxt "infill_hollow label" +msgid "Hollow Out Objects" +msgstr "Hollow Out Objects" + +#: fdmprinter.def.json +msgctxt "infill_hollow description" +msgid "Remove all infill and make the inside of the object eligible for support." +msgstr "すべてのインフィルを取り除き、オブジェクトの内部をサポート可能にします。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_enabled label" +msgid "Fuzzy Skin" +msgstr "Fuzzy Skin" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_enabled description" +msgid "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look." +msgstr "外壁を印刷する際に振動が起こり、表面が粗くてぼやける。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_thickness label" +msgid "Fuzzy Skin Thickness" +msgstr "Fuzzy Skin Thickness" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_thickness description" +msgid "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered." +msgstr "振動が起こる幅。内壁は変更されていないので、これを外壁の幅より小さく設定することをお勧めします。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_density label" +msgid "Fuzzy Skin Density" +msgstr "Fuzzy Skin Density" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_density description" +msgid "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution." +msgstr "レイヤー内の各ポリゴンに導入されたポイントの平均密度。ポリゴンの元の点は破棄されるため、密度が低いと解像度が低下します。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_dist label" +msgid "Fuzzy Skin Point Distance" +msgstr "Fuzzy Skin Point Distance" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_dist description" +msgid "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness." +msgstr "各線分に導入されたランダム点間の平均距離。ポリゴンの元の点は破棄されるので、積層の値を低くすることで、なめらかな仕上がりになります。この値は、ファジースキンの厚さの半分よりも大きくなければなりません。" + +#: fdmprinter.def.json +msgctxt "wireframe_enabled label" +msgid "Wire Printing" +msgstr "Wire Printing" + +#: fdmprinter.def.json +msgctxt "wireframe_enabled description" +msgid "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines." +msgstr "薄い空気中に印刷し、疎なウエブ構造で外面のみを印刷します。これは、上向きおよび斜め下向きの線を介して接続された所定のZ間隔でモデルの輪郭を水平に印刷することによって実現される。" + +#: fdmprinter.def.json +msgctxt "wireframe_height label" +msgid "WP Connection Height" +msgstr "WP Connection Height" + +#: fdmprinter.def.json +msgctxt "wireframe_height description" +msgid "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing." +msgstr "2つの水平なパーツ間の、上向きおよび斜め下向きの線の高さ。これは、ネット構造の全体密度を決定します。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_inset label" +msgid "WP Roof Inset Distance" +msgstr "WP Roof Inset Distance" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_inset description" +msgid "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing." +msgstr "屋根から内側に輪郭を描くときの距離。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed label" +msgid "WP Speed" +msgstr "WP Speed" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed description" +msgid "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing." +msgstr "マテリアルを押し出すときにノズルが動く速度。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_bottom label" +msgid "WP Bottom Printing Speed" +msgstr "WP Bottom Printing Speed" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_bottom description" +msgid "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing." +msgstr "ブルドプラットフォームに接触する第1層の印刷速度。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_up label" +msgid "WP Upward Printing Speed" +msgstr "WP Upward Printing Speed" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_up description" +msgid "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing." +msgstr "薄い空気の中で上向きに線を印刷する速度。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_down label" +msgid "WP Downward Printing Speed" +msgstr "WP Downward Printing Speed" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_down description" +msgid "Speed of printing a line diagonally downward. Only applies to Wire Printing." +msgstr "斜め下方に線を印刷する速度。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_flat label" +msgid "WP Horizontal Printing Speed" +msgstr "WP Horizontal Printing Speed" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_flat description" +msgid "Speed of printing the horizontal contours of the model. Only applies to Wire Printing." +msgstr "モデルの水平輪郭を印刷する速度。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow label" +msgid "WP Flow" +msgstr "WP Flow" + +#: fdmprinter.def.json +msgctxt "wireframe_flow description" +msgid "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing." +msgstr "流れ補正:押出されたマテリアルの量はこの値の乗算になります。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_connection label" +msgid "WP Connection Flow" +msgstr "WP Connection Flow" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_connection description" +msgid "Flow compensation when going up or down. Only applies to Wire Printing." +msgstr "上下に動くときの吐出補正。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_flat label" +msgid "WP Flat Flow" +msgstr "WP Flat Flow" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_flat description" +msgid "Flow compensation when printing flat lines. Only applies to Wire Printing." +msgstr "フラットラインを印刷する際の吐出補正。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_top_delay label" +msgid "WP Top Delay" +msgstr "WP Top Delay" + +#: fdmprinter.def.json +msgctxt "wireframe_top_delay description" +msgid "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing." +msgstr "上向きの線が硬くなるように、上向きの動きの後の時間を遅らせる。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_bottom_delay label" +msgid "WP Bottom Delay" +msgstr "WP Bottom Delay" + +#: fdmprinter.def.json +msgctxt "wireframe_bottom_delay description" +msgid "Delay time after a downward move. Only applies to Wire Printing." +msgstr "下降後の遅延時間。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_flat_delay label" +msgid "WP Flat Delay" +msgstr "WP Flat Delay" + +#: fdmprinter.def.json +msgctxt "wireframe_flat_delay description" +msgid "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing." +msgstr "2つの水平セグメント間の遅延時間。このような遅延を挿入すると、前のレイヤーとの接着性が向上することがありますが、遅延が長すぎると垂れ下がりが発生します。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_up_half_speed label" +msgid "WP Ease Upward" +msgstr "WP Ease Upward" + +#: fdmprinter.def.json +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 "半分の速度で押出される上方への移動距離。過度にマテリアルを加熱することなく、前の層とのより良い接着を作ります。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_top_jump label" +msgid "WP Knot Size" +msgstr "WP Knot Size" + +#: fdmprinter.def.json +msgctxt "wireframe_top_jump description" +msgid "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing." +msgstr "上向きの線の上端に小さな結び目を作成し、連続する水平レイヤーを接着力を高めます。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_fall_down label" +msgid "WP Fall Down" +msgstr "WP Fall Down" + +#: fdmprinter.def.json +msgctxt "wireframe_fall_down description" +msgid "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing." +msgstr "上向き押出後にマテリアルが落下する距離。この距離は補正される。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_drag_along label" +msgid "WP Drag Along" +msgstr "WP Drag Along" + +#: fdmprinter.def.json +msgctxt "wireframe_drag_along description" +msgid "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing." +msgstr "斜め下方への押出に伴い上向き押出しているマテリアルが引きずられる距離。この距離は補正される。ワイヤ印刷のみに適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy label" +msgid "WP Strategy" +msgstr "WP Strategy" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy description" +msgid "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted." +msgstr "各接続ポイントで2つの連続したレイヤーが密着していることを確認するためのストラテジー。収縮すると上向きの線が正しい位置で硬化しますが、フィラメントの研削が行われる可能性があります。上向きの線の終わりに結び目をつけて接続する機会を増やし、線を冷やすことができます。ただし、印刷速度が遅くなることがあります。別の方法は、上向きの線の上端のたるみを補償することである。しかし、予測どおりにラインが必ずしも落ちるとは限りません。" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option compensate" +msgid "Compensate" +msgstr "Compensate" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option knot" +msgid "Knot" +msgstr "Knot" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option retract" +msgid "Retract" +msgstr "Retract" + +#: fdmprinter.def.json +msgctxt "wireframe_straight_before_down label" +msgid "WP Straighten Downward Lines" +msgstr "WP Straighten Downward Lines" + +#: fdmprinter.def.json +msgctxt "wireframe_straight_before_down description" +msgid "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing." +msgstr "水平方向の直線部分で覆われた斜めに下降線の割合です。これは上向きラインのほとんどのポイント、上部のたるみを防ぐことができます。ワイヤ印刷にのみ適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_fall_down label" +msgid "WP Roof Fall Down" +msgstr "WP Roof Fall Down" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_fall_down description" +msgid "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing." +msgstr "水平屋根が ”薄い空気”に印刷され落ちる距離。この距離は補正されています。ワイヤ印刷に適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_drag_along label" +msgid "WP Roof Drag Along" +msgstr "WP Roof Drag Along" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_drag_along description" +msgid "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing." +msgstr "屋根の外側の輪郭に戻る際に引きずる内側ラインの終わり部分の距離。この距離は補正されていてワイヤ印刷のみ適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_outer_delay label" +msgid "WP Roof Outer Delay" +msgstr "WP Roof Outer Delay" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_outer_delay description" +msgid "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing." +msgstr "トップレイヤーにある穴の外側に掛ける時間。長い時間の方はより良い密着を得られます。ワイヤ印刷にのみ適用されます。" + +#: fdmprinter.def.json +msgctxt "wireframe_nozzle_clearance label" +msgid "WP Nozzle Clearance" +msgstr "WP Nozzle Clearance" + +#: fdmprinter.def.json +msgctxt "wireframe_nozzle_clearance description" +msgid "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing." +msgstr "ノズルと水平方向に下向きの線間の距離。大きな隙間がある場合、急な角度で斜め下方線となり、次の層が上方接続しずらくなる。ワイヤ印刷にのみ適用されます。" + +#: fdmprinter.def.json +msgctxt "command_line_settings label" +msgid "Command Line Settings" +msgstr "Command Line Settings" + +#: fdmprinter.def.json +msgctxt "command_line_settings description" +msgid "Settings which are only used if CuraEngine isn't called from the Cura frontend." +msgstr "CuraエンジンがCuraフロントエンドから呼び出されない場合のみ使用される設定。" + +#: fdmprinter.def.json +msgctxt "center_object label" +msgid "Center object" +msgstr "Center object" + +#: fdmprinter.def.json +msgctxt "center_object description" +msgid "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved." +msgstr "オブジェクトが保存された座標系を使用する代わりにビルドプラットフォームの中間(0,0)にオブジェクトを配置するかどうか。" + +#: fdmprinter.def.json +msgctxt "mesh_position_x label" +msgid "Mesh position x" +msgstr "Mesh position x" + +#: fdmprinter.def.json +msgctxt "mesh_position_x description" +msgid "Offset applied to the object in the x direction." +msgstr "オブジェクトの x 方向に適用されたオフセット。" + +#: fdmprinter.def.json +msgctxt "mesh_position_y label" +msgid "Mesh position y" +msgstr "Mesh position y" + +#: fdmprinter.def.json +msgctxt "mesh_position_y description" +msgid "Offset applied to the object in the y direction." +msgstr "オブジェクトのY 方向適用されたオフセット。" + +#: fdmprinter.def.json +msgctxt "mesh_position_z label" +msgid "Mesh position z" +msgstr "Mesh position z" + +#: fdmprinter.def.json +msgctxt "mesh_position_z description" +msgid "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'." +msgstr "オブジェクトの z 方向に適用されたオフセット。この 'オブジェクト シンク' と呼ばれていたものを再現できます。" + +#: fdmprinter.def.json +msgctxt "mesh_rotation_matrix label" +msgid "Mesh Rotation Matrix" +msgstr "Mesh Rotation Matrix" + +#: fdmprinter.def.json +msgctxt "mesh_rotation_matrix description" +msgid "Transformation matrix to be applied to the model when loading it from file." +msgstr "ファイルから読み込むときに、モデルに適用するトランスフォーメーションマトリックス。" From 4b28e9bf43cd62be82de4646d08d1a42f81ef7c6 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 09:38:39 +0200 Subject: [PATCH 795/816] Re-enable Japanese from language selection menu Contributes to issue CURA-3817. --- resources/qml/Preferences/GeneralPage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index f825cfc08c..a01abb06ee 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -152,6 +152,7 @@ UM.PreferencesPage append({ text: "Suomi", code: "fi" }) append({ text: "Français", code: "fr" }) append({ text: "Italiano", code: "it" }) + append({ text: "日本語", code: "jp" }) append({ text: "Nederlands", code: "nl" }) append({ text: "Português do Brasil", code: "ptbr" }) append({ text: "Русский", code: "ru" }) From 704c6e5d8fefcd50815d339843f9c9f9521fee23 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 16 May 2017 13:19:28 +0200 Subject: [PATCH 796/816] Removed no longer used profiles CURA-3816 --- .../um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg | 14 -------------- ...8_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 14 -------------- 2 files changed, 28 deletions(-) delete mode 100755 resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg delete mode 100755 resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg deleted file mode 100755 index 84e5c6d3d3..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = normal -material = generic_tpu_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 1 - -[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg deleted file mode 100755 index 222a4935d5..0000000000 --- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -type = quality -quality_type = superdraft -material = generic_tpu_ultimaker3_BB_0.8 -weight = 0 -supported = False -setting_version = 1 - -[values] From b95712ef95f4cdd61bf5751c11525309027dff92 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 16 May 2017 13:23:15 +0200 Subject: [PATCH 797/816] Revert "Resolve bed adhesion type via limit-to-extruder" This reverts commit 396f4381dd13e34a144aa3c5d0a5a0569f6c9341. The comit introduced an infinite recursion. You cannot have both a limit_to_extruder and settable_per_extruder=false --- 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 a87cebdc28..ce964b0265 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3624,7 +3624,7 @@ "none": "None" }, "default_value": "brim", - "limit_to_extruder": "adhesion_extruder_nr", + "resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')", "settable_per_mesh": false, "settable_per_extruder": false }, From 286c4665fcd273388d0166e66ca047804c5e805d Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 16 May 2017 13:27:34 +0200 Subject: [PATCH 798/816] Resolve bed adhesion type to adhesion extruder (CURA-3738)" The cause for this change is that TPU says we want to print with brim but CPE wants to print with raft. In those cases the resolve function would choose the raft because that's safer. However if the default extruder happens to be the TPU one you then get a raft made of TPU which is flexible. That defeats the purpose of the raft, and causes the raft to warp, clog on the nozzle, destroy the world, etc. So there, I saved the world once more. --- 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 ce964b0265..cd28064e0f 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3624,7 +3624,7 @@ "none": "None" }, "default_value": "brim", - "resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')", + "resolve": "extruderValue(adhesion_extruder_nr, 'adhesion_type')", "settable_per_mesh": false, "settable_per_extruder": false }, From e921808cd6ba1d51ef54432453b03ed2953a43c8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 16 May 2017 14:13:20 +0200 Subject: [PATCH 799/816] We now try to remove the right container when removing extruder --- 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 0aceabca6c..7a8c1be8bc 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -458,7 +458,7 @@ class ExtruderManager(QObject): # \param machine_id The machine to remove the extruders for. def removeMachineExtruders(self, machine_id: str): for extruder in self.getMachineExtruders(machine_id): - ContainerRegistry.getInstance().removeContainer(extruder.user.getId()) + ContainerRegistry.getInstance().removeContainer(extruder.userChanges.getId()) ContainerRegistry.getInstance().removeContainer(extruder.getId()) ## Returns extruders for a specific machine. From 1b4564bdb1c085d0aaff42178af44c7d6ec3991e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 16 May 2017 14:37:47 +0200 Subject: [PATCH 800/816] Added missing typing import --- cura/Settings/ExtruderManager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 7a8c1be8bc..40d8fe7a19 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -20,6 +20,7 @@ from typing import Optional, List, TYPE_CHECKING, Union if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack + from cura.Settings.GlobalStack import GlobalStack ## Manages all existing extruder stacks. From 40d70b5f39373df41fd0fd49bc4d0fb6a4e7e52d Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 May 2017 14:37:12 +0200 Subject: [PATCH 801/816] Fix version upgrade for project loading CURA-3756 --- cura/CuraApplication.py | 9 ++++- cura/Settings/ContainerManager.py | 3 +- cura/Settings/CuraContainerRegistry.py | 4 +- cura/Settings/CuraStackBuilder.py | 6 +-- cura/Settings/ExtruderManager.py | 4 +- plugins/3MFReader/ThreeMFWorkspaceReader.py | 37 +++++++++++++++---- .../MachineSettingsAction.py | 4 +- .../UMOUpgradeSelection.py | 4 +- .../VersionUpgrade22to24/VersionUpgrade.py | 10 +++++ .../VersionUpgrade22to24/__init__.py | 6 +-- .../VersionUpgrade25to26.py | 15 ++++++-- .../VersionUpgrade25to26/__init__.py | 16 ++++---- 12 files changed, 84 insertions(+), 34 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 7e047cae0a..b85c1a2f54 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -99,6 +99,11 @@ if not MYPY: class CuraApplication(QtApplication): + # SettingVersion represents the set of settings available in the machine/extruder definitions. + # You need to make sure that this version number needs to be increased if there is any non-backwards-compatible + # changes of the settings. + SettingVersion = 1 + class ResourceTypes: QmlFiles = Resources.UserType + 1 Firmware = Resources.UserType + 2 @@ -169,11 +174,11 @@ class CuraApplication(QtApplication): UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions( { - ("quality", InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"), + ("quality_changes", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"), ("machine_stack", ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"), ("extruder_train", ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"), ("preferences", Preferences.Version): (Resources.Preferences, "application/x-uranium-preferences"), - ("user", InstanceContainer.Version): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer") + ("user", InstanceContainer.Version * 1000000 + self.SettingVersion): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer") } ) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index dee468f069..ff7b2d8020 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -28,6 +28,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog +import cura.CuraApplication from cura.Settings.ExtruderManager import ExtruderManager catalog = i18nCatalog("cura") @@ -918,7 +919,7 @@ class ContainerManager(QObject): quality_changes.setDefinition(self._container_registry.findContainers(id = "fdmprinter")[0]) else: quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition)) - quality_changes.addMetaDataEntry("setting_version", quality_changes.getDefinition().getMetaDataEntry("setting_version", default = 0)) + quality_changes.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) return quality_changes diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 2943ed009d..7961e8db31 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -22,6 +22,8 @@ from . import GlobalStack from .ContainerManager import ContainerManager from .ExtruderManager import ExtruderManager +from cura.CuraApplication import CuraApplication + from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -43,7 +45,7 @@ class CuraContainerRegistry(ContainerRegistry): if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()): #Check against setting version of the definition. - required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version", default = 0)) + required_setting_version = CuraApplication.SettingVersion actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0)) if required_setting_version != actual_setting_version: Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version)) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 652425ba6a..17b461e2d2 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -9,9 +9,9 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from .GlobalStack import GlobalStack from .ExtruderStack import ExtruderStack -from .CuraContainerStack import CuraContainerStack from typing import Optional +import cura.CuraApplication ## Contains helper functions to create new machines. class CuraStackBuilder: @@ -76,7 +76,7 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("extruder", new_stack_id) - user_container.addMetaDataEntry("setting_version", machine_definition.getMetaDataEntry("setting_version", default = 0)) + user_container.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) user_container.setDefinition(machine_definition) stack.setUserChanges(user_container) @@ -125,7 +125,7 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("machine", new_stack_id) - user_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) + user_container.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) user_container.setDefinition(definition) stack.setUserChanges(user_container) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 40d8fe7a19..9e1e65c911 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -18,6 +18,8 @@ from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer from typing import Optional, List, TYPE_CHECKING, Union +import cura.CuraApplication + if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack @@ -363,7 +365,7 @@ class ExtruderManager(QObject): user_profile = InstanceContainer(extruder_stack_id + "_current_settings") # Add an empty user profile. user_profile.addMetaDataEntry("type", "user") user_profile.addMetaDataEntry("extruder", extruder_stack_id) - user_profile.addMetaDataEntry("setting_version", machine_definition.getMetaDataEntry("setting_version", default = 0)) + user_profile.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) user_profile.setDefinition(machine_definition) container_registry.addContainer(user_profile) container_stack.addContainer(user_profile) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index e1b65805c1..593591b5dc 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -46,6 +46,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._extruder_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(ExtruderStack).preferredSuffix self._global_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(GlobalStack).preferredSuffix + # Certain instance container types are ignored because we make the assumption that only we make those types + # of containers. They are: + # - quality + # - variant + self._ignored_instance_container_types = {"quality", "variant"} + self._resolve_strategies = {} self._id_mapping = {} @@ -183,6 +189,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): num_user_settings = 0 quality_changes_conflict = False definition_changes_conflict = False + for each_instance_container_file in instance_container_files: container_id = self._stripFileToId(each_instance_container_file) instance_container = InstanceContainer(container_id) @@ -208,14 +215,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if definition_changes: if definition_changes[0] != instance_container: definition_changes_conflict = True - elif container_type == "quality": - # If the quality name is not set (either by quality or changes, set it now) - # Quality changes should always override this (as they are "on top") - if quality_name == "": - quality_name = instance_container.getName() - quality_type = instance_container.getName() elif container_type == "user": num_user_settings += len(instance_container._instances) + elif container_type in self._ignored_instance_container_types: + # Ignore certain instance container types + Logger.log("w", "Ignoring instance container [%s] with type [%s]", container_id, container_type) + continue Job.yieldThread() @@ -417,13 +422,29 @@ class ThreeMFWorkspaceReader(WorkspaceReader): quality_and_definition_changes_instance_containers = [] for instance_container_file in instance_container_files: container_id = self._stripFileToId(instance_container_file) + serialized = archive.open(instance_container_file).read().decode("utf-8") + + # HACK! we ignore the "metadata/type = quality" instance containers! + parser = configparser.ConfigParser() + parser.read_string(serialized) + if not parser.has_option("metadata", "type"): + Logger.log("w", "Cannot find metadata/type in %s, ignoring it", instance_container_file) + continue + if parser.get("metadata", "type") == "quality": + continue + instance_container = InstanceContainer(container_id) # Deserialize InstanceContainer by converting read data from bytes to string - instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) + instance_container.deserialize(serialized) container_type = instance_container.getMetaDataEntry("type") Job.yieldThread() - if container_type == "user": + + if container_type in self._ignored_instance_container_types: + # Ignore certain instance container types + Logger.log("w", "Ignoring instance container [%s] with type [%s]", container_id, container_type) + continue + elif container_type == "user": # Check if quality changes already exists. user_containers = self._container_registry.findInstanceContainers(id = container_id) if not user_containers: diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index f09d1f2b1d..983b70d174 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -14,7 +14,7 @@ from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Logger import Logger -from cura.Settings.CuraContainerRegistry import CuraContainerRegistry +from cura.CuraApplication import CuraApplication from cura.Settings.ExtruderManager import ExtruderManager import UM.i18n @@ -99,7 +99,7 @@ class MachineSettingsAction(MachineAction): definition = container_stack.getBottom() definition_changes_container.setDefinition(definition) definition_changes_container.addMetaDataEntry("type", "definition_changes") - definition_changes_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) + definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) self._container_registry.addContainer(definition_changes_container) container_stack.definitionChanges = definition_changes_container diff --git a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py index d2c3b31359..02b1482719 100644 --- a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py +++ b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py @@ -11,7 +11,7 @@ from UM.Application import Application catalog = i18nCatalog("cura") import UM.Settings.InstanceContainer - +from cura.CuraApplication import CuraApplication ## The Ultimaker Original can have a few revisions & upgrades. This action helps with selecting them, so they are added # as a variant. @@ -49,7 +49,7 @@ class UMOUpgradeSelection(MachineAction): definition = global_container_stack.getBottom() definition_changes_container.setDefinition(definition) definition_changes_container.addMetaDataEntry("type", "definition_changes") - definition_changes_container.addMetaDataEntry("setting_version", definition.getMetaDataEntry("setting_version", default = 0)) + definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().addContainer(definition_changes_container) # Insert definition_changes between the definition and the variant diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index ab934210f6..9d508e553b 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -142,6 +142,16 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output) return [filename], [output.getvalue()] + def upgradeQuality(self, serialised, filename): + config = configparser.ConfigParser(interpolation = None) + config.read_string(serialised) # Read the input string as config file. + config.set("metadata", "type", "quality_changes") # Update metadata/type to quality_changes + config.set("general", "version", "2") # Just bump the version number. That is all we need for now. + + output = io.StringIO() + config.write(output) + return [filename], [output.getvalue()] + def getCfgVersion(self, serialised): parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py index 0df2c94b75..0ff121f35e 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py @@ -21,9 +21,9 @@ def getMetaData(): # From To Upgrade function ("machine_instance", 2000000): ("machine_stack", 3000000, upgrade.upgradeMachineInstance), ("extruder_train", 2000000): ("extruder_train", 3000000, upgrade.upgradeExtruderTrain), - ("preferences", 3000000): ("preferences", 4000000, upgrade.upgradePreferences) - - }, + ("preferences", 3000000): ("preferences", 4000000, upgrade.upgradePreferences), + ("quality", 2000000): ("quality_changes", 2000000, upgrade.upgradeQuality), + }, "sources": { "machine_stack": { "get_version": upgrade.getCfgVersion, diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index c61962d276..85f54dd654 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -5,6 +5,7 @@ import configparser #To parse the files we need to upgrade and write the new fil import io #To serialise configparser output to a string. from UM.VersionUpgrade import VersionUpgrade +from cura.CuraApplication import CuraApplication _removed_settings = { #Settings that were removed in 2.5. "start_layers_at_same_position", @@ -86,11 +87,17 @@ class VersionUpgrade25to26(VersionUpgrade): parser["values"][replacement] = parser["values"][replaced_setting] #Copy to replacement before removing the original! del replaced_setting - #Change the version number in the file. - if parser.has_section("general"): - parser["general"]["setting_version"] = "1" + for each_section in ("general", "metadata"): + if not parser.has_section(each_section): + parser.add_section(each_section) + + # Change the version number in the file. + parser["metadata"]["setting_version"] = str(CuraApplication.SettingVersion) + + # Update version + parser["general"]["version"] = "2" #Re-serialise the file. output = io.StringIO() parser.write(output) - return [filename], [output.getvalue()] \ No newline at end of file + return [filename], [output.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index 3aee161e3c..a24473f65d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -18,14 +18,16 @@ def getMetaData(): "api": 3 }, "version_upgrade": { - # From To Upgrade function - ("preferences", 4000000): ("preferences", 4000001, upgrade.upgradePreferences), - ("quality", 2000000): ("quality", 2000001, upgrade.upgradeInstanceContainer), - ("variant", 2000000): ("variant", 2000001, upgrade.upgradeInstanceContainer), #We can re-use upgradeContainerStack since there is nothing specific to quality, variant or user profiles being changed. - ("user", 2000000): ("user", 2000001, upgrade.upgradeInstanceContainer) + # From To Upgrade function + ("preferences", 4000000): ("preferences", 4000001, upgrade.upgradePreferences), + # NOTE: All the instance containers share the same general/version, so we have to update all of them + # if any is updated. + ("quality_changes", 2000000): ("quality_changes", 2000001, upgrade.upgradeInstanceContainer), + ("user", 2000000): ("user", 2000001, upgrade.upgradeInstanceContainer), + ("quality", 2000000): ("quality", 2000001, upgrade.upgradeInstanceContainer), }, "sources": { - "quality": { + "quality_changes": { "get_version": upgrade.getCfgVersion, "location": {"./quality"} }, @@ -36,7 +38,7 @@ def getMetaData(): "user": { "get_version": upgrade.getCfgVersion, "location": {"./user"} - } + }, } } From 1ad9ba6c95ec5e3be167b5d94a37c18579a7aa4c Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 13:45:32 +0200 Subject: [PATCH 802/816] Remove lower warnings from Jerk settings It's sometimes required to be extra careful, and the difference between 0 and 5 isn't that big that it would cause a great increase in print time. --- resources/definitions/fdmprinter.def.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index cd28064e0f..621feb2c70 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2555,7 +2555,6 @@ "default_value": 20, "value": "jerk_support_interface", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled') and extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", "limit_to_extruder": "support_roof_extruder_nr", @@ -2571,7 +2570,6 @@ "default_value": 20, "value": "jerk_support_interface", "minimum_value": "0.1", - "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "resolveOrValue('jerk_enabled') and extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", "limit_to_extruder": "support_bottom_extruder_nr", From a02ff8df5f284b65c8938a66596fd6f3b4bef61b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 13:47:44 +0200 Subject: [PATCH 803/816] Sort settings alphabetically Makes it easier to compare profiles. --- .../ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index b2abfff2e7..af5cbd432f 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -11,11 +11,11 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -support_infill_rate = 25 -support_interface_height = 0.8 +acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) +jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_standby_temperature = 100 prime_tower_enable = False speed_support_interface = =math.ceil(speed_support * 20 / 25) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) +support_infill_rate = 25 +support_interface_height = 0.8 support_xy_distance = =round(line_width * 1.5, 2) From 9b3568acaeae43b4f310c2f929fe0e494554a6ab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 13:51:28 +0200 Subject: [PATCH 804/816] Sort other PVA profiles as well Makes it easier to compare profiles and to find setting values by key. --- .../quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 8 ++++---- .../quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 8 ++++---- .../ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 767e321da0..f0b1b6116b 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -11,12 +11,12 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] +acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) +jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 -skin_overlap = 20 -support_interface_height = 0.8 prime_tower_enable = False +skin_overlap = 20 speed_support_interface = =math.ceil(speed_support * 20 / 25) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) +support_interface_height = 0.8 support_xy_distance = =round(line_width * 1.5, 2) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index f266a26ef0..70439e6404 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -11,12 +11,12 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] +acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) +jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 +prime_tower_enable = False skin_overlap = 15 support_interface_height = 0.8 -prime_tower_enable = False speed_support_interface = =math.ceil(speed_support * 20 / 25) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) -support_xy_distance = =round(line_width * 1.5, 2) +support_xy_distance = =round(line_width * 1.5, 2) \ No newline at end of file diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index f6bb460359..82cbe0a165 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -11,11 +11,11 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] +acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) +jerk_support_interface = =math.ceil(jerk_support * 1 / 5) +material_standby_temperature = 100 support_infill_rate = 25 support_interface_height = 0.8 -material_standby_temperature = 100 prime_tower_enable = False speed_support_interface = =math.ceil(speed_support * 20 / 25) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500 ) support_xy_distance = =round(line_width * 1.5, 2) From 8e3dff76abd3ae773d22372e69d4a9f7d5283dea Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 14:00:52 +0200 Subject: [PATCH 805/816] Set support X/Y distance for all PVA profiles This is an update from the materials team for our settings. --- .../quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 3 +-- .../quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 1 - resources/variants/ultimaker3_bb0.8.inst.cfg | 2 +- resources/variants/ultimaker3_bb04.inst.cfg | 2 +- 6 files changed, 3 insertions(+), 7 deletions(-) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index f0b1b6116b..80a8173621 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -19,4 +19,3 @@ prime_tower_enable = False skin_overlap = 20 speed_support_interface = =math.ceil(speed_support * 20 / 25) support_interface_height = 0.8 -support_xy_distance = =round(line_width * 1.5, 2) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 70439e6404..97c7008b79 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -18,5 +18,4 @@ material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 15 support_interface_height = 0.8 -speed_support_interface = =math.ceil(speed_support * 20 / 25) -support_xy_distance = =round(line_width * 1.5, 2) \ No newline at end of file +speed_support_interface = =math.ceil(speed_support * 20 / 25) \ No newline at end of file diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index af5cbd432f..4f32b3d460 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -18,4 +18,3 @@ prime_tower_enable = False speed_support_interface = =math.ceil(speed_support * 20 / 25) support_infill_rate = 25 support_interface_height = 0.8 -support_xy_distance = =round(line_width * 1.5, 2) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 82cbe0a165..87ab432269 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -18,4 +18,3 @@ support_infill_rate = 25 support_interface_height = 0.8 prime_tower_enable = False speed_support_interface = =math.ceil(speed_support * 20 / 25) -support_xy_distance = =round(line_width * 1.5, 2) diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index c0e09e808c..4ba2ca8422 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -75,7 +75,7 @@ support_line_width = =round(line_width * 0.4 / 0.35, 2) support_offset = 1.5 support_pattern = triangles support_use_towers = False -support_xy_distance = =wall_line_width_0 / 2 +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) support_xy_distance_overhang = =wall_line_width_0 / 4 support_z_distance = 0 switch_extruder_prime_speed = 15 diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index 654de8a986..f379a8d1e2 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -36,5 +36,5 @@ support_interface_skip_height = =layer_height support_join_distance = 3 support_line_width = =round(line_width * 0.4 / 0.35, 2) support_offset = 3 -support_xy_distance = =wall_line_width_0 * 3 +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) support_xy_distance_overhang = =wall_line_width_0 / 2 From 93c249280e71dc5c0fe8e82e9daee512b3a7aab7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 14:03:15 +0200 Subject: [PATCH 806/816] Copy UM3 variants to UM3E They should be kept in sync for now. --- .../ultimaker3_extended_bb0.8.inst.cfg | 16 ++++++++--- .../ultimaker3_extended_bb04.inst.cfg | 28 +++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index f88dc818c8..2e6292ed08 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -11,7 +11,9 @@ setting_version = 1 [values] acceleration_enabled = True acceleration_print = 4000 -acceleration_support_interface = =math.ceil(acceleration_topbottom * 100 / 500) +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) brim_width = 3 cool_fan_speed = 50 cool_min_speed = 5 @@ -21,7 +23,9 @@ infill_pattern = triangles infill_wipe_dist = 0 jerk_enabled = True jerk_print = 25 -jerk_support_interface = =math.ceil(jerk_topbottom * 1 / 5) +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) layer_height = 0.2 machine_min_cool_heat_time_window = 15 machine_nozzle_heat_up_speed = 1.5 @@ -54,20 +58,24 @@ retraction_prime_speed = 15 skin_overlap = 5 speed_layer_0 = 20 speed_print = 35 -speed_support_interface = =math.ceil(speed_topbottom * 15 / 20) +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) support_angle = 60 support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag support_bottom_stair_step_height = =layer_height support_infill_rate = 25 support_interface_enable = True support_interface_height = =layer_height * 5 +support_interface_skip_height = =layer_height support_join_distance = 3 support_line_width = =round(line_width * 0.4 / 0.35, 2) support_offset = 1.5 support_pattern = triangles support_use_towers = False -support_xy_distance = =wall_line_width_0 / 2 +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) support_xy_distance_overhang = =wall_line_width_0 / 4 support_z_distance = 0 switch_extruder_prime_speed = 15 diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index 229bde1916..abeaf69db2 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -9,20 +9,32 @@ type = variant setting_version = 1 [values] -cool_fan_speed_max = 100 +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) +cool_fan_speed_max = =cool_fan_speed +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) machine_nozzle_heat_up_speed = 1.5 -machine_nozzle_size = 0.4 -material_bed_temperature = 60 material_print_temperature = 215 -raft_acceleration = =acceleration_layer_0 -raft_jerk = =jerk_layer_0 +raft_base_speed = 20 +raft_interface_speed = 20 +raft_speed = 25 retraction_extrusion_window = =retraction_amount +speed_layer_0 = 20 +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) speed_wall_0 = =math.ceil(speed_wall * 25 / 30) support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag support_bottom_stair_step_height = =layer_height +support_infill_rate = 25 support_interface_enable = True +support_interface_skip_height = =layer_height +support_join_distance = 3 support_line_width = =round(line_width * 0.4 / 0.35, 2) -support_pattern = triangles -support_use_towers = False -support_xy_distance = =wall_line_width_0 * 3 +support_offset = 3 +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) support_xy_distance_overhang = =wall_line_width_0 / 2 From 50bda1c9dd9de04cd75fb59dc7da0f209e200d8d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 May 2017 14:37:41 +0200 Subject: [PATCH 807/816] Remove overrides of support interface speed/accel/jerk This is a settings updates from the Materials team. --- .../quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 3 --- .../quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 3 --- .../quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 3 --- .../quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 5 +---- 4 files changed, 1 insertion(+), 13 deletions(-) diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 80a8173621..43bb096ebf 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -11,11 +11,8 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 20 -speed_support_interface = =math.ceil(speed_support * 20 / 25) support_interface_height = 0.8 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 97c7008b79..c78833b867 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -11,11 +11,8 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 15 support_interface_height = 0.8 -speed_support_interface = =math.ceil(speed_support * 20 / 25) \ No newline at end of file diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index 4f32b3d460..5bc96c8f08 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -11,10 +11,7 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_standby_temperature = 100 prime_tower_enable = False -speed_support_interface = =math.ceil(speed_support * 20 / 25) support_infill_rate = 25 support_interface_height = 0.8 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 87ab432269..7896b5a57a 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -11,10 +11,7 @@ material = generic_pva_ultimaker3_BB_0.4 setting_version = 1 [values] -acceleration_support_interface = =math.ceil(acceleration_support * 100 / 500) -jerk_support_interface = =math.ceil(jerk_support * 1 / 5) material_standby_temperature = 100 +prime_tower_enable = False support_infill_rate = 25 support_interface_height = 0.8 -prime_tower_enable = False -speed_support_interface = =math.ceil(speed_support * 20 / 25) From 121ebd79cf5e6a1ec9de7c4589545c386cf7d0da Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 May 2017 14:54:57 +0200 Subject: [PATCH 808/816] Fix circular import problem caused by moving SettingVersion into CuraApplication CURA-3756 --- cura/Settings/ContainerManager.py | 4 ++-- cura/Settings/CuraStackBuilder.py | 7 ++++--- cura/Settings/ExtruderManager.py | 5 ++--- tests/Settings/TestCuraContainerRegistry.py | 11 +++++++---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index ff7b2d8020..b5c76f1f17 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -28,7 +28,6 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog -import cura.CuraApplication from cura.Settings.ExtruderManager import ExtruderManager catalog = i18nCatalog("cura") @@ -919,7 +918,8 @@ class ContainerManager(QObject): quality_changes.setDefinition(self._container_registry.findContainers(id = "fdmprinter")[0]) else: quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition)) - quality_changes.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) + from cura.CuraApplication import CuraApplication + quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) return quality_changes diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 17b461e2d2..b84b1f4634 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -11,7 +11,6 @@ from .GlobalStack import GlobalStack from .ExtruderStack import ExtruderStack from typing import Optional -import cura.CuraApplication ## Contains helper functions to create new machines. class CuraStackBuilder: @@ -76,7 +75,8 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("extruder", new_stack_id) - user_container.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) + from cura.CuraApplication import CuraApplication + user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) user_container.setDefinition(machine_definition) stack.setUserChanges(user_container) @@ -125,7 +125,8 @@ class CuraStackBuilder: user_container = InstanceContainer(new_stack_id + "_user") user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("machine", new_stack_id) - user_container.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) + from cura.CuraApplication import CuraApplication + user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) user_container.setDefinition(definition) stack.setUserChanges(user_container) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 9e1e65c911..10934c2d31 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -18,8 +18,6 @@ from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer from typing import Optional, List, TYPE_CHECKING, Union -import cura.CuraApplication - if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack @@ -365,7 +363,8 @@ class ExtruderManager(QObject): user_profile = InstanceContainer(extruder_stack_id + "_current_settings") # Add an empty user profile. user_profile.addMetaDataEntry("type", "user") user_profile.addMetaDataEntry("extruder", extruder_stack_id) - user_profile.addMetaDataEntry("setting_version", cura.CuraApplication.CuraApplication.SettingVersion) + from cura.CuraApplication import CuraApplication + user_profile.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) user_profile.setDefinition(machine_definition) container_registry.addContainer(user_profile) container_stack.addContainer(user_profile) diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index ad79f74dd4..11e772c3b7 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -68,11 +68,12 @@ def test_addContainerGlobalStack(container_registry, definition_container): assert type(mock_super_add_container.call_args_list[0][0][0]) == GlobalStack def test_addContainerGoodSettingVersion(container_registry, definition_container): - definition_container.getMetaData()["setting_version"] = 3 + from cura.CuraApplication import CuraApplication + definition_container.getMetaData()["setting_version"] = CuraApplication.SettingVersion container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") - instance.addMetaDataEntry("setting_version", 3) + instance.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) instance.setDefinition(definition_container) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered. @@ -82,7 +83,8 @@ def test_addContainerGoodSettingVersion(container_registry, definition_container mock_super_add_container.assert_called_once_with(instance) #The instance must have been registered now. def test_addContainerNoSettingVersion(container_registry, definition_container): - definition_container.getMetaData()["setting_version"] = 3 + from cura.CuraApplication import CuraApplication + definition_container.getMetaData()["setting_version"] = CuraApplication.SettingVersion container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") @@ -96,7 +98,8 @@ def test_addContainerNoSettingVersion(container_registry, definition_container): mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version is interpreted as 0! def test_addContainerBadSettingVersion(container_registry, definition_container): - definition_container.getMetaData()["setting_version"] = 3 + from cura.CuraApplication import CuraApplication + definition_container.getMetaData()["setting_version"] = CuraApplication.SettingVersion container_registry.addContainer(definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") From 77843107f6a068cfad95a4525559ccbaba0833ed Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 16 May 2017 17:18:57 +0200 Subject: [PATCH 809/816] Revert "Removed no longer used profiles" This reverts commit 704c6e5d8fefcd50815d339843f9c9f9521fee23. --- .../um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg | 14 ++++++++++++++ ...8_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100755 resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg create mode 100755 resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg new file mode 100755 index 0000000000..84e5c6d3d3 --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_tpu_ultimaker3_BB_0.8 +weight = 0 +supported = False +setting_version = 1 + +[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg new file mode 100755 index 0000000000..222a4935d5 --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_tpu_ultimaker3_BB_0.8 +weight = 0 +supported = False +setting_version = 1 + +[values] From f8b29c4d1f29cee03cdb54a967d106175dc3bd95 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 16 May 2017 17:19:41 +0200 Subject: [PATCH 810/816] Delete the right not supported profiles --- .../um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg | 14 -------------- ...8_TPU_Not_Supported_Superdraft_Quality.inst.cfg | 14 -------------- 2 files changed, 28 deletions(-) delete mode 100755 resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg delete mode 100755 resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg deleted file mode 100755 index b7ddab1a97..0000000000 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Quality.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = normal -material = generic_tpu_ultimaker3_AA_0.8 -supported = False -setting_version = 1 - -[values] diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg deleted file mode 100755 index 0693986d1e..0000000000 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Not_Supported_Superdraft_Quality.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 2 -name = Not Supported -definition = ultimaker3 - -[metadata] -weight = 0 -type = quality -quality_type = superdraft -material = generic_tpu_ultimaker3_AA_0.8 -supported = False -setting_version = 1 - -[values] From 616ee34be5e864b57382cf21db08f697ff5df9fa Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 16 May 2017 17:43:05 +0200 Subject: [PATCH 811/816] Simplify SettingExtruder setting item This way it properly updates when a parent setting changes. Contributes to CURA-3804 --- resources/qml/Settings/SettingExtruder.qml | 114 +++++++-------------- 1 file changed, 36 insertions(+), 78 deletions(-) diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index cbe1d039bd..92d2da31e8 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -15,22 +15,19 @@ SettingItem contents: ComboBox { id: control + anchors.fill: parent - model: Cura.ExtrudersModel - { - id: extruders_model - onModelChanged: control.color = extruders_model.getItem(control.currentIndex).color - } - property string color: - { - var model_color = extruders_model.getItem(control.currentIndex).color; - return (model_color) ? model_color : ""; - } + model: Cura.ExtrudersModel { } textRole: "name" - anchors.fill: parent - onCurrentIndexChanged: updateCurrentColor(); + onActivated: + { + forceActiveFocus(); + propertyProvider.setPropertyValue("value", model.getItem(index).index); + } + + currentIndex: propertyProvider.properties.value MouseArea { @@ -59,7 +56,19 @@ SettingItem } } border.width: UM.Theme.getSize("default_lining").width - border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control.hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") + border.color: + { + if(!enabled) + { + return UM.Theme.getColor("setting_control_disabled_border"); + } + if(control.hovered || base.activeFocus) + { + UM.Theme.getColor("setting_control_border_highlight") + } + + return UM.Theme.getColor("setting_control_border") + } } label: Item { @@ -68,35 +77,36 @@ SettingItem id: swatch height: UM.Theme.getSize("setting_control").height / 2 width: height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width + anchors.verticalCenter: parent.verticalCenter - color: control.color border.width: UM.Theme.getSize("default_lining").width - border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : UM.Theme.getColor("setting_control_border") + border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") + + color: control.currentText != "" ? control.model.getItem(control.currentIndex).color : "" } Label { - anchors.left: swatch.right - anchors.leftMargin: UM.Theme.getSize("default_lining").width - anchors.right: downArrow.left - anchors.rightMargin: UM.Theme.getSize("default_lining").width - anchors.verticalCenter: parent.verticalCenter + anchors + { + left: swatch.right; + right: arrow.left; + verticalCenter: parent.verticalCenter + margins: UM.Theme.getSize("default_lining").width + } + width: parent.width - swatch.width; text: control.currentText font: UM.Theme.getFont("default") - color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") + color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } - UM.RecolorImage { - id: downArrow + id: arrow anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 anchors.verticalCenter: parent.verticalCenter source: UM.Theme.getIcon("arrow_bottom") @@ -109,57 +119,5 @@ SettingItem } } } - - onActivated: - { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", extruders_model.getItem(index).index); - control.color = extruders_model.getItem(index).color; - } - - onModelChanged: updateCurrentIndex(); - - Binding - { - target: control - property: "currentIndex" - value: - { - for(var i = 0; i < extruders_model.rowCount(); ++i) - { - if(extruders_model.getItem(i).index == propertyProvider.properties.value) - { - return i; - } - } - return -1; - } - } - - // In some cases we want to update the current color without updating the currentIndex, so it's a seperate function. - function updateCurrentColor() - { - for(var i = 0; i < extruders_model.rowCount(); ++i) - { - if(extruders_model.getItem(i).index == currentIndex) - { - control.color = extruders_model.getItem(i).color; - return; - } - } - } - - function updateCurrentIndex() - { - for(var i = 0; i < extruders_model.rowCount(); ++i) - { - if(extruders_model.getItem(i).index == propertyProvider.properties.value) - { - control.currentIndex = i; - return; - } - } - currentIndex = -1; - } } } From 69e4afffc89ac26bbad0e87367641acf42516b36 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 16 May 2017 17:42:21 +0200 Subject: [PATCH 812/816] fix: heightening of shadow for raft didn't take layer_0_z_overlap into account (CURA-3819) --- cura/BuildVolume.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 164cd00fde..c87e07a974 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -433,7 +433,8 @@ class BuildVolume(SceneNode): self._global_container_stack.getProperty("raft_interface_thickness", "value") + self._global_container_stack.getProperty("raft_surface_layers", "value") * self._global_container_stack.getProperty("raft_surface_thickness", "value") + - self._global_container_stack.getProperty("raft_airgap", "value")) + self._global_container_stack.getProperty("raft_airgap", "value") - + self._global_container_stack.getProperty("layer_0_z_overlap", "value")) # Rounding errors do not matter, we check if raft_thickness has changed at all if old_raft_thickness != self._raft_thickness: @@ -951,7 +952,7 @@ class BuildVolume(SceneNode): return max(min(value, max_value), min_value) _skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist"] - _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap"] + _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z", "prime_blob_enable"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] From 32c2418957ca8257cc8465733f76566202f5b2ff Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 16 May 2017 17:44:46 +0200 Subject: [PATCH 813/816] cleanup: remove raft height stuff from ConvexHullDecorator (CURA-3819) --- cura/ConvexHullDecorator.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/ConvexHullDecorator.py b/cura/ConvexHullDecorator.py index 404342fb78..44150cb76f 100644 --- a/cura/ConvexHullDecorator.py +++ b/cura/ConvexHullDecorator.py @@ -328,8 +328,7 @@ class ConvexHullDecorator(SceneNodeDecorator): return self.__isDescendant(root, node.getParent()) _affected_settings = [ - "adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", - "raft_surface_thickness", "raft_airgap", "raft_margin", "print_sequence", + "adhesion_type", "raft_margin", "print_sequence", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "skirt_distance", "brim_line_count"] ## Settings that change the convex hull. From 191dfdcb33061d8211eb25e8033bf12b9ddcc120 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 May 2017 16:05:44 +0200 Subject: [PATCH 814/816] Save Cura version to project files CURA-3822 --- plugins/3MFWriter/ThreeMFWorkspaceWriter.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index 0960d89076..326cd87845 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -7,6 +7,7 @@ from cura.Settings.ExtruderManager import ExtruderManager import zipfile from io import StringIO import copy +import configparser class ThreeMFWorkspaceWriter(WorkspaceWriter): @@ -48,6 +49,16 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): Preferences.getInstance().writeToFile(preferences_string) archive.writestr(preferences_file, preferences_string.getvalue()) + # Save Cura version + version_file = zipfile.ZipInfo("Cura/version.ini") + version_config_parser = configparser.ConfigParser() + version_config_parser.add_section("versions") + version_config_parser.set("versions", "cura_version", Application.getStaticVersion()) + + version_file_string = StringIO() + version_config_parser.write(version_file_string) + archive.writestr(version_file, version_file_string.getvalue()) + # Close the archive & reset states. archive.close() mesh_writer.setStoreArchive(False) From ee831928ba813e1ea10a7009e52ded50c2b85cf9 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 17 May 2017 10:20:12 +0200 Subject: [PATCH 815/816] Fix overriding extruder stacks for project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 593591b5dc..7e33c460b6 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -592,8 +592,27 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if container_stacks: # this container stack already exists, try to resolve stack = container_stacks[0] + if self._resolve_strategies["machine"] == "override": - pass # do nothing + # NOTE: This is the same code as those in the lower part + global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) + # deserialize new extruder stack over the current ones + if global_stacks: + old_extruder_stack_id = global_stacks[0].extruders[index].getId() + # HACK delete file + self._container_registry._deleteFiles(global_stacks[0].extruders[index]) + global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + # HACK + global_stacks[0]._extruders = global_stacks[0]._extruders[:2] + # HACK update cache + del self._container_registry._id_container_cache[old_extruder_stack_id] + new_extruder_stack_id = global_stacks[0].extruders[index].getId() + self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] + + stack = global_stacks[0].extruders[index] + else: + Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) + elif self._resolve_strategies["machine"] == "new": # create a new extruder stack from this one new_id = self.getNewId(container_id) From 8c2fe0951d6ab0e44e13416cbcf9709371888e2c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 17 May 2017 10:24:49 +0200 Subject: [PATCH 816/816] Refactor project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 70 ++++++++++++--------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 7e33c460b6..c0b8e73a8c 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -311,6 +311,36 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return WorkspaceReader.PreReadResult.accepted + ## Overrides an ExtruderStack in the given GlobalStack and returns the new ExtruderStack. + def _overrideExtruderStack(self, global_stack, extruder_index, extruder_file_content): + extruder_stack = global_stack.extruders[extruder_index] + machine_extruder_count = len(global_stack.extruders) + + old_extruder_stack_id = extruder_stack.getId() + + # HACK: There are two cases: + # - the new ExtruderStack has the same ID as the one we are overriding + # - they don't have the same ID + # In the second case, directly overriding the existing ExtruderStack will leave the old stack file + # in the Cura directory, and this will cause a problem when we restart Cura. So, we always delete + # the existing file first. + self._container_registry._deleteFiles(extruder_stack) + + # override the given extruder stack + extruder_stack.deserialize(extruder_file_content) + # HACK: The deserialize() of ExtruderStack will add itself to the GlobalStack, which is redundant here. + # So we need to remove the new entries in the GlobalStack. + global_stack._extruders = global_stack._extruders[:machine_extruder_count] + + # HACK: clean and fill the container query cache again + if old_extruder_stack_id in self._container_registry._id_container_cache: + del self._container_registry._id_container_cache[old_extruder_stack_id] + new_extruder_stack_id = extruder_stack.getId() + self._container_registry._id_container_cache[new_extruder_stack_id] = extruder_stack + + # return the new ExtruderStack + return extruder_stack + ## Read the project file # Add all the definitions / materials / quality changes that do not exist yet. Then it loads # all the stacks into the container registry. In some cases it will reuse the container for the global stack. @@ -478,12 +508,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Check if quality changes already exists. changes_containers = self._container_registry.findInstanceContainers(id = container_id) if not changes_containers: + # no existing containers with the same ID, so we can safely add the new one containers_to_add.append(instance_container) else: + # we have found existing container with the same ID, so we need to resolve according to the + # selected strategy. if self._resolve_strategies[container_type] == "override": instance_container = changes_containers[0] instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) instance_container.setDirty(True) + elif self._resolve_strategies[container_type] == "new": # TODO: how should we handle the case "new" for quality_changes and definition_changes? @@ -587,6 +621,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): try: for index, extruder_stack_file in enumerate(extruder_stack_files): container_id = self._stripFileToId(extruder_stack_file) + extruder_file_content = archive.open(extruder_stack_file, "r").read().decode("utf-8") container_stacks = self._container_registry.findContainerStacks(id = container_id) if container_stacks: @@ -595,23 +630,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if self._resolve_strategies["machine"] == "override": # NOTE: This is the same code as those in the lower part - global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) # deserialize new extruder stack over the current ones - if global_stacks: - old_extruder_stack_id = global_stacks[0].extruders[index].getId() - # HACK delete file - self._container_registry._deleteFiles(global_stacks[0].extruders[index]) - global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - # HACK - global_stacks[0]._extruders = global_stacks[0]._extruders[:2] - # HACK update cache - del self._container_registry._id_container_cache[old_extruder_stack_id] - new_extruder_stack_id = global_stacks[0].extruders[index].getId() - self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] - - stack = global_stacks[0].extruders[index] - else: - Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) + stack = self._overrideExtruderStack(global_stack, index, extruder_file_content) elif self._resolve_strategies["machine"] == "new": # create a new extruder stack from this one @@ -626,24 +646,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_stacks_added.append(stack) containers_added.append(stack) else: + # No extruder stack with the same ID can be found if self._resolve_strategies["machine"] == "override": - global_stacks = self._container_registry.findContainerStacks(id = global_stack_id_original) # deserialize new extruder stack over the current ones - if global_stacks: - old_extruder_stack_id = global_stacks[0].extruders[index].getId() - # HACK delete file - self._container_registry._deleteFiles(global_stacks[0].extruders[index]) - global_stacks[0].extruders[index].deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) - # HACK - global_stacks[0]._extruders = global_stacks[0]._extruders[:2] - # HACK update cache - del self._container_registry._id_container_cache[old_extruder_stack_id] - new_extruder_stack_id = global_stacks[0].extruders[index].getId() - self._container_registry._id_container_cache[new_extruder_stack_id] = global_stacks[0].extruders[index] + stack = self._overrideExtruderStack(global_stack, index, extruder_file_content) - stack = global_stacks[0].extruders[index] - else: - Logger.log("w", "Could not find global stack, while I expected it: %s" % global_stack_id_original) elif self._resolve_strategies["machine"] == "new": # container not found, create a new one stack = ExtruderStack(container_id) @@ -657,6 +664,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if global_stack_need_rename: if stack.getMetaDataEntry("machine"): stack.setMetaDataEntry("machine", global_stack_id_new) + extruder_stacks.append(stack) except: Logger.logException("w", "We failed to serialize the stack. Trying to clean up.")

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 Date: Fri, 5 May 2017 14:56:45 +0200 Subject: [PATCH 569/816] Convert Prusa i3 platform to binary STL Smaller file size, and apparently there were some syntax errors in the original ASCII STL file as far as numpy-stl was concerned. --- resources/meshes/prusai3_platform.stl | Bin 430587 -> 134284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/meshes/prusai3_platform.stl b/resources/meshes/prusai3_platform.stl index 2e4b650637fce4d112f163cae874ad7db960fbda..d6e2b92a8e2c9b92dfa3e847dd99e179453a88e9 100644 GIT binary patch literal 134284 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 J+u#4~{{eLAe{cW* From df0a971326ce8589ce1fdd07f5ace03d68c4f875 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 May 2017 16:59:35 +0200 Subject: [PATCH 570/816] Improve tooltip wording for gradual infill button Contributes to issue CURA-3732. --- resources/qml/SidebarSimple.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index eaa303819f..7dd7c9e25d 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -222,7 +222,7 @@ Item percentage: 90, steps: 5, infill_layer_height: 1.5, - text: catalog.i18nc("@label", "This will gradually fill your model towards the top"), + text: catalog.i18nc("@label", "This will gradually increase the amount of infill towards the top"), icon: "gradual" }) } From ad1b1e04555f9b563968ad866ace615a82c00a27 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 May 2017 17:13:32 +0200 Subject: [PATCH 571/816] Detect whether the current infill is gradual And highlight the correct infill button in that case. Contributes to issue CURA-3732. --- resources/qml/SidebarSimple.qml | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 7dd7c9e25d..683b5eb716 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -64,10 +64,11 @@ Item id: infillListView property int activeIndex: { - var density = parseInt(infillDensity.properties.value) + var density = parseInt(infillDensity.properties.value); + var steps = parseInt(infillSteps.properties.value); for(var i = 0; i < infillModel.count; ++i) { - if(density > infillModel.get(i).percentageMin && density <= infillModel.get(i).percentageMax ) + if(density > infillModel.get(i).percentageMin && density <= infillModel.get(i).percentageMax && steps > infillModel.get(i).stepsMin && steps <= infillModel.get(i).stepsMax) { return i; } @@ -187,6 +188,8 @@ Item steps: 0, percentageMin: -1, percentageMax: 0, + stepsMin: -1, + stepsMax: 0, text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength"), icon: "hollow" }) @@ -196,6 +199,8 @@ Item steps: 0, percentageMin: 0, percentageMax: 30, + stepsMin: -1, + stepsMax: 0, text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength"), icon: "sparse" }) @@ -205,6 +210,8 @@ Item steps: 0, percentageMin: 30, percentageMax: 70, + stepsMin: -1, + stepsMax: 0, text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength"), icon: "dense" }) @@ -213,7 +220,9 @@ Item percentage: 100, steps: 0, percentageMin: 70, - percentageMax: 100, + percentageMax: 9999999999, + stepsMin: -1, + stepsMax: 0, text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid"), icon: "solid" }) @@ -221,6 +230,10 @@ Item name: catalog.i18nc("@label", "Gradual"), percentage: 90, steps: 5, + percentageMin: 0, + percentageMax: 9999999999, + stepsMin: 0, + stepsMax: 9999999999, infill_layer_height: 1.5, text: catalog.i18nc("@label", "This will gradually increase the amount of infill towards the top"), icon: "gradual" @@ -511,6 +524,16 @@ Item storeIndex: 0 } + UM.SettingPropertyProvider + { + id: infillSteps + + containerStackId: Cura.MachineManager.activeStackId + key: "gradual_infill_steps" + watchedProperties: [ "value" ] + storeIndex: 0 + } + UM.SettingPropertyProvider { id: platformAdhesionType From fc1a5e89c3621e98d6267e094d833d95b92c9861 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 May 2017 17:16:18 +0200 Subject: [PATCH 572/816] Change gradual infill upon clicking infill buttons It sets the gradual infill to the value stored in the listmodel. Contributes to issue CURA-3732. --- resources/qml/SidebarSimple.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 683b5eb716..8066e2665a 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -152,6 +152,7 @@ Item if (infillListView.activeIndex != index) { infillDensity.setPropertyValue("value", model.percentage) + infillSteps.setPropertyValue("value", model.steps) } } onEntered: From 6b74b0d49998d8fee7c00f2996b77c4ad4b46f55 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 May 2017 17:25:34 +0200 Subject: [PATCH 573/816] Set default gradual infill step height to 1.5mm All of the profiles currently in Cura that set the gradual infill steps also set the step height (to 3 to 5 layer heights). I'd have chosen 4 layer heights as default based on that, but our material experts say that 1.5mm is about right for most models. Contributes to issue CURA-3732. --- 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 99cfede396..ecebee13fc 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1346,7 +1346,7 @@ "description": "The height of infill of a given density before switching to half the density.", "unit": "mm", "type": "float", - "default_value": 5.0, + "default_value": 1.5, "minimum_value": "0.0001", "minimum_value_warning": "3 * resolveOrValue('layer_height')", "maximum_value_warning": "100", From d0e4554b5954b75decb8565d6ce2a553d594bac2 Mon Sep 17 00:00:00 2001 From: Shaische Date: Sat, 6 May 2017 18:24:35 -0400 Subject: [PATCH 574/816] Update delta_go.def.json --- resources/definitions/delta_go.def.json | 28 +++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/resources/definitions/delta_go.def.json b/resources/definitions/delta_go.def.json index b341a17656..ccb659f973 100644 --- a/resources/definitions/delta_go.def.json +++ b/resources/definitions/delta_go.def.json @@ -14,23 +14,29 @@ }, "overrides": { "machine_name": { "default_value": "Delta Go" }, - "material_diameter": { "default_value": 1.75 }, + "material_diameter": { "default_value": 1.75 }, + "default_material_print_temperature": { "default_value": 210 }, "speed_travel": { "default_value": 150 }, - "prime_tower_size": { "default_value": 8.66 }, - "infill_sparse_density": { "default_value": 10 }, + "prime_tower_size": { "default_value": 8.66 }, + "infill_sparse_density": { "default_value": 10 }, "speed_wall_x": { "default_value": 30 }, "speed_wall_0": { "default_value": 30 }, "speed_topbottom": { "default_value": 20 }, - "layer_height": { "default_value": 0.2 }, + "layer_height": { "default_value": 0.15 }, "speed_print": { "default_value": 30 }, - "machine_heated_bed": { "default_value": false }, - "machine_center_is_zero": { "default_value": true }, - "machine_height": { "default_value": 127 }, - "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_heated_bed": { "default_value": false }, + "machine_center_is_zero": { "default_value": true }, + "machine_height": { "default_value": 154 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_depth": { "default_value": 115 }, "machine_width": { "default_value": 115 }, - "retraction_amount": { "default_value": 4.2 }, - "retraction_speed": { "default_value": 400 }, - "machine_shape": { "default_value": "elliptic"} + "raft_airgap": { "default_value": 0.15 }, + "retraction_hop_enabled": { "value": "True" }, + "retraction_amount": { "default_value": 4.1 }, + "retraction_speed": { "default_value": 500 }, + "retraction_hop": { "value": "0.2" }, + "retraction_hop_only_when_collides": { "value": "True" }, + "brim_width": { "value": "5" }, + "machine_shape": { "default_value": "elliptic"} } } From 319f5f73fe5b72ba4c55452415280dd5926ed26f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 08:12:46 +0200 Subject: [PATCH 575/816] Rename "prime_enable" to "prime_poop_enable" CURA-3634 --- 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 5e9e692851..b800d4811b 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3290,12 +3290,12 @@ "description": "Adhesion", "children": { - "prime_enable": + "prime_poop_enable": { "label": "Enable Prime", "description": "Whether to prime the filament before printing.", "type": "bool", - "resolve": "any(extruderValues('prime_enable'))", + "resolve": "any(extruderValues('prime_poop_enable'))", "default_value": true, "settable_per_mesh": false, "settable_per_extruder": true From a039f9552ebe7d33da661b71de5f0cd328b4aa6c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 09:47:04 +0200 Subject: [PATCH 576/816] Trigger extruderTabsCount update when MachineSettings dialog shows CURA-3755 --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index a717ee6fa6..4511665c58 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -29,7 +29,11 @@ Cura.MachineAction repeat: false interval: 1 - onTriggered: base.extruderTabsCount = (machineExtruderCountProvider.properties.value > 1) ? parseInt(machineExtruderCountProvider.properties.value) : 0 + onTriggered: + { + var extruderCount = parseInt(machineExtruderCountProvider.properties.value); + base.extruderTabsCount = (extruderCount > 1) ? extruderCount : 0; + } } Connections @@ -42,6 +46,7 @@ Cura.MachineAction onAccepted: manager.onFinishAction() onRejected: manager.onFinishAction() onClosing: manager.onFinishAction() + onVisibilityChanged: extruderTabsCountDelay.start() } anchors.fill: parent; From 887a9d377a477db0cf11e37e3bbcfc17eaedf7ef Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 10:13:55 +0200 Subject: [PATCH 577/816] Use setting name "Prime Blob" CURA-3634 --- 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 b800d4811b..96d4619a3b 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3292,8 +3292,8 @@ { "prime_poop_enable": { - "label": "Enable Prime", - "description": "Whether to prime the filament before printing.", + "label": "Enable Prime Blob", + "description": "Whether to prime the filament with a blob before printing.", "type": "bool", "resolve": "any(extruderValues('prime_poop_enable'))", "default_value": true, From f3c2df3ab48475e46c453dc5fefe5f632abe515c Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 10:22:41 +0200 Subject: [PATCH 578/816] Properly return a string when creating/duplicating a material --- cura/Settings/ContainerManager.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index e9b3518fa3..6c0d1948b2 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -672,6 +672,8 @@ class ContainerManager(QObject): return new_change_instances + ## Create a duplicate of a material, which has the same GUID and base_file metadata + # \return \type{str} the id of the newly created container. @pyqtSlot(str, result = str) def duplicateMaterial(self, material_id: str) -> str: containers = self._container_registry.findInstanceContainers(id=material_id) @@ -694,8 +696,10 @@ class ContainerManager(QObject): duplicated_container.deserialize(f.read()) duplicated_container.setDirty(True) self._container_registry.addContainer(duplicated_container) + return new_id - # Create a new material by cloning Generic PLA and setting the GUID to something unqiue + ## Create a new material by cloning Generic PLA and setting the GUID to something unqiue + # \return \type{str} the id of the newly created container. @pyqtSlot(result = str) def createMaterial(self) -> str: # Ensure all settings are saved. @@ -722,6 +726,7 @@ class ContainerManager(QObject): duplicated_container.setName(catalog.i18nc("@label", "Custom Material")) self._container_registry.addContainer(duplicated_container) + return new_id @pyqtSlot(str, result = "QStringList") def getLinkedMaterials(self, material_id: str): From 63eceda75e309adee6ce513986ff1c3153e1be18 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 10:28:31 +0200 Subject: [PATCH 579/816] Added handling for if definition for error handling was not found CURA-3772 --- plugins/CuraEngineBackend/CuraEngineBackend.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index f32993fd20..6e1dcedeae 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -275,7 +275,11 @@ class CuraEngineBackend(QObject, Backend): error_labels = set() definition_container = self._global_container_stack.getBottom() for key in error_keys: - error_labels.add(definition_container.findDefinitions(key = key)[0].label) + definitions = definition_container.findDefinitions(key = key) + if definitions: + error_labels.add(definitions[0].label) + else: + Logger.log("w", "Unable to find definition for key: {key}".format(key = key)) error_labels = ", ".join(error_labels) self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}".format(error_labels))) From 00f3cf409b1e2395d988611eec257826bc8f87fd Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 10:38:25 +0200 Subject: [PATCH 580/816] Select newly created material --- resources/qml/Preferences/MaterialsPage.qml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 7d7b647969..24415a5fc9 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -91,9 +91,11 @@ UM.ManagementPage } activeId: Cura.MachineManager.activeMaterialId - activeIndex: { + activeIndex: getIndexById(activeId) + function getIndexById(material_id) + { for(var i = 0; i < model.rowCount(); i++) { - if (model.getItem(i).id == Cura.MachineManager.activeMaterialId) { + if (model.getItem(i).id == material_id) { return i; } } @@ -149,6 +151,7 @@ UM.ManagementPage { Cura.MachineManager.setActiveMaterial(material_id) } + base.objectList.currentIndex = base.getIndexById(material_id); } }, Button @@ -169,6 +172,7 @@ UM.ManagementPage { Cura.MachineManager.setActiveMaterial(material_id) } + base.objectList.currentIndex = base.getIndexById(material_id); } }, Button From 1fe142ad1fc8d5d8344bf581f80e6841dd2f018f Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 8 May 2017 10:50:15 +0200 Subject: [PATCH 581/816] Fix crashing Cura when switching multi extruder machine to single extruder machine while object selected. CURA-3776 --- cura/Settings/ExtruderManager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index b82144bf1e..0f649e5860 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -35,7 +35,7 @@ class ExtruderManager(QObject): ## Registers listeners and such to listen to changes to the extruders. def __init__(self, parent = None): super().__init__(parent) - self._extruder_trains = { } #Per machine, a dictionary of extruder container stack IDs. + self._extruder_trains = { } #Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. self._active_extruder_index = 0 self._selected_object_extruders = [] Application.getInstance().globalContainerStackChanged.connect(self.__globalContainerStackChanged) @@ -151,7 +151,8 @@ class ExtruderManager(QObject): object_extruders.add(extruder) else: global_stack = Application.getInstance().getGlobalContainerStack() - object_extruders.add(self._extruder_trains[global_stack.getId()]["0"].getId()) + if global_stack.getId() in self._extruder_trains: + object_extruders.add(self._extruder_trains[global_stack.getId()]["0"].getId()) self._selected_object_extruders = list(object_extruders) From b4f56d10d71f950135a049f5c1930dcbbbf32eb4 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 11:17:10 +0200 Subject: [PATCH 582/816] Set currentIndex to a more logical successor when deleting a material --- resources/qml/Preferences/MaterialsPage.qml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 24415a5fc9..7b807d718f 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -272,6 +272,10 @@ UM.ManagementPage { Cura.ContainerManager.removeContainer(containers[i]) } + if(base.objectList.currentIndex > 0) + { + base.objectList.currentIndex--; + } currentItem = base.model.getItem(base.objectList.currentIndex) // Refresh the current item. } } From e19d5411c2dde1c3af4a8e998cdf2ca9e62384c9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 11:17:37 +0200 Subject: [PATCH 583/816] Expand log message when getting no definition when listing error settings So that someone reading the log gets a clue where the error message occurs and why. Contributes to issue CURA-3772. --- 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 6e1dcedeae..b85cd839b4 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -279,7 +279,7 @@ class CuraEngineBackend(QObject, Backend): if definitions: error_labels.add(definitions[0].label) else: - Logger.log("w", "Unable to find definition for key: {key}".format(key = key)) + Logger.log("w", "When checking settings for errors, unable to find definition for key: {key}".format(key = key)) error_labels = ", ".join(error_labels) self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}".format(error_labels))) From 8680c6d79df2051888c760c9329c591bd909e781 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 8 May 2017 11:27:19 +0200 Subject: [PATCH 584/816] Changed addExtruder exception to a warning to let Custom FDM Printer work again. Removed unused imports. CURA-3757 --- cura/Settings/GlobalStack.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) mode change 100644 => 100755 cura/Settings/GlobalStack.py diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py old mode 100644 new mode 100755 index 0e2c2db5e8..f75199cece --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -3,17 +3,15 @@ from typing import Any -from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal +from PyQt5.QtCore import pyqtProperty from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase -from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError -from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.ContainerStack import ContainerStack from UM.Settings.SettingInstance import InstanceState -from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry -from UM.Settings.Interfaces import ContainerInterface +from UM.Logger import Logger from . import Exceptions from .CuraContainerStack import CuraContainerStack @@ -53,7 +51,7 @@ class GlobalStack(CuraContainerStack): def addExtruder(self, extruder: ContainerStack) -> None: extruder_count = self.getProperty("machine_extruder_count", "value") if extruder_count and len(self._extruders) + 1 > extruder_count: - raise Exceptions.TooManyExtrudersError("Tried to add extruder to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count)) + Logger.log("w", "Adding extruder [{meta}] to [{id}] but its extruder count is [{count}]".format(id = self.id, count = extruder_count, meta = str(extruder.getMetaData()))) self._extruders.append(extruder) From 3a5a28cc38f4566911b1e7cb05eac96ac294c19b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 11:31:25 +0200 Subject: [PATCH 585/816] Use CuraStack.qualityChanges to get quality changes CURA-3770 --- plugins/GCodeWriter/GCodeWriter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 162738f073..ad730fbe2a 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -100,7 +100,7 @@ class GCodeWriter(MeshWriter): prefix = ";SETTING_" + str(GCodeWriter.version) + " " # The prefix to put before each line. prefix_length = len(prefix) - container_with_profile = stack.findContainer({"type": "quality_changes"}) + container_with_profile = stack.qualityChanges if not container_with_profile: Logger.log("e", "No valid quality profile found, not writing settings to GCode!") return "" @@ -115,7 +115,7 @@ class GCodeWriter(MeshWriter): data = {"global_quality": serialized} for extruder in sorted(ExtruderManager.getInstance().getMachineExtruders(stack.getId()), key = lambda k: k.getMetaDataEntry("position")): - extruder_quality = extruder.findContainer({"type": "quality_changes"}) + extruder_quality = extruder.qualityChanges if not extruder_quality: Logger.log("w", "No extruder quality profile found, not writing quality for extruder %s to file!", extruder.getId()) continue From a3d92d557dc1b3aa9eb9446e6dd819f3d9cece7c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 11:33:14 +0200 Subject: [PATCH 586/816] GCodeProfileReader: make deserialization more robust CURA-3770 --- plugins/GCodeProfileReader/GCodeProfileReader.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/GCodeProfileReader/GCodeProfileReader.py b/plugins/GCodeProfileReader/GCodeProfileReader.py index abfef6e296..0abbcfc833 100644 --- a/plugins/GCodeProfileReader/GCodeProfileReader.py +++ b/plugins/GCodeProfileReader/GCodeProfileReader.py @@ -56,7 +56,7 @@ class GCodeProfileReader(ProfileReader): # TODO: Consider moving settings to the start? serialized = "" # Will be filled with the serialized profile. try: - with open(file_name) as f: + with open(file_name, "r") as f: for line in f: if line.startswith(prefix): # Remove the prefix and the newline from the line and add it to the rest. @@ -66,9 +66,13 @@ class GCodeProfileReader(ProfileReader): return None serialized = unescapeGcodeComment(serialized) - Logger.log("i", "Serialized the following from %s: %s" %(file_name, repr(serialized))) - json_data = json.loads(serialized) + # serialized data can be invalid JSON + try: + json_data = json.loads(serialized) + except Exception as e: + Logger.log("e", "Could not parse serialized JSON data from GCode %s, error: %s", file_name, e) + return None profiles = [] global_profile = readQualityProfileFromString(json_data["global_quality"]) From 836cf27266ef273831459ac411642395951fb7c0 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 11:36:18 +0200 Subject: [PATCH 587/816] Keep material selected when editing its name, brand or type Editing a material name, brand or type may change its position in the materials list. We now reselect the material after editing one of these values. --- resources/qml/Preferences/MaterialView.qml | 13 +++++++++++-- resources/qml/Preferences/MaterialsPage.qml | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index a44b8a0f08..d849007432 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -82,7 +82,11 @@ TabView width: scrollView.columnWidth; text: properties.supplier; readOnly: !base.editingEnabled; - onEditingFinished: base.setMetaDataEntry("brand", properties.supplier, text) + onEditingFinished: + { + base.setMetaDataEntry("brand", properties.supplier, text); + pane.objectList.currentIndex = pane.getIndexById(base.containerId); + } } Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") } @@ -91,7 +95,11 @@ TabView width: scrollView.columnWidth; text: properties.material_type; readOnly: !base.editingEnabled; - onEditingFinished: base.setMetaDataEntry("material", properties.material_type, text) + onEditingFinished: + { + base.setMetaDataEntry("material", properties.material_type, text); + pane.objectList.currentIndex = pane.getIndexById(base.containerId) + } } Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") } @@ -419,6 +427,7 @@ TabView Cura.ContainerManager.setContainerName(base.containerId, new_value); // update material name label. not so pretty, but it works materialProperties.name = new_value; + pane.objectList.currentIndex = pane.getIndexById(base.containerId) } } } diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 7b807d718f..ba822b9522 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -227,6 +227,8 @@ UM.ManagementPage properties: materialProperties containerId: base.currentItem != null ? base.currentItem.id : "" + + property alias pane: base } QtObject From 98b127851b581d83418eb6a0dbef102eaa1206f9 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 12:54:12 +0200 Subject: [PATCH 588/816] Fix setting number of extruders when hasVariants is set --- cura/Settings/MachineManager.py | 16 ++++++++++++++++ .../MachineSettingsAction.py | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 66aee70f14..2a83fa0d51 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -525,6 +525,22 @@ class MachineManager(QObject): return "" + @pyqtProperty("QVariantMap", notify = activeVariantChanged) + def allActiveVariantIds(self): + if not self._global_container_stack: + return {} + + result = {} + + for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): + variant_container = stack.variant + if not variant_container: + continue + + result[stack.getId()] = variant_container.getId() + + return result + @pyqtProperty("QVariantMap", notify = activeMaterialChanged) def allActiveMaterialIds(self): if not self._global_container_stack: diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 28cd8ba2f3..486ab25918 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -153,7 +153,7 @@ class MachineSettingsAction(MachineAction): if machine_manager.hasMaterials: extruder_material_id = machine_manager.allActiveMaterialIds[extruder_manager.extruderIds["0"]] if machine_manager.hasVariants: - extruder_variant_id = machine_manager.activeVariantIds[0] + extruder_variant_id = machine_manager.allActiveVariantIds[extruder_manager.extruderIds["0"]] # Copy any settable_per_extruder setting value from the extruders to the global stack extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() From 48862ed2b2dbe64f839d68f6f61f147c9d065939 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 13:13:31 +0200 Subject: [PATCH 589/816] Change to "prime_blob_enable" and update description CURA-3634 --- resources/definitions/fdmprinter.def.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 96d4619a3b..b8968e57f6 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3290,12 +3290,12 @@ "description": "Adhesion", "children": { - "prime_poop_enable": + "prime_blob_enable": { "label": "Enable Prime Blob", - "description": "Whether to prime the filament with a blob before printing.", + "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in those cases, you can also turn this setting off to let Brim/Skirt do the priming to save some time.", "type": "bool", - "resolve": "any(extruderValues('prime_poop_enable'))", + "resolve": "any(extruderValues('prime_blob_enable'))", "default_value": true, "settable_per_mesh": false, "settable_per_extruder": true From 570b8767e063ee3532ed6027fbc850f5790d034b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 13:27:01 +0200 Subject: [PATCH 590/816] Update cartesio.def.json --- resources/definitions/cartesio.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 30ffbe28ae..6567f61fb3 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -36,6 +36,7 @@ "overrides": { "machine_extruder_count": { "default_value": 2 }, + "material_diameter": { "default_value": 1.75 }, "machine_heated_bed": { "default_value": true }, "machine_center_is_zero": { "default_value": false }, "gantry_height": { "default_value": 35 }, From 2137c30bd6bf1691363da2598b68612e81a14686 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 11:57:32 +0200 Subject: [PATCH 591/816] Also check extruders for definitions of error settings Contributes to issue CURA-3772. --- plugins/CuraEngineBackend/CuraEngineBackend.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index b85cd839b4..b45cb14aac 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -275,11 +275,14 @@ class CuraEngineBackend(QObject, Backend): error_labels = set() definition_container = self._global_container_stack.getBottom() for key in error_keys: - definitions = definition_container.findDefinitions(key = key) - if definitions: - error_labels.add(definitions[0].label) - else: + for stack in extruders + [self._global_container_stack]: #Search all container stacks for the definition of this setting. Some are only in an extruder stack. + definitions = stack.getBottom().findDefinitions(key = key) + if definitions: + break #Found it! No need to continue search. + else: #No stack has a definition for this setting. Logger.log("w", "When checking settings for errors, unable to find definition for key: {key}".format(key = key)) + continue + error_labels.add(definitions[0].label) error_labels = ", ".join(error_labels) self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}".format(error_labels))) From 281a01dd1f9108c5a8742ff72e3751197dd433d0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 12:29:00 +0200 Subject: [PATCH 592/816] Remove unused variable Contributes to issue CURA-3772. --- plugins/CuraEngineBackend/CuraEngineBackend.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index b45cb14aac..7f902a49bc 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -273,7 +273,6 @@ class CuraEngineBackend(QObject, Backend): if not extruders: error_keys = self._global_container_stack.getErrorKeys() error_labels = set() - definition_container = self._global_container_stack.getBottom() for key in error_keys: for stack in extruders + [self._global_container_stack]: #Search all container stacks for the definition of this setting. Some are only in an extruder stack. definitions = stack.getBottom().findDefinitions(key = key) From a9813146c4bc2aa689c52e31a9f64ae579f659d9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 12:30:15 +0200 Subject: [PATCH 593/816] Evaluate global stack first The global stack has 99% of all settings. So most of the times the setting definition we are looking for is here. This should make it a bit faster to find. Contributes to issue CURA-3772. --- 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 7f902a49bc..d0f26f429e 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -274,7 +274,7 @@ class CuraEngineBackend(QObject, Backend): error_keys = self._global_container_stack.getErrorKeys() error_labels = set() for key in error_keys: - for stack in extruders + [self._global_container_stack]: #Search all container stacks for the definition of this setting. Some are only in an extruder stack. + for stack in [self._global_container_stack] + extruders: #Search all container stacks for the definition of this setting. Some are only in an extruder stack. definitions = stack.getBottom().findDefinitions(key = key) if definitions: break #Found it! No need to continue search. From 6f383d4cc495759208bc69e0ddc526ba28dd5de9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 13:35:12 +0200 Subject: [PATCH 594/816] Make extruder_nr settable per extruder It is actually being set per extruder right now, since this is where the definition gets its extruder number from. If the setting is not settable per extruder, the ExtruderStack skips the setting entirely and defers to the global stack, which doesn't have the setting and so None is returned. This was giving errors. Contributes to issue CURA-3772. --- resources/definitions/fdmextruder.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index 48cf750468..ff54582885 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -25,7 +25,7 @@ "type": "extruder", "default_value": "0", "settable_per_mesh": true, - "settable_per_extruder": false, + "settable_per_extruder": true, "settable_per_meshgroup": false, "settable_globally": false }, From 3fbdaf6c17faa1539292bb03ff8ca5db57cc75de Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 8 May 2017 13:43:09 +0200 Subject: [PATCH 595/816] Ignore values of extruders that are inactive for the current machine instance extrudervalues() would include the values of extruders whose position >= machine_extruder_count. This can happen in machine definitions that have more extruders than machine_extruder_count, eg Custom FDM printer. --- cura/Settings/ExtruderManager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0f649e5860..359cd74f09 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -520,6 +520,10 @@ class ExtruderManager(QObject): result = [] for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + # only include values from extruders that are "active" for the current machine instance + if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value"): + continue + value = extruder.getRawProperty(key, "value") if value is None: From 3f9a5fbcbb5da8c94ee2546e04f73cdd602ff426 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 14:22:36 +0200 Subject: [PATCH 596/816] Changed logging so it doesn't look like it's printing lists --- cura/Settings/GlobalStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index f75199cece..cee141cf93 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -51,7 +51,7 @@ class GlobalStack(CuraContainerStack): def addExtruder(self, extruder: ContainerStack) -> None: extruder_count = self.getProperty("machine_extruder_count", "value") if extruder_count and len(self._extruders) + 1 > extruder_count: - Logger.log("w", "Adding extruder [{meta}] to [{id}] but its extruder count is [{count}]".format(id = self.id, count = extruder_count, meta = str(extruder.getMetaData()))) + Logger.log("w", "Adding extruder {meta} to {id} but its extruder count is {count}".format(id = self.id, count = extruder_count, meta = str(extruder.getMetaData()))) self._extruders.append(extruder) From 452a6a095c0866a080e19d89a71e1857e011456f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 14:25:13 +0200 Subject: [PATCH 597/816] Starting machineSettingAction no longer resets extruder count to 1 --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 2 +- resources/definitions/custom.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 4511665c58..56d0d5e17f 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -382,7 +382,7 @@ Cura.MachineAction currentIndex: machineExtruderCountProvider.properties.value - 1 Component.onCompleted: { - manager.setMachineExtruderCount(1); + //manager.setMachineExtruderCount(1); } onActivated: { diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index 80e01916bb..f8201b265c 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -27,7 +27,7 @@ { "machine_extruder_count": { - "default_value": 8 + "default_value": 1 } } } From bd25448021ba0a50caafb38e2976a5053aa78801 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 15:03:39 +0200 Subject: [PATCH 598/816] Changes to make um2 upgrade work with new stack changes CURA-3742 --- cura/Settings/MachineManager.py | 5 ++--- .../UltimakerMachineActions/UM2UpgradeSelection.py | 13 +++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2a83fa0d51..2e44a60deb 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -773,9 +773,8 @@ class MachineManager(QObject): old_material = self._active_container_stack.material if old_variant: self.blurSettings.emit() - variant_index = self._active_container_stack.getContainerIndex(old_variant) - self._active_container_stack.replaceContainer(variant_index, containers[0]) - Logger.log("d", "Active variant changed") + self._active_container_stack.variant = containers[0] + Logger.log("d", "Active variant changed to {active_variant_id}".format(active_variant_id = containers[0].getId())) preferred_material = None if old_material: preferred_material_name = old_material.getName() diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py index 991ddd4ecd..6c972efbf0 100644 --- a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py +++ b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py @@ -8,6 +8,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty from UM.i18n import i18nCatalog from UM.Application import Application +from UM.Util import parseBool catalog = i18nCatalog("cura") import UM.Settings.InstanceContainer @@ -30,13 +31,13 @@ class UM2UpgradeSelection(MachineAction): def hasVariants(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: - return global_container_stack.getMetaDataEntry("has_variants", "false") == "True" + return parseBool(global_container_stack.getMetaDataEntry("has_variants", "false")) @pyqtSlot(bool) def setHasVariants(self, has_variants = True): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: - variant_container = global_container_stack.findContainer({"type": "variant"}) + variant_container = global_container_stack.variant variant_index = global_container_stack.getContainerIndex(variant_container) if has_variants: @@ -46,11 +47,12 @@ class UM2UpgradeSelection(MachineAction): global_container_stack.addMetaDataEntry("has_variants", True) # Set the variant container to a sane default - if variant_container.getId() == "empty_variant": + empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + if type(variant_container) == type(empty_container): search_criteria = { "type": "variant", "definition": "ultimaker2", "id": "*0.4*" } containers = self._container_registry.findInstanceContainers(**search_criteria) if containers: - global_container_stack.replaceContainer(variant_index, containers[0]) + global_container_stack.variant = containers[0] else: # The metadata entry is stored in an ini, and ini files are parsed as strings only. # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. @@ -58,7 +60,6 @@ class UM2UpgradeSelection(MachineAction): global_container_stack.removeMetaDataEntry("has_variants") # Set the variant container to an empty variant - if variant_container.getId() == "empty_variant": - global_container_stack.replaceContainer(variant_index, self._container_registry.findInstanceContainers(id="empty_variant")[0]) + global_container_stack.variant = ContainerRegistry.getInstance().getEmptyInstanceContainer() Application.getInstance().globalContainerStackChanged.emit() From ac39934336efd0657755321b6df54907e447e5da Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 15:30:39 +0200 Subject: [PATCH 599/816] Revert "Starting machineSettingAction no longer resets extruder count to 1" This reverts commit 452a6a095c0866a080e19d89a71e1857e011456f. --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 2 +- resources/definitions/custom.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 56d0d5e17f..4511665c58 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -382,7 +382,7 @@ Cura.MachineAction currentIndex: machineExtruderCountProvider.properties.value - 1 Component.onCompleted: { - //manager.setMachineExtruderCount(1); + manager.setMachineExtruderCount(1); } onActivated: { diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index f8201b265c..80e01916bb 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -27,7 +27,7 @@ { "machine_extruder_count": { - "default_value": 1 + "default_value": 8 } } } From bb0d534f4aba86cf9ddabb86eaf34a8245ef4ce4 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 8 May 2017 15:31:44 +0200 Subject: [PATCH 600/816] Revert "Set machine_extruder_count in sync with defined extruders" This reverts commit b69f337ddb50bb8e5dc39107f75d4112b14527d1. --- plugins/MachineSettingsAction/MachineSettingsAction.qml | 4 ---- resources/definitions/custom.def.json | 7 ------- 2 files changed, 11 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 4511665c58..5a84642db5 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -380,10 +380,6 @@ Cura.MachineAction } } currentIndex: machineExtruderCountProvider.properties.value - 1 - Component.onCompleted: - { - manager.setMachineExtruderCount(1); - } onActivated: { manager.setMachineExtruderCount(index + 1); diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index 80e01916bb..8f15f00a0f 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -22,12 +22,5 @@ "7": "custom_extruder_8" }, "first_start_actions": ["MachineSettingsAction"] - }, - "overrides": - { - "machine_extruder_count": - { - "default_value": 8 - } } } From 08857e3908e71c8b7165109d9937722595e9614e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 15:51:35 +0200 Subject: [PATCH 601/816] Rename Expand Upper/Lower Skins to Expand Top/Bottom Skins Also in the description. Contributes to issue CURA-3779. --- resources/definitions/fdmprinter.def.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6c2aeef817..87d1e09d15 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1383,8 +1383,8 @@ { "expand_upper_skins": { - "label": "Expand Upper Skins", - "description": "Expand upper skin areas (areas with air above) so that they support infill above.", + "label": "Expand Top Skins Into Infill", + "description": "Expand the top skin areas (areas with air above) so that they support infill above.", "type": "bool", "default_value": false, "value": "expand_skins_into_infill", @@ -1392,8 +1392,8 @@ }, "expand_lower_skins": { - "label": "Expand Lower Skins", - "description": "Expand lower skin areas (areas with air below) so that they are anchored by the infill layers above and below.", + "label": "Expand Bottom Skins Into Infill", + "description": "Expand the bottom skin areas (areas with air below) so that they are anchored by the infill layers above and below.", "type": "bool", "default_value": false, "settable_per_mesh": true From 1449f785f7b8d0c75919a692dfc5b36aa6efa610 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 8 May 2017 15:51:38 +0200 Subject: [PATCH 602/816] Fix so that sliding the switch also changes the mode --- resources/qml/Sidebar.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index dbb15028cb..ec187cef91 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -468,7 +468,7 @@ Rectangle acceptedButtons: Qt.NoButton } - onClicked: + onCheckedChanged: { var index = 0; if (checked) From 14fbd261feb6ef8b60ef60d4d4285f8ddd114161 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:13:10 +0200 Subject: [PATCH 603/816] Update cartesio_0.25_abs_high.inst.cfg --- resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index c26f4a2683..6d7fe3b0eb 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_abs_cartesio_0.25_mm +material = generic_abs_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From fed4d603bed0bd75f78ce707634c89a035844e76 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:13:23 +0200 Subject: [PATCH 604/816] Update cartesio_0.25_abs_normal.inst.cfg --- .../quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index a7c5677980..f59b39a94b 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_abs_cartesio_0.25_mm +material = generic_abs_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 705203c9e3b4dc69c37b772cf548e87e160455a2 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:13:37 +0200 Subject: [PATCH 605/816] Update cartesio_0.4_abs_high.inst.cfg --- resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index 1287d66e33..d34b6dfb3b 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_abs_cartesio_0.4_mm +material = generic_abs_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 76d76d7653c7dc962ba5a90a7584be8483dcecac Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:13:51 +0200 Subject: [PATCH 606/816] Update cartesio_0.4_abs_normal.inst.cfg --- .../quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index 62c4e462e7..2780eea101 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_abs_cartesio_0.4_mm +material = generic_abs_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 7e050ec6ce8c838cb5a1a6bd4a149ab0d9eb4351 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:14:09 +0200 Subject: [PATCH 607/816] Update cartesio_0.8_abs_coarse.inst.cfg --- .../quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index 4ae04132dc..e22b61a456 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_abs_cartesio_0.8_mm +material = generic_abs_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From b3d783711cad3e91212386cdd1ba699372867f2f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:14:23 +0200 Subject: [PATCH 608/816] Update cartesio_0.8_abs_extra_coarse.inst.cfg --- .../cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 836c2f8458..602a11457f 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_abs_cartesio_0.8_mm +material = generic_abs_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 1474eadc002d6d8a660c172a264838db733eb49d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:14:36 +0200 Subject: [PATCH 609/816] Update cartesio_0.8_abs_high.inst.cfg --- resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index f8e6fac996..02e82c81e9 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_abs_cartesio_0.8_mm +material = generic_abs_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 40b143e147b21d28ebcdc808e91d57a3d5d91701 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:14:50 +0200 Subject: [PATCH 610/816] Update cartesio_0.8_abs_normal.inst.cfg --- .../quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index 7aade0c846..b9b66fd4c0 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_abs_cartesio_0.8_mm +material = generic_abs_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From d9cb8ba61e97b1ea78260baaa84902d4c81bb3fd Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:15:43 +0200 Subject: [PATCH 611/816] Update cartesio_0.4_arnitel2045_normal.inst.cfg --- .../cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index fdf4e354fc..2437f41b09 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = dsm_arnitel2045_cartesio_0.4_mm +material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 2 switch_extruder_retraction_amount = 2 From c35d07b16c79596b5e7a89a2ef714afb3ed82dac Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:16:06 +0200 Subject: [PATCH 612/816] Update cartesio_0.4_arnitel2045_high.inst.cfg --- .../cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 954d6fd5d2..1d20414f7e 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = dsm_arnitel2045_cartesio_0.4_mm +material = dsm_arnitel2045_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 2 switch_extruder_retraction_amount = 2 From e1c55ab4c07ed998ef2007d606cb8f5603b6466a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:17:46 +0200 Subject: [PATCH 613/816] Update cartesio_0.8_hips_normal.inst.cfg --- .../quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 06b45cd601..d9c10d815a 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_hips_cartesio_0.8_mm +material = generic_hips_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From e26ac05701ef7cc08362323489f69a1da1d124f4 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:17:59 +0200 Subject: [PATCH 614/816] Update cartesio_0.8_hips_high.inst.cfg --- .../quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index 13f139f596..3cc8f7dc25 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_hips_cartesio_0.8_mm +material = generic_hips_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 7a67c401f9dacd960605d8ce16288178cdf74e7b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:18:15 +0200 Subject: [PATCH 615/816] Update cartesio_0.8_hips_extra_coarse.inst.cfg --- .../cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index ea8edbbdfe..707932a7ed 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_hips_cartesio_0.8_mm +material = generic_hips_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3d1576476fc3caba3852e553687aa9e1c8e1069d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:18:31 +0200 Subject: [PATCH 616/816] Update cartesio_0.8_hips_coarse.inst.cfg --- .../quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index beff6ec6f6..7e169f54bd 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_hips_cartesio_0.8_mm +material = generic_hips_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 5628bf92f5bbdcafa395eb8a231c21210709f34f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:18:46 +0200 Subject: [PATCH 617/816] Update cartesio_0.4_hips_normal.inst.cfg --- .../quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index ac4de67c0c..96217fa849 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_hips_cartesio_0.4_mm +material = generic_hips_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From bde649f786642e247b70ca710deebe97ee2aa316 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:19:00 +0200 Subject: [PATCH 618/816] Update cartesio_0.4_hips_high.inst.cfg --- .../quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index 4f95cd2b8b..f3d3fb29c4 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_hips_cartesio_0.4_mm +material = generic_hips_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 0fa2b9a0c68eafdbb55c8affd573eb4e27f18810 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:19:14 +0200 Subject: [PATCH 619/816] Update cartesio_0.25_hips_normal.inst.cfg --- .../quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index ac324cf42c..f259d31022 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_hips_cartesio_0.25_mm +material = generic_hips_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3c2a94a452ac294edc1f6b7b75aa133dc627f821 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:19:27 +0200 Subject: [PATCH 620/816] Update cartesio_0.25_hips_high.inst.cfg --- .../quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 1457945bdb..ed1d1ae00d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_hips_cartesio_0.25_mm +material = generic_hips_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From d0f14fb41945c01323aef6819af0e376e1d9489f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:21:03 +0200 Subject: [PATCH 621/816] Update cartesio_0.25_pla_high.inst.cfg --- resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 3eac407634..633aeca2d2 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pla_cartesio_0.25_mm +material = generic_pla_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From f111fbc343598e28805babe5d86ee43859953aa4 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:21:17 +0200 Subject: [PATCH 622/816] Update cartesio_0.25_pla_normal.inst.cfg --- .../quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index ac82dddf8a..a212b65676 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pla_cartesio_0.25_mm +material = generic_pla_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3f048376456620724aecf945bb11bccfba45e757 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:21:30 +0200 Subject: [PATCH 623/816] Update cartesio_0.4_pla_high.inst.cfg --- resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index bdb6ace957..7a7f7f31a3 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pla_cartesio_0.4_mm +material = generic_pla_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 5199881dfd0d833923c087df21e158d351ddb19e Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:21:43 +0200 Subject: [PATCH 624/816] Update cartesio_0.4_pla_normal.inst.cfg --- .../quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index ca02ffc4a2..16ad34b9f0 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pla_cartesio_0.4_mm +material = generic_pla_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From cb6d89750b9b7829dc90d1793a24870b7a8d5bfb Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:22:01 +0200 Subject: [PATCH 625/816] Update cartesio_0.8_pla_coarse.inst.cfg --- .../quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index 5a9e561177..c6a680dfcc 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_pla_cartesio_0.8_mm +material = generic_pla_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3753e37d0ace1b26415c645c065990d2f34c91e8 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:22:14 +0200 Subject: [PATCH 626/816] Update cartesio_0.8_pla_extra_coarse.inst.cfg --- .../cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index 4ac73a3ce0..a1ea49ba92 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_pla_cartesio_0.8_mm +material = generic_pla_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From aff01eb9a687d1cba20e1e6a1ab65276a4122a14 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:22:31 +0200 Subject: [PATCH 627/816] Update cartesio_0.8_pla_high.inst.cfg --- resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index 582735062b..622cb124eb 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pla_cartesio_0.8_mm +material = generic_pla_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From d06432617c520a0043cd383be126ca63faa3c025 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:22:43 +0200 Subject: [PATCH 628/816] Update cartesio_0.8_pla_normal.inst.cfg --- .../quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index f77e2ade8c..c24f46f30d 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pla_cartesio_0.8_mm +material = generic_pla_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 996303b899b766b018210c34d4e95ae1587397fc Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:23:26 +0200 Subject: [PATCH 629/816] Update cartesio_0.8_petg_high.inst.cfg --- .../quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index c26eded7d0..df496e5e06 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_petg_cartesio_0.8_mm +material = generic_petg_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 3d9e3918eac68651f32abe66db53e0906b4e1e32 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:23:42 +0200 Subject: [PATCH 630/816] Update cartesio_0.8_petg_normal.inst.cfg --- .../quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index 05805e41d7..fa787830b2 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_petg_cartesio_0.8_mm +material = generic_petg_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 19bc0204c5133b0a4b1c62f31b4f0b7902d996c0 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:23:59 +0200 Subject: [PATCH 631/816] Update cartesio_0.8_petg_extra_coarse.inst.cfg --- .../cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index 99a3659e18..295b3c3e2c 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_petg_cartesio_0.8_mm +material = generic_petg_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 09e5588788eec31670c3113bd431e233f677326f Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:24:19 +0200 Subject: [PATCH 632/816] Update cartesio_0.8_petg_coarse.inst.cfg --- .../quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index 3df1647d57..a3a8d324fb 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_petg_cartesio_0.8_mm +material = generic_petg_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From a2e10370d87914dd55410dda8f16659589684399 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:24:41 +0200 Subject: [PATCH 633/816] Update cartesio_0.4_petg_normal.inst.cfg --- .../quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index 1ad1cc9f5d..84c7525b0b 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_petg_cartesio_0.4_mm +material = generic_petg_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From cff4dafee7f14166588686eda0488500be0a5e81 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:24:54 +0200 Subject: [PATCH 634/816] Update cartesio_0.4_petg_high.inst.cfg --- .../quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index c6e759c87b..8130f8563e 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_petg_cartesio_0.4_mm +material = generic_petg_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From a8179ca866d526931173e855a614ddecbb3741ac Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:25:11 +0200 Subject: [PATCH 635/816] Update cartesio_0.25_petg_normal.inst.cfg --- .../quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index 55a04548bc..c34c7f8eae 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_petg_cartesio_0.25_mm +material = generic_petg_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 0bb336b2fe2c796c1397457ed4a473fd0f7e3141 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:25:29 +0200 Subject: [PATCH 636/816] Update cartesio_0.25_petg_high.inst.cfg --- .../quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index 324ff40497..a197b70f1b 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_petg_cartesio_0.25_mm +material = generic_petg_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 752420737e41e2996f426b29e142cb1f1744cb70 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:26:12 +0200 Subject: [PATCH 637/816] Update cartesio_0.8_pc_normal.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 54e2f3a8b8..893a8f0939 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pc_cartesio_0.8_mm +material = generic_pc_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From ff59f823e158c707a1ef9356cae771d54d1745f1 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:26:29 +0200 Subject: [PATCH 638/816] Update cartesio_0.8_pc_high.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index ca1acf1e59..9dc821ad27 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pc_cartesio_0.8_mm +material = generic_pc_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3f9f1c3c8219a02f0f3943df874a9d412f4acf7d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:26:44 +0200 Subject: [PATCH 639/816] Update cartesio_0.8_pc_extra_coarse.inst.cfg --- .../quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index f8238c28b5..443f009ba4 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_pc_cartesio_0.8_mm +material = generic_pc_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 6579b4409938353ab7821ea90765197383fee114 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:27:00 +0200 Subject: [PATCH 640/816] Update cartesio_0.8_pc_coarse.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index 8f29b3a679..ba2a33d4cf 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_pc_cartesio_0.8_mm +material = generic_pc_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 4d80b69897a39944b55986b99d91ed9b6e28de4d Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:27:21 +0200 Subject: [PATCH 641/816] Update cartesio_0.4_pc_normal.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index 8c258630e1..42fc39d6f2 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pc_cartesio_0.4_mm +material = generic_pc_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From fe6fca84f481a899b75a4ad4bbd3f6765e257a43 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:27:35 +0200 Subject: [PATCH 642/816] Update cartesio_0.4_pc_high.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 213b94bfaa..3aa4211c0a 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pc_cartesio_0.4_mm +material = generic_pc_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 4f87dbdca9cc579e62dbda166b38c8b87856f686 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:27:50 +0200 Subject: [PATCH 643/816] Update cartesio_0.25_pc_normal.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index e3ab6f83d9..8cb4ebc94b 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pc_cartesio_0.25_mm +material = generic_pc_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 7e70dc1d9a37d0609179955e2d9a95ff7bf61a01 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:28:22 +0200 Subject: [PATCH 644/816] Update cartesio_0.25_pc_high.inst.cfg --- resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index 224b4383f0..cb8b52cf12 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pc_cartesio_0.25_mm +material = generic_pc_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 585d2785161bd8024418214b5a53aa60212244f7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:29:00 +0200 Subject: [PATCH 645/816] Update cartesio_0.8_nylon_high.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index 324149f527..adc278188d 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_nylon_cartesio_0.8_mm +material = generic_nylon_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 4ee00e63b56ab627547616eb2023e31e7062fe81 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:29:18 +0200 Subject: [PATCH 646/816] Update cartesio_0.8_nylon_extra_coarse.inst.cfg --- .../cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index 9d015d71bb..b19df96222 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_nylon_cartesio_0.8_mm +material = generic_nylon_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From a597202ff5f1408edee16b4f1a549a07b1077a63 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:29:32 +0200 Subject: [PATCH 647/816] Update cartesio_0.8_nylon_coarse.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index 5d303731d9..f019fec205 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_nylon_cartesio_0.8_mm +material = generic_nylon_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From d84de374f08f6b6a4b650450f77f8e25bc0e018b Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:29:48 +0200 Subject: [PATCH 648/816] Update cartesio_0.4_nylon_normal.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index dd37e5f46a..32aaddf4cb 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_nylon_cartesio_0.4_mm +material = generic_nylon_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From f572275604a04a269dfb6b65dabb3526a226bdf7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:30:05 +0200 Subject: [PATCH 649/816] Update cartesio_0.4_nylon_high.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index d294820c39..271278143b 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_nylon_cartesio_0.4_mm +material = generic_nylon_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From d04466dfd56c0baa80ce19c0d585296ec4cf934a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:30:20 +0200 Subject: [PATCH 650/816] Update cartesio_0.25_nylon_normal.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index 7ac13e4d60..07be2462f4 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_nylon_cartesio_0.25_mm +material = generic_nylon_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 35cbb264665224c5b57067fa2229da82a440cf5e Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:30:37 +0200 Subject: [PATCH 651/816] Update cartesio_0.25_nylon_high.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index 569c5a786f..6cceba99c3 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_nylon_cartesio_0.25_mm +material = generic_nylon_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 65b6564c1512d87f3d0b35d559d7900325de31ad Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:30:54 +0200 Subject: [PATCH 652/816] Update cartesio_0.8_nylon_normal.inst.cfg --- .../quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index b7e9920fac..87e8515872 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_nylon_cartesio_0.8_mm +material = generic_nylon_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 10 switch_extruder_retraction_amount = 2 From 3080e7927799ec6916b2c5704299d95d3aff90e8 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:31:39 +0200 Subject: [PATCH 653/816] Update cartesio_0.8_pva_normal.inst.cfg --- .../quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index 23fa682772..275ff906d2 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pva_cartesio_0.8_mm +material = generic_pva_175_cartesio_0.8_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 5bb4f06eb54db0abb6d7a9db05b138238b39135a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:31:54 +0200 Subject: [PATCH 654/816] Update cartesio_0.8_pva_high.inst.cfg --- resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index 64e8ee2902..9f5ea8a070 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pva_cartesio_0.8_mm +material = generic_pva_175_cartesio_0.8_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 8febaa081d2db186f9adb3558c6c6455d8ea916e Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:32:11 +0200 Subject: [PATCH 655/816] Update cartesio_0.8_pva_extra_coarse.inst.cfg --- .../cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index 2a2e2c9d0e..bc9dc55912 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = extra coarse -material = generic_pva_cartesio_0.8_mm +material = generic_pva_175_cartesio_0.8_mm weight = 4 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From fa5ae8849947bd70037d2e148b282b79351bd399 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:32:27 +0200 Subject: [PATCH 656/816] Update cartesio_0.8_pva_coarse.inst.cfg --- .../quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index a9c313a7db..e009409d52 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = coarse -material = generic_pva_cartesio_0.8_mm +material = generic_pva_175_cartesio_0.8_mm weight = 3 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 72b4fd7a198eb34c046ea60b5ab0a9aac6b9a95a Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:32:43 +0200 Subject: [PATCH 657/816] Update cartesio_0.4_pva_normal.inst.cfg --- .../quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index f0231084db..14e6c6a956 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pva_cartesio_0.4_mm +material = generic_pva_175_cartesio_0.4_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From d53cd725837f01136d09e9f821fa2194375609ab Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:32:58 +0200 Subject: [PATCH 658/816] Update cartesio_0.4_pva_high.inst.cfg --- resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index 97e48f8c7d..26e476abb0 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pva_cartesio_0.4_mm +material = generic_pva_175_cartesio_0.4_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From 29f4f6be8fbb5ee599034b2e7dd2357fa292df89 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:33:15 +0200 Subject: [PATCH 659/816] Update cartesio_0.25_pva_normal.inst.cfg --- .../quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 1415954e6c..5f6b8c846d 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = normal -material = generic_pva_cartesio_0.25_mm +material = generic_pva_175_cartesio_0.25_mm weight = 2 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From b00c8e8119a219681ab88444305688fbe2d7dfb7 Mon Sep 17 00:00:00 2001 From: MaukCC Date: Mon, 8 May 2017 16:33:35 +0200 Subject: [PATCH 660/816] Update cartesio_0.25_pva_high.inst.cfg --- resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index 73b434365e..34b7dcf0f1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -6,7 +6,7 @@ definition = cartesio [metadata] type = quality quality_type = high -material = generic_pva_cartesio_0.25_mm +material = generic_pva_175_cartesio_0.25_mm weight = 1 [values] @@ -24,7 +24,6 @@ infill_pattern = grid material_print_temperature_layer_0 = =material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature material_final_print_temperature = =material_print_temperature -material_diameter = 1.75 retraction_min_travel = =round(line_width * 10) retraction_prime_speed = 8 switch_extruder_retraction_amount = 2 From e6cf4a4538bbb6b4d6c4d430d602709937e8d11f Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Mon, 8 May 2017 16:46:09 +0200 Subject: [PATCH 661/816] JSON Prime Blob description wording (CURA-3634) --- 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 87d1e09d15..3b25f44c10 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3589,7 +3589,7 @@ "prime_blob_enable": { "label": "Enable Prime Blob", - "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in those cases, you can also turn this setting off to let Brim/Skirt do the priming to save some time.", + "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.", "type": "bool", "resolve": "any(extruderValues('prime_blob_enable'))", "default_value": true, From 288781915381549e8e158293064ea3245196b175 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 10:14:43 +0200 Subject: [PATCH 662/816] Only enable "prime_blob_enable" for UM3 CURA-3634 --- resources/definitions/fdmprinter.def.json | 3 ++- resources/definitions/ultimaker3.def.json | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3b25f44c10..c66c98119e 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3594,7 +3594,8 @@ "resolve": "any(extruderValues('prime_blob_enable'))", "default_value": true, "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "enabled": false }, "extruder_prime_pos_x": { diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index e17316a80b..c4e70899f2 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -73,6 +73,8 @@ "prime_tower_position_y": { "default_value": 178 }, "prime_tower_wipe_enabled": { "default_value": false }, + "prime_blob_enable": { "enabled": true }, + "acceleration_enabled": { "value": "True" }, "acceleration_layer_0": { "value": "acceleration_topbottom" }, "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, From 7632b9df79ef992af3f2c04293c29819db1fb74f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 9 May 2017 10:27:50 +0200 Subject: [PATCH 663/816] Removed unused connection --- plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index c3c7249155..3e78670e02 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -141,14 +141,6 @@ Item { storeIndex: 0 removeUnusedValue: false } - - // If the extruder by which the object needs to be printed is changed, ensure that the - // display is also notified of the fact. - Connections - { - target: extruderSelector - onActivated: provider.forcePropertiesChanged() - } } } } From 36dedabd11a36bd40669fbcf3b0e1f820c47acf1 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 11:47:55 +0200 Subject: [PATCH 664/816] Fix DPI issue with DiscardOrKeepProfileChangesDialog --- .../qml/DiscardOrKeepProfileChangesDialog.qml | 194 +++++++++--------- 1 file changed, 100 insertions(+), 94 deletions(-) diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/DiscardOrKeepProfileChangesDialog.qml index 4233bb9e18..06bdb098a0 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/DiscardOrKeepProfileChangesDialog.qml @@ -36,9 +36,14 @@ UM.Dialog } } - Column + Row { - anchors.fill: parent + id: infoTextRow + height: childrenRect.height + anchors.margins: UM.Theme.getSize("default_margin").width + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top spacing: UM.Theme.getSize("default_margin").width UM.I18nCatalog @@ -47,28 +52,25 @@ UM.Dialog name: "cura" } - Row + Label { - height: childrenRect.height + text: catalog.i18nc("@text:window", "You have customized some profile settings.\nWould you like to keep or discard those settings?") anchors.margins: UM.Theme.getSize("default_margin").width - anchors.left: parent.left - anchors.right: parent.right - spacing: UM.Theme.getSize("default_margin").width - - Label - { - text: catalog.i18nc("@text:window", "You have customized some profile settings.\nWould you like to keep or discard those settings?") - anchors.margins: UM.Theme.getSize("default_margin").width - font: UM.Theme.getFont("default") - wrapMode: Text.WordWrap - } + font: UM.Theme.getFont("default") + wrapMode: Text.WordWrap } + } + Item + { + anchors.margins: UM.Theme.getSize("default_margin").width + anchors.top: infoTextRow.bottom + anchors.bottom: optionRow.top + anchors.left: parent.left + anchors.right: parent.right TableView { - anchors.margins: UM.Theme.getSize("default_margin").width - anchors.left: parent.left - anchors.right: parent.right + anchors.fill: parent height: base.height - 150 * Screen.devicePixelRatio id: tableView Component @@ -132,92 +134,96 @@ UM.Dialog model: base.changesModel } + } - Item + Item + { + id: optionRow + anchors.bottom: buttonsRow.top + anchors.right: parent.right + anchors.left: parent.left + anchors.margins: UM.Theme.getSize("default_margin").width + height: childrenRect.height + + ComboBox { - anchors.right: parent.right - anchors.left: parent.left - anchors.margins: UM.Theme.getSize("default_margin").width - height:childrenRect.height + id: discardOrKeepProfileChangesDropDownButton + width: 300 - ComboBox + model: ListModel { - id: discardOrKeepProfileChangesDropDownButton - width: 300 + id: discardOrKeepProfileListModel - model: ListModel - { - id: discardOrKeepProfileListModel - - Component.onCompleted: { - append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" }) - append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" }) - append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" }) - } - } - - onActivated: - { - var code = model.get(index).code; - UM.Preferences.setValue("cura/choice_on_profile_override", code); - - if (code == "always_keep") { - keepButton.enabled = true; - discardButton.enabled = false; - } - else if (code == "always_discard") { - keepButton.enabled = false; - discardButton.enabled = true; - } - else { - keepButton.enabled = true; - discardButton.enabled = true; - } - } - } - } - - Item - { - anchors.right: parent.right - anchors.left: parent.left - anchors.margins: UM.Theme.getSize("default_margin").width - height: childrenRect.height - - Button - { - id: discardButton - text: catalog.i18nc("@action:button", "Discard"); - anchors.right: parent.right - onClicked: - { - CuraApplication.discardOrKeepProfileChangesClosed("discard") - base.hide() - } - isDefault: true - } - - Button - { - id: keepButton - text: catalog.i18nc("@action:button", "Keep"); - anchors.right: discardButton.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - onClicked: - { - CuraApplication.discardOrKeepProfileChangesClosed("keep") - base.hide() + Component.onCompleted: { + append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" }) } } - Button + onActivated: { - id: createNewProfileButton - text: catalog.i18nc("@action:button", "Create New Profile"); - anchors.left: parent.left - action: Cura.Actions.addProfile - onClicked: base.hide() + var code = model.get(index).code; + UM.Preferences.setValue("cura/choice_on_profile_override", code); + + if (code == "always_keep") { + keepButton.enabled = true; + discardButton.enabled = false; + } + else if (code == "always_discard") { + keepButton.enabled = false; + discardButton.enabled = true; + } + else { + keepButton.enabled = true; + discardButton.enabled = true; + } } } } + + Item + { + id: buttonsRow + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.left: parent.left + anchors.margins: UM.Theme.getSize("default_margin").width + height: childrenRect.height + + Button + { + id: discardButton + text: catalog.i18nc("@action:button", "Discard"); + anchors.right: parent.right + onClicked: + { + CuraApplication.discardOrKeepProfileChangesClosed("discard") + base.hide() + } + isDefault: true + } + + Button + { + id: keepButton + text: catalog.i18nc("@action:button", "Keep"); + anchors.right: discardButton.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + onClicked: + { + CuraApplication.discardOrKeepProfileChangesClosed("keep") + base.hide() + } + } + + Button + { + id: createNewProfileButton + text: catalog.i18nc("@action:button", "Create New Profile"); + anchors.left: parent.left + action: Cura.Actions.addProfile + onClicked: base.hide() + } + } } \ No newline at end of file From 19ee790cd7cdf10706aeb13bfb985fc12c39775c Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 12:05:01 +0200 Subject: [PATCH 665/816] Remove device pixel ratio from DiscardOrKeepProfileChangesDialog --- resources/qml/DiscardOrKeepProfileChangesDialog.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/DiscardOrKeepProfileChangesDialog.qml index 06bdb098a0..1cdde17840 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/DiscardOrKeepProfileChangesDialog.qml @@ -14,8 +14,8 @@ UM.Dialog id: base title: catalog.i18nc("@title:window", "Discard or Keep changes") - width: 800 * Screen.devicePixelRatio - height: 400 * Screen.devicePixelRatio + width: 800 + height: 400 property var changesModel: Cura.UserChangesModel{ id: userChangesModel} onVisibilityChanged: { @@ -71,7 +71,7 @@ UM.Dialog TableView { anchors.fill: parent - height: base.height - 150 * Screen.devicePixelRatio + height: base.height - 150 id: tableView Component { From eba75a726eece3ebfaa82868c4a8e8ea6ea4b569 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 9 May 2017 12:58:50 +0200 Subject: [PATCH 666/816] Set brand and material to "Custom" so it is less like copying Generic PLA --- cura/Settings/ContainerManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 6c0d1948b2..4c408806b9 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -723,6 +723,8 @@ class ContainerManager(QObject): duplicated_container.setMetaDataEntry("base_file", new_id) duplicated_container.setMetaDataEntry("GUID", str(uuid.uuid4())) + duplicated_container.setMetaDataEntry("brand", catalog.i18nc("@label", "Custom")) + duplicated_container.setMetaDataEntry("material", catalog.i18nc("@label", "Custom")) duplicated_container.setName(catalog.i18nc("@label", "Custom Material")) self._container_registry.addContainer(duplicated_container) From 209822d0fca6cad1364945c963355530ae757097 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 9 May 2017 12:59:16 +0200 Subject: [PATCH 667/816] Fix unit test. Related to CURA-3757 --- tests/Settings/TestGlobalStack.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) mode change 100644 => 100755 tests/Settings/TestGlobalStack.py diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py old mode 100644 new mode 100755 index 539de4929e..1eb3c43746 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -78,9 +78,10 @@ def test_addExtruder(global_stack): global_stack.addExtruder(second_extruder) assert len(global_stack.extruders) == 2 assert global_stack.extruders[1] == second_extruder - with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): - with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. - global_stack.addExtruder(unittest.mock.MagicMock()) + # Disabled for now for Custom FDM Printer + # with unittest.mock.patch("cura.Settings.CuraContainerStack.DefinitionContainer", unittest.mock.MagicMock): + # with pytest.raises(TooManyExtrudersError): #Should be limited to 2 extruders because of machine_extruder_count. + # 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. From 8f792b25047f3833e26df5dec917a07acf9c4f4f Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 9 May 2017 13:03:49 +0200 Subject: [PATCH 668/816] Tweak Print Settings layout to match the rest of the UI. --- resources/qml/Preferences/MaterialView.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index d849007432..9290126502 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -312,9 +312,10 @@ TabView { id: label width: base.firstColumnWidth; - height: spinBox.height + height: spinBox.height + UM.Theme.getSize("default_lining").height text: model.label elide: Text.ElideRight + verticalAlignment: Qt.AlignVCenter } ReadOnlySpinBox { From 53141303d2367539ee38485fadc4858b2c971dbd Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 5 May 2017 14:01:08 +0200 Subject: [PATCH 669/816] WIP: Fix project loading CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 161 ++++++++++++++++---- 1 file changed, 131 insertions(+), 30 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index a0ce679464..6551648fae 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -15,6 +15,8 @@ from .WorkspaceDialog import WorkspaceDialog import xml.etree.ElementTree as ET from cura.Settings.ExtruderManager import ExtruderManager +from cura.Settings.ExtruderStack import ExtruderStack +from cura.Settings.GlobalStack import GlobalStack import zipfile import io @@ -35,6 +37,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._material_container_suffix = None # We have to wait until all other plugins are loaded before we can set it self._instance_container_suffix = ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix self._container_stack_suffix = ContainerRegistry.getMimeTypeForContainer(ContainerStack).preferredSuffix + self._extruder_stack_suffix = ContainerRegistry.getMimeTypeForContainer(ExtruderStack).preferredSuffix + self._global_stack_suffix = ContainerRegistry.getMimeTypeForContainer(GlobalStack).preferredSuffix self._resolve_strategies = {} @@ -47,6 +51,35 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._id_mapping[old_id] = self._container_registry.uniqueName(old_id) return self._id_mapping[old_id] + ## Separates the given file list into a list of GlobalStack files and a list of ExtruderStack files. + # + # In old versions, extruder stack files have the same suffix as container stack files ".stack.cfg". + # + def _determineGlobalAndExtruderStackFiles(self, project_file_name, file_list): + archive = zipfile.ZipFile(project_file_name, "r") + + global_stack_file_list = [name for name in file_list if name.endswith(self._global_stack_suffix)] + extruder_stack_file_list = [name for name in file_list if name.endswith(self._extruder_stack_suffix)] + + # separate container stack files and extruder stack files + files_to_determine = [name for name in file_list if name.endswith(self._container_stack_suffix)] + for file_name in files_to_determine: + container_id = self._stripFileToId(file_name) + stack = ContainerStack(container_id) + # Deserialize stack by converting read data from bytes to string + stack.deserialize(archive.open(file_name).read().decode("utf-8"), connect_signals=False) + + stack_type = stack.getMetaDataEntry("type") + if stack_type == "extruder_train": + extruder_stack_file_list.append(file_name) + elif stack_type == "machine": + global_stack_file_list.append(file_name) + else: + Logger.log("w", "Unknown container stack type '%s' from %s in %s", + stack_type, file_name, project_file_name) + + return global_stack_file_list, extruder_stack_file_list + def preRead(self, file_name, show_dialog=True, *args, **kwargs): self._3mf_mesh_reader = Application.getInstance().getMeshFileHandler().getReaderForFile(file_name) if self._3mf_mesh_reader and self._3mf_mesh_reader.preRead(file_name) == WorkspaceReader.PreReadResult.accepted: @@ -63,23 +96,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Check if there are any conflicts, so we can ask the user. archive = zipfile.ZipFile(file_name, "r") cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")] - container_stack_files = [name for name in cura_file_names if name.endswith(self._container_stack_suffix)] - self._resolve_strategies = {"machine": None, "quality_changes": None, "material": None} - machine_conflict = False - quality_changes_conflict = False - for container_stack_file in container_stack_files: - container_id = self._stripFileToId(container_stack_file) - serialized = archive.open(container_stack_file).read().decode("utf-8") - if machine_name == "": - machine_name = self._getMachineNameFromSerializedStack(serialized) - stacks = self._container_registry.findContainerStacks(id=container_id) - if stacks: - # Check if there are any changes at all in any of the container stacks. - id_list = self._getContainerIdListFromSerialized(serialized) - for index, container_id in enumerate(id_list): - if stacks[0].getContainer(index).getId() != container_id: - machine_conflict = True - Job.yieldThread() + + # A few lists of containers in this project files. + # When loading the global stack file, it may be associated with those containers, which may or may not be + # in Cura already, so we need to provide them as alternative search lists. + definition_container_list = [] + instance_container_list = [] + material_container_list = [] definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] for definition_container_file in definition_container_files: @@ -93,6 +116,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: definition_container = definitions[0] + definition_container_list.append(definition_container) + if definition_container.getMetaDataEntry("type") != "extruder": machine_type = definition_container.getName() variant_type_name = definition_container.getMetaDataEntry("variants_name", variant_type_name) @@ -131,6 +156,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Deserialize InstanceContainer by converting read data from bytes to string instance_container.deserialize(archive.open(instance_container_file).read().decode("utf-8")) + + instance_container_list.append(instance_container) + container_type = instance_container.getMetaDataEntry("type") if container_type == "quality_changes": quality_name = instance_container.getName() @@ -151,6 +179,27 @@ class ThreeMFWorkspaceReader(WorkspaceReader): num_user_settings += len(instance_container._instances) Job.yieldThread() + + # Determine ContainerStack files and ExtruderStack files + container_stack_files, extruder_stack_files = self._determineGlobalAndExtruderStackFiles( + file_name, cura_file_names) + self._resolve_strategies = {"machine": None, "quality_changes": None, "material": None} + machine_conflict = False + quality_changes_conflict = False + for container_stack_file in container_stack_files + extruder_stack_files: + container_id = self._stripFileToId(container_stack_file) + serialized = archive.open(container_stack_file).read().decode("utf-8") + if machine_name == "": + machine_name = self._getMachineNameFromSerializedStack(serialized) + stacks = self._container_registry.findContainerStacks(id=container_id) + if stacks: + # Check if there are any changes at all in any of the container stacks. + id_list = self._getContainerIdListFromSerialized(serialized) + for index, container_id in enumerate(id_list): + if stacks[0].getContainer(index).getId() != container_id: + machine_conflict = True + Job.yieldThread() + num_visible_settings = 0 try: temp_preferences = Preferences() @@ -336,10 +385,54 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Get the stack(s) saved in the workspace. Logger.log("d", "Workspace loading is checking stacks containers...") - container_stack_files = [name for name in cura_file_names if name.endswith(self._container_stack_suffix)] + container_stack_files, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, + cura_file_names) + global_stack = None extruder_stacks = [] + extruder_stacks_added = [] container_stacks_added = [] + + # load extruder stack files + try: + for extruder_stack_file in extruder_stack_files: + container_id = self._stripFileToId(extruder_stack_file) + + container_stacks = self._container_registry.findContainerStacks(id=container_id) + if container_stacks: + # this container stack already exists, try to resolve + stack = container_stacks[0] + if self._resolve_strategies["machine"] == "override": + pass # do nothing + elif self._resolve_strategies["machine"] == "new": + # create a new extruder stack from this one + new_id = self.getNewId(container_id) + stack = ExtruderStack(new_id) + stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + + # Ensure a unique ID and name + stack._id = new_id + + self._container_registry.addContainer(stack) + extruder_stacks_added.append(stack) + else: + # container not found, create a new one + stack = ExtruderStack(container_id) + stack.deserialize(archive.open(extruder_stack_file).read().decode("utf-8")) + self._container_registry.addContainer(stack) + extruder_stacks_added.append(stack) + + extruder_stacks.append(stack) + + except: + Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") + # Something went really wrong. Try to remove any data that we added. + for container in extruder_stacks: + self._container_registry.removeContainer(container.getId()) + + return None + + # load global stack file try: for container_stack_file in container_stack_files: container_id = self._stripFileToId(container_stack_file) @@ -350,7 +443,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): stack = container_stacks[0] if self._resolve_strategies["machine"] == "override": # TODO: HACK - # There is a machine, check if it has authenticationd data. If so, keep that data. + # There is a machine, check if it has authentication data. If so, keep that data. network_authentication_id = container_stacks[0].getMetaDataEntry("network_authentication_id") network_authentication_key = container_stacks[0].getMetaDataEntry("network_authentication_key") container_stacks[0].deserialize(archive.open(container_stack_file).read().decode("utf-8")) @@ -360,7 +453,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): container_stacks[0].addMetaDataEntry("network_authentication_key", network_authentication_key) elif self._resolve_strategies["machine"] == "new": new_id = self.getNewId(container_id) - stack = ContainerStack(new_id) + stack = GlobalStack(new_id) stack.deserialize(archive.open(container_stack_file).read().decode("utf-8")) # Ensure a unique ID and name @@ -371,33 +464,33 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if stack.getMetaDataEntry("machine", None): stack.setMetaDataEntry("machine", self.getNewId(stack.getMetaDataEntry("machine"))) - if stack.getMetaDataEntry("type") != "extruder_train": - # Only machines need a new name, stacks may be non-unique - stack.setName(self._container_registry.uniqueName(stack.getName())) + # Only machines need a new name, stacks may be non-unique + stack.setName(self._container_registry.uniqueName(stack.getName())) container_stacks_added.append(stack) self._container_registry.addContainer(stack) else: Logger.log("w", "Resolve strategy of %s for machine is not supported", self._resolve_strategies["machine"]) else: - stack = ContainerStack(container_id) + # no existing container stack, so we create a new one + stack = GlobalStack(container_id) # Deserialize stack by converting read data from bytes to string stack.deserialize(archive.open(container_stack_file).read().decode("utf-8")) container_stacks_added.append(stack) self._container_registry.addContainer(stack) - if stack.getMetaDataEntry("type") == "extruder_train": - extruder_stacks.append(stack) - else: - global_stack = stack + global_stack = stack Job.yieldThread() except: Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") # Something went really wrong. Try to remove any data that we added. for container in containers_to_add: - self._container_registry.getInstance().removeContainer(container.getId()) + self._container_registry.removeContainer(container.getId()) for container in container_stacks_added: - self._container_registry.getInstance().removeContainer(container.getId()) + self._container_registry.removeContainer(container.getId()) + + for container in extruder_stacks_added: + self._container_registry.removeContainer(container.getId()) return None @@ -466,6 +559,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Notify everything/one that is to notify about changes. global_stack.containersChanged.emit(global_stack.getTop()) + # if we are reusing an existing global stack, it can already have extruders associated, so we need to remove + # them first + if global_stack.extruders: + old_extruder_stacks = global_stack.extruders + for extruder_stack in old_extruder_stacks: + self._container_registry.removeContainer(extruder_stack) + global_stack._extruders = [] + for stack in extruder_stacks: stack.setNextStack(global_stack) stack.containersChanged.emit(stack.getTop()) From 61f7b6aa689cb925d6148ed967cb5762986e8f09 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 8 May 2017 10:42:52 +0200 Subject: [PATCH 670/816] Add spaces around binary operator According to our code style. Contributes to issue CURA-3756. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 6551648fae..9ec711697e 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -191,7 +191,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): serialized = archive.open(container_stack_file).read().decode("utf-8") if machine_name == "": machine_name = self._getMachineNameFromSerializedStack(serialized) - stacks = self._container_registry.findContainerStacks(id=container_id) + stacks = self._container_registry.findContainerStacks(id = container_id) if stacks: # Check if there are any changes at all in any of the container stacks. id_list = self._getContainerIdListFromSerialized(serialized) From 9c747733c498131f19b489b5c52f8cacc04155e5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 11:48:25 +0200 Subject: [PATCH 671/816] Project Reader: Use "." for profile type detection CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 9ec711697e..daa49e5f95 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -33,12 +33,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._dialog = WorkspaceDialog() self._3mf_mesh_reader = None self._container_registry = ContainerRegistry.getInstance() - self._definition_container_suffix = ContainerRegistry.getMimeTypeForContainer(DefinitionContainer).preferredSuffix + + # suffixes registered with the MineTypes don't start with a dot '.' + self._definition_container_suffix = "." + ContainerRegistry.getMimeTypeForContainer(DefinitionContainer).preferredSuffix self._material_container_suffix = None # We have to wait until all other plugins are loaded before we can set it - self._instance_container_suffix = ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix - self._container_stack_suffix = ContainerRegistry.getMimeTypeForContainer(ContainerStack).preferredSuffix - self._extruder_stack_suffix = ContainerRegistry.getMimeTypeForContainer(ExtruderStack).preferredSuffix - self._global_stack_suffix = ContainerRegistry.getMimeTypeForContainer(GlobalStack).preferredSuffix + self._instance_container_suffix = "." + ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix + self._container_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(ContainerStack).preferredSuffix + self._extruder_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(ExtruderStack).preferredSuffix + self._global_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(GlobalStack).preferredSuffix self._resolve_strategies = {} From 3e6d4b92304f878f8ede375499b02e55fc0ad60b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 11:54:39 +0200 Subject: [PATCH 672/816] document why no signals connecting in project file pre-read CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index daa49e5f95..ebb6e8ef17 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -69,6 +69,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader): container_id = self._stripFileToId(file_name) stack = ContainerStack(container_id) # Deserialize stack by converting read data from bytes to string + # + # NOTE: We do not connect the signals here is because all deserialized stacks here are NOT registered + # in the ContainerRegistry. So, some stacks from the profile won't be found in the ContainerRegistry, + # and thus failing the signal connecting. + # stack.deserialize(archive.open(file_name).read().decode("utf-8"), connect_signals=False) stack_type = stack.getMetaDataEntry("type") From 711b493ebfa74edf33a2c238f0814893c3233e90 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 8 May 2017 16:22:14 +0200 Subject: [PATCH 673/816] Fix code style --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index ebb6e8ef17..5febac0f36 100644 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -187,7 +187,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Job.yieldThread() - # Determine ContainerStack files and ExtruderStack files + # Load ContainerStack files and ExtruderStack files container_stack_files, extruder_stack_files = self._determineGlobalAndExtruderStackFiles( file_name, cura_file_names) self._resolve_strategies = {"machine": None, "quality_changes": None, "material": None} @@ -296,7 +296,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] for definition_container_file in definition_container_files: container_id = self._stripFileToId(definition_container_file) - definitions = self._container_registry.findDefinitionContainers(id=container_id) + definitions = self._container_registry.findDefinitionContainers(id = container_id) if not definitions: definition_container = DefinitionContainer(container_id) definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8")) @@ -313,7 +313,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): material_container_files = [name for name in cura_file_names if name.endswith(self._material_container_suffix)] for material_container_file in material_container_files: container_id = self._stripFileToId(material_container_file) - materials = self._container_registry.findInstanceContainers(id=container_id) + materials = self._container_registry.findInstanceContainers(id = container_id) if not materials: material_container = xml_material_profile(container_id) material_container.deserialize(archive.open(material_container_file).read().decode("utf-8")) @@ -346,7 +346,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Job.yieldThread() if container_type == "user": # Check if quality changes already exists. - user_containers = self._container_registry.findInstanceContainers(id=container_id) + user_containers = self._container_registry.findInstanceContainers(id = container_id) if not user_containers: containers_to_add.append(instance_container) else: @@ -405,7 +405,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): for extruder_stack_file in extruder_stack_files: container_id = self._stripFileToId(extruder_stack_file) - container_stacks = self._container_registry.findContainerStacks(id=container_id) + container_stacks = self._container_registry.findContainerStacks(id = container_id) if container_stacks: # this container stack already exists, try to resolve stack = container_stacks[0] @@ -445,7 +445,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): container_id = self._stripFileToId(container_stack_file) # Check if a stack by this ID already exists; - container_stacks = self._container_registry.findContainerStacks(id=container_id) + container_stacks = self._container_registry.findContainerStacks(id = container_id) if container_stacks: stack = container_stacks[0] if self._resolve_strategies["machine"] == "override": From 0d76ce72b0e99c85429c5758ca52419ca8ac6e2b Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 9 May 2017 11:00:01 +0200 Subject: [PATCH 674/816] Add comments CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 10 ++++++++++ 1 file changed, 10 insertions(+) mode change 100644 => 100755 plugins/3MFReader/ThreeMFWorkspaceReader.py diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py old mode 100644 new mode 100755 index 5febac0f36..75efa4442e --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -87,6 +87,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return global_stack_file_list, extruder_stack_file_list + ## read some info so we can make decisions + # \param file_name + # \param show_dialog In case we use preRead() to check if a file is a valid project file, we don't want to show a dialog. def preRead(self, file_name, show_dialog=True, *args, **kwargs): self._3mf_mesh_reader = Application.getInstance().getMeshFileHandler().getReaderForFile(file_name) if self._3mf_mesh_reader and self._3mf_mesh_reader.preRead(file_name) == WorkspaceReader.PreReadResult.accepted: @@ -255,6 +258,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return WorkspaceReader.PreReadResult.accepted + ## Read the project file + # Add all the definitions / materials / quality changes that do not exist yet. Then it loads + # all the stacks into the container registry. In some cases it will reuse the container for the global stack. + # It handles old style project files containing .stack.cfg as well as new style project files + # containing global.cfg / extruder.cfg + # + # \param file_name def read(self, file_name): archive = zipfile.ZipFile(file_name, "r") From acde348c6d315e75a492d4a5e2e7f8b8a94cadc2 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 13:01:39 +0200 Subject: [PATCH 675/816] Use ConfigParser hack to replace connect_signals=False hack CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 23 +++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 75efa4442e..75e80272fd 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -18,6 +18,7 @@ from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack +from configparser import ConfigParser import zipfile import io import configparser @@ -67,16 +68,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader): files_to_determine = [name for name in file_list if name.endswith(self._container_stack_suffix)] for file_name in files_to_determine: container_id = self._stripFileToId(file_name) - stack = ContainerStack(container_id) - # Deserialize stack by converting read data from bytes to string - # - # NOTE: We do not connect the signals here is because all deserialized stacks here are NOT registered - # in the ContainerRegistry. So, some stacks from the profile won't be found in the ContainerRegistry, - # and thus failing the signal connecting. - # - stack.deserialize(archive.open(file_name).read().decode("utf-8"), connect_signals=False) + # FIXME: HACK! + # We need to know the type of the stack file, but we can only know it if we deserialize it. + # The default ContainerStack.deserialize() will connect signals, which is not desired in this case. + # Since we know that the stack files are INI files, so we directly use the ConfigParser to parse them. + serialized = archive.open(file_name).read().decode("utf-8") + stack_config = ConfigParser() + stack_config.read_string(serialized) - stack_type = stack.getMetaDataEntry("type") + # sanity check + if not stack_config.has_option("metadata", "type"): + Logger.log("e", "%s in %s doesn't seem to be valid stack file", file_name, project_file_name) + continue + + stack_type = stack_config.get("metadata", "type") if stack_type == "extruder_train": extruder_stack_file_list.append(file_name) elif stack_type == "machine": From 57e6c031aa958b0ceb40591797f4d436f8895c0d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 9 May 2017 13:18:34 +0200 Subject: [PATCH 676/816] UM2Go no longer shows olson block dialog CURA-3742 --- resources/definitions/ultimaker2_go.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json index 5d4c898ade..e679f25f40 100644 --- a/resources/definitions/ultimaker2_go.def.json +++ b/resources/definitions/ultimaker2_go.def.json @@ -13,6 +13,7 @@ "platform": "ultimaker2go_platform.obj", "platform_texture": "Ultimaker2Gobackplate.png", "platform_offset": [0, 0, 0], + "first_start_actions": [""], "supported_actions":["UpgradeFirmware"] }, From 5706a540d96e8c2b9b9109a118cb11e9064993b8 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 13:39:04 +0200 Subject: [PATCH 677/816] Only set global stack in addMachine() if there was none --- 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 2e44a60deb..79b4a855f6 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -343,7 +343,9 @@ class MachineManager(QObject): def addMachine(self, name: str, definition_id: str) -> None: new_stack = CuraStackBuilder.createMachine(name, definition_id) if new_stack: - Application.getInstance().setGlobalContainerStack(new_stack) + # only set the global container stack if there was none + if self._global_container_stack is None: + Application.getInstance().setGlobalContainerStack(new_stack) else: Logger.log("w", "Failed creating a new machine!") From 40c9e45532e8f6d9faad14e42a4357c48f92fd7e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 9 May 2017 14:01:37 +0200 Subject: [PATCH 678/816] Send specific signals for container changes if we know the type CURA-3780 --- cura/Settings/MachineManager.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2e44a60deb..0d7004ea12 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -318,9 +318,17 @@ class MachineManager(QObject): def _onInstanceContainersChanged(self, container): container_type = container.getMetaDataEntry("type") - self.activeVariantChanged.emit() - self.activeMaterialChanged.emit() - self.activeQualityChanged.emit() + if container_type == "quality": + self.activeQualityChanged.emit() + elif container_type == "variant": + self.activeVariantChanged.emit() + elif container_type == "material": + self.activeMaterialChanged.emit() + else: + # We don't know which one it is, send all the signals + self.activeQualityChanged.emit() + self.activeVariantChanged.emit() + self.activeMaterialChanged.emit() self._updateStacksHaveErrors() From dfbd4107a4c81e518eebf24687a8091a59451c12 Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 9 May 2017 14:38:20 +0200 Subject: [PATCH 679/816] Revert "Enable Support settings that are applicable to support meshes. CURA-2747" This reverts commit a5033bae54c8061eece264f6e272c8924284b3aa. --- resources/definitions/fdmprinter.def.json | 50 +++++++++++------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 7e545fe0ea..0bdb3a21d7 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2989,7 +2989,7 @@ "description": "The extruder train to use for printing the support. This is used in multi-extrusion.", "type": "extruder", "default_value": "0", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": { @@ -3000,7 +3000,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3011,7 +3011,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3022,7 +3022,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": @@ -3034,7 +3034,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3045,7 +3045,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "machine_extruder_count > 1", + "enabled": "support_enable and machine_extruder_count > 1", "settable_per_mesh": false, "settable_per_extruder": false } @@ -3098,7 +3098,7 @@ "zigzag": "Zig Zag" }, "default_value": "zigzag", - "enabled": true, + "enabled": "support_enable", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3109,7 +3109,7 @@ "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.", "type": "bool", "default_value": true, - "enabled": "support_pattern == 'zigzag'", + "enabled": "support_enable and (support_pattern == 'zigzag')", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3123,7 +3123,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "default_value": 15, - "enabled": true, + "enabled": "support_enable", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3138,7 +3138,7 @@ "minimum_value": "0", "minimum_value_warning": "support_line_width", "default_value": 2.66, - "enabled": true, + "enabled": "support_enable", "value": "(support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -3291,7 +3291,7 @@ "type": "bool", "default_value": false, "limit_to_extruder": "support_interface_extruder_nr", - "enabled": true, + "enabled": "support_enable", "settable_per_mesh": true, "children": { @@ -3303,7 +3303,7 @@ "default_value": false, "value": "support_interface_enable", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": true, + "enabled": "support_enable", "settable_per_mesh": true }, "support_bottom_enable": @@ -3314,7 +3314,7 @@ "default_value": false, "value": "support_interface_enable", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": true, + "enabled": "support_enable", "settable_per_mesh": true } } @@ -3330,7 +3330,7 @@ "minimum_value_warning": "0.2 + resolveOrValue('layer_height')", "maximum_value_warning": "10", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "settable_per_mesh": true, "children": { @@ -3346,7 +3346,7 @@ "maximum_value_warning": "10", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", "settable_per_mesh": true }, "support_bottom_height": @@ -3361,7 +3361,7 @@ "minimum_value_warning": "min(0.2 + resolveOrValue('layer_height'), extruderValue(support_bottom_extruder_nr, 'support_bottom_stair_step_height'))", "maximum_value_warning": "10", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", "settable_per_mesh": true } } @@ -3375,7 +3375,7 @@ "minimum_value": "0", "maximum_value_warning": "support_interface_height", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "settable_per_mesh": true }, "support_interface_density": @@ -3388,7 +3388,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3403,7 +3403,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3419,7 +3419,7 @@ "minimum_value_warning": "support_roof_line_width - 0.0001", "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true } @@ -3435,7 +3435,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3451,7 +3451,7 @@ "minimum_value_warning": "support_bottom_line_width - 0.0001", "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true } @@ -3475,7 +3475,7 @@ }, "default_value": "concentric", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')", + "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -3497,7 +3497,7 @@ "default_value": "concentric", "value": "support_interface_pattern", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable')", + "enabled": "extruderValue(support_roof_extruder_nr, 'support_roof_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -3518,7 +3518,7 @@ "default_value": "concentric", "value": "support_interface_pattern", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable')", + "enabled": "extruderValue(support_bottom_extruder_nr, 'support_bottom_enable') and support_enable", "settable_per_mesh": false, "settable_per_extruder": true } From 19bc6bb7106d47178572461b9bd71f508fc95541 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 9 May 2017 14:38:57 +0200 Subject: [PATCH 680/816] All error checks now use the timer instead of re-checking multiple times. This significantly speeds up all setting / container changes for multi extrusion machines CURA-3780 --- cura/Settings/CuraContainerStack.py | 3 ++- cura/Settings/MachineManager.py | 17 +++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 6f475a5ff9..b76062b7aa 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -5,7 +5,8 @@ import os.path from typing import Any, Optional -from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal +from PyQt5.QtCore import pyqtProperty, pyqtSignal +from UM.FlameProfiler import pyqtSlot from UM.Decorators import override from UM.Logger import Logger diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a8bd30a3bc..7e7ad07ff0 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -45,6 +45,11 @@ class MachineManager(QObject): self._active_container_stack = None # type: ContainerStack self._global_container_stack = None # type: ContainerStack + self._error_check_timer = QTimer() + self._error_check_timer.setInterval(250) + self._error_check_timer.setSingleShot(True) + self._error_check_timer.timeout.connect(self._updateStacksHaveErrors) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) @@ -94,10 +99,7 @@ class MachineManager(QObject): self._material_incompatible_message = Message(catalog.i18nc("@info:status", "The selected material is incompatible with the selected machine or configuration.")) - self._error_check_timer = QTimer() - self._error_check_timer.setInterval(250) - self._error_check_timer.setSingleShot(True) - self._error_check_timer.timeout.connect(self._updateStacksHaveErrors) + globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) activeMaterialChanged = pyqtSignal() @@ -290,8 +292,7 @@ class MachineManager(QObject): quality = self._global_container_stack.quality quality.nameChanged.connect(self._onQualityNameChanged) - - self._updateStacksHaveErrors() + self._error_check_timer.start() ## Update self._stacks_valid according to _checkStacksForErrors and emit if change. def _updateStacksHaveErrors(self): @@ -308,7 +309,7 @@ class MachineManager(QObject): if not self._active_container_stack: self._active_container_stack = self._global_container_stack - self._updateStacksHaveErrors() + self._error_check_timer.start() if old_active_container_stack != self._active_container_stack: # Many methods and properties related to the active quality actually depend @@ -330,7 +331,7 @@ class MachineManager(QObject): self.activeVariantChanged.emit() self.activeMaterialChanged.emit() - self._updateStacksHaveErrors() + self._error_check_timer.start() def _onPropertyChanged(self, key, property_name): if property_name == "value": From b4b5061e0eb71d8f18796241c23c8c8edf869e0b Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 9 May 2017 14:44:26 +0200 Subject: [PATCH 681/816] Visibility for smooth spiralize. CURA-3771 --- 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 82e53ba88b..448dc1c166 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4595,7 +4595,8 @@ "label": "Smooth Spiralized Contours", "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", "type": "bool", - "default_value": true + "default_value": true, + "enabled": "magic_spiralize" } } } From a2d32a6fc7dfe7c8445ab94cc214fc9bca152ab8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 9 May 2017 14:45:39 +0200 Subject: [PATCH 682/816] Added bigflame to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index bb6bd49add..527e5dc049 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ plugins/X3GWriter plugins/FlatProfileExporter plugins/ProfileFlattener plugins/cura-god-mode-plugin +plugins/cura-big-flame-graph #Build stuff CMakeCache.txt From bcebf4d24c3e78cc79331be548fa6844ff7f8a5e Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 9 May 2017 14:53:26 +0200 Subject: [PATCH 683/816] A gradual infill icon untill we have a better one --- resources/themes/cura/icons/gradual.svg | 102 ++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 resources/themes/cura/icons/gradual.svg diff --git a/resources/themes/cura/icons/gradual.svg b/resources/themes/cura/icons/gradual.svg new file mode 100644 index 0000000000..ed7f301e18 --- /dev/null +++ b/resources/themes/cura/icons/gradual.svg @@ -0,0 +1,102 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + From c60fefc927d1767ccf045d4462299aee4df49737 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 9 May 2017 14:57:40 +0200 Subject: [PATCH 684/816] Add non-existing instance containers when opening a project file CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 75e80272fd..560ae76dda 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -67,7 +67,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # separate container stack files and extruder stack files files_to_determine = [name for name in file_list if name.endswith(self._container_stack_suffix)] for file_name in files_to_determine: - container_id = self._stripFileToId(file_name) # FIXME: HACK! # We need to know the type of the stack file, but we can only know it if we deserialize it. # The default ContainerStack.deserialize() will connect signals, which is not desired in this case. @@ -398,7 +397,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): pass quality_changes_instance_containers.append(instance_container) else: - continue + existing_container = self._container_registry.findInstanceContainers(id = container_id) + if not existing_container: + containers_to_add.append(instance_container) # Add all the containers right before we try to add / serialize the stack for container in containers_to_add: From 316f2bbdb517a565f55ffe3b02b13e5aee21ac79 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 09:49:33 +0200 Subject: [PATCH 685/816] Fixed switching g-code flavors with machineAction --- plugins/MachineSettingsAction/MachineSettingsAction.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 486ab25918..bfade90f2b 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -251,7 +251,7 @@ class MachineSettingsAction(MachineAction): if definition.getProperty("machine_gcode_flavor", "value") == "UltiGCode" and not definition.getMetaDataEntry("has_materials", False): has_materials = self._global_container_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode" - material_container = self._global_container_stack.findContainer({"type": "material"}) + material_container = self._global_container_stack.material material_index = self._global_container_stack.getContainerIndex(material_container) if has_materials: @@ -272,7 +272,6 @@ class MachineSettingsAction(MachineAction): if "has_materials" in self._global_container_stack.getMetaData(): self._global_container_stack.removeMetaDataEntry("has_materials") - empty_material = self._container_registry.findInstanceContainers(id = "empty_material")[0] - self._global_container_stack.replaceContainer(material_index, empty_material) + self._global_container_stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer() Application.getInstance().globalContainerStackChanged.emit() From 3d429e44aeb5e00cb6d5ded36104de322bd9ec9c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 09:59:19 +0200 Subject: [PATCH 686/816] Updating extruders now also works with timer CURA-3780 --- cura/Settings/ExtrudersModel.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 74680bb293..e742ba4bd8 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -1,7 +1,7 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, pyqtSlot +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer import UM.Qt.ListModel from UM.Application import Application @@ -58,6 +58,11 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.VariantRole, "variant") + self._update_extruder_timer = QTimer() + self._update_extruder_timer.setInterval(250) + self._update_extruder_timer.setSingleShot(True) + self._update_extruder_timer.timeout.connect(self.__updateExtruders) + self._add_global = False self._simple_names = False @@ -118,10 +123,13 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): modelChanged = pyqtSignal() + def _updateExtruders(self): + self._update_extruder_timer.start() + ## Update the list of extruders. # # This should be called whenever the list of extruders changes. - def _updateExtruders(self): + def __updateExtruders(self): changed = False if self.rowCount() != 0: From 9a387f9ee2beb705afe959df92d405fc81720ccf Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 10:33:40 +0200 Subject: [PATCH 687/816] ReplaceQuality changes only emits signals if there was a change CURA-3780 --- cura/Settings/MachineManager.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 7e7ad07ff0..2207ee65dd 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -810,13 +810,13 @@ class MachineManager(QObject): # Quality profile come in two flavours: type=quality and type=quality_changes # If we found a quality_changes profile then look up its parent quality profile. container_type = containers[0].getMetaDataEntry("type") - quality_name = containers[0].getName() - quality_type = containers[0].getMetaDataEntry("quality_type") # Get quality container and optionally the quality_changes container. if container_type == "quality": + quality_type = containers[0].getMetaDataEntry("quality_type") new_quality_settings_list = self.determineQualityAndQualityChangesForQualityType(quality_type) elif container_type == "quality_changes": + quality_name = containers[0].getName() new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name) else: Logger.log("e", "Tried to set quality to a container that is not of the right type") @@ -952,12 +952,16 @@ class MachineManager(QObject): # Disconnect the signal handling from the old container. container_type = container.getMetaDataEntry("type") if container_type == "quality": + if stack.quality == container: + return # Nothing to do stack.quality.nameChanged.disconnect(self._onQualityNameChanged) stack.setQuality(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) elif container_type == "quality_changes" or container_type is None: # If the container is an empty container, we need to change the quality_changes. # Quality can never be set to empty. + if stack.qualityChanges == container: + return # Nothing to do stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) stack.setQualityChanges(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) From 42fc703516b97cc4508a19f67b2e0154c091a3e8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 10:45:07 +0200 Subject: [PATCH 688/816] Added a few profiling decorators to expensive methods --- cura/Settings/ExtrudersModel.py | 3 ++- cura/Settings/MachineManager.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index e742ba4bd8..54bf0df3b6 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -5,7 +5,7 @@ from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer import UM.Qt.ListModel from UM.Application import Application - +import UM.FlameProfiler from cura.Settings.ExtruderManager import ExtruderManager ## Model that holds extruders. @@ -129,6 +129,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): ## Update the list of extruders. # # This should be called whenever the list of extruders changes. + @UM.FlameProfiler.profile def __updateExtruders(self): changed = False diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2207ee65dd..80e37fc7c5 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -20,6 +20,7 @@ from UM.Settings.SettingDefinition import SettingDefinition from UM.Settings.SettingFunction import SettingFunction from UM.Settings.Validator import ValidatorState from UM.Signal import postponeSignals +import UM.FlameProfiler from cura.QualityManager import QualityManager from cura.PrinterOutputDevice import PrinterOutputDevice @@ -855,6 +856,7 @@ class MachineManager(QObject): # # \param quality_name \type{str} the name of the quality. # \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes". + @UM.FlameProfiler.profile def determineQualityAndQualityChangesForQualityType(self, quality_type): quality_manager = QualityManager.getInstance() result = [] From b688178a2ea59115647837c857aa0a70c2f9efdc Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 10 May 2017 10:56:19 +0200 Subject: [PATCH 689/816] Fix one part of project load - update existing. CURA-3756 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 96 +++++++++++---------- 1 file changed, 49 insertions(+), 47 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 560ae76dda..c0c3493f71 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -89,7 +89,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Logger.log("w", "Unknown container stack type '%s' from %s in %s", stack_type, file_name, project_file_name) - return global_stack_file_list, extruder_stack_file_list + if len(global_stack_file_list) != 1: + raise RuntimeError("More than one global stack file found: [%s]" % str(global_stack_file_list)) + + return global_stack_file_list[0], extruder_stack_file_list ## read some info so we can make decisions # \param file_name @@ -195,12 +198,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Job.yieldThread() # Load ContainerStack files and ExtruderStack files - container_stack_files, extruder_stack_files = self._determineGlobalAndExtruderStackFiles( + global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles( file_name, cura_file_names) self._resolve_strategies = {"machine": None, "quality_changes": None, "material": None} machine_conflict = False quality_changes_conflict = False - for container_stack_file in container_stack_files + extruder_stack_files: + for container_stack_file in [global_stack_file] + extruder_stack_files: container_id = self._stripFileToId(container_stack_file) serialized = archive.open(container_stack_file).read().decode("utf-8") if machine_name == "": @@ -408,7 +411,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Get the stack(s) saved in the workspace. Logger.log("d", "Workspace loading is checking stacks containers...") - container_stack_files, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, + global_stack_file, extruder_stack_files = self._determineGlobalAndExtruderStackFiles(file_name, cura_file_names) global_stack = None @@ -457,52 +460,52 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # load global stack file try: - for container_stack_file in container_stack_files: - container_id = self._stripFileToId(container_stack_file) + container_id = self._stripFileToId(global_stack_file) - # Check if a stack by this ID already exists; - container_stacks = self._container_registry.findContainerStacks(id = container_id) - if container_stacks: - stack = container_stacks[0] - if self._resolve_strategies["machine"] == "override": - # TODO: HACK - # There is a machine, check if it has authentication data. If so, keep that data. - network_authentication_id = container_stacks[0].getMetaDataEntry("network_authentication_id") - network_authentication_key = container_stacks[0].getMetaDataEntry("network_authentication_key") - container_stacks[0].deserialize(archive.open(container_stack_file).read().decode("utf-8")) - if network_authentication_id: - container_stacks[0].addMetaDataEntry("network_authentication_id", network_authentication_id) - if network_authentication_key: - container_stacks[0].addMetaDataEntry("network_authentication_key", network_authentication_key) - elif self._resolve_strategies["machine"] == "new": - new_id = self.getNewId(container_id) - stack = GlobalStack(new_id) - stack.deserialize(archive.open(container_stack_file).read().decode("utf-8")) + # Check if a stack by this ID already exists; + container_stacks = self._container_registry.findContainerStacks(id = container_id) + if container_stacks: + stack = container_stacks[0] - # Ensure a unique ID and name - stack._id = new_id + if self._resolve_strategies["machine"] == "override": + # TODO: HACK + # There is a machine, check if it has authentication data. If so, keep that data. + network_authentication_id = container_stacks[0].getMetaDataEntry("network_authentication_id") + network_authentication_key = container_stacks[0].getMetaDataEntry("network_authentication_key") + container_stacks[0].deserialize(archive.open(global_stack_file).read().decode("utf-8")) + if network_authentication_id: + container_stacks[0].addMetaDataEntry("network_authentication_id", network_authentication_id) + if network_authentication_key: + container_stacks[0].addMetaDataEntry("network_authentication_key", network_authentication_key) + elif self._resolve_strategies["machine"] == "new": + new_id = self.getNewId(container_id) + stack = GlobalStack(new_id) + stack.deserialize(archive.open(global_stack_file).read().decode("utf-8")) - # Extruder stacks are "bound" to a machine. If we add the machine as a new one, the id of the - # bound machine also needs to change. - if stack.getMetaDataEntry("machine", None): - stack.setMetaDataEntry("machine", self.getNewId(stack.getMetaDataEntry("machine"))) + # Ensure a unique ID and name + stack._id = new_id - # Only machines need a new name, stacks may be non-unique - stack.setName(self._container_registry.uniqueName(stack.getName())) - container_stacks_added.append(stack) - self._container_registry.addContainer(stack) - else: - Logger.log("w", "Resolve strategy of %s for machine is not supported", self._resolve_strategies["machine"]) - else: - # no existing container stack, so we create a new one - stack = GlobalStack(container_id) - # Deserialize stack by converting read data from bytes to string - stack.deserialize(archive.open(container_stack_file).read().decode("utf-8")) + # Extruder stacks are "bound" to a machine. If we add the machine as a new one, the id of the + # bound machine also needs to change. + if stack.getMetaDataEntry("machine", None): + stack.setMetaDataEntry("machine", self.getNewId(stack.getMetaDataEntry("machine"))) + + # Only machines need a new name, stacks may be non-unique + stack.setName(self._container_registry.uniqueName(stack.getName())) container_stacks_added.append(stack) self._container_registry.addContainer(stack) + else: + Logger.log("w", "Resolve strategy of %s for machine is not supported", self._resolve_strategies["machine"]) + else: + # no existing container stack, so we create a new one + stack = GlobalStack(container_id) + # Deserialize stack by converting read data from bytes to string + stack.deserialize(archive.open(global_stack_file).read().decode("utf-8")) + container_stacks_added.append(stack) + self._container_registry.addContainer(stack) - global_stack = stack - Job.yieldThread() + global_stack = stack + Job.yieldThread() except: Logger.logException("w", "We failed to serialize the stack. Trying to clean up.") # Something went really wrong. Try to remove any data that we added. @@ -585,10 +588,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # if we are reusing an existing global stack, it can already have extruders associated, so we need to remove # them first if global_stack.extruders: - old_extruder_stacks = global_stack.extruders - for extruder_stack in old_extruder_stacks: - self._container_registry.removeContainer(extruder_stack) - global_stack._extruders = [] + for extruder_stack in global_stack.extruders: + if extruder_stack not in extruder_stacks_added: # skip new ones + self._container_registry.removeContainer(extruder_stack.getId()) for stack in extruder_stacks: stack.setNextStack(global_stack) From 6d72f512a56ae615004e6626757a517c101217af Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 10:57:37 +0200 Subject: [PATCH 690/816] Set prime tower size by default to 20 This was found by the materials team to be a better value. All UM3 profiles have 20 now. I've left the third-party machines intact which override the prime tower size but those that didn't override the prime tower size have their prime tower size altered as well. --- resources/definitions/fdmprinter.def.json | 2 +- resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg | 1 - .../ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg | 1 - resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg | 1 - .../quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg | 1 - resources/variants/ultimaker3_aa0.8.inst.cfg | 1 - resources/variants/ultimaker3_extended_aa0.8.inst.cfg | 1 - 28 files changed, 1 insertion(+), 28 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 448dc1c166..86280252da 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4216,7 +4216,7 @@ "type": "float", "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", - "default_value": 15, + "default_value": 20, "resolve": "max(extruderValues('prime_tower_size'))", "minimum_value": "0", "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)", diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 00d93f3575..2bc589ff18 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -15,7 +15,6 @@ machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 -prime_tower_size = 16 skin_overlap = 20 speed_print = 60 speed_layer_0 = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 066a044ee0..ebdf013d49 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -17,7 +17,6 @@ material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 16 speed_print = 60 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 850af33c27..b4c198229f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -17,7 +17,6 @@ material_standby_temperature = 100 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_tower_size = 16 speed_print = 50 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index 3793bf8b5e..250e77bf7e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -15,7 +15,6 @@ machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 16 speed_print = 55 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index ee03b6dbcf..8f37595632 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -29,7 +29,6 @@ material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 17 prime_tower_wipe_enabled = True retraction_combing = off retraction_extrusion_window = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index b61a7ee9de..3ae04bba2f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -29,7 +29,6 @@ material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 17 prime_tower_wipe_enabled = True retraction_combing = off retraction_extrusion_window = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 1507de5a6b..c32eb2cf54 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -31,7 +31,6 @@ material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 17 prime_tower_wipe_enabled = True retraction_combing = off retraction_extrusion_window = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index 88090b12cd..515d6e6424 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -30,7 +30,6 @@ material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 17 prime_tower_wipe_enabled = True retraction_combing = off retraction_extrusion_window = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 7a536ce033..1df6d2dc6c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -14,7 +14,6 @@ material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 17 skin_overlap = 20 speed_print = 60 speed_layer_0 = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 96467fe36c..6216c1140f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -15,7 +15,6 @@ material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 17 speed_print = 60 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index 1fd6167e67..390d3466bb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -17,7 +17,6 @@ material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 17 speed_print = 50 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 5ad1ef6b43..f0f5228387 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -15,7 +15,6 @@ machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 -prime_tower_size = 17 speed_print = 55 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 94b40e427c..a601ec9531 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -36,7 +36,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_count_max = 80 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index 5d848d67dc..8fbaea6da9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -35,7 +35,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_count_max = 80 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index 451aa19f60..4e0baac3d4 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -36,7 +36,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_count_max = 80 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index cc50189e8c..8ee6cbd2d0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -33,7 +33,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True raft_airgap = 0.25 retraction_count_max = 80 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 1787b266e2..14ec88fe6b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -38,7 +38,6 @@ material_print_temperature_layer_0 = =default_material_print_temperature + 2 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True retraction_count_max = 12 retraction_extra_prime_amount = 0.8 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index f53d3fd285..4d14349ab0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -38,7 +38,6 @@ material_print_temperature_layer_0 = =default_material_print_temperature + 2 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True retraction_amount = 7 retraction_count_max = 12 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index 0b475eda92..98d6b42cb7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -36,7 +36,6 @@ material_print_temperature_layer_0 = =default_material_print_temperature material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = True -prime_tower_size = 16 prime_tower_wipe_enabled = True retraction_count_max = 12 retraction_extra_prime_amount = 0.8 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index 30d9dccb19..c425cd3e56 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -19,7 +19,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 ooze_shield_angle = 40 -prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index b2348c7a30..071606b8b8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -20,7 +20,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 ooze_shield_angle = 40 -prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 42b09bd272..fe023b9e32 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -20,7 +20,6 @@ machine_nozzle_cool_down_speed = 0.9 machine_nozzle_heat_up_speed = 1.4 material_standby_temperature = 100 ooze_shield_angle = 40 -prime_tower_size = 15 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index b9222d6350..75ebfb6a45 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -25,7 +25,6 @@ material_final_print_temperature = =max(-273.15, material_print_temperature - 15 material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 -prime_tower_size = 15 support_angle = 70 support_line_width = =line_width * 0.75 support_pattern = ='triangles' diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index e9f081ef4a..8b46d9d22a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -26,7 +26,6 @@ material_final_print_temperature = =max(-273.15, material_print_temperature - 15 material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 -prime_tower_size = 15 raft_margin = 10 support_angle = 70 support_line_width = =line_width * 0.75 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index af18a87a20..a8fc688b56 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -26,7 +26,6 @@ material_final_print_temperature = =max(-273.15, material_print_temperature - 15 material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 -prime_tower_size = 15 support_angle = 70 support_line_width = =line_width * 0.75 support_pattern = ='triangles' diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index e7e1654c6e..925346c66d 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -37,7 +37,6 @@ material_initial_print_temperature = =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 retract_at_layer_change = True retraction_amount = 6.5 diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index b89ce4406b..9dec070e20 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -37,7 +37,6 @@ material_initial_print_temperature = =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 retract_at_layer_change = True retraction_amount = 6.5 From 801c282c973df8e79ab1b4294da52376712538d9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 10:59:21 +0200 Subject: [PATCH 691/816] Only update ExtrudersModel when material changes CURA-3780 --- cura/Settings/ExtrudersModel.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 54bf0df3b6..e24d4d559a 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -116,10 +116,10 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): active_extruder_stack.containersChanged.connect(self._onExtruderStackContainersChanged) self._active_extruder_stack = active_extruder_stack - def _onExtruderStackContainersChanged(self, container): - # The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name - self._updateExtruders() + if container.getMetaDataEntry("type") == "material": + # The ExtrudersModel needs to be updated when the material-name or -color changes, because the user identifies extruders by material-name + self._updateExtruders() modelChanged = pyqtSignal() @@ -141,7 +141,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: if self._add_global: - material = global_container_stack.findContainer({ "type": "material" }) + material = global_container_stack.material color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0] item = { "id": global_container_stack.getId(), @@ -156,9 +156,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") manager = ExtruderManager.getInstance() for extruder in manager.getMachineExtruders(global_container_stack.getId()): - extruder_name = extruder.getName() - material = extruder.findContainer({ "type": "material" }) - variant = extruder.findContainer({"type": "variant"}) position = extruder.getMetaDataEntry("position", default = "0") # Get the position try: position = int(position) @@ -166,6 +163,9 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): position = -1 if position >= machine_extruder_count: continue + extruder_name = extruder.getName() + material = extruder.material + variant = extruder.variant default_color = self.defaultColors[position] if position >= 0 and position < len(self.defaultColors) else self.defaultColors[0] color = material.getMetaDataEntry("color_code", default = default_color) if material else default_color From 8c9c20c8cb8eddfdd4be6556a4a60296b3543ab2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 11:20:02 +0200 Subject: [PATCH 692/816] Disable prime tower for UM3 ABS It was already disabled for ABS 0.8mm. --- resources/definitions/ultimaker3.def.json | 2 +- resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg | 1 + resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg | 1 + .../quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index c4e70899f2..d1f8b19e36 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -113,7 +113,7 @@ "material_bed_temperature_layer_0": { "maximum_value": "115" }, "material_standby_temperature": { "value": "100" }, "multiple_mesh_overlap": { "value": "0" }, - "prime_tower_enable": { "value": "True" }, + "prime_tower_enable": { "default_value": true }, "raft_airgap": { "value": "0" }, "raft_base_thickness": { "value": "0.3" }, "raft_interface_line_spacing": { "value": "0.5" }, diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 2bc589ff18..f0f07f7973 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -15,6 +15,7 @@ machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +prime_tower_enable = False skin_overlap = 20 speed_print = 60 speed_layer_0 = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index ebdf013d49..0b062b0cc0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -17,6 +17,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 material_standby_temperature = 100 +prime_tower_enable = False speed_print = 60 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index b4c198229f..26ca695cf8 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -17,6 +17,7 @@ material_standby_temperature = 100 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_tower_enable = False speed_print = 50 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index 250e77bf7e..c3f3fb83b9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -15,6 +15,7 @@ machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 +prime_tower_enable = False speed_print = 55 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) From 2375c832bee7479b63e19a6a1a866bb5faf607db Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 11:50:17 +0200 Subject: [PATCH 693/816] Revert "ReplaceQuality changes only emits signals if there was a change" This reverts commit 9a387f9ee2beb705afe959df92d405fc81720ccf. --- cura/Settings/MachineManager.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 80e37fc7c5..ba8ef39e54 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -811,13 +811,13 @@ class MachineManager(QObject): # Quality profile come in two flavours: type=quality and type=quality_changes # If we found a quality_changes profile then look up its parent quality profile. container_type = containers[0].getMetaDataEntry("type") + quality_name = containers[0].getName() + quality_type = containers[0].getMetaDataEntry("quality_type") # Get quality container and optionally the quality_changes container. if container_type == "quality": - quality_type = containers[0].getMetaDataEntry("quality_type") new_quality_settings_list = self.determineQualityAndQualityChangesForQualityType(quality_type) elif container_type == "quality_changes": - quality_name = containers[0].getName() new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name) else: Logger.log("e", "Tried to set quality to a container that is not of the right type") @@ -954,16 +954,12 @@ class MachineManager(QObject): # Disconnect the signal handling from the old container. container_type = container.getMetaDataEntry("type") if container_type == "quality": - if stack.quality == container: - return # Nothing to do stack.quality.nameChanged.disconnect(self._onQualityNameChanged) stack.setQuality(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) elif container_type == "quality_changes" or container_type is None: # If the container is an empty container, we need to change the quality_changes. # Quality can never be set to empty. - if stack.qualityChanges == container: - return # Nothing to do stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) stack.setQualityChanges(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) From 2e3059600edf1195c71dde28176408988ffc87f7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 11:55:24 +0200 Subject: [PATCH 694/816] Convert ASCII STL files to binary STL For some people (perhaps platform-dependent) reading ASCII STL files is giving problems. It has smaller file size too, and nobody is going to read these STL files with a text editor anyway. --- resources/meshes/FT-5_build_plate.stl | Bin 2106376 -> 352884 bytes .../meshes/kossel_pro_build_platform.stl | Bin 561386 -> 163084 bytes .../makeR_prusa_tairona_i3_platform.stl | Bin 430587 -> 134284 bytes resources/meshes/mendel90_platform.stl | Bin 589730 -> 170484 bytes .../meshes/printrbot_simple_metal_upgrade.stl | Bin 566320 -> 98084 bytes resources/meshes/prusai3_xl_platform.stl | Bin 912977 -> 153884 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/meshes/FT-5_build_plate.stl b/resources/meshes/FT-5_build_plate.stl index 2891632d5fd0ae82dfa8d4b97098f956de53f081..009eebbfb5fbd0cc7c38be0e805a61aa0e9e3ccb 100644 GIT binary patch literal 352884 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चYVt94g>xfE$c;&bWHTCh*?*APT ztcANEY~#nf9XrAjCjPMEgqn7>+N0AWg0*magl!DX-*$v0Ow9X9UrqnG>dciRg0*ma zgl!!Ez)LwxnE3oR`pOX_j0;I}&-7Cwg0*nkm~FiF^7x!3OuTZO=7UC`Of9W^>aF%Y zZQuD#+j!@dwy~egHXfbuPNaq1;k1qSUrZc--pmn}FoCyOOnhL!Z;Y^n3G6yEarf-o zBZ9T?{)>r=?)~`)OPIi}GZQPm`esD17T$j`an(mx>ac_f>@72K@>6R^1Z&~_7Zc0B zxqgQwOki)BiKBNMhzQog`!6OgJ6lfWm0!$C+e~1mn294sHi-zSq}webFniJxD%eupJYV5gXgzrSydh+r+e|6=0bjg>kqVFEkFObk8w{0I}Q zg|}Hu{JQ(|5tcB4y=5k@-sy^nU@g4OV&b^#zA?fQCa~+w!~;*S84;|7w^>Xaxa+O- zC8o5^1m1Zu@yu;gJ2>~4ws9UZZEL)r17PBg*W343wfux>+Q#`yCgd#VFiY4T&Ui8* z=S7EE!UWEdG9hPDhgre|&Z;u;+7sz8OPIiUSSI9b?J!H2z)4UhZarpFhb2tl^aT@N zdu`c>YK3y=lCJl6SH9qb^!pfTo1cr*rfg%gY_AcPFoDyiOgy>wT_Y@E0%u2=_{j1T zM_9rH&c-qE?kWdH1Z&~6DHEH{n=`@^CUDx6iGPfqKf)3wa7vSj6BS~%&*#GMZ}B7(JW(vgXD!hK8G25a^BC4~dDS+YxFOSBp9p@pLn7qlJBP?MXI1kB$oSGbA z2@^OE$%LGm9AOC)I1kChX)E0|!V)I1Yrw>9AOHCXOPEmq!M}{i#Dcw7jR@9KuV#~f z>h}SeSboUoB7(Kl*Ya-yGV#zA7eoYWxd&Laap42|FXMc$7H&?njT1&LjBKzLZca0i zbl;^fou+Np!hJO+&Ru1~2tSuog&W{Zd~3ojBP?M8x6GM%_PKXQSi%JEa5J&mMtvQY zFo8SVO#JL`lRGS70(ZEXm^W{y4ojH89d0IGn7Vz3B~0KBHxnCu@gp6UFo8SVOg#M2 z)jKR<0(ZEXSn$k4BP?M8cjcH!7M_x`gb7_C`8mso*!PSPCRnR}bvL6qd>{8a?zQfb z>uqwjA*WdHX9*MPU-$O&kDWJlm?cc8x7^#$?W4c-#&iTlhD;%y4d^k2ELem`rmuZ5fJMSU0{ zx8jFc!US&1Ga)zchgre|Zsao|xBG`#!US&pGa+9P7-k6*__6>K@|A*NmN3D)s#;2Z z+Hi3C4@OwRM7=M1(7vmWXsv~E=aR;a{32Cm=*2%@9ucgC8~IEu`sfQ0!CJUq&xG97 z&pB1Bg*(bj$X)#rmN0=E`AmG_xJx2}wQwV!3Aw8u5v;{~PF76z&yDxY$T?N4gL1D}Zq z*1~&3CdS^oYKLvG7Ty~&(LQXWh+r+e1!Us3Pj4C#tcACLOzic_#E4)myai<9w$F}> z2-d<|KqmHD?VYHsSPO3fnaDQ2HzHUIZvmNTKec~Euom6|GLd|8hp3gX7W={IAM)*l zXuRS+k1r&!jnVo4hzQog7ZR9|Zzn{fC~M&h2~1q`$oz<4Eqoz?iT-V`iwM@j7ZR9w ze|Bp`uonAWC@cAPLPW3@ZnCqDU0-=PX9*MdVgVBeU9|lOOPIhH3z)e6&!>;Dgb94H zfQfZJcf|-xn84QrnE2b0n?_i|1iy7aS$*c}J(jVAiF)sK!N76%^UTTRhFkxfD)}D3 zFcYkWTmMYR_W&Y-wQ%d7i9I(wHX>LHxBi)U_{GB`g0*n#pNY?`G&Lev3%CB6*y`|C zqq1VH`rTUj9zci7inZ$fUAeUt5v-+83j45Soo8>JI*q;xo3`~$^?t7&YHvg9eYlC| zUT$yPgBI^V;ybXM^Y1QReT1LOTK?Ahz{=a#)wkSage6Sii>qv7!Z$w`5v-+et>3zM zpNfsgS|^OKgb943m2JE|`}~MtEq!af!8i7-*qFWDWwPT12^086E8F;XdSgVemcF&V zbNAgVHg^2;4@OwR1isPAHeO495)rJWZ>=xhW@g34Iy?MSQUwVU_(m(+xZ!WNMFeZ< zTkGC@Ja)^iBP?M8-)LnUXKZj|M6i~=weGEtv%hk!qzV!y@Qqfsv1s%2BZ9T`t#xm^ zYJKI*5tcB4Z?v+Fht~RBM6i~>wXXJ$+fLnOge6Sii>qv7=Mz?s2-ecK)}c3-BSW(M zU%$^;!UVq2$~G2_nHCYO#ojV({QLcv%PAeaCuf59uZ3uT5x z0ZA)o8eu!Pi0oX5pR>o>bO(`zyO>KDb1AmI?8+f8|70r=_(P;=KlsTW8#0vf|ZpBP&VjZ`7pi z_;w8wkjQ&Sy61zi=HuLzu5M)OjFVDJ65JWp=i-hk;{sMlgzZ7f(kvHa~!oYK=f z?&1EZ{0?t<161priFz%jHC4&}dpDA$OH&Eixjt_ta%%2|DV@Wf@pi?nCnBdQwmRHe7u>=^uWs@1yg!E6(_JbA+n|B;A~8gf-`qkKvFHq^gyl@Z0Ut@+nU- zQLn|crb=2#9@-V|ZECIID_IC@4Ke|V-)r~#V`&>tQX5xXF{`1!fiCH@cICJJvNYVH z(-t0X?Rje_BCFGq!LOt>EDv6~v~Be+!R>C?R_fWus6+4Dw)3%TR<*GUVXF@!An8gg z0gbTLhZDnMB2glYgRF%x*)ReU`9&_G5jGpMt-p5K)xXDA2+6s& z@Tyj5yMDS=o~-9l*Y~!2$LU))KXRoL?YFmXZo7k?du`0|aYLe{WqO++LE1_U6K6O0c9#T=vjVNI2I zGQ)-MBQs9$chWY00|fCEBB|G6TJy1B@%4>lou_R!fRE!dnSSL&+gOO#a7+Z>hqZL> z3-KCGk{@nDB~U(^bF^u>6ApsfF0_~qsoFP9mP~A`jZn8bhvO!S{Mu&e?|RNb)N3)V zrF+E{kBEPDYN|GncAj6mIpQk>)j4Z1t*J6URQ*x;!|G0I@CI2M7QPn3YJ&+#;#DJ_ zL^iBGKy+=L={}s(!JjK_7@^M!T1+FXHZJt_M=Gq;Ia<5cfv@hmwia=}MDsxe`6aC7 zH5k^0a*O=JH5$phd2O|!{m+T+y*6ZKkJA7NCovhp64sttJhJ_CdsLx@)! zMISUmduOi}(`MrXw#I1-n_w<#6)P6s55R0tB_Q#YP?+KHBu&-+7k+12GH;Bf3Vkh0 zLwnU;6ym){5mEL**3!NmXz%CAY+DanKHwqyPC+?dk>@PgC4z5&)zg;qrLx}Cb*KD2 zK2Ch<4OcQ>{a;&d-F)>04YzWHHRnbDFanZR&NRYi!*^IxwE?0_UU=-0iy9H^pEHfH z*}(0yggyPoFWsg&bi4W}-Rjx^L{_gQc`9kO@rw`b+fMHFF%ctjD-Ywj+CaEUK++|D zmwn%^maeC&Eg{=m3bPDmeVu)9&o3tGwOTpit*oeYG5Q3*#P&JQ4LQr z8`$wmxD;3W)V9rc-t+oEyx9Pe)oZnK#G4J;FJZ~!kBQcHF@LD1=QDs3A>M5;QKzNP4e@T{ z^|@o($pRUB2pK8+bGr_soK!hM3|j@X7E0Nu(cBPDz*K} zA0)m?2{fLhtz<>tXJ{*d(shqDd^r&DYJ&-FCB0fqo4;G^?W&Eiy3^eOUeSecv1?H5 z?FJ&Ok*joAy{ex475n<(Sz7L4t+T`pZjN}h!9=|l(`w^43r>`Yb7kdG+&0R1SH*@X@tvE?IiC&b02GR26#wsf1)~-@ce%CAZs5DfZ#IGING_wZTNa7Sm>9>C$pv^zm^! z6n;r7U-ZtD!Y`5fD8p3(5=jZs2y3ePsn?DlH>I=PnTNJRef<9AZ%f$g!^3KW39XNy z#Wccdqwr+pSxMra%nGG{HG7{GOaIElRYHB7pv5%8nkrhQiYK#ubB%8$_FSE1KD~{G zy*@nNY|y&4Ud!hwrwbdYjf-MV=hPt4IXpZU@r8|&sMnIYwxrd@M(Sl~%H(g&OQx26 zV(AN0JM(vW*ZK;=YJ&+#S~=4QtBn^QTw1oP=YP3lbGxY@w&&iyc*o{>EBwUzAi`Aw zl5Wm4!kQ{+C7O>^^P#EocGb01g|?)r3auw5AZg`HBdn?7RVrGEw)Wt|OX-$jO%)T6 zxOX2~AD&d?T-OFtCY}$kgKqxDzovHXduq$JjVonXZAj^s1Z$ygx|XLLD;tz`WV zZr}Xljccd++~@b(uDRJ?|I^U6i+Hsm<8DdRYcZ|)C}smmuS`|)u3)`)yiag1LRf7u z0g1m|2sECgHul;;-b)nU%Sbky+PU|Cz9;r{Tf>$I3w8%2+jevl;3|8kpR zyz1twE#IaXuVhtJhSdfWkVx8zMp$h;OMb~~Z|=~1vYU%N85xe>vH9@G;noKct`d-R zbEXm2RLMxK9&%gr0Z*ot>uedu6@=9W6OhCn5}u?sq?I&mloK0w~vT|GPAzUROiAPR6N%Qerng>Bh9nf5Yu-ae(k~k%JlG?D^)Ayi3O zELxQFxD;Z7%Yb02GvXa@LoCkFjE%!3Yxx{^H zk5?N+WIVIf(`JLtk$Fq>Q#!o5N4QEr5?Z*^c#@_{PQA3l`U5RdJ(;j>>rz;4Fu__( zBdj)Lb}m;FI_rm7nAj_gn1cZ7KRqnYD4Czvh8A&5s&rKu;(E8D916iL4@rTg`EOu zF|9UaWKbKau-4jxx6Qpv%PRQrF;TD8GQSkPRz|oq_@X)@2On2w03Q>5W(eb>jfo|} zT1+EsW#!|pVQlwvYiR9N0+MdD%Y`Rd=`LMb_7BXQQljI+ewoZyW!P*G0g2lP zGculJHhibZ@}X-Pe|O`x7T&8NzDn>eAhej)R23_Fv!Ol5_bFTCh5P&w_AetMgRjn7 zOsfrRS315+AH3)dsD$Jtd{rU#_;*1`|BW@R}U) zMLyEt^uz3U$^O4g1r;VM@iIcF|9VZKClvY&pXT+h}V1&kzvm8l!P9Pc(qZi zKZdoeu)32HEmsp#n`O94K+>fZWW1WR9hSD8!P5FD_rK${0pc|uvL{m#yf%Oq)0!&r zMcZMoPiGe2Lv#>DtRu%=4Z=V|bLxCVK|LAXjl!u8yx7Nhx)nKKP@ zEk-!0!E)E2MPaqU1Zy#ku-XWJ*_*fRI{m$Ia-MQsJB_(GSx?SDu3Ov%Sx?S&dc5gp z`mYkK#k7V4O(!$6%jH*fah6l*@LWD~X*T>krxCGMIPuA6JdMb9c;)rYlk76F0fMzS zg-IgXKXmT0CQGUW@}b&x0<_3SII|g-0-xoy6e(7uDm;sG%c)h>B4tAGiO<+ZrF4sY zTpkfz2b?E62{i3r7^bKE#_qTm=+OQ<*w3ybg z*zj}uHkK^gbVBEaMccMj(!6d$=jh{y?0t5KfAo=0==nq<>a>`48}b%8mG{oF*OMgS zS5-B=`kSo3f97$qouwh{`CuYQREy~lb{lj;NNn_XwtQOm-aH>;zOav#Rfu;RL}Z$e zsut63gWu}wFVMdE@XA&`_bu-09KXkam0JkA4JLv_pT%?tyA6Beeub4)w(mL<%ko*a z>BLU=(({J(xgowRt9IgqIfu z;*n``KC#lS

WD_f%Ei|6l9RTIc)rx_dwMo^$HV zT^x^|c+yd)oZ08p(@yL&e&UJ8_WA$(Uv$eZQ8eqOv#XOPcQ0D%JS;lB^s{|OjM;kd zm!oNKG5DTQQ;(Zc8Xj+3|9eQNCyxLfMaM2WzS`@{r;C<4m7tBNp1(b{G$|h5&`?4> zd4y|he9hSE(pi0DOJyZ!BkH>!PA+XSVOT>$3H9U=uCeS_->Gg}7#CYAD?uAkPaXQx z((aE9ZD=T=o;<=e7N34+r8@lN*iu;u+K9Su^u*FXj-$paLZ~N?aE)7QGZ&1QFg>Pm7tBN9@iaI8uctSlu%C| z;TqE)JUCu`wQfjdC1@jR>b^fNUHBmTM~4xs8DXico;<=e{&4Q;ao>KI6fJcsK^svs zHb0=W))VaKAo>_#sZ%|9glj}mM;tZ&rvzLIO!YaD2`yW?uzs+I~$&_)z$`u^9pYiKB;o;<=e?y`2Z)rQ+u zEftiYjVQF3p4V^R&`?4>d4y}+ap?!edv-sjYN?s3(tbjYdDO zT0bu+K^sx%!QUN6jYdDO6Y9w$T%%`Y=7KR3rdKT$l%S0$j6}VP)aWIIdh!U@cwx$& zm1VPafeKjadzIVL=Jn zh{6mva{}A066(n#T;pdppWpVMrz@7)l%S0$%+$3B?1La~H^Nezdh!U@xZ2hw&rj-J zu@n%b5yce;)+V z7+BdXAT)}$YdmuICh;kgcdc3~sE0N*o?AMlw86@48X5~5#9b$i4G4{*?HZM{-YK5= z%CS{T1@+K|#vLb2E=9XhqZOf1v|Z!A{X2^9ymUs@Qb9emp|Ri0<4eDKf9pm$NPPX` zlz`AE+ODz1DSNg5?at{{O9l1NhQ^U+{iL+wWonREr*}s{XcTSN7};~iI*145%{yT+NdY1Qre?pd+arXJeRcw~#6OT{a>vLx|n z+W`TgQM6sd)`?ZFEY(As8h>7&Gfr0oqd>!UjmcJyxBKo{wA85{+N`TFS8?V9@s1Hc z{@&PtK*vuusjME_&_G{#Y;@evSlS@E&uR|{ zjiT)uv#g(=KkA^^QdvE;p@BZX<2s`n8kZSyff2iv4hsm4qU{?0dGYs^1A9)6EtSY)t{thM&Nkvo=FghtVJjmA2$XzRpI z_0Wa}R)e?g%(0}gPAu9wvCJquOQUGJ#w=UCUbo|%qNPst(1r%qzF)q~ahF8jU49)9 z8b#YR9=26@$JWoaTe?*}w4uS(IqWC`G2IAD0ijW}T>~rq{L>6;A+^(dk1ht`Bf>HAL+ayp=63C{zvC0CCU9LKsQG>YdMSwcNZ=%^i* zLkW%25hEnjqlC^rtqG0NaU~>BSNtsnb;Z*NoP;!g$8pBTEA=RWF*turR6?Wlu1b4jS7ghpu_3ki(W{PhLzfM*MMv&~^1m^bU*^+7~ zp;6k#LJgf?VRKL3dahNE5*XW?rv{oUB{T~2O7j;iCDfw?=91>=M=L_3FxxeMiBm#7 zN??X-p5nA3G)h~j$MX%UM+wZ-&C@8=P(q`$9VZ%P)2V{MZ$enta+Lv_>lI(`HZQRC#wXO+`LYv0#I9UQ?34XPJhoduWj^J5BJxXw#@0!pk&RtnT zJxXx)>6*|eqDDupFij}qLyWHpq~C>^^(4bC5U7UvJxoQbj;>QRC-Ttal%m|Gu3mCz`Cvth2( zqXg{csk1Xp4Ym@E()S-~aP5Qqa?XH_I>ag}DTiUMp&lhT`*clc6lc^dp&lhTCw5I} zl)l-p)T0E~j9n8N zrL89{xq6h~+Bd7Aghpu_3pI4^!_0|&CZ5}R9#oGK+)ZS2rG!Rd1ji0JOQ=T)?q0ek zG>SX2ETJAHxTorx&?s%8VeP6%3GNNE8cJxCw&N&TvHH-erPxw==ye^XoueJbe6;F_ zQG365PHFVSF?E}NU$v@RDW8Bx3EED0N$_P@M|o`jy-JS`88Zf+DT{xW*!(-RladDn zJW9}ZVxg6xU$=TH@AcxY^>RSt_PnZv1$W53s(*G zC_y``p}EqWtemrb3k~%sK|5RWJOWYFM)|^WTyf7fb@izy{bMw1;rco6Cbf_)hn7$Y z*2q_@-biUM3hLBbv)?xojchrn0gn=gM#Jj4-E#1kqr!41p;4{tNwR|)2D>%s4*a;4AGDApVF>gDLLK3?y&d>==Te|a>CqsDJDy7e1W zj}p{C?+P`P&?wDqSi9;`g1JR+ZcS(uwX?mJHG2M)&j%v|%k=a!i&7fuA&t`V@2I!1 zCc9SnsIu4CCD}8-Vu|7w^zVck3ulRS4B?%F!CryBM!se)|%~42&y|oUC8(FJT`eJ7492Mcx7t;Ltuh!zGqtNx)DA}KI>G#+Mp-6|?OLX= zcGaT<>oA)uB{YhE&$cV|C_%koY|pe^jbiz-?Mmy1waZzJqf%IMt;IYdnQIO6F;NNH zh+>;g=JSM5PaYAh8R{ihg0}XR*6$o1C0K7hQh(lS*J}F@H$^JUS-eB(TX$_!pEEY= zKdyAlp9a=#{@vdoiH&|TAR*vUf_CtVO+_H=c{0LmD|Dk?pnWQG#}M6xEVH`^IHSIau;6 zp&li!x$V+AogGD$(5TkAQjZb?qnUM$>|CpaM(KMB-v>*MT4XsemXOHyLG>uX9A?K7 zB{YifKfAtCj}k0Xb}Ugsqu3U*?MgjLFt^!qD4|hW>tXGxM+xQ@HQk!fC~9Y0JEPD) zsDU|y+Sy*K9wk@{*|m=n8pSr9)zB!uLFB46p&ljJ#rm7Ok2x$j zP>&MKVYYuLp;4OKRIVChEoxB-mMPmm^jR83ZMOF2zhoU4U0vTtK?62-Li{^NxGVur zn&2)hiW+B@_5I)$6R%G8fJ3jFo$L+ycW)&m?98&D9wlhAU1_easqbq&SJ%|{wY0h4 zMeSw@FL_9CR~$u~A3CXe+U$EPmfGfAac=3~-`j4?vQ^VZ(f)eXYNZR#JGV4+kpDd- z)RRYmj-t_rO{(5F>)wi`HYI2yYX6-(O10;Zdd7Nq;~mrZ;>2~43QEvM)Q6}2tTb=;Vxt@&{%wS%f_m}@*EsHx{?%XK z7$XG)X+-_-xwA^go=goT)RRZJMzPkvdg;wEQb7sYh}x+88Ks-1$Bl9*p`JX#HLm@5 zS>@f|9$mFmP=Yq1F6wrA>7!p$<2obWF~U+oJ$Zy{3^n3QBP<03X+%A6>*Uh?2aIZz zLkacd5w3Cd|4gZ@b;Z=GrGgT)5w&Lfq|%EgQbP&#%@(9;Bb*(AI zhpetF6_lWjsP#@fvUL7!tScqdlSjD59;Q(<4NCglnv|Vp(yz zwOvaEC1@k+TjLHYeZDTsp@e$!2-moE`Lbf)yN<3}Dkwo4QNQ|ZKk4V4LZ~N?aE+fm z+&>=vOS>ZFmvKP}+KAe6wS7z5uFHO|gnIG_*Z8Q`KmO>ZxN51O1Z_k;J994?ca>02 z9^o2)p0`gt(B=Y#t@Q5ye;_QqJEgnIG_*Lc@7KDXJxQb7sYh+1dzZZZ#o zSZRc%f_m}@*Es*MN%7Fj?yXpAQ-U_4cG+v!(ofdqJP2Z#5tiE2lSjBlFC(tI{N9SC zfFO;ii{9EfSxZC_h--|n)TW+1!Zm)h**WoV-dMT7Qa>eVBkIJ{b}pS<8rgUsAnq{2 zQa|b@(9=1%7|~iv9jILtxC{l zIWGFiwvBRt_=XXdZpCxy$s=52OCt_`b7i}wfFO-1)WSC|8s5-QLOpqeYmBrv_{gk# zi}wjMOv6&A60{M8R=Mrsp$!cs)RRZJMrr;&@rfs{ zi&R#EHlonGuKHw1Lu0fNKQ+QqSv`4#Ycxg%j3)s>8c`S}b~~6FN~kA~aE<+KOq_ai zj8s;FHli@v)vg)bD2Ed2$s=6j3ey;48kWjR&_)zS?L)Vqh7#(@BV3~~N5wWrm6f24 zD9k?JxMrJ1IT~|Rols96;TpgBXj$=?yN-@6m6f24D9oax_ol{NA=HycxJF|I5Zjue ztORXDVKp!%qJ|Rc$s=6jd%dOY^kgSZA4*J^RsuhZq(JrLZ~N?aE->QFSeaz zSqa*R!s@K4p@e$!h^&SZv=N0>X1<1c@(9;xtf^yLQ^w;0Ly(O6U03H9U= zuCeJlQz~V9AC}5W&_)zi{mpi@u@Sc!VX3U1Ji;|T_-I*WA8Wgo0)jN6uzUG-H}*j# z)RRZJMq{rQ+g`1#1Z_lN7uM|OjlEiId$qE9@(9;B!}gp9+gM^LAV?z$yUE!@IVPSi zgnIG_*Lc#1bxp%kSqa*R!mhYE?kb_4Ji;}i`TJC#vDv^y+uo%O3+3WPFoh9o~#*+ z=xv0hPW9vwuCd?Yld7LwbZ^m8K#)chPK}!D5)dC7VX0F+d4y}&s;@fNR!f#{Rf0C6 z_;stV;XvGGgr!^6lSjD5AS3R0-By;buT1{MI-W(E<>1*_6e)q{(vwHHhK`~*t;P3= zI5)m!_PKT2Pw{5f?ckicK2qa^76d#>JTd3$gmwi#A?zqCp;0)8rFKX#S2+2_**m|W zRK1W;j}kc32hG!3P&l{jC@Y~+{5wx;n*?)(x}pY7%t`PhwMnQ)3F-yEG_=eWqNp95 zh1Ur_3niomejlWEwjAnFf*Qf^YC*2>EREvZ%xb7d3ATmcceT2P5*o!;lFgNRa6*sw zjFRh<@GkH_f9L8^0%!X9twafpqIU2LR=phRp+^1JzDED(x~`OIJ|21n&ccMzMV81zxwTUA9Ezgzc(c^2QjGZM$q4+Rv59)~*t?5yci0d^1rm zhkEje;CIdpK^jpkdA1zt$s@AmP=Yq1SkuApQT1G@M+v^oV1z5+o#@vTtF`S@`ss{; z^)K^sznQ2L{1OoFoZt1qKJH&*ONUP!9)8zXCziDxT{_|Dt?Qoq-W*f<>aA_+cKGdw zw-f)@$B*=HF2ipiRYUW8 zXf(Eds=_kq7mZ*%S6Xr5K`M`+ZuPZmnw+bXXd>QO>#B-BtsqxkO)P^OU3_c8hQ zgG*PxnteARp>Iuz$6nmGw0gzgW@|#Da=%rpw-WUzaYc_kOB1^d$$95WXq0~Y73NAk zN}ydW_{Gp14J9;c;rJ~|+pd}VinU%2^(dk3EzFe?8a4jN%}a}R%hOPg651a_4gGgF z`Y&ou-}velEm1v6EPVg$q;G~AN@x^++s?K`9RYMC(iR$Os7Hy`&MfS7FZh$e@Hq?RwD3N$(0Z)T6|GZ=RWq!L136S}|a1i$16xCG?B5P(ulg+Va!0 zTl7KoD3SYhTfKiMp;6!b;khmPpn8<}Mz0ykToRT;Tc3WT@#XGUwdl26@1l+7eGQRq zyV|N%PruO!bEO_7TIWg$joR}0t6Gc<10(;k0{PwY`Pro{-|$)V%iU*}7H+ab&IqS- zD#pYse(f`-&Lv?v)T0DO?UnDvIT}i66#u1OwstiNGtT%$qw3FXO{hl+^#99u7@dk8zocaxd*o(G ziwOz+w=(*#L>9ikOR4V`dF@I)O6Yne)KEgB_-`$Q&>cY61WT)JIwaJi&uzV%P(q`$<%b$NmS9fgxT~W?NT^2%%#ZoI zA|*6R=fqG$JxcVy_~*$ktTmxg`mJh6s7Hx`(Rs-(tTmxgtyci*Q387TyHq7KN>?9A zuFBR&s$B2jw1(>|*j&#Ar#N+jYX*2Yx5K7hmf*?~9_A1>*Fjl=?;IZ1E^NNdEWuF} z9*&%_Iih9>^(eu4zH36GxTnq%T5_(I5v8>dz7O>%!BuUd(P3||{yvn@D7MgqFd-+@ zqXbvAT@xC`o|YxlqXb)G*MvrK&6p+BqeSbLsDwswEt=I(j}qGQ!#AicgFA0LmpkOF z2FG1^IM%}E7@Q@-ocM@?DD9hJuGGV^1O%Rhlc_`_X;(^U6jufbk+duID51SM%#{)v z#l3n~L&ppqyR@f;8tPG^^$4egMsXLO&6RqT;Lf{iLZf&xl_k`p1W!D>CNzpCQ&~bi zO7N7TYeJ)VGLQO>-*qYEN zu6?uRP>&L=$6X~fil_Bi4PCKty^AOv?ZR@XM+vUAvl>ch6!+0tLZi4>M^tMd)zFc9woR#{=XC0b0Ug6;VhvZ?wt{(+F@O(M+u&BWHpq~D4tSe3H2zU ztB){ON@x^MKe8I?QKI!qMq4{iAn{yn$6>D2qXbVsv$;}2qjX&wYN$sE{*IT`P(q{l z%T|_9j}rVnvTH)4TF>X|QG&lTWi^!0C|yfL(RJs|sH_}&M%hx8w+7$~A=vn`0yb|f z@Gl3HP*0iw?L^}ax-$O160jM?n-~0h1|`&!CO|uZ{9DdCkvk<|GfMA zmmJGY|O#@7&0q=b6X1ZXE7u{zq!?hmpQE5TeLigoB;Cn%wwGyx4K z8gH;*H4rPo+C>!Gf`4V9gnH5hG@SU%>gfHkXA~^OO0bn6inn-pu09n)J!zs@4l8-g zx>5o*qj>v8Qo9MEo-_eEd4nW_FWWn>D#6-C6x)J-pV)ZkbwWL90vb*< zT4FF>;oBj$64-3h{=JV9>PZvOa6(5PCD_^##lGp^`zWEFGy#nUVRba$#w$z7cm)r8 zEo_c4{)NyABjy=lsiK}V0Szbc9_*d8;k_uq(Fak?t>1+N!rn<6-ivzD1T>szl)Pa7 zKN+v!VXk1a4*g3&CDfB9py9+vR^or!SYjy|ui##1&`4GQ$@)qO<_b})!|eJ>J!t|O+4YqYtX)L0Eo9eM>PZvO$gZ!HU@Jis zzM94R$gZ!{lO~$w(DjuP`ZX@T7luYsyUF@WJ!zu(K3=u)YRZfmZI+5k=y%BYKDpVh zK%8cTrJ{P$1T?%|VN4%8V@9W?iW2GXo}uBbT?yt2o-_dsCmLgWy$>qETp@~enDp9Y zyi!k^fQAz~UMa!aMHJgYc73IuGy#q5`icZbGPV-fY|}o9=8aeIqzPy^VRe;^KKd-S zc0{pnCbL08s3%Q8BbjlM^_3FrwTR*vlgw(#`bs@%0vgH8nXIpr;OK)WYWsYy>nru7 z31}oM0F=DGW>A8;LKN%J*CmbGtrO}=6VPx%S4&E;b`iz4kX>J?Crv;jyS`F_tprhQ z)1E6`U#TZeG|SQGgY}Xt!PbuFvTr7}i#}K<)RQKf@8d-qOFC`zv6PHgcoustY>qMB zNf+tNt!-+SHILyW?OUZZz4@V!;7_YpwE5UNWlO~|i=pVAaQi8cc6zeeQ zwWzBy+LwCL1T>t;8?WGD?ZReT@YRy8uhf$!py9;dN3I>8^ZI^B$u0l*CQX04(cg5U zh{Rd1?;8*rMccn_d-#E!io30UR&1%P9@;p2)8AX{zj)h%&?wrj@zd?rj@zspmdg6| z25m&?>1Pz3WJEtBES1%hN4Un@_wQ6Zz{+7MAV?!he-VhHcZE<-9^o2R@(SyUC)@DQ zMqTM?biJ-}35}xd8ukXOeCO(+4GlfNuD|m-aqjE;ml=g;X%ubOcu2~jzx>cfl>SZ? zmP0*xM7A7C&_+~v-mWEAPafeK=dO2F^`@tGs#t2{uYK^)MqP!!_JO$Bh+jN4HXt;L zwrjll`hL|T?44LDsE0N*^w-5GYDH)iZP)nNa`oK9J5?;T>2KS#5v9N5Mv)Tg$s=52 zoRy>hc55RQl%S0${XII0Kx}D*rGk3$2-mn`Qs3(3^Tr}2x9OsO_^Upm^yEH@lu%C| z;Tq%rKE5*WxHGGk3QEvMl>TNBMH7TjPacsi2fuoNhc?QjUtBcHF>~II1xA6;DB7+u z^40N`RaOp51@+K|hJHB`MccO^G>W!s9JY9TvB$(StCkA<(ghyc(9rJ)qv-G!ghtVJ z4SRzz-?@5dLqoshsn=DVxO(1B_6D2(`b48>yGH3BW#@RqZ4LZfKA#hn48+|_T&!tcmh5gJ9?bJg2+D$m=0kHu0!J+zS%{cbIa zNW9!_SU_kLZP&1OUBO$lR8S9XXy_LOQDpBrm(VEMuCbZ5-MxN3qhhHIqZ+@`qm3wj z*V`oaHo{UsXcTRKA81o(DV7TAp^fMAYh%|SG2&Z80z#u`y9W9O>qR-M3wT{ZvLxxoKTQ&WD7dOQ;?<#)Rh@TqqO(WEUJ8O8`us$h@{y1a( z>f93+Ro*x_)KCJq>NM{W{^9xSSI?QasIp-yR~n_?#zoPUrZL`#n~l&Y+z770WA|{dbM(?kPf}^vk*^di;~+mCwIgqxysq8io6o zcoT3)tax*7Wxe#@yl`jX-NxLZkE>wkR6>=G@|I)^?*qhg3BRw+OPehs2bR zmlyZ29`%K3s7DFhbJ)D;c7sos7yBDAI7Mibej67>>lks5^}$(2XcX>fbH_TW+ z{;Q28ry8LiC2)&m^WNI6&tE^j(1@NXLZkF+x+vPyh+~gmRJq^YheqKBOpc-s61kXdX&H&oy}Wlk9n(qe7%j-r&z9(&?tQA*8KM$ryKD%Bla;uqj0|{@7oHA zj}9IZ_uG2@f_5X+qXchq^}E8B8L^EKaf;9={bDbQ9yQ{+t>!QIsS)Z?f;YLk#zRKj zz4iR|<5Pr2A-DKfbUqLEIAlot_@Mdin;D@|yuB6A4T%p;u(63^8yjF@M{JR>xUH>={gA@RKRr~$_>DsF8hSC10BGu3mo zc*XMK*#E8(Z<8W43L^$?Zt+}AG-4Yg#v7qgyeAdU4T(>T*wP5RLG>uX8&Ex0hu8@B zr=@-3K`BC`FjnF=8qd{5OXe0geXCD=xz&|M@zzs3Hza;x8s9PEIV04g1n)ETTwQDP z$MW%m;>S~jMqwtx{Y9RuQ*DmwX~aub4vpd+rg&~h9QfgY;sHirWKfS1nBl_vMZdUf zXuNld&?wB>&0Jx&C81HgkrcUVO{hl+-ZkoVwd$V(DpRZ+yI8K2&?u~Mns4xABUTyl zwAHS9l;B;XuJJn~Rv7W35$fS>p@`BaMbSOB>RWE@>iv|461)f0HSRZJg%N*C5gLW{ zW3zwETQavY$%wvIa*g8MpLlLad~NI91FV01*9i3}!CO5&SGOCnixHzzghpYl-5g6c z`gD0^`B!VihZ&(!yvY;K4T&YT(m%yUpF@pMj}pA2({pu_?ItcVVyV@Y5*nrdel&`1 zHsbc<78O?-p;5e-6VDBa=WJK>u#LN`Tdvfj1aI8*T+KD&86&nx5gLVE80VEJ8vb_w z>UUo5D4uDAdX(Ueo34TUuWhs1b}2%m^k0KU5ysnNY*zb^k?IMFpUeI2Lyh>A&CdT# z5xkcZInmu@6n$!uCk>jvfVtxOLkYd%Gm73{+P^w!Nk;`*`Yesoy=WB8v6<7}M`gIp z>s~>oTs7DE|&RpYCn>kmv zRo^WsLZi6i^d0>&n>pXIm8H!%u|{#ti06jH-9|v;03+0+1Xr@2tEX%p{K{6yD7g|E z#nrjz>Qh@&53yDF+g1*Z;`$oT4T&3UrGK;$Z<>aBl;Eo0b9J=sKStR8TktnIu;r3j7UuFrFIna#C7 zvfbSutsEM~eH)$|67!50XvEz{s7DFzCOub}Id8FD>TM}PqcGcrckh6>-3X219v9CI ziD`YOmv3!os7DFzyggS}eK4T1k(FbPX(*vlJWXiSmCc+RTkYD)GFFcgJR5M0TkK@w zWg`X~p&p)0AWEMUMH}1c$B*pvne=UO@RSsKN&8ZXCMHrKvl zJK^Vy&?uhb;JG33p`8@1W&Pu~MyN*#o*;RyFgp)70waSG8im=8cd|s$f9%9-zMXi@ zGeVu=M~S@>PGzBW*j?#jMbwAXCK#C z-{z*D+dQ~wiqI&|sIIY>5l`4W_?DGJJt5(9t!rQ{J>KT?G{Kn@QOIrcb{N~&R=2nL zypQEdqo9F1!n4FUTV?#fRvES;tCyV5QUbMrTg*LI3$3o+v6al4DMF)A>&@FK-#6kF zBi^%;YZO;Ycy37CYwhYuTamric;|eU5?rZyuFf}NuC4kWP7xY~7TUa*^D}FSR~ca^ z6ZMve`{wa1t}J1P#3)<6cJuXay|wdMN^n){xq8}q?cqkWnT9?~qtKh1HOgi>q+hA@QV*J{Q|c-`1k_k%7-rf;#}u)l0UU=wW-#Crv}2rBN99c*|-O zJ!8b0M%b>XKEmO@m4Ih)#{xSfp0crhoe6{DKN_JPCAeGiTurt4<0IQg*;z(FXcXoZ z-pdV-x%#%P;X1AD+MYAkD4w0*xgmiQ;ZfE< zY+qYnS+cb&!4n3kJy3O_muh{4_$LdO-rBOWV^SZjlhzE@5G(w|zCWq&S#P+sh8E@k* z)>rCLf+vNZt0!z%WGBMd*9L?}@m$n%W&7IrXd^}%p;0`)#B)R9+ZOqN%~5!R>QREH zs-COJB9|M{KSgL1Pl`QPm@#j#nbYQ6`}bKEhA zukHTW(1ylSLZ~N?aE-;M-&v^+KiU3cjVG6tppB@uBQC7{<2Y)(B7}PK2-kSJHgmzY z6Q;+O%1Y2i)a;oT*WTWr8cL`qk8q9lAMahd~)F=v}o;<=e zme2a2xXJFv#FolR&_>joH(plz=h}Sd9|@tJJi;|bJ~%MGVZ-f^%1Y2i)U+X&*G4@{ z4JFi*N4Q4u!Gq&Tt93&vD?uAkJ05UF?ZOAyKa@~U9^o3VpL=?|?q-)1Ep;kE8&Q=H zuc)o{1p7INo<>;eR8Jn^8g?I`{TCPfe@f7%#)nINj6q~b(33~F#$PR0kM_N!VyO*L zO29@Ga(LsLWhYnlQa;sh|XHL}4WARiws9A=Hyc zxW)@p?yM{uesa}PK?&N3!iYNWZN3jB)RRZJMq~cK98yq%Hli>yERCtrm_O=-dh!U@ zXv}Ju3kyonMigeanG@J{l~7L};TlKVe7@P2Pgg9pDM1@in5k|TVilsL7(1yl< zBhReez9wf*5W|hI6c8Fk+ckz2OL4DY)t{yqg_A=L!JCt4192;R^wwQM6s-SZh~r7JJ2(%IcvF4YaZE4=Xm>E{G*Y z+%l?nKxhY)t{^!Xjv8P(7rv3=>VfY2z~uJOu?zpotLb8>8{tRC9Xz}PkTT52qAL1+|h*XXm> z#+Ac+oE=*#tA{o;Fa~#fff}s{jiT)u_fOrc{p~xa$Ck?Kp$!epB?m5`28kZMI|4$Z zXuHOW{W^;OdFhPUQdvE;p@BK^i$kdKNrPDOzh?%7M$vYS6Q;dWtiEz=Y^kgs+R(t< z{+HjeT}^BdGhUq-5E@0>HFmydleov^U6IP_p$!eJQ8rk}{sE%95taf%qiDOvlJ-(O z?V-()%IcvF4Xm~Hy^%YXHycD;+cF?DinePs)`>-1Cw8ibHZ-tiylrQWC5?4r(bkCp zp;5G5W3sJYe>`?h(Nd>+XhQ>Q-!EV0xC`O{Bc3T;84wyp+ch4uRrp(5J=bpOR`t+^ z23O~>qX@(jBP<1kM$vW+tn@FmmA<85rOzmqgR6ebGx(qXH($8hLX@^d?({rYN~lK( z?JFKn4J9;+JJzg*dX&&UA8II}QQUcFHF$mjkIqp%JINC2Q9@_YFjq=w6#m{kjndlH zyz401x*Y0JLdW?qS4wCUPeQUKSC0}pUxgYmhe0vTXOX%p`%@>p@c^9TqCQY9wl_t4mFg}C>=3ELOn|8?9-ai zC>>Wq0ww2fDX1%+MxfT4zvDRLBb<7az!;oACMuy(dh!zHNiqI&` zkImn_lu(Znn2DNaGOY-W($?egtX=gefw{eTwxk+LXq2|GP($Ze*xZx1o@>>k1jhE} zse$H735~+M()YC6ft{=06dX(Twt!qM~ z(5CS_PL{w}f?qA*;phyTV}6!Uj}jc`yCyV>b61v7j}n}Hx+XLVxy9_9CA5CH(nnP5 zx>Ao4Tr*@fl+Y-ySF(h9l;9erYeJ*Aipmn|QGzR{t_h9O))V$9^(es=U{*s3jnXz2 zYG6#{uhU!=qXc&^Sq&vLO2@8H zgYyTT#rXp^XQHfzdX(S{mk=E`=GI41B{WLkY?v$cC;_{9>g-HYgRMlP^!Buu zoHJmf4zY?#%3+vms7DFTK3x+U#ThkAs7DFTiCq&KrEfMYxq6h~+@94?LZkHkhZ9v(aU zy1Jb$`Q$flt$S{q^WwuN%=t~-#&dtUduPLbCRK9vC_y``p}EqWbi3!K78>eNf_Ap# zc?6=Ujq-(WaNFB%sjC;p)*fOll;^zsQ0sE2M+w%*x1;3`g&K^4I`w{b(&C_|LxLK} zyAm(1`c*x*!v?>WDu)sp)w-_KqXb(Fav0`H35{x9yCl#WNT8;f+iWXQj}pvb```yt zwX1|ivEHCpFGq*<@p`Z2`xr5}n|;^iHTwKBm87+2-=Mx*C8&Yk6>2D1SY#ny)?&0#))yeq*GBm2(vSsJBnI@C~)64b-E(wfjHYP0PoU!-)r zxay7?{#%ylIk0i>ByIeiV`4%?B;ZLCpq;qd=GuL`)l=d1YwxJ-6#28BKJGU*N43|Z z_;>HMBrfPSJR#swg0>UZ(ru3R|Gl(oZtaqPZeM>cY}|8*obd0h33$>3XcBlnbUF%X zOSm^5EfIYJHu?nG73`o#)d|!)JZvS5+IapA^}lB|)Ppxj0`DJo&Mpz zV8#gu)H|clCz#u=--i;^3+9iY9C(&Su@=||o9}~BXjjz0NTh8ntX=gep*7N)&?vUu z>^oPF64cAqu9lE324mF!TkR^rRvC<X$uGFIh^@6cI({?qA<;%7!tsmAdXEpSXY+Y$B<`KzUo7Aonv=PNNoy_M6 zp`JV@?N`EclzO`NQEJ@=hVJ+7sl7G9-ef<)wN^( zG_Y>-@BRi!9REp=gn&m0+Szx0(cV|phMwZj9e()q#OB{y6YwZO+lkM6?HadRIV=^9 z`@z{s-rs&@a#AM#JtU5_a;QfM+Sy#KIsTAjE;{*{{gTm{c9xjD`?1N0{PrIw)NPD7 zJ%4>tLWg}&Jxa9CIj%v-TD0Cu7=@lg8aW}6?X~Jrf_8T1)RIrw`Ou^sEP0ktj}nXT zKDQRC@%#I~WXcXUU zc73HDC0M5HSfYeRu`OiRSL#uMxy_bC360WP4{KLFN-(#m>DGisQ9Ik(8HN5q4a^zT z&h}dMD8X9Du6>lyD7NXWhDPxXB3G>m^(etMmYq43&?s%wVePWCXw}RiX0q0VdX!)e zv;9K}jndqPxl)f3EK|0BD4|i*W@~T$OV-X+iSz@r3hwkyrm9`${#=W37ozLqxkyQtkP z;Uy0V?uw&m^Ft?9Pn&&j#Zud%rKid7Nq z@h7z<9HE+=+Ei}}VN4UnRYfULWWOZe! zpagA1t$cE3?R>j|-|I>V_2dz*v4?5YOv6$^3EGG{cib##S4yZSk8q81RxB$XWo_3| zK?&N3I{U|$*KlXQmt(pR>d7NqW76_v#jUIlS}G_(8&QMKzf$_S66(n#T;pdC_m7AF z(ymDPWn55#Hlj{A=c*cR`S)@tp`JX#H9o5Kk3X_8(NaMP+KAd{i#k6u^9eM?@B9~p6n5tjO?Cy#KA?;G*u z(v=G=1q5kCy}0VS`dtLB0pj0ASn8*qJi;|LGGg@GE88vIsswG8cD zD50J_!Zo%wjpe3csZ$Bsh(fE}cJa`L28fT1u+*uZJi;|f^Y@8QJaJv5vJ$irh2C}5 zCqo(|8uSv`4#YwT}h;?$dCq<|oe zD2#TsYw)`f*6m8DCy#KAD@;NK^svRwGZ8b8cL`qk8q8~j1$`&RaSyFqA>e> z;~Jc0q8v)7Cy#KAjcp#>@vfs|OJyZ!BMP(V=)I}2kr3+1BV41g0*GzRP*#FAqOcm6 z5>Z15_2dz*@x5MCil<*bHMUe%f;OVCs=uy+K9p`GhahJd4y{;*3_}Bsmn^xMif@dxJA_KsLf;6JAd%+#8UXBffP){D=8jZbL zYsZ$Bsh{9I@Oa$xQ4Czs&n61*>34pC1@jxU$=TWK-^}8rCZgL zN4UlyBkp+JR+g`?O#a0>o<*AF;MrLeDS_wGlSjCQj-oiN#rKIgH-7My)9SXL;vH4D zgLCToNR1O(5b!85`I)^F+7wz-63i9qiW)dEC&81{CZQfBs2BXw&@xwuqIPf=UMKi0l#m+ueURGO za;QfMY6QQl1-ZhrG>UICtDznx*cO7{)#@5bXcSvXHdpGw2|eC3O0G}ByTJeaovTL) zoayJc5+yW>+QBba^>V0(8uefM8vUc|x>ACA*;bO5t9mPG*#}9Wjp}o$7yR-Qybll> z#qyyS)T=hBUA9EzgzbvIbE0;$ZI>-W`?(U?+Es!!qS#`BZzk&HP){Ba{LYynNF$0R z&z3_yc|^7xO3+3WYdZKns-7$LD8aWGjBo|Cc>S7U)v~K*Ey{+=fp&li)MnVlGG>ZS;0A&gZeIGmjc2*7lr3FOky9o*PC~;Hot7^Cd zKdYgHM&*91RSg{-K0Mef66uE&8B( zl=%9MNy%IimP1>gexuQS{Jt%EE!Vqfqxzjh`U?o?_&e8Dt$O;6Mwl!0DA77sN@&z? zkJzWh$k4gUzpOwx?mA-6+LmwlEV}0Sy=n_L*&%0y(>WDmBK{j*pmi<@%b^}6Flw)S zFV4|WLZkRE^|B*_Mq$Pozi3qbxvdHHD1rWu{}x?VLkW%IzXr?_=pQVhzCrY6<}j=) z^(fI=LkW$-7?WQP^(dib3Uj6ZcIlV9-;uP8=bpPGX)z(8|5ir-mB{zIUsvn9MP9p7 zj}p3G2{n|^DE^De?E6rU60O%h+PAgO>)aLQN5x#5KDYI5LJ5u1mLF>9Sb{l`eOofAV1^(Zla*(u2`tTmxg z`mJh6s7HxgSDl>f!dep=)p`Y>9wnfcze`m@qjdF=&Lv=es5}io5L` zqOm@QhpT1SS_|R(P>&K^)g~Gp_V()ULkW#y3rz?UazZ^ya8=tip;7E6*|e zo=jy4^(es;y)2<)xb|S4M&%Ryw+l+N?&ta}jp9jIR)cFpc(}@h&HYZ6(D6gZ6`k!; z{iAV?i)SgpolI6kpQTYc2ZtJ(U#@-eTrFQns7DFSVQWI8xc1GKLp@5g9(R?{D4y15 zHFU+o^)8}xv)lfpCcuJ8a)T4y1KEhlnp;0{j$ZDuZiPkF_ zZS6dP#B;SBhq+RZ5(IYWcuxrRqzPy^ah;WT z<=8U{mSQDXyNJ>oB%(+O^`r@C_;(qfSslG^8kS-u*h&z^8!J3lp9-O#G|?=F)m6;8 zQUW%kc>9IduGLjSs3%Q;cH(u*|HK(H+AI~7fXyhq%Or}FP*0iw?d@u@X>`n((P^oo z1Z+l8+grO5>PZuzlO7eb4=TZ2A&PaF^xA|_Pnv*+6Md|X{%T{1rQoI^)-Iyh7X14} z5PvbkQZV|Y31~QRpS9hOjj)su_;!e`1UB2WfA6D&deQ_moIsEI+QutO$#?}1TRUv_ zP5<8KeIeA7CZOTO8a9@!Z=;W;WW0ihy%sjd82>^D#Ck?pO2#XA(gZY`ggw8_QZin_ z!_kK{?#1!DkQy3orcq=$;7JqEaAKL2{698cSxUw$c$h2LtabkqPzm*<31~QRx0U!4 z8%r!D;}txtUD#|_{(Yhn>PZvOaH6NR#J`({rDVKdeQ_mocNdJ{{h@!U7&LAEz!ctK^X#yHf==w?t<_b})!|eJ>J!t|OPCRCHWb5gIrC15p zE~3~Le6^&6deQ_m5~4^ACD=+3g|BAuK9XD|gnH6MvmCmb&m3q=d z^L^MGjQP%$(C?7(eR8v1f#5q=Pnv*6(h_5~T_w`rJwqdD?FqqL!ILJS;e@TNlGTzD z%oU zY_@41MU_xbnt+BAy1r6^tsPP9n?4)p`bs@%0vb+WKl_M{SC*3T3Lf@a*c@YgR#QSf zX#yGn(PkRScm)qfAK1*T&*u$|I-#C40gYq@kgTtiV6G6wI`nmkuCLUSCZOTO+g3*( z+IVFt8L!}B?ZRg3@zv5hLZ~NAK*I^sC{jZSwh~0KO?$3PBO%n2CYt5Y^_3EA?RYNx zW>UM!`bs@%qWM1T4aWAq>u*pA_F6obV@%RY5<)#`0vZ8PZ@Wrx^g$H0lhzK6I-#C4 z0SzZ~eWe6*g(%jc_gY-BvDLZfK=*KH3!uv2lj_0NhemDNKVXK(s@OBA&tG>W!s zFjpvte!W2(QF{8>EC&enHBQ=Y?P@=J=a$Oqp$!c^zmB4x8qsEirGU^V+OF}?13Ojt&h?ic z+KAHMsp{`MA=HycxQ4y+D%-9Sv=J4aw=1EZJi;|TUhk~xa}V!SvDC(2`{1FCx(a{o z1M$2OmI6YfXuHO%ukTkq!pdT)pdQ-L&|ep$s1>16w6o>V-?nKZN`J?VA}zUk@`z?R zjB)T*eMboOvQ*%gF7VKXhJHsFMccO^ zG>W!sTrsI{e7Tj}Qb9emp`l;$L=lOr=j{{_8b#YR#{YeMaiEpMQbE6mqm3y2vM!1y z2%(-lB3lk6Xd_C$XKI!MC09=#;TqO!V~$t+VhbMHs4M;+nI+VdM}W4wCT%9@Z!?0W zf)cb5#otw31H_g_SPJgt%p+XGM!1+`B7Xn8`xQcrLuZxyx7B%JbH*wohJEImZa~D1lpbn)e8IKY#t|xQUA@aVl3DrQgOy z(c3fDukK>Ru|{YVZUo}p!6C8HXUi+YzgnYul@aPu0(TZQZv}p5#q!D)|6QXxHbrQZ zepweqKQN-Z5p#^tDBQQin}9=N%A0d5-Iw;ME;K?tO5jGQ<{iJ~H|AER8F6Kb&?x<4 zFNzLYI=3?Vtv=PFy$_ATZC1S3Hzel%eL&@n34^KwjZlvgxNoa@WAEV~4yZgmeo*zT z6roY!7j(aRe?VnRBW|~HXcX=W<1M`*fiIV4-8HoOpb_d(0=Jow_Ai|-Gvd!FLZkG1 zKPRZ6QMieX&kcz=?+qw!WaW6=G}NO6?ut7;sz(Xj#MitVcf}iXi?KLj}o{=vUzXq3L{Q5Vz(5bQTjEVeNA=#`tfSV zFRJu3LZfg4CP&ebcV< zhY=cu`$c)*R!FQocu2hE*7Fw(GeSK|@FrKkE9_Gvwl!kg6roZ2#aiT_&vc+Q9|OhY|N z@Xl1v)gvpG7Z3jL8gc&=p-~tyaC3|2s?&)5j2K~rM)96hJU1i;*vPQE5$hVE9wm4K zs^{uT8{wW^+9yV@RYIdMR^m1q&()YEbBo>I>J!hmy3#1#dWz?U#Al}QEh8Q^LOn|G zK2y)tjW&OLK7LUAP>Rqf%tW}qsPP7Ej@rz_s#XC&#+>kip!vV#^jKBz|9wm4? zspkrF=c>Dg#=E2ljl!(m%#{)v#T!ZS+>rQlpH*$tP>&M4Yt(bK)dvGA7g{-nSgw@N zD6DXrZ}94W4yg2*FesjDwW}T_c-N?FJa5GMM&O;Rhqr|yN}m)(-IvU*eBa*rohc0^ zcn_#++-d8?)s1*9MQ9Y(kInwEwP`G{w)<}*G>UhB;<+Jl*r&@Y6Rm&z(+Kq_!CO5& zSMzPXyJw>hDxpzWYd6P|!;QGqh=RQjjp9w7cy34xu)V?lHkNE=gnE?V9i5)5J&ZWi zh;O9`jl#YJwhbqqM~VR_;N=Pdo}ea!5cSS;}grxyNx+Y360W!4H`vH8u8_z`RzY3 z4fQC&8#i48#5y*gACn?9N_Ue{^dBRp44S{d=Jk3x`0r1Z&>KFZX!+9q)zg-AR0gI9 zjnchn6k#4b&{i@dZ6(0f686Ykqrm1G#cvB8Z^T3+&M-nfTn8aapA<#!8S$pA$a<$V zl;G;jH89scV(Y}OZSA1X(kQMteMkS8&75}_afE4T6xWP+Zb-at#LY(RV}yE?;7ZnW zWxckzrmd+@Oc5G|*^alyL{Z_h<;A^?c+kqBQCwf+xgqh4t@O_^;!mcb9woTy_gr0R z`;T30H&IIw8pVBy*VUIcb3S53WQ0a>FM{WW#5=Yt`il|6tQ_i5f;%M7)n_&j9&0jLhQvH01{!g<5$aKbyGhR#X3kq|Uwd1M&?wAy z;oUnRZZ|@sxW~nFTNCP0f;(@|)q^(IZf@n6X&Ops6i*Ypu5PoLbBNXM)mFReQG#a! zuJLC(nfSVo=hN0pJcyn+v&%CcKY#yl!g*K6>*LG?Sy5fwUV=~9QrJc!fe;< z9~ax~yr~iMjnF8b;^4UjjeyoFhV^_@C3Ye1Uc1BX#A~eW zgi#KS;)xfY8xkMeJa~+aCAMRU)uRMY+dNmB*j#&@5kE{38im=edDqLWb~?D9oemyn z??a<_I*8|n#7LV5PqLBP)>pB5l;CXOxw4&b^>!l;v0N#kQJkZ^u2whV=QiVPXoPx{ z;OyfX-ED5#%jUtpDMF(-qq+vp#tyc55VflwB{(O##+ybgviaQh=K-NnoabGmhvjN} zBW#rsYZNqaM>w7v6636Pe_*SO!y4t_O*2ZM7I2HX=W3zV)jPJ5Su;gw6l%SBJLL~d zW1$hhw>PL!TrJ_bAu-ch;{LWGJFoH1`79;4QuACLVJ-1ATlLu)K>eMQ&?v4Sy{?Kz zOftgitlkoF-#nhhl_l(um}Y(OMq9nwez4v@c*my_T-AE6o;KoeBid4gMselrxteCH z@H35g*~+0&T!rJgA+dw4^q;ep{$Gtyj}qJgc&@58UiG%!#3Ly}qcHOEmenZwo@s1t z#5G1}6n89mZb-CaMc zU5(;i4bKgU7y3*utT%5c_Jj2~iqBGlyGhR#=Gr_$qqsx%H>iY0agU4VhQz71$~eW! zVW(>K6##Rk1b5z^t8dsDz(GdXx;-E?il+<J!vjJj`nM7OP#2;&}j`8xsFxXBpqM zcm6vg)T0DXDLhwi*@|pKBd|_XLZf(&;<@_Dh{vq${?`bN;@JtF8xp(PDbAtRKfW|V zJxcII$8+_+w%$G3i0@flDWOq3rSe>Xm}JCyMrahzneg0@Sld?m@7Y*lXG`@}I7bF0 zc>3kJI@*YPjCjM!q0iDNp6Ge5_BUcrBfe=G8pSg?JU1j3*pB5I8+SJ~LOn|Gq|kG< z*obM3v0Vv`;z_FK>OLdBezl|6ZWG$K3|d|csk5-@LumIT40g;**UfSZcxt^ zJxV|i|9v&rur)*6-dHo}&QzmxFB(PH-*k3$&q>{jmh20Nj{045TMzznH0>=0-!tlw z-OjBIkGCCzzlVf+@(9pTwCkedtCxNGbkS0$60{NZMgO1ICdI=W8cL`qk8q9nnz7Zp zXZ4LOm6f24s1+BVSKDO5u!e>b>d7NqFWdTgnz1Z_mk zo_TTY?ft2tgnIG_*J%Io-o@?8(_%|yC1@k+_Pb`*Zkk1nq7drIBV1$otPhHt?0!sa zsjLKTM7??AWwn2<&3FEh5bDVzTw~;e1LGSu+zzR%1Z_l38*+JV)U(u3LOpqeYZM9!>v=O!A0aw&6e31P^3H9U=uJQW0r^oAVc1h7vrxLUgRr&CW+FDPrpM&UW zgr!dP7>2A4;evk8q8~{DC>7pagA1VP;qwQ=>6|)Cu+E5w6jg)i4(pl%S0$%y2U& zuHA*iZ5pR3u7Zpow>Y)vd0Y{!$yM0a0oFIl9VJRRqinePE zE0*G34{ctxR8S9XXdJoU*|m57GPp4^3~fPZ6m8ddY)vd10J}b_N(`|Zj^(>*Dp>92#uoc8e5#QSNq@YoL;q5P!DZr>|MLKw&G=K zkXWa8M?h#4ZPz%c=f;&{kF%?m3hJQ^jeTpE)*kQ4x;n50p;5G5L8?odT2vq&w*FfwmFt<_dp|VH^NdtXcTSN z*yG4S)g?1WAQjX@8ycq`HM{ou8 z*6y9pe%^}EDB7;^z^D_dr@a4U#ZsGkXhY*qdtF!i<9b|Kwjwl&wriYMn^v9NXU~eI zHucbk#`iwFu2#H~E6W*1oMeQhfY2z~u3_uMY)t{^p(d(#|@384Wj$3_JGhR+OAQyUVFxJ{`Q^IV@qZA(1r%)k^>h|gG7(s9RZGd z#Ua%Aq(LnC-!lV3qiDOv3De#wR$n#t|m5!8Lv(Z2#uoc8av;! zN!(-du1IC|(1r%qC>tzf{{Ye52ulH>QM6rSNqZ@t_R!`?W%ba82G&~p-pC!xn++na zZ5a?6McXwR>%^k16Fb#I8yZ+M-nKKxlEyl*XzRp)&?wrjG1*qHKOQ@$XsJ^@w4s5u z@0Txg+y!xf5zmya3uxQ$q=j;*K?|p&li)&xaaH zXcTweSq+|Fz@u{%&rY(0dX&&vG|ZI}8il|AAI8oE+^(WZ+Xp0wjA9TJ5C^#0LBo`Q zCYpPbfW!eo5$SFQ2gC@iHnu{eg66gaXF)|&1f(?t5D^4{ZlJk0Llh@cV$0S9JtVk)=q9LQ``3i;$yGwmC4L?dOHL07 z&USSS5>)xQMvOrZ3C`Me3=&jv#;6H;NO1M(CaB`PQWGk-?qBiie1-0z(o1elA z*AIJ0s5OUAKe`C2)Zd2RV3DAQg!@~?A=(04-G*Ls&B+xwNW-|ff9 z1U)3Y4;oES<^5wM=po^q+Gv6*^=W;N6A8^F`qn}o&(5+v=SPAb5}xNr6I6NaiUd6* zy!wnLs8VjVI!A)_m#BXo4!vN_ENU zA>q517=r{=oV)56UO$wU*ALlViDC?TNO*-C5R++c&$B2As@Sr1uIM2ld-&A3FvA$` zB~-Ef>lohqD8F7aWUCIfiyD+8VI>AVB)s~JCaCg?8VPzxcugElP{o$5OHL07ukA4g z398usbqw$5m6rEZvNc!g4j{&$hlF=$qY0|KFXQfZ7Wy|Hj<9B!Nw8*E>DqdX<|8Bx}ZrpH@&+byX{>_Fzt=TF)3ug>^ zNZ5`sm@DSQzc&(N&_lv@EO{Ftm1C=XbvgWN4)6NcUoCPieD1WL4r(EmgC!*48u{y* zI~p;pQgp}LaQk%zF=9C!Lmm?Ty^$T~{AFQX4iZ##*A+b^++&o(ItB@(6ZDX9nbb~=lJ|d2PHDOKNyQwt6UsXY&lqvkGA*jur|TH>kZ?TBE8PTDj_tlX zcq3)fXE|%+_^e6W`i)D^B?F>oLY^j}Q!5K`N?L1QJtKd{d>XSnKIvGtua{A4;sZ0D zKOp2GVY?7%{0-i$@yX0e*XKam{>cBmXwPm!o+hDF5>2Rv6=!lxeM!Ibp`NHQAzNcY z{YrKR395WO_A7cwI9@fkhrUad%NP3<>&Lb0RZZg~))i~9 zjTo%8gW4rwTPpYb!FoO*=xHOWJwq-z3ENV+be z9G^ok+b89h7BulM4{bak17iOQaRFR%qP1m zU7wmR+t+L2^{E{6kgy$dx6sHKO5?U*Z;+`p)#a=7G?pofHiT`A6@B&h1n6+I;UD>!kjB|#P2scsLK zT(#(OXf81k#~?i_l4N6=po_U#&VFLinU(XERgmW0j2MMZ}+d5bDkZ_se_#i=*W4pKOIY#;CU%pUF`HXnmx{vY< z7YTWqgzlpX(SK&C=dXib!H~zlX(8Lcn^Ag+iS*2JK*&SFb|KP^59N5pYTv*5mljG6 z%k^$To+hFD+Cn`0kfWxL{`6&2>9d2+Cc1CUvW2!ETl2WZI>kq4#Or#mM}nRF%q_=@(ENW1_^rFh!SJd zi}s)XueWZl&lm~YQu*|(5@VA@{C6VKXN;aUqQv;xH)c)mb>@UV6=7N`pYK&-kf5iH zC^7zV^{nZC|H6bmVLD17i zlo+pn@V==BE;wvDea1-GmdYo;l^AaTK~Eb|Vw|$UF;km-;$73}Ge*L;R6d)o#2`UW z8&P6hwdpZaUpe_*)9Eut!nRaCC9lNz9}x7k5hX^M4a*%Q3ENWnw7(LA1U+p;j6uS- zR6dU|#-OK-C^6o-$uZ-rQeCCb7zx`_`7Ff}g9JToM2Yc=6k~OYkv?N2Y)j?S9!m@o z^t2Hr#`_+=Z~P6Z@21Zf3ENWnq{e86#m^DxalUVvwMx zjVLjWzh>6N^Uq30q?|P|M#8pKJ_oeKAVE(XQDWS`de+4KX--U^F%q_=@=2v71_^rF zh<=O<_n-KAnyJ%gjD&5ee9CG+Mk0Qei1Znwr;R8vewv6sCL(<*!n9OA2e!lz@kk=l zXN;aUqQp4-(4!`P@$t*1(q{(}wx!a^P5LE)5`zRiZA6LjycA=jlP{Y}pB+fpmdYm^ zl^7)GX(ReEp7p+oFW>RV)#o;ISy*g6r5?s;TE`m7*f+vWJs;V@(+p}GAS zixTm+M5ND3dfJE*Bl@hQr;R8vUX$j;cYR?(pNcRo zm1euur_SleAVE(XQDS@|#n>~&NS~D?Y)hqC`;g~21_^rFh!Uf};!LD9Y9$HVQfc*B z=hWT$y zIHu zJ7#KSYLE0;Ny4^N+Vv0n)i#MZClTqhlAboA#Mm<3744n+Zu(S&X{mJg@`M>4gIj^1 zr;R8v`uA!R>0WIm3ENWXE^Ii?`}b;@pr?%}F-}hRoO`9YBz;zruq~DDCO^Hq=R^|p zv=Jr7lTwVYrx@w8l7wxkbXPo_cQ;SOrHM$NmGra`CC2P@NB@yDQ>RZwn3hU+_c~v= zthFTQX(LLEPkl9=0r9V!Po&RE61Jt%Q;Oj_NP?a=qQsb=p2>VOt(@s|HVNBO>1m5j zf-dEl2ZEk9qQp4hwMR`q^r6ef)8}jwwx#mP(9c}_ZK?crYl$J^oJ6G03VPaz5@VM{oPT@TS>FE0;4jvdmT8wmzoJ!QkWjkzv=Jo+ zXHh+^y>{+id+NEde=EK`#d|}(UOlJIGqs-3ijaqdf0@=#2Nk8f<3)lhJ%@Gdk|z_+ zm7e_S*}GJFLd$qHK@SN%(--ZhwZmMIpvu?Fv)2-(l*74FT{(uHn45?tr-y{&Ro^t^ z+9g4iV^`0@GhvlV=otE5%_+rl&_lv8s_)gRTq!N8+?p{4JtW*0s_)fu3=&kim&9Dr zqbKxgXO)~O)xCrs5_+cJ-b+YO<=E9XSh*bZI7a@q@5Wc=7^CZogyY3t(v~Z!d_DF= zdYG=`Rp0zn?V+@&a``k0>e_WrR8HKl{5_{?H}+lk432XWv35z=mdZV*dS@b+gPt~` z`kpforloSpV>#$)BVsv7*p|vQU40*wb43pcw`MiNjcF$3+Z1c=`_$^UE#E1B6Vv+6 zL?-+upxWH;^~v^W+Eu^GgwLCoXXWOfU;Wp+cgr#AcR%{GXeLhl{ijzSvABFEr`<4nn#S`w#bA zm4hAgB}t-(LTl?K~?L!YPojlA>s4sV+;~h@!hYw z9Q2UzY4b4#399@X;*p?-1p8Z^D-u-sx6oq@dPs0Q)-m{ZH~fp5Ex!G#j-E&liSaGp zGZ>q73=&lFJMWs{48WO)J+vn1A<;cwk)X=I%@J#t9uoCiVI^PX6b}+q`L{=640=es zZ2R{O=HR;IB&hPQuEZGhkl-6>bqo?z`Il&740=ekzTK9`ISH!#8$2-vJtQ8x9c2~WaOr-lzp?FJEh{J2RLzN>_+nW(xt7%BpofHJZT&7;tX&dR z`7iY%L6ugVr8h0i>2?$JkkI(oZ_&jVB&hOV14csQ!zE-3YHT`(bzRXzqB{l&sx-&6 zmxCS>EK{8;{_WCP`G zEME}?J3zy=aU<4+-}Cx&_%Y zeCMrneTN)lc;1!AbFFO8!I5B2JTpkev03Me9ui7Pzq>YwG3Zw$sPfKWKn(g7JtR1q z>s*nb%J=Fq2ImaUU7Ta;81#_np5aJP<-72hD|$%y&U-XLm7h#Sf*uln;yIe2%1@>u zK@SN(r5H_6-*A+b^{EQ>UAVHO%Qbd9t65M^%xgtT8 zpMJy`^pNP@$*{Nk38d0xKdy5{4+%g0jJYB~75Ale40=fTd%PHf1XccKD-!gO@b{6U z397o+b9zYlo2D3p1XbKi^m?B?VfoY}dmp= zJeMvaNFL^4H5Ewn{|$jMLL3L>J=PR7cNBe=nLo6C|7~sa%KU?F16^ zGzrBhM85^cQkzeZaP3OvzEIw>AVE))P>e$SA(i+ydmlTNKI!+ihi3@6mq_IkD@v|@ z4}zX1F)T+a`Go6=glwyP`o*Aj2LwG$LUbW+OZh)$`SKmoXPks=t9X`4uP5T@M5NC+ zJxxM%=~s6pV(;b4&rY8y60)sw?9$sw(9dYXh{6r$he zD^r_KlW^@y<-SnfPwcmOCg^DricyGuPpsxEy*uPyBHMksyzfJTo+hCfh2ZQ%!o6K8 zkInMF4+(mjgklt8!!$GWPFQ|+`V8hPc|2-mdyXk@2$7(tNhn4k)=4q;PP0$?4CX6& zJp0IYZuS0MuP5TgiAbNpd?inlP>e$KOFowVAIw+sI9IY=hviK`67)0)#VEx6sgC|H z%_ZqGn6KnPz-cM|sujFYGicyH`Qr~?b?XS{jT5lMtPBfGGZA005D^SbkNRE}L%XA<-@3B?%f00#Rj63&%WuEV&$qNhnHMj`qwIF@oZLBh2wmHR^3 zEs>z7NhrpE7*FZv7$n?Fq|#fnYL7v#1_V7#VptCDuSoE1T)i)>7=zj!?62r)62taT z9l6a(@I7R`pFHeWB7_1U*ecF$Tm`lh91&ULxCly3C^ezMFGJPm@rL zLZrGH%swRC+okf@9IOTdf}SR!7=0qmB^RanDt!j?l{_A`vOUL?Rqf$KT$qUTnWCpj zC`KW)&rNH{4q8V@c=nOXxh?Cth_r_6pml_vCZQOE9e_%n_Y5SQE2&(EWna>--AvHa zBow0%PfP3g&(mCzK7;v69@nmH_nxv_B0*1+P>caF?ieK8OQdq29^`63(9-&W zTyhfb?Ml~Ub5Oe)gPEYGNetUV_p@$u5+1cm*K^FEmrS_L>1h&*G3bdC?z<#B`$*;3 zgWf*jzDrM&P>eoN_M$7*TSz!pQn?NXqgHj533{4@Vhm=6!R$lAwJVkT!eF;FAn0il zicyGP&fj$6eYYQ=&)}4Qy+^|DZup%}uV>=8+h1J~RM{?Xq+E05lJS>6`M8PnSxJv= zJ$vK#ExleBL6z+i!?{v9`1XcvsrdABSPl{Nv=Jr7Jy$FlKQNUeeJaAVRQyJu*ZV05 zdfJE*BN0=M;V0Yj*j8QfX>_mmlMaF^+a<=ozHrm&?Nghl&q{i1D+Zrm_j+$j#14r_ zpNgQ$c8Rg-$|X~7bAIzy}KV&kpq1R*d@Fa1qZ>#Qf`CQV~?yE;0V; zeapwsUvlh3`mE%)`nIL=`vIc~s%)3K`s(_-Pt1E<{;Z_Ow$k-m1SN)u`H4uMilEAN ziSgaEZ~s<$!kIp2(_>rds^r5{Pept?5$RJARM{>uUYMSqf8sxukEhSsT3`LkAhs35 zZ#|WAi1=h8(x)P*vRz_)Fa5sAR%!2^J}c?5t#ti%Qi&mA%S3Fm-X0Y}mF*Jaxc4rf zx<0je`mChKw$k-GOeIDaL6z+i9d~dqbPM;n89+}dzEmi#S>ie zea7gqtr&c7t=BVg>x?}rf-2i3MlOTOlJ1}Bv8@<q@hl-_o-! zmEY?fO;BaKw8wdAG>xyn`*iw@(PLZb`fcM9!^FJx=T-z&wo43+zci|*(`Sqx+e+8( zS(g|Ze{BR+wo8md@18Y%%KuJIz3bq)(|lKr@9*lQnBiH)&$wsS^g)UE&Ovjh>Cu@r zt8XqRATp(1?_(!Cd3x^KZ<<=32zp59RGp{&&gUo2IPuBTFFEq2sU?kEQN?%TdcFT$ z{^aRB6Y;i0P^A-rF5G84pCMBdoB!c~sa^m2`039lf*uk&v*=C#R_L_iJp91av;Ow@ z>3tdmReZCq*L!**)=$KLCW0!Rw{+&RiJYsNIO@*xre@srjOiN^K@SO?2zCD#3*GCT zb;o&AMI2reB=egDRb7b;W@TbFOOQOTU~w^}{#sGQE2u z=pmu=wr+WAp?kg8{C4)#wM%!I{#ApZs(yp+wBO90+CC8%rE*ZEv%=o{&5~|S=*^`M ze0BHf)rp{ogibRvUEXwRBdFs0ena9LDF#(KiOuQO#3{d?Jw7v)ZkY49^Wq!uWt}k@x8_LoZ&aK$4^Y{@yb-YROy^Mw_r_NfA@Lg-$}h>|3uJ3LMQS4 zadYSDw|AU3{-23>ZORo1s`w6DulEmko;UuNA3tOIXNjOnrwF>Y*TgvwJ}`b{8XrGM z1U)2l&fyC-cW>YN_YaIONyOF-f-1fn*XwPTh_9z{eo`W+(ix4O8ERtn@+VI$OLNIl ziJ*ssPLW)C>4N^*RQDy~@I<`2K~TlF>C&46Cq8-NFNxSH5me~}OwXb<@!h*;O?>ON z$*DPspofIc=p3Fx`}Rc4?$7NcsN(x~X*4C`KN4|3ib0jm7xj5tHF5tzb0@an^`fg6 zB!V6iKFPJ5<8@ymc1y%WgP@9U?DcxH51u>mjX4)x{fE?d>8Xj&u0HsSD#7i#{)}unYg||P^FdVEr&T*?@Vjd6BD6%mnxrOs&s4OpME=g{J=!)p9p$L z_;k{eE3KV>`s(fzuWS%hY1JO)iUd_YkyPnM;*TlDt5OVlNcgPLlB<8XclOj|D#wc& z1XbGM3|sJH|2KQ;sc+t8;-XZ$^pNmbqb0_-6R~L`E>8qKJ}p!#rqt`L_v7=Xo|@YH z;zkS-J_oeKSef>Te@i{_Ck=us?H`BZW5*QZ@*yfqQ@kno9{CC2JRY>?LTw=@W(a`3ej;9%Vo>Eh zqtdO3+Y|AHM5LK|f*umy$(CGQlvd6S)1ErDc|}m=-FeB?*dHDke`O-BO68!+`)j3J z6E~)v{`(T~UnvGXB)sb{x%yW(l2*=Z6VXcqRlXNdx;62W zbXWAVMC_5uK@SPvA(dSHA+3XNN_Soh8w6Fp>npkXcv@?pm+tN^Pr0JX_iakICN50G zPKmfA5%iGo-DJs?R?aV_JK=L01XaF6F1a#sZX&4iJ+9L2Cg>sIJMWUKtI}Hg>{O1A zrWhos^3#Npt8>!IIXBhrDXDhpA>n5OCC2}xClmK4;;D(C$4@4tVoK?|?ez5Hfb{g^ z9~v=8_^C*VaYcH<^3l{w-kZw7w5ZZ*=Tnt>y$`3=`Duwr&oU;c@>3k8TN8Vxb#R+B zK9(nf9uj_nRC4uLBA%a!T^a;cey&w&_xb6G*WT$)SmmI~PrQ_FO+1*^!8fM4B<7dfBiTP$DODs{D9BHo`?oOEw6K@SP9J|)IRX>Hmst%J{O5L9_Z zEivv+>)=6Y9aQboL&9rfiJ?2Lo6>sziUvWI*ZC4-y~-l6Ep1HVCRz>)KzHT>V3e@r^`WoLZ17@0OHq zO?))<#Mh)9*$MqNcUmO8Q!BZ8UFwNPr(NFz4T37~A4{&r6LC}`Qk~_VsPpEPmUou2 zYvMg=44#p8uTM+_JtVxVExEcO5wA_e4h@1T@0?4n-jjCW?@q+6sT@>!7p`<`Vz0E* zzd7ynf1U_>Ncaw*mx`QmadRmI{<#czqeX3ome6OZ-YvTLQST?rB zg}YD8O$0q8d^cHgrIoXdpvrg1C08V<@;$E7t%-N0UB)|7Ird1oqKAaUWZcMnU%cB!sN zQ01poC08PjO2ih4pvupglx|IIns)lXPIJlTiJ*sspMI5G9hQi%C*qD&4iZ%PiC)Ro zYZ9S5;dN6Cs{Bk&>DI*6>5k>pH19qw5%iGolfsg#A0^^F{kfe4Req9Ma`oSdcx z@dYUcRepY{bZg=XNqJ>jqqK6;L&8s0ORluTe;^U*89+r)*H9ukW8Z;R*mSI)F&m{`!? zGw{xoD&C7~Cegq0I}K;P=7L4vy!6F;zI5WH3vHkHtxqkyWZw((b=g@yAb$4R>sN`m z>cuB7v@O*OzIk1~9*IXz+jX&s|2uAvMGFtzIoq3lc=n=4o;rJA*D*F+x^%UP)n7Uy z+ahjR^Pz!V6OZ3)vkw$0n`y*bB-BZ{NbIh5*&|6WF|TDFcs z4~gzvRRsDNb6dxthv{zc=F;2ML%Rv8+!tc)(nDg~hf9pn1XY|d>Rdf>yYq6rYc4tH zuwrX2alOSD^i;%u6gti&B+i7&*GKnu61|Pi&AE+pNtG5KyXy9EITW45rZ=54$YD1@l~Wqsf+XhsvefQq zf-3f&I#<&ttef+zv|Q7&=WV}nz8>c*dPvxgy`+th%Jmjw(8F|nJ;ty{Y1x+Q@Y6rl zQ4V@YxIJPF5>!3%?9+1$tv+?_(nF%Vx6gamJ-N4QoWJ?QKgqVnxoaV|IXxtfUjL_= zj^msJRlXieP7jH{JonBVBaU+tRDI%Y-_ArF=j@3bwN7bt$=irHGcYaNQeA)g4|A^K z8buF@9sc@*OvD%;xMS;q=UW%g9{1d}-8S2H#Gr?S?Koex5mGU?bx)*+>CS(_9XVGq z1_`QM3!~eE#66$8JI5GJP{mPDmxKN1_R}xO>1y0LSEKtbiId;#A*x`5Cqdt1zz4v8%=Ek2M+#$vG z*mlSH*C;J{F8SQtfj#frdt^KI5~@hg`}2;Oh`FMNgzZ@JHbSa*{OBniG3a5sz8+)P zqx{;IYTn^DchoLDB-l=M-z7nn?bsgl*jBE(+uSOpMb-QNbY(6_jB(}`-^sP873UrM z6kDo?-}K#lJreYgIOFgeG7)y)4K0ol+d?J1TAu(_7A9j?31XWAkd~+sZzhYfE?`mh)dL-y+BVsQhVLSJ+&Rj9SBwW52 zg9KH!N7t@ZN|*CW-R4#)EvmTM)x?z>^j2%{qkEYTzJA?o>n?@$RugUQp?D*Rey>*E zt;)pbAIohX@71iz1XRpzovZnKtQqvU!yhZ@YHfE)v3BVp@sukIt^3b91_`QeMGk9% zxgx#Wb4snpRgE4Jwg;nj()-;uLaGnmvvqFG7=s?B>+3OwJxa^ARBwIvoQ@dueCVD% zvP#6u?%OTfu|4P^VSDWesorwpE;&Y=8R%iUw&SR6BcyUI#2EB2U0;te>`_{_bBu)> zc9i3T@Q`q8w!{EI)zqUia*X&ChaM7~CFS_Bm z*4i2GT$xq!*#6DJ6BZr+i?atQ)iM0NlZdt$yUzJqM~o*;FCWB^$}#@7=3@OsH6K5^=8cUQ&PgsgRIHH^bwy(O3ps}3 zjUb?6%QgtKvsJ25=PI@bJr&W97i*WqEl{~eVhnmnxON{~b84gH716INsoXX(SL@HY zEZ3siKmO~Q69#Rreq7g;X9E%APyOcsZ95XLntM=IsYb0*X>F@d*D>g^EyA&5 zU0J2Hs9Le+pK@%KsgCi;caH3Pj#;!~S^0jr^xg8EaO~|m&C0!c#j-=QEyA%QK@SPn zh(=nSD-u-s`smtq47Ia~?z)nPgv%HE71N@MeY!3ORjys-s+*vPgxe|3a3rYm_1GTt zkT`qIzjX8x5>%OvEqF+8kHzjKhfL1TwtC5HdrPw&b43q{uida96EOw}st)Z<^oeF~ zr^ke9)G5VYLJtY&FwP|;sPcELF$O&(T!*nIRz$z1r8;D?yb}_0WkNH#%BXJtF) z>MtMrz`$c$xjJ#{4-QhQ$2rq#ixJ!0>B_V7st@IK)oP9r$GJTk2PRZnr!=}8BzEq7 zG{=kk5~f8J%hz3U5<4&ac#aXFH3Ym4+*MR3w6m^i|4(*>@t-uYrQ7uA@Toq zD?8a(auQVedaPY~NI0I_rq0y|4>@?X_6$nPWzyS?PAT?Xs@yYnn)AXD1k)nnT8}YE zP-QyKqV$mPelE_5ue`b3Bdbp4EiLySY6IWN#M-5&jfg#wD#ueVaY~V(ry}N*d*?W6 zNz8!C_i7sRb(_=kg&WJgtkQM8#az)t;(%Ss6N}L!iYliRYnL7pZ#}I%35nx_1XZSE zZ>ML^3rpUW6QLh<>k(B`4v&E0wRuUP2Fv*T1Ta=FtRI9$m4Qczsn`U)!bZKc)KC zX=OJMd*WYiEW1gKBJV{s?wnE_QT8YX)AjXkLLL&%VH|@@iz?=}?j@%#Eqis9(7Q9` z@PeDmem=&ahlK4|jy6K7H_R!!*Eqw`!*p5G-Q{pRwV>(POXwkS^{YzBM-x;zr8qvQ za+%cIy9s(oxa4uvlAy|cA?Avnis<+0IBH3_FG=O=v99PLan^-pbd4scazBov)_mq&P7<&5>Rea+&{2H!j1d*q83 z*2Ib>>kiW0ZKKBzY=6fV33^C4wsKp?AVHOF<+dhRLVpXO(*F6=vj#b=33^D_R=w2( zYnSnC$8ykPdvva>$}NbzZ+Y!lE=P>PZ>mk}n`)P1@NIZ1Ou3_{hs2y$&&@IZxcrj~ z>yne8%GbAh?;9HJ!M?QHRWowB2cI)&C?>bjz*jfgQw*p`YlUB}?q=7=&K$2mPDIGXDiB&c$Y#2ECn5phJ3uq~C} zNQyD&A@R_xpXK*wVhj>g`FiXn^pIG*)sJ$F(F9eSJ)scsozz?3Q{E9&J3sF!<(*yG zegi7T;2XGnYqFc5hXmi)tlOLfRm^Qo&_iO$A3u}pD)x2~RBigji!<@DEk80|$DoJA zna7`=i8v>cplZ`yPwI*R4~Zqmeyk(Lg6Y{yOuFX^sYKM)1RNc*K{3&xuS}#Sre59>7I1cJ~>8g za}rdsHR~AeiJAfSU4DH|_eYx?v+BXk%lpZ(c0FoEoN>WTnV5O`eyf;LcZ@dT$k!gY zs+(}SQZa|^#2&|dWZ|YqmbXgP2F`69=Txn8ZXxb_<_AX*OpC-rR}}guhhETVa}ref z`sjI=#QqC@kZbz0Ki#TPS4@j4)^uH0ZS$b&%{4u!t4Z%<=&>!ru?Iv7RQ5hr$wQUx z__iTEwncZ(?N%u*s`wUjU2=Lz9DdH9N7{H&SYFm+(Y9Sq=!T`gZC?|?(Is8D*xp|j6qKu5$D~C=>H{}RQ@ZN7=s?uBw~zD ze)PTxeM=_K+y3|E3uSNi?6xu+NT0K6P7FF(*F$O(tM66vBwx#l4IK~+Cv=K3e z3Dx5HpV=jkJK4vb-OF|y=P$syF^(bC_0K8i$+Y~PFgzqUn(NwST2x*C?Z>9oD_df~ zL&D{YD-P45s=MU$kgy%=s*RA!MC`lt*cQRRoUZH2Dy2o$1-IOqM{|tfx2e>B{MY@m zpZoE0&P41by;c9YNcDc)Ru@h@@4Lm;(;=s%(}?O^(L-Xp?a#_7-T(5<8U%Clj*H)$ zRmw?suIM50wWB_q>2Ln(?W^isk)Y}&mzI+dmfh04H(-7@J*S*ypeHOWUmb%U5^p)? zi#b>E2@46Td_DFndPqFIA+ z(nEr~v%0R@T1{>4IvkWdVP#KEk8Ke@oBh5)kEvr=rL?Fz@XGgOBF5nC<5@y|*LEBq z^w<`0#cjXKG2-~JN@-E$Z|GtSdPwYa+@Es{?a1qrlb~w*gVtHBRa-mqnxN-5%N?RP)EcjFJQ@!K$u>)m)w zT@Js6AeG;35bgJJB0&!c+mGulZ^URLq;l*%=6s_;(8F~7#>K{~|EEE)8QM33^EQeU|QADLPdwQ{5i)knsB~M=rgxQF0Pgb=Q?^H@A8J-Izxg+)=fEd#=soSus4w_wZ_3AdnBEK?oBZ`!K`{hq#Z=r>Ped-$Dpsr*j6 zXumHWdm>eSb6x$ao1lk;-^Pt|2??rPj+iTYNcc_QI6fRhb>dv9c3r;M6X{{SF{Qda z=xHNjIY`)+%I{^w7Nn<*h%rdmmdfu3#2ECn5ite{+fwY!NaSum=s_qtao9CX`{|hILBBvC`2R%+#gyY5WL4qpRNQ^-b3D?5taZZ)nM&+w( z*Y}+2OTKG7>$E2fo&m%scP8W^;in0k_8wSO$Dqf=tvBAdiYe6uJtTaOyYmKLZ^R%$ zmG7g^J?+a4!p{IyT0TMWvzk~AdPvxgb=5{l<=Co)y5#gQT|aY(B{z}F(SMfl@NrvK zWvXL1UA4K>72&#?H)oqhFCjsdYdy|a^pJ4dC|;c_5>&bURlWw%|2rRfe3zAVlN>+9cB9?<565eIRTrq}ewVLVJ z6X_x07;!EkL6vJH#-PgeqY>3j&_lvC9dkv3Dz|3ryPg?T@0<-hnqx1ar;QkteA3@R zlCUk6?~q~)dfJE>gM@9Ve5V&<(9=f57$j^<5-C$>nJy zVhj?trScPm7=xZRBE}$LTPi;Zi81JDBVr5^wx#kDofw0jHX_C#VOuIcnTj#!X(M6` z61JuC6Sf$Go;D)JAYof7KPikc=xHNj3=+1b@)OS(gPt}b#vox^DnGf6G3aR{Vhj?t zrSj|=W6;w^3}U3MMtLuTgl(y~YS;S`dPsE7?OX@BUfGW2pvSgy<-5DMepscnsPdhD z+{w^mLaPr`s!L7}3EzLl9RLZce2*LVCB8pb34I@}lKbgSEC)R#Y{%MdBcyWdxc8xl z>H2vxr#Sdd zPw%bx&N9BkLJtYs@jaO~LMmVHCgfqdwqq}0T2%RZHz5xR*GTN`Op7YttH*xj`zY0} z??qIj-krtTrH6#=SXXU?RKDI#$isAP$GT!#RQY;0ArA@HNUU9^MV0TVW9@o(uiEw8 zt{U|yh_y=(3EQ!*+6bw9y_=AS>DrEU#k8pM^=?8Q60VV0yG)BJ-(SVr^^Bw1HLV); zJQi!09ul@=U9}NX`Fb}Y57V_B>xyYnI>D012v0#}ggsAz?eVM;jrPuXhvjFkRcRUokDJe7&2HhlK5T z)(g|3%GV>|)j(&J+SZ9Mp6y1T4nx9rjKQ?1^7U>)9ul@=T`?`He7&2HhlK6e=1hw! zU+*U5Az?d?TBb#nuXhvjkgy$hWK4@HU+*U5Az?dyyTr7p^7TmgUPk91@vKqy<9cSG zr;UhxmxOJpy2l4SZA6Sg!nRbt|BStzo;D)JAYof7-$%z7^t2H%1_|3z`FTK$K~EbI zW00^dm7ifoW0Y z>)nJrBy7h$1Jk0)*CXLITs@J$yTf(2?uqoY5%ISNNZ6K&>uw!`o;D)JAYof7uDf*% zdfJE>gM@9VxbD_5=xHNj3=+1b;<{VMpr?(9F-X{!itBD2gPt}b#vox^Dz3YA40_s# z7=wguskrXeG3aR{Vhj?trQ*6<$DpT;h%rdmmWu0c9fO`WBE}$LJC~!s1BmM&SL8M# z#vox^Dz3YAIp}F4Vhj?trSiHPfB%D?HX_C#VOuKyf=~Rl8+u6il->ASDSnUa#v6Y= zxTAk;%_fWe)cFq!?p;*Z6+OO#6yayqpFQoq2I2SN{<`Ll!D;Nf&iTP0UMxA&Vhq0_ z7IQ@piJf}o_llImx*Q~^@|$O>k(!`~grD!n7$m6jyOFAqItD!?Y{$B4BcyU{)pQ-h zZJyhp|L))ht8X099-HDnc6#H|?=)hNpsKqZ^pJ2nDPCO;5>);DlB;dmE1lce zg7mZzgZ7y8x5y-HOXVjlF^1n4Q+xP5GW84-gBYp!<(q2n=rz{7>(`j@n2#~&A>nt8 zVsEcv^xscZx_rM{ch#HY#k%q@fN8dLduVpHJs?60 z%43xX=Wsv_+QTY&sInbPPLFNTZ2y#e{#V-EDy2nLcU@KW)4yxfDC({&dfZDyxG%(U zPJ$}uHr5qAB-|I`I441sOCD!9f3Kpt@|}fje>WA^D8HAXeq~yD_nU{YC(=X0c5L%D zLMnet7Dp64Ot-rne#20;=qI~|T@JQ~>rLfw zEyQxrL&9|!`xObQoZA?K9uh7`93Ld8axKJMxkgo5whdFNX9jxOi0&3t2~A7Id)zt( zJ#9pcLBh6FyvMC$(9=f57$j^<#e3X320d*=j6uS-RJ_NnW6;w^#26%OOT~NKItD#$ zM2tbgwp6^wtz*#BM#LB-Y)i#^+&Tt5ZA6Sg!nRbr$E{<~(?-M?By3B?d)zt(J#9pc zLBh6FyvMC$(9=f57$j`xa`f-E;|#~U-!>w~AYof7-s9Hgpr?(9F-X{!io1_G20d*= zj6uS-RNQgaG3X)TeOKHwc*Rk=euGY{rJs?;T+u_q?}5af3<;|Iwn$u^{eGfW9MkF< zem7D(gSzDOkgy%g(MCw+*s-qYVY=PraQ$dabxo@ru7$Wd(?i1X;`kszm2(x>b9zX) ze5&=jc3BR;Tez37Nm!S)wm^&Mm`2R$TiUbu0Nap$4G zT3F|bp4qz=)#0zWE5D7al8=r-;_;gm`U5YywGo54qH5cROUYvl*Sp&G%voQ{ZJ;x$ zeZ8BIhr~ULF3$95f-1+TzD3TpOHV~?etC`&`xS{Zp<;il+e7CWs@_#{os1}3rz|d= z`MrT%6ON(Ne=phh!U65;aeUB2;)(xW=;~C*s^m(GD%Nx(S7P4&m@;!ogJMCo%k(}&IQ-mud+2e>!fSh)#=}vpofG` zw-%xEuF44r}O7^G{09ulsF>V1ZsD-u+B6huPjkSixTxt#T;v%_`0I+HxdpofHG z#M&i6Rd);0L&A0(=WT>ku7yajXXq4rl~$+NJ4P%=#Db?kmhlI{879ICK zB&c#7#=c8W8xdoWuq{=0dvM+6jOyIRwU!PNeK)?r;& z^pKeM%hKjCS0t$N^*CzjA+hOA=X8{V1XXUE7=xZRBGwfN+funbx?}j47CcAkw+>{- zJsdrbp>(@rkf2JxFrXN5b*@yr+wLadF|9qWa~Su#j82v9m@9g0D_#9sfyxnMSf#Y6 z(r+EKmt4QcAdgmk{nnOj|2miKxN_=uMeHG=-}%z@>bD2-YCwW2{R)axsz(%aMOwcq zAtJ6g^pN0llsX0ps`OhIiV^!RJtW-zqY0|6KmCU}M!e^2+uf@T+_G_XrpLAj$BQj! zmC~Zhc8o!fZKcbau4~sSrA3vWe#IE{km&9uB&hQBSn}IXzaZDUb{Wp0)}@o*R(gJ1 z)#xGN7;#l2L6z+ogSq;|+rFK1s9gr*wb!nqllaSX@62@EWiTzOd_AsF^pH4u{h#I- zahE}YsyBbQJj-m^W%Qqms!m)#D$_|W^bwg(BS^m~ws5lc=F3EOK& zNTpwyQ;fKBIxYPU=L^!W<$1>O^*EQ%LqflUCpyk0toM2Ex@VzO+R3n;+WVFAPU4== z-JR)Ja;8Pq{1@DjiCA*aKJsuE=9FT|>1iXnbEULQOVvH^(nF%V93-gPZkug$$zyxa zL&E(y))fh=^c#NeF?9=4Wm~n-P0&NacHCvO5mM>b1eL2uuu3kg9u5q=)Ht&(tKS za@)j`)6+)8`HF;XsrXG}J-yPlNO(tN(;*pFpf z&jU97;>CmOb*|_kapv)-59n@!s$1Xll}yB^IP{QM^2g7t1woZd9_L+pNU&Gd<)DYe zNjL4&kt-5Z=@;5H3gQlc9umE)4$j2qXYZAEJmueH-usZC>db@Qn2DF4xbCW&pywA~ z|F^6T-By&>qLO2#?1Y z!zvL}*^avbkw+}~mhdf1xXbwz@z2REP2?GZ~pxuAG1edQAuo&4x! zS@p?P+vLA2R-4E5!!hI`v1Gq8YU3J3f-2Wrj6n~Hbw0Wv=P-5+go%qpiey0^CxN51yJRdo!eWm_t}fv>(BW6(q5j0(RU=pQFx|B) z$EHV?ylc%c9oIp6NVwkiIOZb@>-Hc)mF*aV9@|Ryc~2?3!MFpkN@-EWok5)|{mqAZ z!@Wnoc;SJU{wdp{eLd!i9ukM2Q|P#}bjh_BwXJj?dPC`nalcCs36`%e2MMa??Oj?k z&L#Aau)TJKR7>7`bFQ~I@6y9`ZO7TCjgZQ<5M$88bbUR>ut#axmg?3GAM7XxJr&XK zJuwCe_ZX=@b^9N3j99z$kg&aWgjBaa^hk~o`<4ERO1)jZ&$dRs*nb>MaW% zHz;3C&_lwt8(WYBRlcq_DBEMmLxMe~CalV1qCZmAYTe_59@8Sa=XMfQd6tM{kRB47 zJ>f@r)Q(<1sB%iNC(=V=@m3|qXo4!I6ni2)Bp#aevs{jry9w;PsB%rm81%FeF$M|S zQn6Roy=3aqGGFQYS`(V7Ke%wi+}q=dLr+EYXV&YsVhnoPh?a4V@oZWuj{mwntkSB#<+Wou z@7xW<8P0?}B>w#AS(%PA90{siBi%8yyECo+I_K4MbBws_qlbiJ#NJMVD%;fw=G4YtZP9bf^cO&UXpmCf9{Q`sK@1SHwmvgouTJI4 zxgtT8uUBWDRfIehvFwZ-Lx1hqo+}ZzKxO)`YmR9U^tj{~-*QC$%UP9gbgpWm)b68e z-q?u261t|Pay!Ks^pLov-6>iA!r-LI==$xZ02N&Wq(O6$KLZ7;e0Hq@Rr zBL1zV33*63cJ+6uxy?yXWjn^8$F|aS$zxBnN@-E$+O5uq%enGjlPX=Evgx|=7>q4w zLNRQMHWABVmC~}Uw((!M#=g5^+0vYoW`ETQE6QQ)iS)2nI$kUX3942sJ9H4c?uqn} z`1|Ehy*r-fDAV0_B@YS5?ruR5R5@3%m#}sp`OcC3Ha})9X9f~yulbigJ!-z9%54)% zP7evki{&6emCG0F%76c%=sGh|eMu^vQzbjD9~A+W&a4s<%ki}v7G#fl^&ykGmU8__l&XwxQv17^UA>kT{El7eYUytRWhs2@1 ziGHm&dm;&{Ovl-Wb)pkD)y`6}4(pkLo;E_WT{mG`D*tsvEIB%Ov zYn0BpbFbcc)rYdJHrIKL?c;-HMEIB>_!H)bCaRO!?@<#5{#9$r|tpw8=a z-o5TBhdPN**JBKNNZ5|$Xd|T3Nqp_OqKD~v=cHdB>n?}msclTh_MnHv>MtFUb2XZv z$|=QBOO?x{UwP;z=po^fSHA@j?m4M)Ux>M)hlG1c^$Qi%-GtJj$|=RVqKAZjS4eF> znxM-4Sgl#Nxy~k1TJq>*BiR~*uEQ9^cc$t;I^W5?&-Yic?=r2n7~O2&kd_A@xRgR(d=qBhPan^;UOfd!ts(d~6_Da>S zH}&vtf*!Yl2)9ifgCwYOUx>M)hlG1c9D^jN^7U9(^pLpvRb{Mg_r^Tyz{COsg$M9JMCoA>rJ{QA>gcUCBwTORIjK1Y z394A@bquR=8}!!?okHrAVtdfzT#0bWtMhlOTq!N8^ouc?8Db22NVuk}b5e5*5>&Z0 zV+?voxQ|t*x8@imsPgsLujnD+y;gM!Z52alQDr)|x#vNp<#|Q4XS+zyL&9@c98q3n z6vJa%>3aOflG8)N^Gb|Cf-2^)?z{Am@cbCZAPK6vOU~MLy{Tt7rIvoxUoEq$zv`>M zb`$hCCnB7~IHE{URJk?d_~0y4%@TMOZ!XcgF4}sIon} zCt9T#-Q}=KX;H;dQ0I!hgl%Ix=87KM%9X!?h%IQ9(xS?Cj6siWrR#GWVhpR47FD)m z40>!UU7x%VV_2oMsInbn&|^E7qkrZ|jA2zS2UPw$@fd?1+e+7eGaO@BrL?HB9b?dA zTj}~Q-(n1_lonOCV+?w1D_#GkRg7Vk(xS?Cj6siWrR%>7h%u~ET2$GNG3c?abp1YT zjA511qRMuRL62>v>$ebN46BqDRkmXcdTc9QzwZ@eSf#Y6vK?d4V_WI^{gN2NDy2o0 z?HGd|+e+6@qhk!KlonOCV+=pd*51HR&$Whk6MS!hDnFl#G3X(|c=g;)f+~N95O*>r zR3}zxeRaH8SM-o@yto4(L6z$;uIKdl$-mZcrc{@l9uoe>Ebd-OQ042fJ?J6fcyaei zf-09Uwufs}9)BODblpxdSM-qZcY3kpB&hQB*yi+*aJ;y`B0-hQ7u(!~O6VueD!HFo z$GY+pbKN_W_H+1HSM-qRjzNMd$Bz4Udi=eC^3Ig%zDo}Ye-{$_6$z^R-Ain9tJG4C zp*C!UUGLOl46BqDRkmXcdTc9Q z?>J)&tCSX1wqp!>Y%5*woMQ~DlonOCV+?w1D_!3K#28j7EvjtC81&dyy1tW%F|1Nr zRN0O(=&`MIeMc5!Sf#Y6vK?d4V_WI^&N9ZZN@-DLJI0{Lb}mQ%*D+!Yt8zJ@;yrae z&grqObbY5EV_2maRN0Q@pvSh-^%INu=9yJWiz?eO20gZwuHPMvZ=PADw5amCs`1UU z>YJbbuPCt`@f#DzkjM7u+OVEHQd(5mjxp%5t#mz)#TZs8EvjtC81&dyx}J|? z46BqDRkmXcdTc9QuPZTzRZ5F0+c5?`ww12e#~8yZrA3wP7=s?$O4sXrjA511qRMuR zL62>v>-|cMVU^ON%65!Fk8P#veOHWOmC~Zhc8tNlSMr`w?edm=qd*Y?^GQaPpA6X{{Pw%3l3$|=QOLJ!lm9SMK;KX1-9*O-1>Z}~O; zzW(9kw!Eh9CG?Q+H}RrtqKeUf148MNt_gbl280N|OL5j|PiVv-L6yHT-L&_>syYTe zCT_j)##K%!))hS!(J#}^8+^SH!zDlWv@fr6y-DS|iZQ728wtu)H$e{xzuOQ?PJ$|5 zk1a?K3CD}=L4qomFZL_9v+9TS##*mikRB3_9cz~aRlYuY43eI?D(BpS;MEKpG7=r{=ekUZhhtpNhFs+iCj%`j4iM5NtUP-#WAF2gP~~q@Vhnmn_#4GIi;|$q-$%yr;dC`8x*Y2H&TZ^h^pJ2J#_>Ud zDu1IK#~??JdyH~oJJuCFwng}9TP%lFN{cGnF$O)hm9C$*#TZs8EvjtC81&dyx_;Ug zV_2oMsInbn&|^E7qyH{ejA2zS2ULDO7h}+4Tj}~~Ta00q(xS?Cj6siWrR%3{F@{x2 ziz?eO20gZwuAjEW7*;7Qs%*y?^w?Iqe%cmeSf#Y6vK?d4V_WI^XZ2H5apGz~4++0z6ITPTGFrF2UTM{L zZsVST9ukf>nxM)l#k~(bBy6u8A(c~7z13|_57V{1c7#-}1+DXS40@O@Tec?rzK2@M zgnEqam@9g0i*R3v{mLq(MOAk%VXpiZiqdsTaeUB2!f)A(-d|DWcS2$edPw*^ptw&Y zL6zS~in*f4Z=tBqouXwcDJD znnZbB8>5~f_n*o>y5Noh@x2>= zI3U*Pt-rc%4?kg%$Io{~Fm_G&Nt)&iKjl=ed_BgXhlHQ1s(f_}dQ2!+OsOX5A>n6z zs*!GjD%MC%&_lw{8P7QF$Bh^ysPc2)m@BtIZs&e$ZoK+`1}zw8YR8br>56c?BbQ#; zkt-2Yxej9tdPuky6tAu;5>&ZuRKA+<(+}06?{U?a{PZK%6+I;U>?HO?5>)wFpZZvx zD|$%yNnz}}RXO@k2bFi`u#Q2GpW=z|^SPKS5>)y5L(CODCe#K_DYiLhfU1x6|L!i< zu2u5bR=TdY7{e+NRN0O(=&`MI-A=JzS*5h7>TbcRe)=t_9^PG7^tc5@xG%&pNP;To zHr5qAB;2Rt7$iXzYoYFmzF$%;`aVj1$@}@3EAMgDN4>`t;T0~npks*e9g=#xV?=@; z621e7^DYUhx^qPj3Exe`*@pyGtdZ{8bq-adE>mnlj#~B@+p(_bv8@<Dpd9g3l92KSO4^w%3l3%H@bXkshXNd+i9RoKhU;^e|o9CMG95+D~2j z{l)M4%$n8f_C9ot>;*S${0-Z>{y`^*QJa1T(f58;-UT2V$XeYzOLL1%Tdk>E1q`Zsf#n= za`f`w3FjD3T|BgB7CXlPF)6nEWwBy(5i@g)9A`|q`{MHB7hn7P-7|4W@12Xke#)F| z4|7{$3<-Kj=xM??FWoKEQtRJjjzNMd=C z@h@&Pk?p4(zu)3(kA6{0uIM50FPELPaO3|szlFGE&8g{c7v^Qpusxo-`1gxGz1nqH z=ZYQ@EZ^TD`tAJvWhbw8+tdU-Ojj#Wdwbln?EQnZs48_htEJ@hkYKzzS2dx(UN5~e z*LuId)dW3Ex4X?*4#s=kamRJE2R$TCdTh=$?|Q~_TS`uXs$2f?*lRXEaOW0+y(G7P zzxU-b^+$7Ea(YOpWpBN8yfsFu(SBM~m9{B8zmDYf?sA#q4=pN?{n zpeoa?xmvR3gV(qP@A=%9uleSsFU&n-L{CH?CGnCq7hm(8zZSZ#U8Y49M?p={L*lrx z|Gwsv*R;*MB&b@k=GejPTE}3WXg2VeDE+F;`87cgiL#cojSmu3lueIvCeGdu6YwuS~iz<$rx*YV7P`$N}4-!;ybk#A~tJ&N0 zC}+8(L!_{Zz;^ExYCni(+ znV^Tna3*TTplZ1K%*>~re)Ce5uNi}Bkr>uOGX@E&hO=Fhpohe8PHYmx{m#s?^UkBF ze^-=e>LxL4sV3q5{3v3$pW~fZE78C2BQd-K7)4Mu+|M_O;kcW*csOcPt_I`0NwCLJ zH5>&^Vz_Tp@AK|u=HlV5rb)184DX|OSKK7n&Lo)IdPI?+iY;3c^wfmziqP8=Rz?&F z)(`tz9fPBmxsE z7mFzC>)MVe63SuO`!;jMd6%^?+@mxJdPofSE29XihI^DI!SP)Bm7bBTZOJQQaNpjH zk^8P^AE;RCb$gVVy5uB}u0E|^S)MaAW6(o_vFjKlsOp|e=pj+sMo%W1xgtRo$4#9p zwiH`%xC3m)pohe8$2p3iNQTlZJ=)P$enw8rSCHGDoZb8&OmS3f=9f1SP34DiJM zGxqWe9*X_VOJ6+rHIJI`6CvhM_E&D-bI)gQ*?)RoJ=3?RNqqC@J@?#ww^EKe1_`S~ z|L_NU?fJsvw=B=}s~Gl3MZ)D%3)V46SS5PD_q=$|(?0v8mKgR(MWU*!>YE1VB#*~_ z+YD`d(~vuuJWi{O;L;wl9Xpq!ieXQaa1KWkR*80vM8Y1aNVt5X39CfAWg}saR3zNr zMD%(WZ*knjZPzUs&+Xjrqk5y&^;Wmwhn{=&vqaq9CtOz~%J?7l_7Xz`J$hrWJ%)4D zj6p*0;+f9H$mRIoMy{yRn{|;;$?4I%aaO6`T)tlKJKvi8l1i=^^pMb7Z>H;9(WCd) ztYS(vK@SPNk!HG^pi1wTMMAYpkKPcoim`_=M9@P*?|zx?^{%{XrxorcB&gDxTth-p z+!N{1yI58+rC#rkr)<(1gM{9)GTrMP@$@g{zNuOleqG z&0a!6-$%E{U|Lk^`jFW3_zyqBwadOsx*oO4*HL#IF!8>5n@-R}Lbhk6QVtRCZ6T~u zO129zk<_OpiXNsb+p|)ycYUw-%r3$zrDVIrQ0uAm^e|o7!x`@S-sFF(E!qgHl#=Zd z6lo-c+N%;N!65}nu`O`B+s6ALhs{B_4F<10xSL5E!lex> zDqVLx#i)1T*B-q^z6U5Oz0c5p%GrOnArjx5`=oqll8H-a4($0yJ*i{gZcmeV{;y}| zd!HDCgjJ$1fAY+Z`wx4hBH{AI7$mF`eb=U2blgYTlgkn6t?h2YImt6>zpiAv4s))m zy9vKjQs&^&9yj!sQzflWl}mqTRBQutzEq ztgBvc@%2llzS3XMV_lUu#9Ska(d+HmL0Hvn^Ik9Qd#1IUp+~tgA=@=lVx)afD`AyV zvR#Os?>J!k$Nk-sJxo`&Yh*NGm15W~#0^^FLUCx=;5|SxHThTk8)x{wyzf=?R_S^_pyg6#b9smO_H#OM2^?*`6b3K%a@P; z#Ctf53DY@7|9NsDb|&HH)G7yQ5R>&d&vkXxBITsiXt7-jiqS@tT^I?rM?JS&mGj<@ zC;RUaWeqPmxoXjn-emZmWh%?$81p_%mu2cEN(|616h7 zZNDeB6IU&gI>*T0JGbYZCGQi0288Q}wJ?k=;>W2!?YDgS+37QN%d#`_J=tH^oUll? zR%F?;wmvgoFTc7VV&6oh&lEjPLUbXvO!o!fTW|N3=`&42wpF)Ge<8;xztiyKM0`IH z=`&4FlMr2q2hyJB|Mot1W%^WvXsh&h0p*_a)Kv0{fTu}_*6(BWdN-Z0eEfGQM*2)M zE&shi{uQl>6)1;@bl0^~cV4%^( zvJ3I#CC5%&^#0{%r_U4#|9yj0zE>~5<{{$3M5NCYJxxL}3UP5Fp7FlrXQxj^_|8kJ z?=LG)4b;cdvywzSJrU_MMNgAZj6%F85mU>S?~p#@BxGCV-0H6`dOZ1h(8 z3(>Eu9a3FYgmWd8>rj6e((Co>YKK%;%MUDEk`s6 zdYXh{6k^k~68v)SW5?2Gf`ogCRPNJ{u6bjMQ4#;2v2y|UY%2fwb}QF$OObKwe~yX_ zGBU$Bn{#H8h{_n1lEjq$Dus+ooHS}&BE^);h;dFRDU32Szu(L;E`<~!p-@P-e?CpWB z#<}MzB1DrCO*vM!aq;-dJNDaEGBSj`SK}NqV~n?l5~|@iC(*RWgEm@^oIShGt^p+& zeL{OktSky8G>WE#`#?{8c-pbupPwOB)bAn^*stwz|@ zQB6v~NBjPv1Y}xWcJhaUkM{jTH7Nnw35(Pn#&#tj(+clhqDJbw0d~|vY*$T6fOf*} zI0L*#DZ%$SVTIo~g^&8KRuig83FfdUp0#md*Qi}xCG@vbpa1FM(jH2vCMDp*+r#Rq zwE7xBohbpCRwK(k5qx;xwR)-v)uaSyC#;@ItFJ!PnG%p`Mc+Qol~7GeIE}cA7-G?( z->y;#<_hVu4n1Bep_-I{4<{_bVa^_6q7tlKSg|kEQM4vhlM?XZghlEOW4jXUC9qWIJ|T4;p1Eh z)uaUIcDzyoGOh46ntZ%cO-g`n$E%32bZLd(SIfsM)$qGGNH_jPHk;>`TpL7$rOR^Q z_uSyaYuDBWCD#V3(RB3};KCZGe2=YI?CL0?R(ulccQsq%)P!nM0y%WzaU9Q|)yi!6nDFGi&XxvqTy#!Y5)9tvcnv{T#cHE7K zYJ9+oW7Bh`aaT1QA0(P`SUq*E^x+;A5!EnSV8uFY$6eK=gy%4w?<&FCMY`+@991 zQUX4lu-IPjGiX}u?SZbwx#ub(M3WLtIds0uaUSwsjdRG1G2R|ZsD|U5MAIHGSlm6* z);M+zD8cB1bTw8Mg%YYs3HO1x`@H%1hDA}kI{5Yu#xs6>o!{Ysj4z(x@BYj0N~k6! z;KK=xyGrm&DzL&AR^S7_OL^a@7FZt_>B>NHo~s1YEq&p$MSnI2f-Dy6QP)$m}hZ6_eJoh16pW9U` z!Pu^ zy&dUtYIE34TQmR`{+Oe0cOxLNzG?A5JW^c=e1$2D`dS@Oy2r;$DqM zpBsfxO-jIr6Xs)pK9t}t4y^EXxuzWEqb5|75=}X*m(=TXCHU1klmlPMYuZBz)ucqz z9vByFb0zroJ+ueDW(Oa2FR2ODqy&68f$?o)y$|DE34SFHR`l)T1B8wBK8$zOqy&7_ zBMNopW3Z|dXqYR=tV18?Rb2%_H7NlfPV8#AdDLQwU8NGNU0AU%c=S<1H7NlfHPN9D zCD=<~#Xeoq5G)f=u6Y&wsPsKR|44gk2rgFkX=W?Zl0?2e6IJ z8SLsR!Cb-W%O5;2j1T|Xn-Z!?3HWegOH13HLyqDMixQA&#diAR32(D{VEWuNeTFHq8cA9f_)cO9BH1bYJ3DjH7U`QV-<&HFUMFojr;wp_-I{k9OQu0y3>QpZDma zaaT1d0on;&2`j;wKCHNs@hGZD$M7Zha0-O2CH`h_@Dd`w@RNE#?YVY$uOb9U)Yc67b4tew)QzyXv?L4RZyVb?Cq0wz&|hNeTFHLL;0KtX==rH{Vb6 z-#Ao)y`=p+ahHTB;Y2PbLc?AHnSI)Gm5YhY3Gz;&DaQ|OL~UpB%C34p5d?cXWR6X* zT@c$FVOLi*DbcitwP49MSAwG!=`t$$Fa0T@nv{SKCvZaOPTL){tKLt9hS3KyefzIF zDxsQ`fDb3Cy6U&Os^b+j%vJb}!)kxme-*K+tA4AiI{HA967b=~X0|@J{fw~J$F_xr zwF{ZO$A7C)3Du+od^qu-jXfLdAtoxpeg!M`Y0s4ss!0hchmWX!8-w+JBGTgcfXvbC zwOftBK&U1qn)blS8n(F-9JNT7@v816HKCf6fDb3|zQjaZZQE6^&!ORJ8!~6LK0cIC zO-jIr6E9kv`lH1wyXy5hG@QLc=3LvyIfy?QVOPC72u(`BhZEJ>U{v=Lq2VkXGFKTM zeR6AOXi@?`oG>5t?x3c{)dZ}#TJl`w*3Qfc)8%@{35)F|W4orMR$Rk*?OMO83Du-T z(;hf~%r;kot2?C2)oa~LYC<(B0Uu7_*|xni(Pvk^p9l?CsgUX0$A=QCNeTFHqN*z& zgVlZ_G|Uxb)}fE{s;&Z|nv{SKCtkER|AWO6yXtiGe zwV=7Kt$RsLs3s-g!-?ORk3B42*;U6Y{4xlm4`llGU#L(*H7NlfPP`z|M+xQ%R;+dZ z-3%pElM?XZg!K}%;HX`7goB2)3z>bvfB!=X)uaS`)CBr&@Sy~I39L8@>Ri=?YEq&p z2gcy-7OCy(D#6~4bUB*6c9l>~N;K_ZEm*S6mEfpFx{ONxD=|u_CMDn_BKpiv9j~Ba z^npy@{wp!?@pkL&cGb^6ph*e%aN;diSGHHuZ&$q!2Mu!tnRV#DkE4WYQUX4lxXt2~ z%^UhL`%{9o3oG^o|J5E4c22n8u2MBA0UtGill{Sm66__g;wY$d)u9j7q(oDW)ogzC zh}D%{b-Y4a?Cp>_HobP0P)$lS?NLRB(B?{T)FNF*rMj1N+2*QA3HWdVC$N{=deE+V zJqQg~caS-^^YHgV5}dul zigRs`K1!%2CE&w}YNkJmC)P@E77i<}8LD#lY9bJ-Nr|Q$*IR$$>P`u+CXg;yOJ2LV z^&m7U(XIB~Pp)&JQ3m0k6E5E|wRGV9RCxe}^L3HWg0Y0J%@ESA_+uOOje?LuZ>@aUt2 zYEl9|oEWjOXFG)b*d?bTT>q{ZG2nPbyyR|(am zMAIHsED3F{1V=5><*KjlC0(|;YEl9|oY2!E_@!Z5glbZvX%B0``m~4=kZFZq^o0+9s;`7< zQUbIS`kYe<{!%ck=-baT=yOihqy&7_Cm`_LIh>hLg1Lef>(I|-RCN^y)uaS`IHBj^ zlwj?`ihaRPi|Bbc)uaS`IH9N8lwdD`75lX3N(t4ZL{pAxM1_+zO0c&hU5-t!T_seL z5>0#Pb512VYLTwSnD~5&YEl9|>YiAihdXa3-TZ8;!lRGIE7ha~XeaE< zQrAj9iW*P?GOa$cgTFW7(MJi@qy%Uu3R}-|t)>KITJbEmM;|3rlM_T`)8Cu$Tv<%43Du+oa~OZ0K?%sT`oVVo-b7uy_4gT6lMs3SwY z->w8}7gp>Gb@ZtT)uaS`I58W0F*d)lt5kx$1Xk?Ro+~9(lM+oisu30HN(uIMq|32c z*DgkFAXJkQO?zm(Qi7uv>1vFL3KL3cyh?-1DU@4X}F$;Q%y?1hZ8uD z!SirRFjufz^d66iehxqh)uaS`)F%h(cX*Y6Oe?lieLA5gRFe{*ozMuU1X~bR>~DU` zLJ8HR1bjH55l#vAL|Ad$c&?OCO-eN7!1qh+RLUq$rYOM?g>=7lwZ}xS-6cY(CM8(Y zMPcoYy`^v#M+wNZVvO-#qJ(Nv0<;r)E<*`MA6PL~`qOYdm!X=JfDb2faTgj!QONY| z=KykX7n+oS4=3=}mYv$_x2ul3&@fk!*-n0*LErOIO-jH=eF6e^&TwWz3AP}t*x%|? z7B!)olzs@@)+O(?;h2rG^o&y^CYNr|Q$cw3frr36P5(q)XPYqx$QS2Zcov_~%P zA}vNA$Qmp2aTh%!CE&yRmBwApETQ2l6*A|j-rF_qswO4i!--35eD7gn(5|i$oV~*8 zgv+Lcb(D{DB~+6V@X?ODNiXLUDc!n=sLo6tnY?*$&}zsA68tK)KRo1 zRFe|$;Y4oj3=LN-kh#9{T;Q-d>+WR!vI4hZ9(BA8b!E>>5yl zt8G}(w~uoWd>249DFGi&Al_O$3E!qtg1Lef+sWe<2%fD~O-jIr6IH(oXFrr+3&M&$ z)T3zCuflma)uaS`)R7v!J;Zh;*mq&YapSqF_Lc&nnv`hDq37Y0;D|!Hj4@ujdLB+S zDbcit#$6>CeUPrk$~f+-CMDp*`<0#+A%Q2kjG~a~+s`v7p_-I{4=3<6gJ&j`V6I@r zI`mT(b`GE>RFe|$;Y8JfQA~t}wF{Yj!B2}Qp_-I{4<~Xl5gPUq$n4Xet6WTEPM9wH zu@m-GzvNjQO-rpfHobO1@GOpMQle=OJzt^(M=jE2jPa-XN~k6!;KK<$EusXY53K0h z&od~Ynv{T#`UC{(Dx8^6g1Lef>##bP;dK?xOsFO$;KK<$-KGR<7gp>&ep*Bc)uaS` zI8i-`3o%g%_A6L%6nL(bP)$lmIebKglQl}Pw_CpEI!ePZVgGV1FRFe|$;e@V)mEdXuR$Tjdu9Q$sN;KuL zx++;$N^n(#bh#e%+O@i>3Du-T(;j*nR|&4}kSfhRqrQ4!(IZJecE%SglbZvDMvL1L&=q3Z%4Wu&0f3J7z~7JQle=O zjaN!=)FNGtF>$<7O-jIr_p9m*OE?cl0#9-oeIV1fpJz})H7NlfPUPYhG|Uxb)?sy8 zBonWoNeTFHqH4iWYxAzA#oC1xdyk(MQ9?B-0Uz~=l=}N6O0bu}iha5&hduwW-X2c9 zs3s+va^&I_(qeCi%+c(%n~PV_q(svmdcH){;;0497*n4EsLz+ECMDpbA$Yz-2}U1S z(YK#x(DNm#NeTFH;z^4>h3&)HRmUr6m@CMvbw8J(glbX(KAf<#9|Ju5p#*CeR_qIY zTExzN)P!nM0zRBr%i=jm=YuC}ICRCFW@Zp4>hf{*Ha9DB8P?bZ@!>J}EnsV65 z<$86e1XmMCmunxdT_seL5>0zp3)bg%mEfuf>2eKM_mY}WO-jH=M1-@PN^o@tEBf~F zfn2fgswO4i!wEZKTJlV)63i8>Scg8&l~7Gez=sohx=jhzF09xWJo+f1nv{SKC-gj= z66__gVxRV0>3KNSq(oB=J>8}RdppwQ*!0>}LNzJTv_};gLYphWQHyjn#>DYTH7Nlf z-mf;XNR1OCcJ=#jnU?l@R~rpB^7@1L{o?!X8wh_dicN)3O`gCn_f|Xf*ro4RqLK9% zi18a$N;JPsypiNY3HY${mE9-oRHI#eN;EQlGmO8B3?F#+_4h{D)u);~AwCAo$A}V* zT;=My9jm&kd<>Y6k&tes$rDmnrPaWw5{>Nb;lDsFbrlHIC^dNkKI|kePOF!8jVjT| z>sRfM->HX>r9yZ+yCzS-$E7yQ_=owhYgCCwMmhMK_wWG%&r|KPTs4|J0UygOwm;=p zL^SmJgU#>M!-o>8$rJE_bGz2wq0NjHPN;I;!M>Ec=x(Wp9hnhSAAOE&eKW(GRE*s|!(a7vq9%Ev{ z+u1dF0zO`C(dQ}iVVC{3)10we7C6z!_RFO9JN3+MQLLhbXz~PnX!Oyv8hQP}=6B;| z42B4&nmhp?8n2XS)-To{+i<(MO3!_V!>@ zs%tk8s2^(b1blqYq7Tky*fpv|BjeX-(H9u6B0@BI0zNDz;w_;N6E&?yUVrcxC!byC zHpIl5P)(kw>I$U}C0C-6*B^Xt_jAXV*6mSQ2SPP@0zUBjKI_^n*{%^K8X0wU-dGc_ zo-krPBkUScO`Z@R9rMwrL?c(_sN+@Tqhmh$Lb{bEPe@&Ltp@s)Xk>4XW}H`b6$sQ1 zHF*L)Z0>`TfMM>VL?g3bF<#l+rzX6eU6Uu^!+#?V{};s}JJ|2q*%@>EE-GZq!YJeK z+wbrL`~FpqfF>nCzcPX}e4KawzCCM!Rm&X)rk`XB)xuZ$oKA1f8J zm*jmwLmwpI|lMw20b= z5|rVi9#JhH(9j17_-GNe4<#tWM?IoiKA@ow67bO?Y9C5ahL3tgwR}KBA0*(TMbti& zpbQ`Nh-&$OhCWEZM~kR^C_x!M>JioQ0S$eSfR7eY`%r>1d~ifHzsZVpsi6-N@Ij&( zQ6w;;!Y_qdx{yh?$DnGI2){XMK1ejVnmqHVu~~DMjjdFiYj0;hHMZ*=Yu-#5e_yef zPUna?hLji@|m8J#-M>A)j{mw`&=H?@d6H5}-+hl80QK zH}j4`$D(Hnz^a@5>O#N!@}* zpY#uJP2`q6H1?qy_#**-Q}!AcM}|;W5g}F_&AAqA#s!>9FXzWA#mG&6a!fA(}ooPYUD53E<@gZrc)hgHi zZfxFj-_81H`l$C^AHltQqH2`T9vbIL3ALIu^S&N^S2aqYO!?l9HoxpsA83sUw9|U` z9+WA$YBXKcI!9Mr4kgq|V@yn_MhWyvj^^bMVue1&=$aBu%s@n4_ultbwa`SRlxQ?c zOqzMO)z#jay3*dKRyzLMJ{V<`fc&|+&yM9HLlc+OO79Y}4~^$uKaA8**@#N+&Q-i> zG)ka781rKvXhEi>R(n75MIA3yis8A3HmAS&ev)hL13m9MLa5G%w=&V%A!q8d#%+~=#->`kcED;u>+ zV2;8WVCth8wQ3dUYW^4#=gs`_Am=#OPXFm3quPfi-e|LPk6kgL8YQ+JzI`wsMU_yi zZHrq6^RfNA-(51u+0ul<-ov>9Xh+cr!#5AI$Dyztj(1WL%67ixiXE!0AORiqjvu6X9>gZUYm`tUOOJW=U5SE^A0k%;>m zy$Q8KO5A^F6Vxc7wceXhEA+Sg8b>us^llHm7o9hAp^XWjt82tabJg4-V`8D@Dz}=@ zv_Q}bf9F19>;rAi`!>co@A`V5j|tT%fk>3^?MkSX<}mi58YK`bd-am0v})D6gjT`Nx20}GTU@d|^wtPaZFzZJTZ4+FpLBsVKWUMl{4;z<*vwK)^H9-P% zILI-9RVwCi&~UBhMDs+TP4HQP65LhI`yioKSdn24*Cte>MDS;GxaAXS#T~sip&BL7 zHkkV?pHM5b2cIFNb=7E;@V3d7T+>o3uDsg0QjHSm3;A+HgjjLq)%KwpuGL_rDWxU% z)g7#2!dIznADR|dtgzxPPMgqlx#onG(rK<5?@H*n=}o8=SK;kksYVIz4de*lf$+Th z-U4LqShNY%Xu3M)<8mmWRyzJ;LN!XDA7f_O&Q(N+l}3rwhwnflEz}$4hLAzvUfcGe z8YNH*q+=gSs1?RPW|nOqC?W1%(4b71SwcoF;BJ>8M56@v=Q4!&@Eo4m@)wsw(^Z0d znQb3Rs1^Q>`D31-MhUIMcCJXM75W=ymTe!ZQKENyXawN?F4EPAk>;w2K1x8woUxrN zO-rrt_a66Jxo=~f^RBNmgE&{JQ38=D-`kZ?E6ri-Lp4euR$^w^F1ZqF)w|@{t96d@ z%EpHh7>~Vcmt#$>P;VTYamiJqMDKFMMAOb*Z$2JlAF9!GwcctXJU>?}%Gm3f^yI=& z@^dddubGhrLNyUF^M*jYai=quLrfB@P49AIrQ(8wP>m8RO#ETHJwmROP%F|a6_+GF zR1*`|S3ZR3;`ufRpGRF{cZ2I|8NU7RQjS2VMhW<9&B$7WTA|iKMD5|Z5=}%@xsBSR zMX*e;LTl!8rJ5WO?G6SXSl2Ku%CI{3$;-mu+vQM=5_4zH4@A2hN~qQGcR3ODtB@6O72* zVIjf0T}*KI!>xR0)8(d}VnV&Ax#EhfP0)LqE6!13f@^2wgsWoaDj#>bUQP+Fo$>eB zhZ1VVr!{Q?x#HcD`!k*^-yLid$a~#_)!wudy=%A8z#msa@Rwh6a!epywZbk1M_O9) zMxz9G>)YkfwA6}E2ik;cl+ZpM=Sm5+!j4|P6ZduZ%K`<1poYJqp{m{5%p+yiQt zJSLiRYkZp3Cbai?Z}$~M@1Cd{CA5dekg$)gp^u-yYg^x+;W(o!q# z$+mr{MhVnmes4($wc@UG+lOkDK(FLzPV1^UHK|tUV~nmT;ZGXiox7@D3%>7{%T=R^ z3EwYWKEZuh`sg*zn^+PPzRR8W!L&eNFC12SmxxQQ@!adj=bxzcd~8>Z5~%6?3|R@a z;!bh99I8=5$7WoPh>&Q&{p7X})o8lQ8|VJC7-@xgWlt0#qkO&ZoYW|RGUfL&G%dBl zxWUuDb~#j|1j>YG=`TZw6~;fFG`0!VXu25l`TbqhD1oSyCsd;ZVpqPdlu#?gN}N<^ zmqRs5g!_EensL8ULap?!of6HcRRVVjoHfYhsv*=W(CMyoiD-?vsL!J=S%Uc|Wz2(J zmK94NRHFoDvaK0ei%=`f&Ot;o{XnQj3FbDM>9+{A(mQosyMa(mj_?(Wz1LTcx3>-L z8qoC_WY(3g4T}PVy%E@lw*r+=D_w=z*R1SaPWu8zKfZ#Y8YQ?E^^${F-3YrPLalTa zRus?Jd#Qi4cb)AjRilKi)q4|a#Z{lz)dThpkgHS8>Hzz)B?;^iw?;+b| z&+eL4HES1RJ6_QrE`(}Qq8U-s?YoIzx9>mL)l~vAt#tpPC_sG82)nwfNeS=yhzviq z{6AuE{Myw~0y3@G-+Uzu;$b7~>Zm3qoR*bvmpd%COk6L#4FuZdn|8-YB~SyI|1UNl>E%Wd1$w ziA`E-4L0&kyElZqUmJR&YVrifAjY^|VGJ%^Fc`j5g7L9*;s%v$Zz5KIuX9xqjiyCZ zG>GP%xDYd{w-+hnEyFaH#01-xBbB3;E!*}%O-ksSld%saXw~G(>nbMLQo%~gRK?16 zu9hxXf9QxqHw>k{^1}73cGnLwYdS+n8z|wvz0KoXF|8)=Uc1_Y2~oE>BWl$i`UYr; zyx||xWm+sbTM+N7qI|GRd{mm0cJR>8OQ-6U6)M$--cglOKDbubWckNOGtBA06LJr%x(voXyvKHC| zH6bU`{`6fF!;oMV5mnE?-%-2h3vGg$;6n)HFkcR|2l^-otvA$k|Kv?~t9?KSxuPZ| z7+sf7&$Jzunuu=jkAwDjjpcQDyQS<>CN=^-}7BRMiRxbYKEoh?_vnBkUGn_U-4XhA9NMPRO>yI>7O3(^4 zXKJ+%2q9N@zhxb}-~BA)>Xrp-oBVK)mrjKIgC_da#4SgU8#?d8F9a)XO%N*=!x@4a zGdsFi*r6~L~-7R z_D8xPyv=jvK)sWo6$tdPybo$L-H@vV=vO0|Tq&`%vZ9attS{=}LO6Y94SHoc8T?ty@@9bl+i+xZ7D!XcbODHmGX!$QD9ZJ6AS{PH?go_xRuN(C(c^9)1X_);-E;V}Os=R2 zIT7L(>oNJ6j1shZnUYs^0;`Cye%zxRLSTHb9IW+Bn_J#Fzw)~B(ZxR9Ca7s@w;GQN zu$PgG)JiO^tU%-MFMl6Y!sT3~W?EjO$caa4wtu@ET0b6Fz7t}5@4BJ}K9pFx08uHI zDFdYLu8U z;%ByZJ#k#(LkYFo?9A(ej}6XPBOz3y#H+6LTy6E*b(ce^)ufr%R<*EZLZ~K3tXQm< z5a-RjXwYkP%`wWbI^oQD;qUEos78rHuDv)A?Q$rgR+pXXM7upyqr`#{KeOF#4<*!U z)3^ApLAzh6Mu{t*xiplc-LI5TE5t|k%Fxy8-mV%Y@DxCa=4pmLo6zSGle48Wh(7;Lw?jW^&Xq$6o`pV0p1lPE2 zA6jx+!3XQGO)$T(;w~3tmak1vlM>uPSUy23`l#oL(fEK5Xkev;%hinRWr&fgZDijk zBDjmw_;7+dI_+{OL90OP{#ERw(!eSrbpNU+!QCj(+&gRMikgst0nR@y%JtN>Qn-^bIe;4jRz z(sKZ+NeS%S*H4$CT-4}s=$ zqjs*e9LzfiKBsCE)WAv!K1o?VK`YYrQ{<=|QC(GY-%yU~#6{Z&_u*j0=PHo7!`3FK zNeR?j{TwICl@hcHxzcCb5rJH>XMn&HR}hS@?Oah4tb{Sx=L4<%>?nl0P*K@F^w zKyR;~2}eGZpcQEL{I(B{9QwdhUC8V`ZGxJVU|)DS!cSZ@KGKsls&O9;q3fu4p2(2{ zB5MCvG-{PVO7%0ysCIRn(+d9Bvh9*n11lxquRioG4L0caF-T1Z0+jk*J+3YM2ux>gUdp4<#V8 z-gqZ!`{4eCm&4CoLFNuZo1i8oqTP=uR}oR25TlR$d=~_J3DX6^{?^VF_eDdls{PC0 zLw8c6Tyd`$R!;vh#6oT#+Rqvk!?sgvIU62L&(o6D z{bZCJ|48Ugvz_>@a!A6<@%8T?IdJWM=iczby|c=H|Mc3iL;g89GWpgj#=eS_7< zbWgS@=FIwBIsEYI3%_*e=>xM?x_)fqpG+Nkp}XqXRU2GCcE)p4hb9fII;MNeMRA`I zpEu&ehnzm38YNgGUXCYTb3(ajY>z&>B0{Zn$Ga#V{q^*6wa5Aw?zi)}QuC|jP~Syy z$|ok2N4({j$q#>Ymr^xKZ2A0xv3;+cI`pqiSF@eFf#W|{9`)qv3-^0pTn@F;8Yzl@ zO&(YN?eQ~j*yN$ds%hZB|qcC8pkT-Pmt08X9`z4D5w} zf8Pn^_qN<>;m@rFH7&K$mMw~NZrNjC$!kvNw=2q(?s7w3_2@s3tx#Yue7oC^960Ho zS^aj|`v%vJjo)s-#>blWeCXQnBnGnfx88(WfnM$j`K z6Aa8I(Q1&{V}5YzyutrkBzpQF^j#30jb{ZyHA+Bk>I%fguR1zQ&x$@8c)cRanb{pZ$L zxY@~{i*lvJIk(Om{NyD=L#OPF7QA<-(>v3TUSr{1C&h$XX^q&g13xmWyXdd0?tINg zM-EKe{9A(;**#-$+NxuhuWRSG@0>ccac9*r&23TaariFXRkq%0;SUa-P^#56cU?R< z{miLDQ{KH=LVWjQyL8Wf>sAXtF>^vxawRtW%*BI0ushs-uftQz=RUqm_bW!Mc34cP zmDWO0T=SX}x)0vEN1t5-`UDGOg3q8JV@~9EwGTfuy}Q{v&%EJ0yDMl3mDU=ul8-;G z`{)&4zhRSq{%=%QO2j@U-!rS*_w;)vUU+9*yK1%LKHnPL^0U*1X8#1wqkd_`MPoA| z37riT#cxOUAGl@OjB>Bx6(T~d{`%)1jcxVJ)S(luf{%A^F>hd8|M>EMR@P`^I%uqlC^;isJ9D zyLI4GAD>Y^H0PF%5^8nl*MB(nk!_|9-Fp#y-23ZW2cBPdM)}Atw{}#c#42OgkA2x@ zgSTC|wh<#Uwk$V(cH?q|pZuYt8YSXc#?{|^eBiw&98k`mesM&o)mN`xF!nvW8~kl` zJfna7b-R_1?)=*FtlKZ_s748$)fC0zA3r~E*zO0E-~Q-{5usK`oU>qT?%_j2`)mgv zZ`yR%a`O+4FE4rOoQ`Ug(79Goylw6ZKzV zHhWCzTtEMWQMsny3b#K z!=m9m_X)Y8MhWdbwl;YCl+IsIxqRYct6i-{wbEMmy3*QZoq%TE)t~)h`rdnYzI4n6 zlRow9qF87%nWx`>`%X5Ki3qjQ zG8M%i4%)B#suf3XJo|`sx~fq^BVSQ`=#8s)f4}i&lV)38DWO(zU46uI^OgIj?esOv zot8sSI%ysHoMDxXr|)EQhNyOx(6d-Y@zy7f@7^_QuMxW3?009|HR#&a&-oz6 z0cFg{_qyqKyK|()glcjG=-vcrSWWoL)w|_=s3u3WeJDX0R*zkKNDm*X$q{WIN>GN? zChuBnalRa?$q{WIN>GN?eOIozB=18tIil@D3Cix{;GRAjO^(R1tPoN2K2(z<+{X^byx6(&fA%l?-u8vgy+6Kq z@Ss^kLr1K&?$}e;Ts(NE&3Asi?z&^TLMn=FY-aoyn;~y{$^{+OC=sut20pYxcfmn3 z%7Z_?e@8V+U<6~%;P=5bHhEX~kO>==zx~kQs1j;L*~>9{)$^T&YaUP@aKy<`IW&ha zz2RGfYuS46v@fhT0b@7P`Z;Oootx4x;P8YSX&)RTw)xl`H9T94^`TR=; ze`z!1myX8lb%xE1_pllA)$d-rs~RPA-BuL)oqS8@{v&3T2aUV6ql8*5TX4zXo2E=1 z+VVj7IBCkQonvi=yx+sOc2uLpvAbM4xT38;FZdB+;_Gc@e7wz&hh}WqRgDt5{w#`F z`(51G;=}{WPt1M1ql8+m`R7XqAF_4S_rHoY&f~XT*!i8!kXPDpx2|fG&=qn~-1Kpq z8Si>P`SaVK?Gi(a~P@Y!WkhYp(oA8)dm@sb0_mtWa**RE=mh*zmU+GhXGwKhY( zVD1VLp;qtQZT{efw&wio`L8w~f3bP)-Zn$N;%Ib_B0{aWjQoq5iZl*sO2f@#XjXH<lbe-~=cZ}TF-E_aMYLw8iX-@$xS8up&(@6)tY4wOu zt2kHZ+g{A9-@kpQ587N#Pef}J)!Y`vVbk{>7`7Smiw_>(RgDrF^NZqp7p+sixcLJ+ ztuwG+M5vYax1z9B(EwLPoP}`?$Mufp)?%U%ssT*`GFKKwG5XOx2M(FC|4!={CqyMz zD=kw|Y<%2a0~4M&e$=k6YLtM?l}u4=V#G#g9G4|%1%hkCq8KkeR0A3NyQl^A9TTci z0y5Wd%O_|BqPcT!VqajhuN8Lf>OZKMX?tO1*x9CxTz#-OYVf}M{JDsgTnN?V2){dT zW?z)M-M%JgSHBXJVO4(Pn0hC@C_vn1gkAlr$r0}3cV@k^QFcWHX;@u4`^3SeM^6dm zvpbFus>u=V<4;ykPkeE9$F4plD8p((F>GgwCRaX`P)&}Ad<>Y65hW}{LkZR72={S|)zjbXOKEnEDnS`m-ecZc`A|YN zIl_HhYG0K5hxxE;R0+ynj`vGBl=xuLXmW)6SZ4L~lwVekhM)|q4Nu(HzR$q+0PzRE zMpcs|+=um&(%L(;pc0h59DB$8swO^IG@2X{`3QYi3CeXj>hV$KDi9&vN|PhphmFCK zV^9gousZ(m88Xgo4Az8da)kTX%f1PCk@a7@`jwyzE7WuouihzyYI218__wvi(>B)a zvUt^`MHyD!V?0*cGcO@jlOx>6HWo!6Hy?KOkN@xY7q2;Y=P(W^!)nrhwq1PqgN!9g zs3u3ak2hO9Tx4}+SHBXJVTG0Vf_>;i3Dx8X_i=-zKf(Oi)vp9)SS>nZN_VaMcdEwu zLLpR>BizSdtezgScw$$d5|m-J_=OuLulZVzK@blcVOO7Oa)kRpd;il~(XJ6CD6<@E z&S1O(@h>Cn8bP|$+yDtDnU6|{r$o&pY|4o5`}1Tg!{P9YIj}h@pg?W zK^a!4>5o3LUDX~S)-%Gc(MVJIQ^I{LHeyR7?1~7|utJad{(I?Ti4dyE5$>bv?WK*6 zQ6(tD%6tB{RXLPUO^$FM6YLwsmVWS|1Z7yA_0md9nsS(rnov!Sa35W3?>Aaq*)^&J zWmsWns%Z}pZ!*HJQPt!K_wj%c>lk5IM39En!zYbj()6qQg-}h7a33GB^iMU)u2Cf@ z!|LFPeM>kBib4t17SPyGp1gN4O94DeEa+yZV)&3@h}Q=Kg^`MM5<>!hKZZ zBiy5upbRVT`F`)hUSAj=t-D%|a36PD1pTW;QoH)G>-gcT%CHimjNQ6loP72e?&obn zH95lf`l`7u=Dht%P=?je9bc8_gG#6-N3?w?K^a!h?SAeU)*oID^`V*^;Xa;+f-H95k49A*9L1uMN>qe@VQ6?)9pi{4uK_^c4B$r0}3A7{)ScwpMGrCp;+ zP=?h#%jVdLR{BsvH95k4e9vYv&ssU`8dZXF@Nx1fQdd_gA(|ZFKCC@3HbU**qeLac z>cc0TForcw-5xce8q!L*k7^|x);LN~hSg=uj+MTvglcj`u=V+tsfGWmp}#!6r*ScgHT( zTolClM%dM_njGOip0hH{w~=dCpAwW|HGcn%mK^gZ-fL~wqig#a9lQEelOx;*RxDWC z+BKpC<+>be&<6;tZS5Kf=~kK?;XV$qQh(KAiCv>gP=*z1;rNen%{fB|)#M2G@m?$S zGK-0JjVeJIR-rYwrjPxEP)&|-ANG3y1NhRvU871+b{|7hj)Nki(c}pCvA500F0{I` z%X}!|GOTVt_gzaqSGNatKS-#Cv=Z(EGi0{85|m-J@&50Teg%SUu9_U-KCJJS?7K=( zu5(q75A52p?}l_MO^$FMLsm~C)>G{2SAsIEPz%jCS3)&8!hJk*>g<70>+yD3ENRlB z>^_Q_yUa351G`pmbw zvMVA;!|MHu{#-WkN(t5E2>0=K%h5G9s_g1hf-jj$r0{jn$^>#)>G{2SAsIEPz%jCS3)&8!hLA;QGzn8LTgrYqN1=^GQe1(njGOi zs=nK`{@V}YvclhLq6{na%8QqBudnL6fly73a3BA$c=dO`LcC&Hq+x~8b=l_h@thE< z$r0`&jaN*IG^`LMF58X!iD|r|CP%oBG+vQlx^+1Yo>0vb(|C1RrO6TQqpGXY>MO)6 z5+PSc!wR)<<&U?id{lK62-V~W_mRdcrbQZ7Xw8vf`bgsyH94a8QAZz5i!!XxE9tu^ z(s)Hpj&L8(+Zg$(brYI218sOHomGAKbAR%lJe zn7Ykd(I-c^4?n@{zuJSR3w%cnr&v|S84X`SDzVjFCl2m-z?wmG!v=@dZ_(k*M4rIT zCZ7*rCzbp7koi7deX2P8Mirl*!aJXHLdJPvoY83KN(r?Jbp6~}%faXJNDF!A&Ogrt zw0)>X3CQ_er39^l@9J4`TJq-kIm*FY@#%XzSE^A$a~S(jLalg;pzT97N@yL%KKSGq zY4Hg!WaO}Uk44)RxL-CRC#Y{530K zXS_X>P^(a;dVQ`$XpbrfqDmxExBTRqtG>MhTuyY4=1W)Jkh4 z&XsDE;OUgM4<#b2p5t6=SI3IhTbwJ^q(r{&Dgl{RxZ^a>&$Z1}qeT2PTnW`E!6)PG zx>Ai2m{~H1amkfXE6D7XF~PlQc;|Tr$UJw@&K2HpVzk6ACwq9I7xAw7^Kw8{kK`-I_6GVP~r5YuIzj`-H`<3Pd z1m`=wbEO(3klSWOuRda;vFbgdRHNylrkTUIu9Q$K^d8P?V?wRa=1qI_A~Y=}&@0)p zu@5EG3V-j_f{jLr;4j;PnwDCjeC#oCuJlR1o*cj%r;Ok+p&BLhY(q@6PF7U=7f6Zs zm6%XXNVg)8+vW`gXM7H)gj(T5LEZ;6TvhYj0minTJBV|ogj&HjQ)&}9>40>V#`&WB z`dl?i;7#4U4<*z}&y>ZvQjHRj^KG6IvMf*K|CG+l2(t$Me|SucHh$ zQyk|C1T`_C-|I_#D8Zd(?-J`1Coo922Th0&VlspVu60 zk3sYdri(tN@<*OsB|~7peeQc62;XAFP9fgsM7sDpckAO^sYVINuZ*A-Qu=n^t(jb5 zwM8qeSPy%tFXRd`{~qT`HA>+794|fo)jDaSsPP%HGrybsl+MBaxI zkZFZ6nD?QYlpr0KLkY;V!tDY%7kZHC1gm(|-eW*qWL{ZYQ4<*#Ai2dVh>_rG#3cHNQ6Ns>~fnH7RlNBRjkd0h(55oBUl(HA>8SV9{>* z*sg?H;qUogq8cR@{b{S+U!G7aq{Lns*RE=mK$#YQaotQ$M61y|WcHHYvkcWJq2~_b zTq&Vey>q3Slo;9T!b~}ofJ`f`kvLb#J7>j^x!MBFzsH1XQi61E0yM3VtGo}@qy*{M zhZ2x!g;nZYa#Zbnv~#Lv^N2oR$2=& zp_-H+-J1YSE3Ji?P)$mZ?oEKEl|E^V3Dqdk`>7@7JB$XHm#CcYSFoZ+3HamR<6J4B zR(OJ$-|JJ25}{vZ_Y=qe_sfgVd*JdAGq9T2@GUN*e2jc?u2iGM`2Rjor?fnxv3mEk ze=Oecsw*?`N;TvEyUcQRRj^Xu%kvQvY@6PMwkBrF`I4iqE*kzp$jLp2?{9g(I>_3Z zu@BWKG3h^LU8b0DE3Xr68>E!am1>meT~|t|6=bdr<6NmGCVJIXOf*)g-KmFcG1gw) zsYcrXE2MnMl~60l550Zcj1Sc)(R-Dugj(t9HLfewD1p`F8@IhVlPe|E3NmMzu@BWK zfn6%@yu^f#A|GAechOG0#|Je^V4QOl#6C1FwbD@#6RJ_dJ4BefE0r4c;Nl|G}>r@a_Atm&9gO-%HD zCfuZj_{el2=WACrO6c>1G*?YpYNflwF%iy8ROd+avCEQ3=Sj!U)d$P)$mZj&r31 zWLjYa=Y6OqB}m6Ulz>btjLp0c)uaUJ*oP93X@#+w_o14UARYTq0y3?%SEfYM!&8Fv z@`!_LAKEKpLN&+<)5YH@_a@Xz&mhEvY9gZg7D0QSs3*oTPgrxVzuSeHX0(fas749Y z+shMb1-VxgZ8R~_#L75Vnigu8=|axmqg0~=;%@#)oDyn7a_mFTr0Ll>^w9hmR830c@8?QD zrWN{F-iK;Zf^=LCB_PuZCC~d%O-hiCeJBB$R%nmB57ndu>7uBwHm2e;FS5?>^q+z9z$i8)NUl7o*s<4;j z2=|eGRfPo8t#ehs^_zZGg}psTxR0vj;oDRpCskUMVWnqz>$(brYI218(6@e-pzJ=H z7*n@-c-ab--IpJH)Z6B)9bhS*q%fa_{(=x?`=3NQC0bJ*5 z*hXv^gG#6s{*D!7O_(Dmv?ro9X~lP++k|SA=Vp?jYEgKW6QG(yKXqQ84QERt%$yK9- z)?u70)hH3_uo}U=3AN(+vUWMNg!~2wth7dAAF5G;Uqxv9P(rQn_k7<~jS~EBL*56| zQY&qzxE!icf?vgG`%prybfm>TV8t0Ltgti1+U0C8CbZ3YN)tplL6@ETfM8m|s@l0z zI`)CuC84>}lwv|PN}yM=e7y;^(j3NwmJkGIVOk?Gp&BKSL%bW_Zb2m?EBRHL*oVeM zCD5|WVQ)gMQ0tu4#)Mj-Ct`<0MV!;I56grQ1Fxy9*(whz^$1WrRNpMXE6tG?sfRgDs;L(;towSvs@#e`~UNvQL}P_m*~>?xffe(P z$VWMDK}}1oAm@D`TC$JwO##aATR(gkv35_^<|3Fk? z%f^Iil+b%uZ$hn*QoiJ>Q37&A4D;DtO3(^_&(CC3qv=A%xxRKU;oAeyKxVp#F_hzy zt40aPc>lcZ12K{FDD{VwxNdLzpa!(cOerSRhZ49mknT;W7391Ro@hh~G3Hr6z2{e| zQG#EMY1fq!YK5`Vd!EQBqwxwUF)GC+S4~Rf$A=P-X~ol&?Q*ClCj2~PO$@WQD}i-_ z`e4tG%K?I#nDCRJc^^tNvY&gc33KGn&*6h32R<6Y&%M4pp}mB1Tn@A???sS#C+mI3 zQH>I)Y0|L|CDcmWCMHy)1ZpAgLkYFgwuyb{ie66(f#B*sCRC#Ye7`)QR!Auy8C0VL zSPfDdY7!oQxD_n`#d z)Pxms$iK(sPz`)2fv=~veJBB$R(ijReeiu(q{TO9A!Cl3&y~(z`S!Zg{=R!VSA1XI zt^Cb<`e4+KbEQ5oBgeb?Ah7m%c|xspJ|Fu~jS`SK>yHWDzry%n{Xp)Ot40$Oy=zyA z#!71>&XsB)GgsQ0y$Q9_){F_h(eEwj-v(fN&|gfT7OCMI%TD{7%#fEyG*()sm{5)P zl50XQ;rrEXA2H!?cf(3YLF_|&AHO*OLVHY1s749CE!)nO5^BYFZQF#-gms3D)dXW# zoGaBRfptkfwkx4l_&Xy}+XppD=-Oxb1bYm>_0ul7YBXKsinGDkhZ1UqTEN$V+CEg1 z65NxGeJBB$R#@-g3r%ews!54_EKve7t$MHSRHFn|cckNTD4|xmvWyAUD4~72H=$OL z+5R!18YOy<4<*z}<5=t?UHvjAC{uoXs77l+eaAkOP%FrJAF5G8<5=uN3AKWp_o14Y zXzp;akCz<4Cxn@}src^|4#0{t!TLkYElocEy`C3>ItQ9`Y7`XYapGd&T{oS@$FPexUv zHLc}q*DljiE6DtNOsGZ)Enja!tsv)ps748lX4XRNLkYElocEy`B`})vK9o=^$ax>C ziHY9p+9oZGdFBLiFCUFY35;OUab0OzY8A$O_T3ECD4}mY#Xgi!D?L#V6MAY2t;vxJ zIUhw;qXc>->DY%7Y6Us(Lp4fh?23ITp;nOdK2)Ow=5zUSD4|x68y{DE>FDz3U;W02 zU7bUA_}1Vp3#Qq($6qxDdFjNdL0)*y#e@I;%(S81*I(V%A7^cOU^(fFlRDki|J6~A z5_cIfYwf8+=d84<5f83^O!>CSKU?(E@1GtKYBhM$#e;u6eA>|Oz6u{}{P6?j4bQ!+ z^UnFtbyTCo?neA$^{GSuw>x}%?fIk2t?qbo(NpW377=Ro^?fcLoHAqD&^MQ^VZ@G4 zzP~)}^5M=e|Nf_rYLqzqtrrg-{qLcnzwEG@5x3lRbotwfc|-JNmw?;8ay)N1Ut^9Dcvv!S8C-3}i=zU2euE&b1TuGw(Uj%t*+(uf_V4h_va89wH2 zaZI`7@;RNY`+vJg3AI{v)p>(k|7d9F?N7nSBO4xA?tbXMI+I6t>ZnGE*BLQ=($LVZ zr^Cmqw?3x){*I@2&OhqTMM|jES5LWU@V?&-4(;-vb&dG%;~yx$dh*KMEf=l4NHt1e zd?1SYw?*Fn(PPSAKYmW8X{`ggvtGgfnKzGT)l^6Zia;Ah@ees+HW7A(Zb!fM7=X`1oK6B@y zo!@qPM>R^EW5ju%nl|*U)zGh&u5(~_&mZm7IpOpFiU_s(+bIjiu6oVXp&NFEkFUSM zd~EvLMSER3r=uDreq}`Qv1voUp9vp-ywl3D>Ykkw*M2@C)N1@E7L4_;Gj-^)v*6?G z6_4qD%6j3hFP_>_jS?$tw_xmmDbt3&dKA9je)|O<=-z2P{S$+aMub`&c;|Ivhb$Z# zdfn@gt97I>-s`%tKlM)?dgN5}_N||Ke|M$7{i(Cv zw}&G_t=_-!bz{3t8ydRpeem(Q=a23lwC-u07w&p;ky^datp59}p`q{ma-Ff5m}A5< zh=)d~Mu|sXecjl3R#y)^hg`kz<^#KDF8gO^#z~VpN~qP(jJRUQp`m*}fn0rh{bRbf zTyuKo_@SRIQjHSW_ig4S^Z)R^?wkJk>h3n{-rT2zT2ZdQ?=!s5Y9|f6ec7>H+|`&C z?xK{{Ur~H(c+O?-GGY%SRHFp$^Q6Pwd3fK-hiY^_rzzogs$ZI)^Pz;!?TX^b=T`fl z9HCY^@A6!cP>s%<;#^JI`=BjQS82(W2y3-^4!7iySHFR^t7)kf+oRr-8UDjAFHCvM zV<&et_G#N_tSpM@+r9S22N&-;@cdU#=&D8u^=;q%xM0bo7vF#Jz z*sf}n(9vb%O6c6KDE1h4)y``d+m>(q)y`cd)Jof_C}wDcnAaVJIVC?#&cW}AV=2N)1fCWKmjcE&TiwF&r8&Fw!tWOrKS zbM^bwhY<7jzpAE-;_Yj`Z9a1KhlEh8=QrABkp7yIKVgJw{96q^CgNOu>w-Ij4-l$R z;)OH6BtFL7aLOBUxl$`#A$zXw-1n@`8BZTm@(zg^3-6qeb%qlYs!@V>>U!=|eCm=9 zciwQ%aV2K}&~VNGSywMbG4=H)&HuC!TNt4lB{)ZEe1L!tCDe*@qK06uRKxjIJ6A*h zH}}#{W_&2Y*+AnXmn*g6?8Axe&Y5xJ(8Fc-vnRf})LFQeN$2xL@z%+Ub{;wU;LcXJ z9#^VH30;52EvPM}ZKEw)6yLji&&hARY`F8lPmV2BqlEe^iqHOc&&elGJ*%_LpN@$L zwbI$St%O&2=j1<^XLas3LN!Wgjo6%F>qR?nG56rko=cA_wS>B&*BU8`<392FA0Bw_ zo4aqit&HkQ3Egujir+6A|F*B+Qg*kT`{syHD_!*!#nIoMzVp2Ay}A37AC#r;k?0y% z>7p3F(V`n4dgQq7l)DZZP>mA0dM%36HeYn(qrW+>`w*%6G1 z$9H+h!rhIy;KOGPs78snZlA}FTqeQ;spRtl_X))u- zmmFSDS0J<;N?=w)+H=L)RYI*WbIKE#=~06@BV|pg@$qTPm8OOH+{+W1mJ*mVk}ir( zAK7?*t{iHmxovWVex-TG44LVw@1i*5ecQbu=R*n1$VnGP_v>qCbEQ_gqi4I$x9rim z^))Ayc8yM+`PkTLhhJqU9p)^dyi#%Ql2xw#-PpY6zB>rHD0b*Us1;?TR1^H1`BGihq`>?dTMwNDrs)jOr?ETD>V>7P5qVmy;P%Fyr zeT%9s_obsD?6pOrH6a)#0}*A0XB;;_~Cqj0m-&T>B{L4tJFN6}jjDz+e4ID)4y(hfs`j|EA}0Lc z%Mqbgl-`&uZz`x(CdsT#`gF=^)S z$C~!&MW_{J_wi}_j_?bXGrRg#Lm560AJG>e7sZhkam7x1Mub{Xb|1JO*td$y8P>lh z&GaWRFD+YZaMH{h!u|#2$KEw|tD zWflG&5mxf9_bcm56W1H^zGQt&+ujyBPy$D*N1u1(uer;oLt-h%5_ z{c5`Ps|R}!OBcA6_YxBDvaLm*$3wreK3ZE@?^Ai=264aYcu!1-%F27C68077?g2Ii zQSYoD)TqiVlb4)zl@heV-zhu6lB)(jXyq-)lJCCj4I{k>mK-Tjb{~klD7k7h-5^JG zg}9p~DyxuEO&n+u&gv?BHT#}r57jZ8GNRf&CqFoL(m&R!VxoO>xgkW8BRnQn&c{HL7V*hSk2`ePC?L8uYQ95kEA-u2I$G2>0<@YwtlDQFe_eK{=FT+5HyV*Qm;& z#66Y~2v z>PP)hlOx>6n@^qHS#0%XS45BwK0;rhkBAUWj;MVM)IOA`WG}~W>f9EE`Dlof8;$p? z)xwP9p6c)J1AU5hMGfxTlwmb}`lDl0>h?gNVqK{wN4O8`C8f1@Xh9_?hjJ`4AKI^K z;vUiDh{#9iyGl^5%TbSyDp!FB=~kK?;XbUMF#f_ARDyCSht+N~&aIv>{=yhU{ZNx5 z+=s=IfjX85K|1&d?a%pc_5JpC^r>hiY9Dp<*|xZ~o;y>9)waX84>Gq!q47#JIl_IQ zPqD5dqDmK5*G~WGU_M@{hO`py1NSG?mt7-DP=?in0&5Y*D-ftJyGB%#BO)Ii^UZlEHkuQcaF<9~!Tepd4~l zn2)+&DKSAbIU@2AqK^`k>vCk{RY_zcv&f%wqJqyr~gAW@YD{t_nYA+*=SJdPP_wfdc zSGQQCwrdnUye29cRv2A#p8j&>V+$cvLs|*MUp_&}wJ}_UfQPs7p zUkS>=hqeD{ho4>fhzQZ-2=}qF#jB^xhg~6FF)j2G$go1MY|5d8YI218u#%UoDU`?QYsL2uTL!*xplwrjvk&jo5J~_gDXuQJAn*?Q8Vb;&w z#`7!Hz*>gHEa&1tB(@2<9b-TW%FFuE3^+iWrS%^CC?R{nt-J4SLE5*Z9|a2h@JI))!Sv-H1|x-$})LK>T-2qX@(mMp)`r4{7Af z>#p&b5w{y*DIhe8UnB9hQbIjtglqJA|A5-tKl-9-sapx!h{9WF`1*-!fS6~5rEc|< z5w7u1tH*s-4@&_-8d3Zvi)(=Rn-P|})l){ehK;Kl#}x_Y%fCP7^>kbn2zU^s1Z)ye zz)0z`Uza>8PoRY5gnCG$guKprWE%89gEpejo8=nnDIM0|N8cNVc6y75&*HBLxQPfa^HlpyRW4VTU%7~(d z60{M8cP`5{)Kf+jHI$%@D7*<;uA!bXqNt$+ZP)N`n-=>V?>$nzj40DkBKu}4MkRB? zY{Gw79l9Fop&s((^`ZtnC@*b9@k?{XdZ?$2aE(W7g}Z;PFPfG*^y^8qkuO>y`+5?H zrV*Ap)Kf-ysjwT|X@sSKAnh927f_=pBr;DK;Tn&d#&pxLWEx7ijVQDNzujnm)hL8| zNGp+P+-e$@I+UP|sKaKCNx!8SMJN>s^^_5=@t_fpn1-beC1@jxJ?lLP;$b5!b*QI| zNHtp2&{d5#qV&70QDhn|YN)4-a1CqS*3DKbOC3tkMif>%emgwwkCaeP8Q~h%x~C}K^sw=!RgA-;yhPR8Q~hq3KySC`0X8dXd_>= zLiv8Ko-)Eqr5Z}mMihFpTthu&L{UQt+K9q8q{=naQ$|oDyEh=geEGdCUT5nT33w2t z1Z*cTuKsGLS4-WD$`kyORz}=ygr#ovkVXl4-RqIe!K%%{fY2zk0=~-S8X$N#p`J1# z)38;vYN=ZZ+K57L;;USl1_||)5w7uqm1?qSSn5`SHli>p@y%t|c+rT{jIh+Lo-)EU zeE0VetORXp@IDcd+1&)9=qV%0HI#r&4IR6o20heMqNss82>g2!XcO9qf{pKyd0S~c z)Kf;3YcMa;)WG-Q$~EXIBV5Do?pk&)*tFCUe(U_K8OI!ab`SCmzk3eiUL!0SadY~G zNYYApsW94k0tgAG5rsRX>|YGgT}?ftmB=)B_ECa1qRiY@IusDygT2-mRI#W}HR zsayYz5!#5tDv|wLDW;JU>M0{K4OHuQ5M3H6i_u7MLWPck6bx3pOg zeznlg)FhBEJ!OPzpyoWoDM1@i`mfUXnVN)p$_Urc`wt~(BZ@8UeXfLh$_Ur6)yK{x z{-4&CHu8ndH3pF}(FIFAWrUY1ufe=XQ-gB_Ifokblo8ahr^5DZ^j&)%?r-C*HtNnt z*YEUq`P|0!pX{^hsLHT4JE0L0^e6$F*PWPSzeg=?zqM#y8inhx+_%c8TONJa?q>0y z67(nmo7bIK-F`p+&1sXHnwLi5`h};iGOD>?QlbIkw+TUy60mta(1_pVq(`HuJ^u2( z)r>HWm_T{qQG$9IVQ-VykTfri!gaLnX!XJi#bj|NPCqGOj?Nz0{-m!Y&f1eV$+xwX^w=lqx1r5_mLU z>Sct@s21m-611U#Hq7SvOG412`NHP)pwC;Hmqy__`X6hI6V^`X^O&GV3D~@zY6R<5 zKR9wlIhM6xEvBat4BVmfwf z|3Iln^M#F8&xoW43k0K(6UGA86>r`Add1a;1T;e8eH*)Prz_k_qZW&L;*mIOh}*Ho zu`7)FdCvpM*bRupNPKo%Cz4WjlC1XOY(Nyy39AzBk{hq)fdU? zqXcbepbe+jK1np*v*<4qf*#EmHm`d<7O{8Y-s0IO$xEYR4eS5Kqc0MTMU_ZAO2oDj zU3S`U;KWZ4#ufAB7~B8xHRAE+rBZ?(C1CS`yXs=j`PsJFC z=~zl^&=}L%98`iHmV`8~d#TzHjEYOBv(_*zm9GHMAmMttGAytjw7<1X`W$QcZ;~E# z8^kWB!ag%uOO&7|F3BAk&Ffx|H>|%S>qX5A1f$|oeX`uBORhXM(NJPm;!z^j3y8a| z4j*zK6oRzZd^zinu0$gshPX%bjqT*R*TaZvs-Z+;L*wtqE-Up=f*#EmHm|2`RbyMx zqfyY<^sQy2Kdh}%f*vJc^SW#N)Ao+p$vme=qvE!@0~)_c+6u(K)0M$JO2D2K5H=F+ z-oC5id1Yg1Ry<0&gE8i%BH?*0jOb2E^{|!dwPa0nb>@o_cE@YG*YAcBf}X7GPV>5# z>fhG7%iBAIS-am5mz`0#j($3N%=AP<33{@&a+=p&V>PS8f0O;39uTzSHncIeSafTm z(N~CBiARaJP61&WO=>7XJJ$GQIjM(fWJKc8d}BKxtmZAY73LkrU86v}br-4bLkZOB~^G3FFbukw`*48O;?{ zXOym@v+h_so@-9K?QI3SeBE`A60mnURS8{1>CvdTgrD@2^-76ZiARZ8FCcuY>D}#G^#47ZAFNDnT0>o4oZS=?^97 z(R^X^y4S<%fbV6*do4X071!eqXmH(CVpif&BGwBCuA-h-HkN#haeegb>1dBvYR_w7 z1V_8g!5ZhFmx}qK?7r@L{W#B+peHN4)4cAb(p8k6tmZfPx!roOeBDK_arIG}*InZ_ z8&@AC>n=TUsS+A(h>@7BySEELj}owX-8FRGrAMRUezJL!)gxSY-J?XT7ZAFNV&1Xl zw4veipZ%c(J(@3UUiW&0>n=u#?_`Y1#+!_ibfwnOM%~5-0>k}GyLx}&PBW?WprvF-A6m4O9phYLdSv{A`_J0GijPT#?lIP&~ zJ<2qca2rwj@9V|CMd8VLOsI#n60VUvAFJ9kvTh}4BTE0pG5cn%t)B1N*tOKHo-!iP zXqrZc611~YO}D?n!@r}LXf#cu!}E1d8Q~hqeKYQzD@xEt6k6e`u3Hn0oGf>&FSyK$*j#hWrS+x9Kn`3pFK86G(g}9r=^B^$_Z%TSN^BPC%o_`g}gx%hoF;GP`fxd$TjqP(nTBM50lp zh7y_Gw?6f|jc2g5aj8;5J>^8wR<(Dm_LeG2WOm>B(|evUqfgo&U)z`>p`LOA8kie+ z)`uQcBD4F}M=v;QMlh~wc-CjBLp|k$Xv8B?iOf#wkW=eGJmmy5_?rP{ zloFZk{gKUcn}hMM3?R@x^pq3Ou$2M76UA$Z5}D0$~C^jQt-UnP`BRZG@$6^^_B$(KL+?B{JLVvEGZ- zP@`!Y9mtoSazfe)?Nw1Cv%Nn)`~%mkq^)8C?L$vF0ga^3Th`|lB{I8j9liPao77N3 zJ>>*64!1X)*0gV!TB<0K*?sHVEVwN#ZAhr6oPfqiJ1yN{>y@R75}9pnRk=HD^^j0c zIRTA%Hvhh~)yGnY5}Dn%e)BKym2m~)D^Q3iS0_{UjIRTBN&uiA_4J9($#}(I@kU&4vQ%*p`|MTb6n~i;T z=JL<{+|Hc-?P%J(?%$axBjCZeQAyAy5x+GVgPV=1to1@`fmemoOVyk7iE zZ}sE}&?Jz(KeI%6PrCHWIA4^6Hm|oQSaTAji^Qd4TXjUigYO8_=5^LQE0ubbpiLrs zv;UH@_te=wu-R_B&QcW#FI7l@CJ~n^dE(Woqt~F0lF&wJ*_(*Qe?CgoqXcc&=(HKj zZ!UBEz(X5)!^S>6vuo2mlTs<6o-!h7E87S0wANBZ3EGHSWXO{H zqMkCsHSFt}>GzP8pp7UUp;4rSdddjbIMAN3yl6U>tR6m#;Gym9_WI0ezuG&gM>_&v zH)a%V*U*})hc-0u{pA&(*`K4tT9<9bDCDJ4v|U4Mt{&RZz!#!dcxFtZ0fOI-W|Y@F ziz49~9~kkloiZ%h-!%C8;q8;HC1~mKmwq-A*X{032=$OgzP#=lJvKt{b#6-ydXN`w zFX7WOr$6*XqR|opV~L(J!ZmKQ?{ZGJoz0Scvp*wfBPv|4lu%C@;Tl?VwBqD})QFci-8LZbb$mwAc8%oyV7#Yq{ozsY(1r%S zd!LQnc7#UJb`6^!HLfM6*$G>W!s47BH>_RaH_rTE{1Kwj`L%KP8XTCk(29ie9`+OCnD z$l~`Cd%lX|e{bOP$rp6O#@Fg$^Iu4W?eTVoiwX7Q3DWHe{`)w{cjH}$q}m~&o;;Ch z-1g?s)@uERR4mmty02H9*FM({>x7Lc*rz|UXl!43=^<8+c7#U3#=rFE#N{W9Y2EV8 z8y%La>QO>lA&Nk(zxnEwJfTsrq2aB&(!3K|YyDzUx25J`BNvN35A1M%4L0fl``%uQ z$M%f+a#jxz7p}KyfzT+}&~T#GZ_n0GA6U9!sihtzwB4epYQ#3n?b_HeM`)C`I(jg> zSIgG}CHeK|zYpq^5?!#gwxpGS9Yxo^F`+f@v`soJRW)j(-b=={t<<}Em{Uglc~1Yz z+X;adg+~e4xDFa+!GHcHphkT;XVp|=;RN$i0yeKl(aw)fs69Aqvu;aGjp|wS`>_T} zSR^hT-_an!yp({A>t1uM$11ZbX}+)-#o1gW)RQMjy8_!v3C>#Nt0fEx_2h|6W7WA6 zTBokGX@{k%*5k{I2c-R>C5$2vPknrTcUM9%FC}2(da=)^jUJxn3!72=cV>%(dh!J6 zu;xne-w8v$TEdV}PoBs$o*6o^cF4IKbX#ibDheA>SaGPm=E?tOGfD~dpzdL-)*V+?C-v_r%_vtnzP@Vov;xF``)E| zzxwhYi*FG{AQr#Y4iJA8ad`Wug96&JlhEy^?<$Fy>5^B>C2t=Z)dh4GzvB}oLK&vNv#jZ z?AzbcNcAY8?G{BK<{M!tAT&x_J&NXUHLH%U8BP>DIh>IO54!Jt`T1tVX3N~Ji(R@XVl>*ZXEX% z$_|_L;5vruA)%f;LApJ`6^`wO9xQ5T>*k3}qrTO|+8XN)>bBH8?2N&2J>Gx$M_a%~ z6zuKZ+bF*7tqbA@Mp$a9Cr^NOVhbY%8DS|PKr>3)(0-#gVxSS0n(E0DSv|b9l9OfU z(rG=;GMn{atD{b7>jr00c=814g%HWV=*V_Me-t&eb=e;zGL6k&TBh~+YP&ZqwR8p0 zm7)2SpG$kayN1=H9idUMQ7R`!{BTh7maQf>EVb05gtmhHTXby*je?!k{F07|tq)h; zu)|XIqXDnQ^BMaRY}6KZebw3V^)nv2urrE4%s0YPRXuqEv=d8KCbpjJyd6zJz0W(X9v^-&u-j5o3D}GpbFFK54}$o}2un@%fYxsJlgnIG>=wOAb*odz^`_X4hQ&QfJ$Zt3+PblZ z68txL*>2?;+PZln)6jkJ*`+^B+XOaid*KV8#@CDcpnCEI=;A)81Z+lW8;1L!dh$e8 z4{t5s2ek)bvmR{2paqaIGoTYvFZ|B?Gt zEY;MbgtnW#WzmMvC~ft0l=wWCdVIJ-tF%r_4ko%|YDx&XfJW%@G;}8*Syp!Nd2c{dt`}6-zbsD532ZMIauT zGrl8FXcTN{pl|FB@~Ts6$Nu+U(=6S;>^QFnRsh(j2kb?zbNju1XW7aCqPfEz(|(;J zGzvB}oOtu)NwqD1yy!Gb_p3(QQw1b`xuZZywlfsk#1YKH{+U z!A3n`bG&VG+&P^gp`JVe+KIDF!C;=M; z=&)2l)P_@2jfE4;Ygr}C=JhCA{oNC5!yn(T+fq}bMxWs8Jf4fvvmfYSie@FHQS=;RN$i0yeJu3BY?K zIr~VydVW|q!Mv0RPZ_J&nR?!c!5x;WyLW9HmmTL%*q~v*zRl?Px}W+$ylsS~s(SJS z=;FCu3D}HU0r&CC3ag12+)ku62{LHYxXR$ z+fq|Kc_ORF-Peq&9kFJmVX4(M($6Ay?7aLIun`6Op8ft2+kNMJ*BM11j_tgvJ5Oj7 zZ0sLSJh{TrwZCqEQ@5q2dX&&suo-2?&;`gU4QG5OAy&9HU>QO@5EsEL^8l|nC zj>P!>L+ha2h%magK(KDA*kx@AshQ+4CzB>d6zJ zow(hecpb3Ph8>owO2B5+9`C#tYxt815c?Zpsj8kl0Xle=5zpE+7TqPS2W-}3jrE47 z*VDFgLOgkb^g;-u8FkF;)!JyN2PIL0cBr8QY({B6g@k(Y1nKZ;R8U)Kx8XZ@3B3pP z8JT*trExtQCGT!Mu{Jpx)NQG$ghuT?*fqQdl~7NffJV^g@%+$H0vokO6x*;!s3%X5 zPFpwDP=c+Cd^xU)8tTatN9j-ky;8CKUV@aqlS%nBGxGG=jzE5po{zYu!lE^+XQ8Y&3dq( za6Rq8c%G{#Pmpd;um{<0=#Qd?wr-xtG)CEe-phXZvD6&)<$7^FP(#?P?d_KjiLZO> zDxsb{0on=uJxU4KjM6p?pTnsqPh|D**7CEc_8@H5gRLI)U@)WNn&$}8X@3+5wl3QZ z{ZZ7=*3A={#y2A-wvK&cP=}@J>of1_L|(reJE#R4QLsC{c_zN@Ya)o_jIdNyPo4nn z#3x3q`{tkyO926zQ4e1EuUO--|GTs^ia=D1uvAq~o&fE{yHD3!!&h9VVyU*~Q|H8a zZFq9M2R5Q$&%N@x*naHgZ|xaCJ3^yiqeYxp;?kp9Cw(=&!%|f}N@y!Y5s2OH+@Ryc z9HCLL+3Ha=H+(R=eLjRvD`X%*4K{EDA>r!iJ^Bb z(K_qay(*S!>QO@5EsEL^8l|nCj@@|m+2fy|_OKqXS&!HDe=xls66(nlq}vmq8THU@ z1FO^y3H9U&((MV*jM9Dz3H9U&(snmt_s$c~U%%T@^TBoh5w{6OHEcw|-t6yw-Debt zlZ~*{R8O7&?Zov)EOFub-If9ZG^5z+_ic4vXB2_xWrU@sdh!HlCvG&Nb;0`GmI8vU zizponQKW==@&q(6^3&Fh*TkT$9{#R{e$KaBkw9K?loDq1dK4|U`NY<%D{jzXsd~eu zgX8|d6Cv1$f<2)-im!X?f|zTBrNEOXKs<5lb3jDIkz9qaKtJMv)Tg$rD*Uyzah7 z-SqUc@mhki!)84=3yM#?)RQMjhpnpwM?2dMeN)uX*3A={hP7_(wG}t$w$#*;Xr0b{ zarI6RX@8`Idh!HH<;2RSv5#q3YAOMnQEUESjaUPtCyJC%PoChY4BH9>J-WkbPDKJW zjK{9*mY{jv#;(2H*0lHGEH#f^;y>8;je-pgCwkl4ZNK}|{Qj0k4jVr=_TVW8Y}5nx!Dqi3+hgMQ;Xr(O#Znzt z<_L{~4Gkyy*xPNpjoY`srIG4ULfg&$-oS`{&u!j+j~t;<+UoYrfvqOC&a$`LELDeZ z_F}A#vombe1NPj@Ux}~#=@rD8Mp&wXqT5V8=rGNm z6Kv^pB*y#s)V*3gXhoDAHtWIpU%WR^Po5whYAC^#f$c`^kkHo66Pbp-2Qc-X>*9Lg z>|UhEarjobQaV)KpKN$m-#B z_qF}JBmBIJvcqOQ*oMV>1NGzy(rN3)d#w^|UA7zgqo|>+nY5^Oyh5gW72c_3@tt*~9LApJGd>OUJIiuTXs3%X5j-tQY-^wg*e=B3Dw(PZ6 z#(ClIV_+i+_F>0e6WjimFYO48f{hk&Vv7Cc%lr1XGM1|9Q9@h6exo;H)ah3g2#tcx zR*#}>-Z{QC?Z;H&Mr{(p$=54OkO%CsXi3N|#H_}v4$w|@6x zpN6HDdX&(1iy{z_Cq2Do z4{Sui{`jRUV*BHvi}yHjyb+cHLZe`#MVwf1-y>TuUVLYVrK)$2BY}5nxtw)|6+kbx(&j8vH8U-8maN?4GE!x_?_r4WN zHT5W=?PkB2v>`M~TRmN`;xofdLmr7&OOzcp>v7B;AEwtsLOpqcbbA6cqqyz{caU+Z z)RQMjhZ;(76=mO`b&DF>gLxv;*!Lv+dz`HYbX#g_TOGTOpIGDjHfgsg0&%DjmSTc= zDFGYTi+5go+HA9q`7YCZJCp(V8M zml(095td?tc_{%K*Ztj(mF&KDSG%vZ)V%uC>*KbsOYLifrK)=J1ZXGp@4S?N%_wcd@bA3TlPB2H;b`MKHZ;6-_4mR3o?D_04}KGbjoQLKW75*`b$^nozYnS>Pk?q}#gP+RC%-yBG>R|uOLn_!ctW|c>=T(bL{uQpW5$(mTLX?UL-CreiMX^DA*G}UOcw_*FF%B zjX1eLXcTO;h!cz2uYDKU?}L`A>QO>lA&M3;V)d&BRW8mE8U>rJ9z}!Y_rZIfdq3_e zoH=2m9Z_%gQr*S>ayM!|-L6Pw%bgQwf?gO+OQQ9|3z{zkD4p;6lE>5PicB|rJC z?~o`vY}VuI-ET_k7ZU2p6QtV{pc$oY7!vBq6QrZ)6#LEViA&b+w$xny_~~(ZG2&n& z3ij)^2T~WO5YFmw6>B-V|OZy`wkQZ813D~?IMJw3vYIoc3YL==$dGFyk zU)&GCMilI$-gzRv?yakYdh!HlC#DRa*!pJ84LU3Zd4Xn>me8JG8S$+Vma6K>6IngH z?!FIdJ=WXrz0x{`ZKY*b0ybMA{++Wn$A0s&)KrfWNA2@*TBnduPoBV9;%&8H_{7@Y z-`}9yQd0@oj2d&gYxqj7gnIG>XeYF-K+vN*gXR>rm3owbo%P3(b~kbK6YF%AgKQ)uj&hR>avEHtGR;jgS4hpI$*+VuYotdh!HlC+uzY zmc85FVJRR$GfLYqej~nR@3wbXs;VbXu%*+H81I8xkE;jV8js_Aor(l&s|0Lbw||et zPT~9p#MLX@73Yi79c)Cwp1Z|u@%7@pfqL=;XeacYJ0)Nk<~-zxz^+M zpZa+&U#GOK;{8L*t^{nhLKN+1r|`LUZnxCZnWHmm;zhk;!cXBKUNyo}Kxht5O>3LQ*F!=*Wd!Ib`sL$?wpRT5pH)lUO3+5s@;Cjueq?RaL_-Pnlo77+ zgG;t6*La3*VNHnItQ{8-r zU(_r$l%S2M(f`=D{`Ru$^YKEcr;Koo1MVAC8^7A-NDU=uBdX73d(}H1qlOadDI;8C z(tUf^7GJCvQbP&ah#J4^p7pct<|b+=lqSIbgG3EGH4OW*VS=81+9>M0{!<7OLI8?3f@%Th%N z+K9r4S^n}7iG~vDDI;9thTptX{mTx&Xj!T#K^svR`TMRmGST?65b7x-TqBw1Et}^R zC1@iGGq~^1sFBR`m{3m{;Tp>~&%J-t!IN5+DoW5s6jq`YtJGLg2=$Z^uJP1yH#Xnf z^yrqQiW0ODg%x%BT=s_&>M0{!BiRkGhg6iHjVSC4FW0D{gnG&d*GP6X?1dF2Xd??)z2GQu?`+J1iRSO08U>QI6QGM^;Tjj&x#YO+aWAZP!@&*#m0NpZG=7QipnIL*to0 zoKnATY3`h>81bADw^gGGqmY+I(RPiWRqM5nTkEteRn$Wp8h^U+r22ne+c;Snc20;v z&9wtUqiDOvtlQV99dp!nElU;k(1yknFCSN5^|OrHJTG%tsegG zU$!h&)I%E@Hyn0UJ=&fc?Ffyc?HYIQ-c^0|nG;%;D(ayPjor>YwEo9=8z%K2@!iwM z1%yV?c8zt9*=gi|Z=BS!R8bFYXdF0UO#S0$sX=17Rk{K~qiDOv@a2Edto1p$WvQYb z+R)g0!v6IKmuFiIYeQ%hZPz&SsoR=YEq_$YQbj$qp|SQOKd=AgGHRTa5VMy(JRmfR zwrgy0=#s5FJNH7WsE0N*#!TC_zR@o^cH0peMcXxgdf?#JOXm(ls;GxHG*%zEQ~iab zh9rGXVzqOI282e@c8#-sxJ&EC>WWAe_0WdKL4V)Ae&;Qm=j{lMqU{=wbspC0JMZD9 zr4IGbhQ>t)ZdsaG%H$&$q1 zJN5_&jiT)uc22bSw){W!(5A-UR_2bgFoIE_VY|jrR*$*;cC1?JRu65q)u;=(bAou) zh&|WbIv`MUM$vYS_pLv=-g>xdsarj?p@F{H>T{j|Kuj{iQb1@FZP)mvjjK7;6>F9n z>Y)t{jIkeWQccD#h?k7`Q|BrHp;5G5Pxu$rZYdT2ufbLAgf)Dn%C6QcLj zkpZDmv|VGW&GR!l_o`WHsE0N*Fz2^gt~1g2tr2G$v3-5NfY2z~uJP5=w>5vh{82Sa z4fW852G*{PFQrC1LZfKA#-hvopm{)_lWUe5>Y)t{tiipWqQ)W#vBffz0z#u`yT(1^ zcN#hO#z{3x4fW852KJJl-%kw^eOBoT2#uoc8Xxc0RsHH2`}fbDIiaB*+R(tB_{Bcd z_$VP>`qzm8p;5G5& zqqak8sE0N*a7J160nQH)y^XLG5E@0>H9i|zukG8j4pKusw4s5s)~;9aj-?%;QM6qn zIVV=_oY<`%+R(sh@Y-#-mL%uIs+|)Xj6z--McXx|+UfPOt*)qA>Q)bJXyEMo^|M@e zN%Y(Hnt;$K+O9FfPT^e}J~7hLH1*Ji22ba(qX@(#BP<1kM$vW+ob(6SN#9a%(q|Ow z!Bc;-)g<5S=iL^fbR_al&r9Wuzon-hC3LQY8cJvs?^uf(>QO@He5j#>M)A(OsKMtK z@aP`JXD3BMJxb^<8kR~4jl%WpX_U6EmR(oT_VrMY61vWZrBXtp_#~uQbM+{p`&Fo+ zghug+PEkWWO6a~DYAB&m+Or{{9wqer(4NpJ?f)DhPX}}@;q!oE&DEm>*Rh2Y8pY=t zMM6DF=&BvoLkW%26(c0nqlE50?Fo(2btNRwR{SjmZN;Y%coLHRj^m84SL#s$YjF9R zsDwu8lb5hm>QO@1;P!+@@rh2c2i2p5?j@my5*nprEF`c}^Vb*j0iP|PXR}{^oblFG zj}qw3?CD24LZdL=vR|;2P>&KAW7$)jc7#Uh=<#^Fm#W}Ny?T_uT*;nBsfH37rDH7A zz?#V4Yp{y)Ndea5?6)G-P>&K==d))S?Ffy+{+RvdrG$Evz)qAslW9k2l#U*cXX~m* z3GD6JvnAC~LZftyg&MlQ!sb1B`@L2@N?>izo*HPWl+Y;bE7>ntN~lK(>?PULk9LGc zVYkbEiBm#7N??b}p5nA4G)hOP$Fm33qXc&9>}iy0D4|h0j#G_>>9j!LHzAyBdCGvz z^NOE$6OEWqj}klwEu7FOo*#>ZdX(TvZQ+DQVNBz9oFaj>1ixCq!_^r!SMVaC9woTW zFPzXQ?p;MfJxXx*Sva9lC@ps9BBAZWlRl!_x0QO7;F+PQp@c^9yiz38qXf?=3nw&+ zr>G*K9wm5kS~#ImI(otxr5+`C0xW7Mp;0=QRDsFGUR{G)mX5P=osi^5Xshn>$faLp@4xhf9erTXW-8 zR0)mJo()T-9wlIBPo15~G&o8$O8Y<5;MoV|<(>f>ZHQA;S`WiqLp@4x_gOfhQQT3B zgnE?Vp15#AqqJwknyW_%?(IblB{WL=Kh)s49eMFg1siK6?f{A!>QREHvxO5H#S>?d zP>&KkGcKIaC>=dv&DEm>&%Q+sB{WLMSg4_UA9haMXCmMB`=EN1;N3*AR7z+RR&d-Q z7YX$!!Mm4*6B@-kvLc}#C3sJ@a6+SWgodrF9wm5hSkzELqjVhG_w?=GD^C7(>&DQ_ zy6W3RTaH>R`ew$?PoGlXV%(_M=JkG2kNs*_M!=&4Z6~}Ycr&c4vGstR>VF?HY7{)j z&7PRrybkTO<^chZ611Io!2Z?g{`RjaTWaj|^mcJQpmFG+pT_lo&FdlY;o=*o1UyR6 zc0%j%yT5K8zY9EW?B8ds_tRmqea;0vGmf3TO>7ryzSg#bW6xDrJUwH;V;!-Ld}oc_ zAh93K)m%MF&@O6dsk9`YT`{7KhI*8sU95Q-fhcODeqj%u|Cfzo^~%;Wd)Nw%E1vCX zUk~*t!4~;mG`}a*U=-A;H}O}qgO&~nYM|^&>>F(omv)nlpU>4p35{ysR_alLBL*c5 zOQnQHwQpS#7!4%Q(kyLpl&D7umT=_8_vKnw35{aAK`*XHm(B5b*0Mi_ZQN@Hi6|eh)1hNm z%xS2HG-}K1Xt%KD^dK+Vh+>_f9TMtMf^|Yag*9hMkQYZEqIf;+55v55)uRMgjAEZF zp;0=f!&0e73F={8X-{YrwK;avH&VLxjn=MzcS<$hqhMcfs_$34&NVS5BK716&`#JM z)w2Bwsj}14Yu86d)!1|Bpo;BLBV(J_eb$oLqt~V>0gn>2InT3F?H8?6Kj-ZcalWt* zX>6R@xZa+CCr^MTffj~NR|R8f=tmok!brrNfQ>nUaRob=Q89sbhX>;a{lTb*uc^m& zQA0gSp#Q0t_Ia$Kghuf?doZhqdX%7Eu&c!y>S3L*o@-9!rGmN=Y{Ov33F-ktqXsSa^RZLA_xA2WajIhgeaqcEVbgwnc z*F+^~BZ^}>-Op1(J!M32W{7L91Z|xw?fV=aCD?AhQh&bUcCC>=`5{u}irHJ%m$(`0 z`8PAx9`LjJFaA0xwt3xqki_a^2Bri&O3*I$`TYHNtq(oM^L_Z5@u|)0?Fo34pzXx` z6}PL6wt85qTt54xwCopLe0o|ZUJr@>RuAaY4E|(=HMZ?R9p# zBA?$eCAP8RjK5`aN{1s+JxcuFU(QMhIg9!{Px8ggA&rudD9&2-C_%fpb85{Wd-1nv zJy`Q1p&lhJx%M|PU0g+#(5UvMQjZdYqH|-7;$EwSMrl8V{lS`}65Ax~wfm zHA{${tUaL~C0N4Z{7^!pw6wWWC2K8OQ3=+mI6pKmjiNS3JML-yzd_MO@qH9DVDnCh z*SW$K33&1Z@4})ed1e{k53W1zqVyhc=w%nD_lCUgqlAP#v#h8`3ECW2TB=Lp`&uv6 zCGmYNZQk#q#zn$w9umAOj-qw!OSi{fd}q^A#}((FTK{s*&F!4<#SGegqp0W1(@(7r z9qiXbLOo>!X!~l!en+;hntEr`Qil?>5w-g^UG65O8&Okw9bf<88fsi-#H&VFs;H-oaE+lxd~JlKfFO;i zd#4>$zh{rmq#jDBr;KooikKBaf^h}KijMR`3kIu66z@q6BS3{qfV? zWS(~mp`J3rH73p&P}}qm_KB1~)GA8QM$~$X?ONY#1028Q~g#o4!kJknJCqDoW5s)Lw7?v_AF@JnO~Uu7rBZ2-o(zmb#UojVScyC6{cHXegncGQu@>HH}Wwu+*&tZA4*IZZ>;pqM?L( z$_Uq}-?B^X@WWR?YA8V)QJ7s9el#S}*usb-jIh*DPZ{AF$;yEBBp^s53aiBSds9OR z^^_5=vAeB_<9}a6YA8V)QCRI}UV`6^uwE&lo-)EU&Nq!wreUd}1Z_lN)!uhqYAB(e zGQu^IJ*sAVR6_~ch{Eo($R&7|iFzb^R7|L+jBt%VfAC)Q7dIbNv(!+6HlnbLZm}~p zt`|Z*WrS-aCxDur85&B^Mifp1$3@goLOo@KYpl8Aan<9`8(*{3P=Yq1aH^U3>V`>M z{Xhuylo76xociqkxvQZBZA9U8mT4%Vo-(4Sp#*J2;gngfp`J3rHIg%R&Cb*fC1@iG zr{#5rvpM0{!MMBy$ho9D^BTFvg&8tN${T;l}0=iJ-Y z5=#L=8d12Lym%L$xwC31AV?z$PmQv335XAku+*)d zGQu_N)YrP+PD_@iDM1@ie7n{64-nTHVQHFr$_UpOY{U&O*vayR&(gnGM_!~^4?a7y zFTM+beCa78Ttin;JgvpoP4V3LPZysW+x`^q+}IADQ^zYcp3s7TM~R27xG1Gv!JiOz zHI&dOJcp%rNU&6R@{4Ehh{6+E)e8yrD1m4Cp!u{G6rNjlHI&dOUgy)=j9{tIR@A@~ za}s=#ni1+zf_lL(4Q)$>C~61K!efGYp@!7J?}OAX)WqJ&0KJNN}Fu7`T45&znk z%#Ve)l@in|j*_xc#iOL{93+7;s`*kc_~j?)4-gu~`e7EtO`EnZMo}-> z*g+e{p1bFas(Rd%c&Quj9{k?&O_H;;+CZrHXyviHam4Zbyr zlDxmk+Vw++`#YE6JCLfO<=r>hI)19cI_VpYV7ydXb0xHdu24p3)MF1<>T7OLRuAD4|jOdjr%dB(y({x^D0KMb8!cCM2}il=#QfyVe(PdT+KTG^+GnwRn`MM~U{uVyYe-3-E1^;P?pIhU^(cXHb^nz^OEi?ws0YTbTiK>N@&#B z1J|iPzI~a7dX&)l7;5O>-RNJ`9RGuh+Kfc?DDl9&lhe5wYAB&m{B6595_JX8l}JZu zsG%Mu+OJniXw;)Gj!RdiP(wXRgl~m8<12#_8nxYCN2jwZ)KHHSch5O7U4z>b8ujtO z@onaydX&&N(n1X-G-|z1PHr;?)uTk|+imguP(q^?{mH3q=Ae3%SY*Y?>0T1nLr0&! zqw)0)7q*$TJnv$Rmc0#89J@NIRZrj12ur0NCEAxt35{Cs$qU=841*$nvjXK^@5zhn z>%Hi^=+`@3Tz_DVElXB7-BYn9o_~$+oVu5U^-zxzShYWUt5%|+ghuf%^@^>lQP^?D zKHeGU+n!L55}5zzZMj8Bsg%$t{xx8+RG1&Eq4pqVGfNn@m3owDuc3rSVT~!ThkBII zI)$auzg>D@Z2xp*{PMuH(-9LA`nNLrS0WG0+qT|s-Li3|9wqd=5^5-+QT$uWVt=Sd ziS}n7o!dI+b?*vGr5+_F^ggvs&6Ut7-Gf67ot=6Yrn5OD)T4x!usxws$VuPW0_D4! zdX&h&6;@7Y)Elo~oSw+TQt61(zjo3Q8WQSJLhk?;PO!E*rb9wKns58N2_-a2M}DZG zYYFy5uDiNQgoJvO!2Vc%SEPhS>7E#Bs7HwbXP=hdg|#O%O5art3H2y3C^|j83u{kk zRQnTvdX#`(`CY0K8l|U?v{Vh7BQ2hH@U({KE7&~G1y6Bef@cPJxVOWmUXkF*5+0Ti zHqSvtf_)ATTNgHavq*3ig@-FAY_6z9LOn`wpIJy zlc^%19wqq1bK!(W@yS$?P>&LPO0jT4qxfX1NT^2%K1W$Np;3G?RV37-1fKyG30=c= z2J>lDIl;eOP@?@j*Ss`}Pr`~CJR8EpQzmTQ?-U7LKXhHu-7cIT>QRDsGDQs~G)nj2 zP(#bhvoG@1`h|pgl+Y5kCp3y@-(o$~qeT04R|$>c)B2)@o>+L^MU<{~VLjBN1kc(< z4J9;+_t8Z{qj;~5sP=?QREvIEordXcV7P6bbbxp{I|qR7z+RpMDfI)T2cElZ=jbK7mBOI*!9qsYeMu z{VbMB360WoX{ezdCHOmDQ9}uh;xAi8LOn|G_sE448r6P3SC10>rKzZ)ghuIE!v03_ z^vTWnTc6Od6nwb@Ul71=|9D%7Uo7x92b54xo&fDc@|!ZHOpRLOpo`w7<#mp=sQ6`s5BvRV83EirW6y%OLJG!ctW| zc>=T(Z(18ISbS*3QcVe#3Q=rBe>>qVA=Hy6py9-2)<&OgeL}@jO$oLxqVx+AQKW== z@&q*ey^K$-#`8?WQcVet5=8MU9$u|$`h~ZywN*-}Cr^M* zd$7hnR{}Pp^jjuTWPM&^pQ|TNfc9}^BeBM@s|0LDQ9B*&DWRS`0Xm&gHJerO98`j( zLKNFDowX^Uo;(2!C)S!gx%#@TC6PeUwm7o`8lEm{H$ZTUkoiD|k5CVRLT!`#$r8P*0wKh7(wCXW4pX zDP6DN;jD$tHOAi%QbIj>0vZ9)VH)Xr1rJvr*etDo3n|fv3H9U&XgKkn)%+`4uPmkO z6+A2zY___;38;j6@&q)TxZT?5BU?)>rRxEDK@&q)}9Vb0sDZ#fJ5rsDzp^@%tDWRS`0gdAMN(sIx zi70BPyK{QJQcs?Mh7)?eQi7#I6x*iJ4Nc_QnN7i_&6H+gc0rK%G89x~of z&c>Az>d6z(@NqTUG`c2F?zYraBLChqG<>ux!BWAKC!pbk&A;rlBwyuXsSw3BOlNIM zs3%WA!wEfKDZ$o76vsmGe5IZ|0gdAMiUd|NjuO}$)4q!8`AR)`0vb-}`AP|nc0_S* z`fi}-EA`|FXrwz%dcIPEvldZYW71tMCDfBApb-%9UaJIGA4E~x_j5g8sV7fBBRv76 z=PM;xDnzjj{am8wEA`|FXgHy#B_-Iph~ii%p0CuCC!kS0Un#*+f+&t@FO{CJ)RQN& zdg%E|366H;%h{Z^ZhF2_PoBv7<2hSPer@ZOrF6YQUYxbCxyJY?dESU)jIdNyPo98= z6NyH*X{75FJY0QXv$Q_i6OC@uXsRbqK*I?=Un#*-A&PD2vsTYn>d6z(a6->lO0abi z#j#L4U#TZgK*NbQhA&$?<%Qjl(y#pEoizRJMt{?ZA`%l`*fk(DinhPqHsjvW)$LcF zP_xuf4{bbq)8AX{U%YKYXcTSNIAZf1P!E%833(SZb)JjBt&) z_l&OYVfC;S5Tp^MzX(Lpe}qs^8Q~gM^CsJhPqyKqjkeOK(Q#Xq5*kI@HLM3)>~r0ijW}UE{eIc55AAePXGi9@@~*Ul*gO z9idUQUE@P5)e|#DH!XGOZ`-sHrN86ab2uT?Q%1PP&#WE;HeVL0q6BS3>F?1|1Y$iS zELGG~M!3fLNA_!-H+^fQ^lQ3kAO5P3D1CAtMM|irjBt&yZ;WjYI^@KbrHT@?5v9Lb zMA5-QsHco5)`M?7z(X5#(l;)$dYn6bs|uq)XcTSN82;SY<^rpSrHXoJLqp#jiJ}p0 z2#uoc8vD&2TkSLM#FnKB-*kb8HZ=4-!YJCm4WUuAUBh~?#y(dMZD{D5JaJpa#6{Cb zTMuS`eWFpcU8DZy*lIs(D@zr9AC5Mn^v${`+ENJhlo77c=csW#jRdtD>wd)s)Q$szpkuTpOaE*3^M$vYS#jOtO+jDSB z-Rhx@d{Oi4tEVJ3JpGJ-&?wrj@t8eFe8^7umb$UOA}@GoLxXQUc|AZpY=otN&?wqz zTea9$>YW#DY8Cr!;z|4WSS(f4LmMU0_tv6_#IwCN2?&j%?HbnCP4uFrih5{6 zL*FQfBJ1l?LZfKA#@aS^cRFoy(^3akHNK@s8&Q0(HzRg7!cstJ6m9Phj46y1OBMCd zM!tO8*fmHDTVhB+XcTSNz}#S4sfRZ5<$Knyfw@seXcTSN_{A#&T9-fH)jWEiAuWAZ zP2b2ZCG=%uR2a%xpnJdk2n8ignE>~S9P-Q2yb}C z%B?fUJ>FbCS1OItcjKbyQq%aA5tkdGQTQSdza1PBFMm3}`Nyx9Y&~FvdX&I7i?Xi* zzxwg~=DOc5+1ffsXq3KL7e!BgG{5=XH%qp9jL;~2Z;4+54vDYkT;H7a(ps(8jZlvg z_##yHjo*7-yuNwl%WJhR%@G=X``TE|*{XcWF?#qaut#CdNFY|c1% zaBEv5)T0Exx0QXdcfEH9Ht!rexb;Pj(5UbYx(ntFZ2r)QJFOlXg>QxNE4?9sH9#9lcQMq;;>*5` z`_7BkSMN7sD=U=}8l~^BMbYp%*H>S$vHPVF8ilV2aww4@bgnE>~S0uCV z)^2*n%C)IRd@o06l)g2lJV#H=fY?dQ5O5fOvqDPJR{RX$(Kh_BKD8Vney2gV>+`Zu~BY%-2Gzz7~ zU(xwKxY9mDYL5-RW#sBcXcWKRihM)jW7D|KG&W7@!Mv2>t{x@$%~UVd+>hs1cldV6+D~$X zMq$Okms`A4M;o!35eFEdQT$FS@(qb^j2LVL#;$sl;1^K6R0r7#XKP|@K#tHTtd;m0 zjhE{Dm#(k&e`T%OS=Lq>#jlH$LC`Q*Lre} z9wqp#QP;T3h_BGPMyQ8h3q_RX6h-&isqb?eSFh$Yl;C$jU8Bc{FO7IPM`#qzkJ5&yQfQbMC}U&6IAin@)s z^^nJ_9~hxg{4OW*4T)#%uINEqcfT`2JxcJ4n@L+4@sts3Sv{1{DBOi{Ux}jX+ySlC zp6#mQUQInp@Qa(S@vW6+W!u$;uYe$G+6n9F!w8O7BIZ=nC68XV^)` zcIO(;KDbBb83i`aDE_t3eT;b8h+i3@9-e~`r8z~>Sler-+llNtI|-;q37*be1AFb_ zcIx|6j?gHcIQ@?PJ=-~7v6JOsE0sp^%!qtL;&vmTVKb_x9wm5^^-?`z``|ZrLPpJ% z&?uhHy;PsrnRYeI ziI-|C+iPDkVz!k^qj)cZd_!WY-4%Um#4sb&qXh4eyi}jsKKM(!^XkkI8pXRlFV$~t zuU+5n?(VXBXcX_;kZ(v#H)4PPKYyUK+(`HQwjT z*k1c@yAyuG2#w-X9ON4k@7j~1Wo&-jWQ2N@;1eV-)pxenZfXQp1|>8KyB)vDV(YFw z@w&yHcuhA#qxi%N`G&;xw%49vtIz31s7DDtZSzu%vYqqyM%dHAfY2!HcG2@oyvEvYKlYPfN%*B<{3v^{}1Do=^Imc`3n@nwRPfBd)ho-;5lgQ9KQLTYYLH z@j@eNRu7Hh$rAa7M5mozd)axn(+Kq_!Bef5>Yp}i_cx*=M`#pgbM{42oRAMQ!p?H> zti{*-krz+lutVZuTYb*9lm6nSp&li82jHc8#_lHi*gfaNrlEvJVddjjR_&RL5lb6k z_c-wihkq*pdGU?~c1S#8Yx{C`A9a@z>QRDsOJ1t+wtswJ_fe1J2#vzN!te4%(ekEo zl@S|S%{7YmYRESvuycNY`p}x4kmEgyc`3oWNiS79LZf(x?Bhxajp98n@(qb!+bQE1 ztA{nfp9I0t86?ERM!M;h^cBQ%Q7nUHTtylJQKpV|{I+ZEz7HSC!wL}Sx;&V|i)%8XkWW;bIG>XqJk#9)YQ}f!rwnw1{)uRNTs(Ps+i=1zS zJ%5C6WJYxK6fN16s}PC}#fUNnjZ_8MBdXYrw}gZgZ<$*&jLd5ifSXVzyw zI;UsIIy-K0_PjIdOGmewz1Ol=9)Kf;d#s>Cg!aAm5 zsi6dIL>;rpfl?18)Kf;d#=*UYwkBCyS!yUj8&S8+`K9#7AwsC9jBpL>!4~^m3EEzd zLu6bjam*r_r;Kn78;LEBT_tF<9@+dTBQ#2F%(Qq$VK&7x3MFA)w4M0BbUsE=r?u6! zMr``)^*3P@^15YC7KL`>Y>uK47JY+JmMZEgBcNxq*4_?!*J^JmAV?z${Xb=#uNYDE ziV*54BV1!io3U@2hNX%Uv=N1IoYg}K^^_5=5!onw(`s(1q6BS3>Dra8iTii|Xp_+k z&YD5>H{P8xgKOd&@18S*{S-x4+sd%5wXmg%dddhd)yKA8-DvG)sUsvjUqp>waIR@^ zO;kcXq?K?D`wl?uN7llYx|N`fDA3uOsDygT2-naRP6^sxsfqkw7ZA6{--3cRu0xF)KnjDTJgeQY!KZL7Vd ziW0ODh5pahL?zTyM!1HpyH&2cO3-$VY*mWaT_G}08Q~hX8`QWPU{0`2Xd_D3t| zzxVq3qEk9YjKkoff?Kep4v*>MzXmgJa4mP+lAnEKtGGgf%!l%ynk zTCa6wrAq9O7<1T}J!j8zjm^HA)WbS$_SKJ4J0wtEMm@dYWh?tRX+2oNGQwL?iT5vm z*;-^uOt&XA>X}I|%{=1Cvr34k7rbaCanDneUPz<7pW64Jdz83)?DK6(rFm(Tj)jtX zB%?t`2}(O<+;7{|gB~SN!tO=O2rbFe3!Y2+qkXB=qr{2p5+yV$zFs=o)uRMT%YG`>gC2|$&M3_(B-En>Mkv>@ zg%A=I_fwmCSbroQ%@_T_66Q5BLZftqhJ^2fzlm4mHNL&9XWF8^pU3-PX{pqs#2Vk; z(sTAWr$dd9$fD*w{9F&~7ZUIcf5~^}HNJhY=kObBTJCK&hsTE8A;BB8&19 zK-r8^kLHV3Uu^Rh4oNEqjdCygnE>~2rVBaN@$di%CbIJ4@&s#xgMoCwJ((t-s)u}TPt6EF6jNo)N|$Ur=)~y%RXpD^W8u_ zMWSr=QNnGH(w!)*xq6h)*&GsDbFHmvhlF~RxUhFm?f<_UXq2{LsNtnbp4?a;u%Eqe z%ElE+!YHMoH)UKIp&li?er2nu5*meiP&=##JX{UX=Ufe(Zr|tbQR0H$UDmo~yMgAV zQCh;VRO(T}M`c-CDWOsAYyM!bsFUSIud(Ld(q%PQj}quvwqaNgFNx=cdhooXEfNyy zQNnX7+ntrrDDBx$Lp^z-eCJdGHluv5l1Z+lW z&xVA0l<;|8)*nh}6vi9-Ki25tx*Oi5;EAx0n8F>4VZKtU2hWo;Vo&=W$L~eMdgKX4 zox1U&_B67b(C5_sXKXcX`b?Z&K=Ao>sG%O{k-&3C+U*IAil0oDJ`309?f#72ce4GW zW$lShSv}OFgg(~_OQnQH;W}HoNYJB%+huEs=A}`7y=-k)j}mVGZ-hr7r}7?DkLC-z zya)3HqtH*~8tTz}(Kn>S)>T5Iyf@2g?jCP<(CnN4AK`f^;dXlsB{I9b=KAZBKC_Om z>+?jbzRz>@D4|cI!?r3ANxpu)Y$U2j^L6`wBRtA;Dr+nCXufX$Z-hr7r}9yv9?ci_ z|3)whIgQwU*$0aEYU@=jY3XsN+lj8V!fn(p$2{# zqk7y5Nj-Eg2?@;$t?y8qlYC7HI&dO9Sb3W zvhz16Xz)%5rRDmVBgCTwwEzEvM!81WJXenrZvStDM1+-O z^=Q62Dnmk_>FSf__@q|)d{;dMqICaIBDRw#Z-ugF0P0bq{W(zyjq>Yd`-ggzfL%VW z@&u#&df6yZkLK(4|3-Kei1PjXu1lZl`C$EJ;!|<_v_3hp?!3xlJ-e^eJH8(Fxq6hC z_i#_oLuY@lgb3djvG-QwZ4r*jPy@Y2kN2S0L-pDd8U>pZPmUW>QMsqEAI~_H0rcpOigD&Sabbt0yOL7cG=3H9wpkh zt`ZvMcA18Hl+d{n)8rY_aUJpQR~sZKh&dywsfeWghs(G zpC9T`LZ8ot8cJvs>~anDDB(|D%GP!zGzxaPhI*9nw++iQl+Y;H2v4D19ay zYN$sEf5KMwL|9AWb@JzwN{1Ti35laRpFOwiDW?)>T}EmDhZ^cp0=-%O`=AmUh4*2p zm)FQV{a*g9^|O~$Im+HE8 z{~u%L0d7}OeenYUA@nY&wD2DAw}jsF?!_n)IwB>CC`d;Lf)uF` zL`6y7y)QRN3kad5Cyy#%0RjR7lK)<3pLJ)=xpP6jZ*;!w{X1*wo;h>RIq!GPn!mc_ zpW3vQdTIN-vgD+;H4m1UX!jhlUQ6rb+Nqjrd0$zww>dIYuYJvxXn*3R*HSP1d;54r zixSB5-^-;6Wq*0eN1J`1bWEs4i2)0qZ1!e*LcRP-sgbA_C0Or-j z9(;0Luav5Xmsbh&X8IQsy_S0E7>hO3q6EepOW2-Jul8dXC#F1!*AjX@bT{Rzx-Hb{Crml_3~9MRVsZt(og8UBzZo0YM>S+ zv<>6dRYJY;d{RR#N@yF#8cL{Fo=vepC;6z1n$U4$E8w2y^v39s6`3fg{3u=P%q@u8fsAj zJ)720LcNerYp6vDjL@`(66%F~T0<>LU_Pcblu$3^(;8|~0udvvp@e!NpVm-|5{P_h z4JFhI`Lu>wl+c+Lk6k6ytNn~pixQtTYs2hRFP+VCsiL`Uv4p>QsCG=K1+jz#qEh-- z870&UZ%3qCS1n559SZ8jrBVyt;NY)vdZn09OH4f0jC}10yp_WEh%2SXm0Fa@^@?B2 zS~Ykr^+Np^=Szh30e@XWTk+Q=v^wwfON3ZrqW$|(;aaE@uj?AAa|X4<1nB>ba4%em zEz(*KT3mxf`~C>m(!N0}a7B$Z)DjVG`vbpJ^L-WkGNx~`^50{P{Fk_5H=zVpJJRh5 z^+GT}Cr!~q1y`b&y*OoQZqSw_{kL#heMJw>S?Q5+o9mWfM0-O6^tK68AR8S?&KdYOQizfD|} zy{J=ormRe;C9hLKK$|TR_lFYd72dTjYp6vDzY?D8ZzcE*fJwba{PgN(-{fsolrS!p zT9gQ|`Kx9A+dsbc1`Xe9$ECuxf|q|24%cl@s0DSxH}628=KkhexzCkQ zFYl*RsniRtOO5t~T9nW)@x?V)LcRRoQ~jY9CG?AeDGk4tdg*;hOz77e^{b92FR`}W zL8c;uT9nYQNX8mUsF&^~VnQuS=+`jY6YAx=j8yBYmww5!J)ssQ_!ZIC`4JQTby9fg z7f|DR;98s?C?Q9pUnwS!P%rdTde*8%3G_cp7}ulxC1Bna`;}7tp@e$r z_kLrI@OJ;CUVo?Fuj}h$N(1j_`x~;8dc(IGCiUj0M#*^P7Qa^b62hcjy;8YU{8E6I zih5qER1a!N!n^aIUn;+r65%cUa!k}3su%t}eO{s#CBnA>QX0ILdZFh0_qeUpqD1({ zL0Lly^=jX`YEdG5g(0QEd7xh5>kefiJR{7Jh^HPtYqz9h7kPj4dQz{qLTc=)rA#nl z#I36Y^7KM)`a8qrdZ?vLu!OOO63ElbM`fxWYEeRGTCAajdWEkrlH?fBI zvs=)*{xyov>OqVvu8>N2yQNl6CDaQgHl) z8~NpW_%l%6KJfDIS9l52F%jytD1jE?zsL1ZFaLr-=#Mm^*HQxg&l1KON~o9jlk2q- z>;onITMeH_sF(JCtf8aYOXB^3{O8XoCBj!K$~~ypQZFxIDwd!>I6KjsED2iLe^D-L zs6`3Yj%%)jdZDGM9TRF%qJ2Gl?0OBubA6m$srjKZM+v{u=Mn0KHso3o*F!C3BE709 zfjqsu4e?ZYxHbBYjLIY{7{P$sNd%k z>gD;=s-_kt+MfX^pLfb9Y(0YWoVB$KJ344yDsI3y= z&7N|pw6^Ny|DNh|wZsJ91xjo9wZi*9lX}B@6J+k5NqhQ;wZ6p@icC#9#k(AX${nz zgpPK!I{!T`m0HR~T0;r%O>Zl`_lY&sQYO+GO8CCiHGI$L`B+0OO6Z+sOoX=#F~a%2 zB1d~lL(8s2cqg*lgG#8EmhiJm72-;GU$Ir=vf`bwxa_W-p0#Ddy}}!gWsSJ(e9M$~ z6REb+8iuz_C-sK6TFV+rsF(kHsvc@lBD{B-*6?eom(zHQu1u&UyuHkte_pASKpXPT zBJOjohkAWh4`O7vdQ9*y)RgO?*9vd1+DTFVc5bTX*a5J-`b(2W*SH>PDHFVpZcl)w zmzFjr)KVr$w7^|lYpA76kZw%h&93&#q4icHov~cryEl}sC^z2 z{1RKLR2(JYOI(wBwg2N%>C<2Oyq7;^mD;_krIkq4LkWF)%j=iYP)jS3(ojO%&Bt3x zLoKaDN<#_HyBB^R=4pN0x@u7ZzelHkwNygA@bBqg8vM8IVyEBydo`T3pI38zwgDwf z?-R>4r)=*2CARTKcfjqtN++tcoEoFjqtbvm7IbD5*8Z`SRCe%_U zxXWx$c&U6hiPEMu)KVtW8cHBfFMZQ0E|pr8(D!s&3I5s>z98Z6=I}S9n80;uQ3Bfj z)^~aRPzy@J-|O^B?KPCZyFmP{usxw(c>jl`jS00xMDyFo<$B<~B9=rS=+1 zgl{~zXh?b03mWP9pmBCVkW^7PW^8rMTDWrB2j0yMp_!lmn>mNG#))=&a@df|R2 zt)Z4OK|0n@0(pAjzAdexmNG#))=&a@dg1;vt)Z4OK|0n@0(pAjK02+TmNG#))=&a@ zdf_}Et)Z4OK|0n@0(pArul+Hh7A4w0Gl2-e-^>wLcsh*P#eA%x79~8N+99_R?&bg9 zo^Xp^7x{GS>b2Ah|K6UUMTzz?QLm+58Y|?99Z}rqUoLX9lq=piCzVPz?Pid&7g-B|YzaYT=$GY-j-Gd`Q(_mAKe5%Ts~xm2#6U$^jb zjqu&UGU1jo!Lg94c_8TJbohJQC5_@cCGb+B<*O=Hd^a=q%14~{xqJB+J<>!N)$Itm z|Hw6z2>D69`pqJa^AS0r79}*IwkOm}zgZL$YKaM3qht=|eUg_-30*(JdL@6kHz(AR zCdzH4M93FsWJN#4^}s%wJ(VWP8cKwG@uo#m1N&%dq=~YI5+PqaYmn5yKAIY7qO74r z$QMtJBsH*)rbe15YbX)&c*ZO7Eu_59V=wznI4{X(5qd4`!bxDa%zWJEN~o891OfYuA^D~Iz%LJhL7kv{%@t1mX zjfjx-BPvz6ui;bWefig#xWct+&;kvvyU25W{A_|=Uc#`4i)+qRO|OeQSJYMwCFtcE zVMkWhaEo5o^X=M-tEGD7d0jc9*5!_@OlY6yb*Wq5cVY!#e_*|8%}d9Mq6O{=0 zq8`n+gg^{6!qUY2x`ic8Kx5M{Y*VlG+oo!%TZxeO{^0K-S@wTIpnYgb6VNDnuxfqY ztwhM9t@M{4CDf883XO_gKi5zq1TBv2>M_x0*mB%4vR`pHut{6Q^BU_SEO z*gi`7Tc3;^ce~XieB%>6NWG9psUEZvS;>&P)e`cPY(|Bzp*F`=^`*aluubs7cnx0Y z%}}b}ExAo~>t*tk&stj21ZLD@R)@E29$Jcsa9ylw{9Pm;B|@krO%xh6YA6x%lk#oj4z;8S^vAn4t}N9p z<4jDuG_3B~26>(Qb)EpnY{_X`5?p9uv{e zw4@1WOtr|+X>DaG-z|{{v_~JdVN7UDOcT&J+hStJMWbq#^4$`z73jWRjgMLOGaDf` zQtFmEqc?qqis7G_3s6>9n*9v*-kLa5NN~k4GK*MHK)n*e? zw-O=Wmw&yN&lkmn{uZAmpkX`xD(?-H2ziVv{*5851|WEEpq4ZN4clc@d5@z+$QSi! z?h`@q9w)zUVM!Cv&`7OB$a{ZqHy9IWA6n7`G&Jri5%NB+xEqWK^fN7K0vd=_7{3n; zx?&rQa7MVRC)>B2n#{0zJh2JCC|9!oWe%t!Lxlgn^uj)Himtz<2w{7sUvrzGZHfLIvebM%bx12w! zW~oChX#(R4;}*LBOPxxDy!R&eL{4DDTk1rw(UK;hQI0+&0`1Xqy~(5ByJFk$9rC{3^0QI?lod4gv_8MqdeBlQPHSmN6PO>5EZ(}h{&L&YEk#72 zCz;-Cdt&S2;t2>P)RHEk@xG1rYi#|n)S*Pk<9(ck_SI}Y&j4bA5tcgCk|v;mII^|H zT}u;{2zk~6-y}y{DdE?3OPYYjq1GQ4S_@n1RwCs6gx;UuhlUbpA6n7`G`?-uzr}Pc zbt@6_Xe)l#8yZTeB~3u%hjthIskN7-ZY4tA-;eUIm_y@`h~W3l`=lgFK;!$?dqG19 z=0W_b_=-6+Vj@`ZrWU`a9tdc3+1$9p+RBpELkZ^f>+jG|!r#1QpQi|DEVRAP&Ni+r zO;jS}@yie2?S%%2su7kZswGW8<2@s~t-UODC=v3k2j?J&iAEgw{?0$+`^+NyqUtNI4oQMdPGy#qI))$YPh9%Qbf_a}&w=T&ionqpVURnaJ1T?JX z)lhRKm`C&pe}^K=&a`^Wv{G5>)GyD5d|$7AEjA|9k|xkr+gk5UvR<^*sYJ;4mA>n& z1im%NH}cX1H0D|z4!62k>QEx&`=T#TJMj}EEOnH>1nqiCK;t9RILjiCrHM*}yw`)z zAUJWR5tb(UH#7Z7hcp3=>#d#ku-I#Jh#??!?_jSemGoGy#q0Oyf!$iIzH)2zjpu zXF*Khy0oMTXzXI`bhC{uOPxxDy!S_VlT`_{4=rf|8fRF9n`LvvQl}Cj@8gQ!!;T5` zGc9QX8pTMg+t@1Nm4ETsY2U9nt;X<)=sZl%(9fnD-wa`JjWA4h`S(O zGs04*&pWrI31}>3yYO$=%4sQ&S7Y9ABG4Xv{3%^%fEZ|mr958Ik|v;0#Kell#5`V+ zK=k3$zfSYnC=eD8E0&6Q<(4!7jgeOC!)+c~D&mzB;kw=*;Vo<>&_1-J3212aQ6l6S zuUHQyJbt((O+ceHUO5qHpC2r3YrLW*O+e!cn}hpXTUpBE6$y-X&of@J9!g-|@yW9^ z0gWP-R4kSh@yf3iXpdJM3o(KCK}(u|#(ynd{n$pLr957d2sG=#`Jseg*DYxR8mm}4 zyFq3AF@T321C*?Zo|+5+QGMF!~z15^6~k(3od+IKWC~sY8j7 z@9T}f*QbP9(gZXQ*A;`+EJ$)7)R(E`(ar1T-{WDG~C0z4-DpOB=^4wWJAX{Mu&J z5Nj(--AaUfU$1|wn)OgZEolN8|FL!&ZhdZPq7osGdW^8A@%^t)IdQHLmL{qtO+aIg zX&h~1*HVWPA@B9zE-EH)U0TuvGPN?Cgm%c>nQ<^?^ru6VRPM5r+!T}eR2arU_{9B-Kt+JCq1{)FXWRHzw4QCZK^Q z8pqk)ou!FNggooPzs;e9U)L>Z0vg5dQFt<}TZxeO{&;>IHIzX6(2^#gv5EcuxQWdX zOWjI@yxkkv7kjzdWm%^XYDp8&*z^2Rl>w$?m8htjSmazzA zsauJV?<;+CSqc4Wa+-jK#w#U4zOPrmrW_M$NfXd0_HZ@Z!*wVT@~p?G;=BZe?cZva zI{dnBNfXex!rE$on^BfJl?Zw7k3qXKwkv`5p(RZ~<9ORu;*P>nrxGFW+dNpF(~d1yS^ENx7vB~3tMxJ93%t*tCsObpiw`M%!xd-_VKB~3uX zda!Q&o%gvCA>SAMMGPm{=lT~M(gZYY?AC3a&DUBbLZ0y|VDjVGHs0sk|v<>EsIwhnT92c ziQ!rykN)^mv$QdxmNWqkjXp|*d|&YwD%c-N=wH4_6VR|8#JyVH=SqY;+G>)`8^#hP z)RHEkq47$IkY_!pq4CPE>y|VD4UIlZguM3$qf$(ueP~G&&^X-Um7T2BEp;jp@;G{51{W@(-s3lE6<4v1UpLpt2BINse^&7TM z{MQIeooY!F(D;|t;aRJTr4A)RzOPrmVH*=_NfV+`F^!2zguK^d%y(99`0oZqsd56> zr6o;BTUD*Sx|Ild?~k>fUZv1L>smWiEp?-PXh{>$DEho=eI5~k#uFFe%gQmKmNZdl zRP6e>h7uv)7k#lg*Ju*@W#%+dv=!PZZ!0B2zAyjYFIznyS7@iat@LZ5X#yJ7gH`MA zya$yCd3)#Q>KVOneSO8y=S@N_X+kvev8zPLdp!{{?#zt3G>fLIc;Lg@3`` z>5*2d^FNmeUZ@AJ)LIW(P!C=gErP!r4!xMr+M-l%cX(U1uen;3;NQG&)lfpcv_;}l zsYQuh7mu5Y9Y9(m)I4};KgAl_Civzy?iz93|E+bE;5WBhOQqLRum5c%D#5RUr!_c6 z)k|jqY979R!Pdpu8}j^K2LGKJtpqG(!cVDu4t^HlXRn}H+SXFh;u7LK z<<*wvzqcn~QG$6A;Y(Anuzl2v`DR<$*8}{&6ag>)cdrvX%NlOc>mtt<`D}t-Bv=np zBRXke5B~22uBE-ke58@bUH<(+X#9MMO~1+cc+wI>?5`4~X02M3K%ON;9q^yW_A)^) z{^cX~MT}$d!T6z_LO>Q&q5=_M2-^79OM~S`0vzcC15EN>A0)ca>C;Z@+@s@ zsc1XtfZES_iIrdf3w?k$<$Fzctrq5?fxdb0tji0Hc7%E{?;109 zSgF3<-2JPTy4AuwG%&{QyzR|*|lI%FaA69+`mj{NtAZN>QP}mcrAD_53f1T zK0Y|KmDM9js2B5I59<%~McyB3VICTXuJ+f#q0g;9s_2iKPyIzVy>Kn{V%{}yedt)~ zRtxjc*thHH!5o!YmiM<2PgkCwNH1JVy_k0m8|_uj54A84je*$=>nEQp`TVGIe$Wfo zQZMFR!+Xzr5*Ex(C72JhHbrPjNQ6>Z^r>2`%Hvg8gV#lALret0c%_7TG4J(Q-}>X< zHmfXks)c#>d5G=n8S%am8&sd~pck%%zM&WMu7Nnh^+PSpLj$8HtWoU<^KaNYKVT9iQ4#wckml@jWurHyO8^j0&QEqd5iQ*Ec`Uzh5hIkQb$ zsYQt;XH6YEpx@{`=EoXJsMli?rVak#H?e=jll}gm-`B#6Jq0hesE)CiP>T|H%b2a+ zo=`8H1u>x(C9XQ^(PjzT6Y9k|-&%9EDDi_$A8)outf7Q@X;g{{wJ4#nGA1yt*i$+m zG4j)Wt`;S9rxt6J3GNv&gE=Z=LM?h-T^4zp`r5*ab@!L{=CQW6J|I2Db~<=j`_&4>y=_cElNP+ z^Gl^(TEbXEEoI_`BT_Y20(pAr2#qz=QYO;%Py%^+={Sxx)S?7NB3rsWpbqLcTgHp&2kuN9gf4m+_AWtu>3>=j)p_Vei8Qh)#O|SNmK`mv1C5$zcK%QP2m0AgU zAzpC>Xium`2}IO%Y*#|Puy*0Ds5Q2$MG5GoR|6%~3o9z_?pig}q6FIQ_rJs&>*WORI)jl+fKk+*aD6m>+Db_N}WHB`|~2ZKZ^IX+OoKQi~FZW9hMrILJAOc*QxW zt9GoR7A3GVi00r3MmQzZt9_}|q6GBP^-w~+v_;~2s6`31NV-3iP%j<%O^r^geHEhw zs~7H4(dSq#^^O(!m_WSZX$1F)@Zw&(l~9Wkh%31F`D{YHcn8o*s6`2_UtA9*)Qk5% ztr}`k0<)my3?Oe^#&%o_1Xg6^wGHD^sYMCY344atQYoQc+S0KGXB4i5k%6@qdG5$s zHE>;wYFN19Ag}d{HPoU6u7nxfs-c8>X)DAUYAF+l7_AygAWtuheC%Xe3AL07wp&~( zC6K2Vq8mr4os;;y!}t#n-JSYixrCDft>R=9LM zlu$3m;8qQ_D8ajz&nDDM+pV=f*au2rcBRLaUQ4~SrDF}XpcU9Y?fXM5N}xq>kJDOn zCDaRJAswmJq6G9lpHMHf2v?%G=GBrcUk1K!V9Z>pT9nWclVvN|JKOKrTW*#*xKF?-2lJ>cW;1p* ze)<98T_Y@Ys3k>sTb*ogC!AvML0almf_Zph&WCeR5T_bpsZ%W}!ZkLs?~1%^?=)D7 z2-5JvObh3t1B6gZifC$7sG$V&@Ivc`dYDF&P)mw%4Xb&TZKVYB@Iudq{s6(YQcH?( z4eP-w`&|(3OUl34Bif|3k)3FcXkFh7*Qb!kZvu2Iatd=4tXJiO2fVV*0Y zmK5O{8n2XK9$x6pbi7haifC#y%t48lG?dOlTb^FaE<$IOfj}A!92V$yV!h?_zOWjH^ z4==O=&H#K|fmp)`OWkTo5k)<0kN9^hnWcyz4KMU2?vP#MZ$hXgMKm>P)KG$XcwtnA zdYDF&P)mw%4Qr!1YHulzSG*Q!cwu(2)w9gns7a_LMHKb0$iO~Vf_Zo`N_bmYpV!&v zYDp2UVP7z-Z)LT&l;00>Tw!;{c!k|rm>(dvHo{VVKS)c8aE<$Af2G%A9$wgGhItNx zb5JcQ!ZkErDZxCvuv=z~iQ|=8Qbbdu8GV#s9$wh>hkDo?ZxU)r5w2l1Z^kPnn1>hc zUfAk!yi!Ywa1HChD*Ids=HZ3AFpdTPG9LR}Eh)k^mNkvlZRT3a?+1A;(yT|AA4=f5 zw4?~vu({WaS4uDsFSG*ZW|o0qyi!Ywa1D(f;7h64Vt2*0CEh)k^tOx7tb0wIE7o&v7D<#yDB3#4%N^JcJ zi$0d@Z?Zny{QZpiEc^W*w_fde`*;3|tb|%p1nB0SaK67%f_Zp7vv_9Xg#DK-e!F|u zcVjuBmK5O{_6?yLzagXq^R8ik#d-QNg~m@JB3M#{YZT{+b$h z_C&cPq)FhtjQqb5`ML4*rKdUZntg5K?7_?rvVZp;w9=5sNWg-;63COl_5GUzC@+;`S1E(K-7I!U8qy^Vv-b?jt9@||*3Cszu`YFOS;vNL? z%c89U?N|C`-cNb&NuN7WE(x`%p?&^T{oWxgI;Cgm#fvSPV93f)Iu61FulL&o|-<=tkkY~i` zVm`L=NUau>odokv46@c;($-r`{x_tHb%I`A!p7jRMk#?lpe03k&5Kb|w{g{}1oQC1 zhzV=05^6~iu3@WlmFu|@%)<*KKRhR+gj!OBYj{)$v$kswe_vi{FulL$SC zD1#?YV0mWoQ~6UU$n)P@`&=zbFi)bna@tz^Y=h-R9_{0L{_ib>t+l~YCPM3aEBX5d zDFW9;Z-!W+gj%Qp0&7VaCG80H;;x4E$Xhpmn}cJiToR7sRzfXWLi~G(S6V71)Jx~4 z``g&cOU3a6_5YsMWBu>neHfTc89ea|eD_r~Za&R=t?-IldPXBnJhM1hl+ZfGrBXt@ z%Hs+Y``pKCxplSG%NjAkxWf6^+8=7+EP~hnRw^a5)!Ua!y>zCd z)S`q&iM$?3LcO#_VghrUdul|9(Z^mFiZNfd*5DmBdg_+b@Z^!t+GiHO z(%@_^6R$Kl??7-q^3|3C{V}QYoQcj7qJ9T9oj7IFmui{At5h!oB?8Qv~<5Q0IOZdG4ZGOQjYiP%7TZ z#BHU7dU2oFs-YGokWcqunV^@>&2p*yqyXyN$so@?QL0q&$tL0;ytpH4CAfQmh5I1n z+s{F@D8U_0tA-NlrSm_oxmuLqo~Tu$Oz?~Z+Sn(y5^B-wwr^eZEl=*alfiYlCu-H; zT@ftW|GXn>CDfvX#+bORlu$3ssPt%8OPS!Pj5WBvdOdul_Pno&t@Yq}dn@5<@aGZ1 ztNqyJ9uC*y?$!0eDQ;X3v?$MXVTZq-nW5}!2^ zedmR1aYyED<-3no4enT4i4bGrdMLr2jBB)8Yq|4suW;SZ>ho|d_0n}W%Wkr>zO^qL zRkPHA_Q5>B&Wm~I>B`{57mctK5$eUf@8Rq(e^v2Uz$|sDg?VV`+LdMY*Tr(;;Pe05 zK`&fOy_k26F?RO)q5aNc$<9T?=>YSt5zYYZZ_BnNf)`gi*RXTlYM1>cWvPR))=TAQ z*3i&6Z-3p<2s`7gP5RC=5uskpyN0%vT9}81u0(NL(F@m7FXmlCYpxdNp`j~L+*b6$ zwbYCGrbdnZ!RQPN^U%H5)*(6xkl*RcMOn(LjH#`dt5l-o*);Dx&)-X}JH=PZ5= z4;Ff%9=dk5C)A61uLpkn;QUYv^WIjv4uZh^*l6*bjp*e)7`(VXx(0rqx8Lb2mh!K+ z^7kQ)qPP<7qoJ4oh3+JwUd+438UNU2(~ z-<`v~KJ!lKit}z;B6x9Kag8Uet!CKMPL`~#!ub{R(7-sxSr+p4_q>dF+6YS#p*Pu7*Uj zKPv1G?ss8f9%V=5!czZk z*!-w+eyD|cXy_i^|AKvrP%q|P;~VyU(P!=Js+R0`=Ww3LJT!FQm1QJ8y7a<`P%q|P zV=Mbk>icu->#B41?^X-*(1`bNApUK{?T>CA5$eUfYaB6m|LUdoHC;>HYGEE4diRoL zB%a%2%ZN}f=3QfiwNv-wyH+esR15Ra(0!@h{TD>no{Mj#7p|pV%)7?cAD&z7fB6Gl zyH&n*tIzGRgRh@(-qgt(JlEKM=D5NAveC^v{yobEK73lWd)v_!OB3l;CXPG*xyHsj zT$0mH+-Ah9D?N6r66(dgYwU2_QPtmcET~wTs21i?ss}cFzVY73OA8GWM}GY1t@OgR z)Qfr7xaiCKR1ZI6Eu?O>Fb|E<|9QUg>0RRsjSJfl>czZk?EA*%)oTA8kh;~vJT%^1 za%SVfJ1;9V_Az2-BP>OPdNJ=Br!2E#^`6@fKQ)Q$&=~i~{KjV6QiH^LTOJb;>czZkoVD$ZwQGOz^Qxt8wJ;BjDIE(N4?e^`C$ZcP z<0C@7m@n$_>qWIQh8s|C>W5yPoACDTbw-J^iLcN%GjWr+Jx&FqmO{wU)55#T9}8%65G7o*zhIB#M9dl>czZkd~nx^^;KWLzhY^kT9}8%(tmup zaoE_4i#Z5lH6up+bE$56;acj&ylcGn(pmN2J-=1NmrC!XthOJV~X9v~7JT>0EZ%k2-&m!mr8hO`v$x4;Iux-s!hgz6tTirKg zbfE!a2_q~;1nNXD=3S%ckDB#Ihgz7223q}{w=azQqh|flNiSSWy_k26E2kY?|J$DZ zkUG`EJTx%I>VLSP(74Ko*Nm_f5$eUfYkd0X&h@2E+!U!(EzCm$b7kk7M->|XHDYNa zw)t>k2fc7D^ssK9>zU ztZu1OEzCm$vFo6fs6k@Nr0XI=y_k26UADWicE&G$Ubob#7UrRW82sY(=NI*8N2nL` zuCc}`{cEq@b57k-r&^eY2G){meo74z1GhXTBGij{*LbF}U01)_@Vcc=wJ;A2tck0h zO^q3C2=!v#HBOv&c;%%l&!}7KR15Raz}o(oC#i8lL2S0`Kk*O7yHDz?GqzHy_k26V!vCr{cfjPn1=@TzU%G7cvb9oTL|@H z-ZeI}efu*V3u=}+)WSS8usi?zgo}##G0=!-jj$9E>czZkY-9HyCu}>qW~oCh%tHfr z8FM~nY~R+1ZZ0CikTy_k0m+!ZZ*`2#(cHc|`o(BRz?@>y2gNA=i!R79v3 z^N~iEX+(Ek^kO}D7uNh0Ab&oQF%e#j!N}jVeP83(%d>Tz@#iwQ;=rqW?H3#G-Q?|~ zYe}r37A5wZ-`AMDDqB}Ilu$1%VXUDRB@Vc}ud&kDR6UeXul6-p%lBq1Y%F_?k8o|n zxKwIUV#*;48!pnd9E5tsF$ujv4+N4jqUhNXF$J{ zhR#%t3`;*Uv(32DYb|%=+{UxZ`*l^jeW{e#=7~9t>7A)k>9y2L<9w{479}d%&1w8$ z-;{ZNf$)=;mdZ=c;*_F}(odqOQr9JImgHhr#ydg;m#mr5;4yngenHe*)__0s;2 zHPoWSegkJUXIFbdz1oi}9pN_}w4m9#?MJ&>lsNj)`EB}K3H8#wR$LFYDDktc=C>KU zN~o94$5=xxN?d#Gyyom`PpFs9&6v=;EvyW@YaIWr7aJSjz`HwViuFSxz`iHUY({5| z7_o+0l-O^;%r@(X66&REd#s@rB^JN-LUV;{PpFr!?J)rhSK&3LywGePXopiyXS}V{ zq6GBT-IDj`?FjWki-c27CDaQwKX9sFw>_a2CD1qhcH_x}YAB&znE&BiR0$nFqYrtp zvF}nomUO(izund6I~lbovBOa>+EdeGi+!SMD4|~Xcb*5dYS5wt^rrqboHKw5r6QqT zx{Hc6)S?7h%u~RLm&0=x5Jb-UBGH?kz90>2tl7dg+cl?hmyn@zV(} zv>CffsF%i=SVJvJK##MlJ)vG2iDE+g0DFezKk;5`-ydpGBHz{Q%9B)A@o}YudSTxc zem778`(2(cW2NS4cD}YJHE?ghb6ngTFsk9cB%HmfhFX-sy$B;}+*V4cm#(5Qp%x`D z&(o`c66&SVwWNXlXVE6um;Ug4?}PTOs}?1&TmH`7sUB29y|6nEzshLqsznLx`YVs5 zG?Y*;?1{p!GOD3o*zdgclwY?!p%x{ub4r&=3H8F>F8q$8rBaI$*w3X~R|)mfkstTD zT9m-Pl>OhHP_OngN-fxtGcxGhj5XAv1nzOutAP^gg?sAo%a69MT9m-OdU{n;LcKI% z#Pv{%5;#rZy4#*mFO4frB7bA#taE2IwmW-tej3G{EKZ01yZ)?3-*Nmkqo{dKs6`2` zU4FLIj!-W=%ZdF}E1{N{z;i&KM{tE>J+?SzTtegi`n<+nXI+?EFuQP?4dTN3+{UFp z^?#4sN-aw8Y@oFsN~qTn)8;g8yDp`n79|k*a8BK-p@e!3m^-`i&a!^a7}rC+uqNVc z8rN-4s6`3hx3`u`3H3U7&Do9dccn_D7A3G7#Hn+uh7#(fV>+(6T9m+D22Pz@HIz^< z9r>}wjQi&|)>!t^{924FxbC=%7c|D6dr3k=ElMzAw3bQ<^%^{AVdI2p7bi5-q6A}1 ztA-Nl^~M7W8|S{1no%g#Mf-c-q8|7y4cA4BeEN8*b=9H-PeocwrG$FvY>xXwElTiI zq*X%+_0l;XYt%nj*x2F?kCwcr!gbMBSG?`fH73-e1kbNqOQnQ*p`RwMoYGK>66j6* zUfZgngnDVu#`RE(5*TCny|z_D3H8$ck2Q4kaqr94O^-w!qe^gB+gd6m)C)b^_eN^P zQHv5h8)(%~LcMhK#5Gro5!E?q|4JFh|M^9XHwJ5=JtyT>s)Jw-$mc4z=@anu@AK7K;)&}?BHXMYD{JRh6!WrH(@{b!N13ZT2cgPC+6RHWRIndlwclSptqkhCf6=BjF@MH zT2h2-eCa1=SC75mYc)$9N-z(vH`bro_`{ymP(m#!!ZikcdTRBw-b-qhI+S1@UbpQ! zv++n{bWsl_)RH1xWB$nFtM~t7TFp|263oNv%5!HnzFMIMh~FDwsY5L(!Zn^<>Co!; z@A#l*DI!S2tKUO28>4$KD(azxT2h2-{NRy&tK&P@s9Wk(f_ZqY@x@t(8gnYW%G4!lE8Zs3k?X#=xt-TAlY&rEaNH3FhH7^~G6@ z$45|OGb832VX0FsDZ(}WvC$gUk&o_Mw-gbi;q}acvl|b7gBnVxB}KT#?stArxoo9F z>y|o|U>;sSe{ObTkJm3K+DZwvqzKpe&p)SCCX773ZmClV=Ha#K_vbVYxsMtj3!#=2 z;Tj+GTvEB_(^Kn~I+b7^UW;Fv)3|92HIz_Gig1n23%^!b?I&l~Ep;lvJiN~P+1$oe zCsAW#A=Hv0Tw~&-BfI*p8D6*4sRZ-z!YSV9W2wO!*Oj-;mvQxo5Nb&g zt}*_tX|-K!>{{wnf_Zpt@wEjqKQ0wQEh)k^Y(~{M2bEwRUeDaVK<2p;YDp2UVUYoG zB#$LZFb}Vn*Ig*_N(r^32-mQfhxU9*NfEALD-PDDe2r3qd3fEtQ=hDZN~k48xQ4Bqb*{BaFb}U)&g+x) zTnV+L2-mP3K%ILAC76fTe;??ReF+He8Pt*@T*G!Ub?$wXU>;tR7xu~iN(r^32-mP3 zS)F@0C76fT!yoj?K2Zs^qzKor{cfFmQ6-p%*E5U#tMbkLZr%2w`Ce2lDI#caPpt&= ztOxhn`F^)f0@tM_MYu*$^NO|CL?xJq7h2(m7mh2|b0yT0B3z^B!HV_!L?xJq7kYE| zRW2?xlu%2GaE)a~9bbRr@6#%lCMv-^yf7+XzmghCs3k?X24XIDGnOVQ!92V$yT+_` zNl_0a)RH1x;srMIU~X8cL`oMYzVb|C(0&h24Ew>Q;hzcwsm2 z`whnzZFQXxYDp2U@l?+xwHxie(^9t*%)<-2nv-^;h7xK?5w20};i|Te>sEq!cwu*T z_F>d0_Ha3&mK5O{w%^6hvTCVY3FhI2UFMi$sZs1jb3!dCqN#yBbqhfnUf3;%dK7!= zoKQ=OaE;>LAg{R+%)<-2{?H%Ay+KZ>B}KT#;@TyZldaD!bt}O6Ln-}@-RJiKs<7xq_5s3k?XhV963W|{BdlwclS zIF00P(Ef&k5Nb&guHmQ1{;b;2lNU5j9EJBh9-6w`f(4D)PkTOlVt(W7P4VW-Lv~u* zj!>^@pU!Vw`t5>_h{z(>{l$v&8)rR;H($ycN~l+3)cnR$tEDv5qQtzV=QmFKC*D>l zYp6wukG7rHxNuCWR7$AVT_fi;4$R+UDQhfcPv+hGDxQdaXzHskE-0RqwES6pjdKt8 ze~(*NElPZ8>Vn26<5NWUVGA159`l}hvZJqY&2gS@PpCzS0}twJOn4>L=SrxTmNu@3 zj-~T=Uf7tmY0;w6|1qIsNs05WS=iWjT&h2mP%mwfSVJvJ{Nt5{jeZ}bG?Y*;ZMRtC zr8DO=$LJ&fnbRD7R~V?@g zpdX&)EfZLmu3j5&K0GuPs}ESwr{^=(Iytpue#Ic9isLQ zcY0~#QbiUa5MB4~pPIEws28I4)Ll~=YEc4Fd!>0P4YeqN*nY+_DMBquV0~QkTX_Gc z+=EJ}7go_<{3}K1ESfcEW^+AnKcm#5#Gk%2tIevWgnDU|h3oa{^cqJT`kx~M z{q&bRQlmsIN+7~rapLC@>V@dacpR5XElMDw{^Xw?!P^t+rBOR3bcg)Y34X?oS)_a4 zm{5xnxKg@QN~o94$5=xxN?^a6Ze1nRtNlFJKG)vF>`KQgwJ3p^cFB)Z@k$Bx!hB3e zQQcEvkHR^K9Y=b9r4}Wy`)IBbMf3VjMhW%O62|?Z79|i%(kqS<>J`^~zmLzU58pql zS+c*$%Du?-cIp`37~r#C{j%%rPFM-GqzHfhYRb~X>ie8ErDmx^3FhI&XTMxS3ALmM z*LeEN`_w=E#ac+6N-z&EKKtbwN~k48xJJ)6HmXnEc^9NkC76d7pF(sECDf84T;mJb zoZ3CN99_56sRZ-z;!}vOv8)hkNfEAb!NO{-a{5_yOPxwE4=+B2=o(6>B}KT#2G@@0 zy7S!ObxWN}Fb^+2tLhp`s3k?X#+}>VSh?K3&}6Ao3FhI&XH{K83ALmM*JymLe|2%^ z(7L5gC76d7p0mdL2Cgwx2(_dL*BElcj@36So7F9KD#1Lw_>O>UfOx|QOPy*-5w5ZK zfrnN;sr z8SuWEYZU88PN*eCxW-ooZdCvI&bw4Cbt}O&v&yg z_F9Sv((uAcjW;S?V}cR88)2ziEh)k^p0Rz&OJ`20SemE=^YFrs18--#28fr9uryIE zDZ(|1-BQK&R}n!PUfemkh7xK?5w5YEeOK+f_66mG&)$5eyU$+G`0KS}2LJlq#?-q{ zT+kSO@|eM29(D87ZNIvpG5)R5`M=vQCKlVTyzTwU@DDF~P%TRQX1xWCj)kLhI?Eov zW2fq7>kq6h|Ng`sl~AvHzOtb4Q6DuPx_zhWZW|1&u3&^(l=#{$^BaqPNMapZ)z++T zR(Rx<))!M<8&8r`Px@2ThfSuILje9pYaNiR_2wYi5^E;fxr1`XXw3H5q^i+PO` zpPSuILjZfAX?{z{Dx*PqZcZpiTJ`yKo2sDyfTW%C;U_cS$D z{pEfXbu zlZ{Y|5(iA0)A)G@$LT?>K-b{_lP2*)-4gN6q+#S@S#Qkf{X>5NZH5Q)#z52hmTcx`FfGhv3gnGU8+U&-b zFH_^Cuk2Gl^Ypc+Hs{-|^_0 zWyjfy^9@^Z4qSKBoz$Yl%=>3IcHh`zaF#85^C|TmUb(um?sMZ3X|fXPg@4Bv1U&k@_|ZA_rw+&} z%T75w*Pum-S%*4-7@TDj77wp~f83E9T8aqu$~B&(##(lk@x}pJ?UXNlB`?*O!lDH9 zj#_105k)`v^(pn&-@LkZ`bvAdMnR|-TK&Fl#})PHv$oo1_>|h&U-SN;MG3UqaobU2 zHS6=CuU=g{ad+na>Xr>V>)a#ugVBZB;Ri zBTeIwwT9)hmKG&2A7^iUanT=FS-e`%F{J+T{LAvlKtjFps5FuqyW7rk2RoD5kMXLo zD1o@L&jr*t$KutUokQwl7_SOKy$~yJyoVa!vUv5WXu|{*4-azT(umevnWvtVH*I zK#gKmt8-POMG35Mn=Nxm(I0>Em9sw1R!+T^dSOL zVTZH$CAL-f4mVcTva_XArulA(7A3HAy447eSG~R?t7Au|*HSO+)HawyjbhhV|D@RU z(V_%)fWLW^8YkJ#@<;a{Qpe6xuccntajs;e-Q(^-cDFrvdSS1iGR5z=i_iw+OphXGXC;anW#;eCnV{_Bs{Rav4 z!kx_dFH_^i0}ibo`kVJ_`@HXWMYJe^JESp(Qlq%@s@*wi^PTis>V-S9Z*5PFo8CRW z`t91ewYkUK@Ss|hSntdQjaQoM$4T8sRe!h1g4*k!UL6tY^~s0@jeRzw#xMVUdiD4l z&#fJB!g7<%7m8XHDaz8`rMfvHJ!s1ihd=?N;u6?*Djrb*cMz8enOVTJ*Ze|7=Za zOu6-_>cwj2>|R?$w9-8tcA0cJP45rcKq~*s|=>=g+S#^V}9)-!?)m zN<4jcU*p3w$K`aEyPe_!6UPKi*j_}9KWwm-G@>L$~>zG8%0l=#!uTvRsrBXt@^m&ae`_?PF)TYhZyfWGdwJ7n& zBkZd~f2GC-|JbE=<^0Vn{Yr#-=~EjsKoOjmxfHr#9V)qf3N(>9Y-4 z_VQs_ZRb6X$qBV6@zEL!8r@T<@x)KE+JB8Wz%-OlFMYNl%kJoy-t)mWr&jheLM=-C z_Nw`f!``9BYa37R`Qmn`R(2>6>ZMOZWZ97SF7J7F`Qep8MyN%J!K==1T=>QDMSuKY z(d9i4E;l@{hZ5=)KV@<8%q@Dhe*XN*UZ$ZIC5|35uW|iAYW#E77CmPhfq12adg*gg zS$4om!=|h^VpLA3MTuu@*LT3S)Hq?eVN>Q0A641YG?Y*;>Bc8le^?4*%C2>5naDZ_#zP5$HiB)JvbN z%d!*RyS!_g6^2)~H$p8+e01y_8CT~R@urOu)I$mN(q~7r?BUMoU3(TIQ7uZ``Q~hy zA9W*sUyODo)Jva?$g-n6|*%Gh5XvDjx4bA7E66&STPh{DT=WSk@`uZ+;52{6pe_cCE;_h&Z zxqW}%rLv5bN(uGSCob&oTAKIR1)EovGD0m%e7QPH){hAmrN29O^SsZMP_Ot&j;~rf zJ@cz|@|vqfi66Z+Q`W&7texJsHEK62l@jWu&(GN3OSS%ZQ*C*$vLtr&hW;rgsf9LM=*sbhwPT4;FMUER%Pz5~@SFKtbYa%2MTz>3 zGn+fWEIZzaent!~5$dJSlw}!W?lCL-&QdK(EWMRK$>V#Uc@}dovABr1tAu*R&#Hmw zTXEPF5Nc5Zdhab9Q>;<8->tl1@g3`j66yu*@Z|DwR`WCFZ_$IAt3?U4+d4z3vAYrX z8S$MGp%p zUfX1P5B9riQ3B)mu>GlV#8#(Po-yKQB|^Ps$uqE7wvo-K=WPFj8Ko8_FdrYbUo*VV zU$R---}XP4wMwWLW^;J|;~0w!Lw>bR4Us`DN+7Nr@l$FXWzpvXBe3^TLcI`U!h0-; zxfXkCSUJ_A1mfewrKn;1-HPpZYuN89p;;W{ignD7^;#+B1 z)_ZtX8MoIlwQY=0ixOCOk6()#D_hJxc#mUhCzJ^F!Wtaj|G09)>0O=MoLW292(>7I z{llaeFDTmTKX#vXxZUAxP$JYz-#xLv4s7?EU$eW&4iNH|kP_Gjjhjr3+bv4}eYxSa z@0JMl!k#F+;r6=SH!o{ueAAi4oZKDWP82+l4pW{vfej4cuBg;SBRe*C~{ef$;c)GjtcElS{gCai;F z&lp;}^tyFwIQLOPy>M0&*1@maNzwlundO99l)yPtSkG74_n6xB!?W7TRw^ab3ujJz zM>WfiwG*!kHl5zX^DA1Ezde!y}>zamMOTBQ~7WO4~*=+jc{mXm4WQ1Cj zz`0-8U;TXf;k9#Z=I&Y|)C;GEVShE=;>dE(ZP9~RqLzrT6VI?u#3|knK#plg*Ex2~&K$D4hPeLomGc-yU}O^u0@CTv-s`uL)*rHoLE5s-HO{g!Eqy2dSt3H8#G+bp|%t%3EAZx~X!+z7QOvD|O_8ja;IE;MGW zIk0~JjYBHmv-&8ZUV3tyWxF4`N&U#%$5wVRLM=+%e@b8D-Ak!)*N---|H+8o_r-*I z>B()D&AfEI`pMtCw=&5HwJ6bV^S;KQc<-Kg0-#^>ZK>QS$1S?_4@I5 z%&0tUgj$rCIe%eeh2hlrSMTceRqmWoxxi|!gnH@8t(_sSxlDb-pS@GL)d;mHvEA^6 zjeosPjoVgVratJzcPjf>sgzJJMAUF1y!r|6)PB3hGSzPzp%x_$SaV_Hl3gz?+Um@c z->Kcc<}%gEHcFIGFFm=I(N^gO*P_C(@;Xa z^yD_n-u(8xwVv_oRaZ6*wJ6cmxu9{}0%~-9>)zTHM!ZuZ)JsopvuxUL#?~(U@g~(T z*|<`R5-Zs6oKx2rU$j-%9b;=79=b_&uxTivUV3tyWlP>Tq}I3Q!0LWRs6~kh>&$Pg zI*1y7xo${pFC&(*QYoQcdU9*`2GbVxTygD|)#Z&)ixLwqnb(-}J!-u5$fBN|uiLV^ zyOk;;#7j?Zvuwbq0X^rwxOH`y5o*!vV#oRP!PGea>;XN0=-ay5Wu;O=y^s$l!pDys z(Dgebb~HjQN-Tf!T&c(Sa|d*N-%9l>E0q%Jr6;#`4)^e)uD@7YJ!ynmlvv?4`&-z} z{&>TP;YO@zrBXt@^yD_ncCwhejrHJCMyN%J35U#)adqkSLn@ydv5%EX3H8#GTZ>l~ zK`r)H5qH(1#4&U1DWvB7xY~#VZM3gzrBXt@^yD_n{xJC7$^kZ`-Zc%iD6!s;X3IRk z&xrdkU9Wn+X(*vydUBg(b1Z@$U0=OA)(EvIvCo^cBwjsY#Ck?dFA?gcC%0MlrxV_( zENc<&Q6to%#PK6$N!&fvh;uB8e#fGy66&QVxAxnedB1Jc5F^y0#FHD&lJ#S0BW^tY zoyzMaLcR3lHp@P$tzKQ}H!~`q7@-y=Zh2~^tb_Yo%pHE$jLKftgG#8Ep4?{Hsn*~7 z?Q(Br8za=B#5-eW%6dND`g^qX`(4($N~o8f+-BK-f3!*UyT2J*xyJ~#C~@unGi6`0 zl#TRf?-*Oz*-E8^dg;k+mc3)M>HlmV?rVfvl-T_nGi87Ee`^e^Zg=&N%1CQnCDcn# zZnNxf*KAo`%Jy)V8KD*>MyxrrxdY6yqb6)w{mPSzx|S>v>V*?eJ`<2-A1>Uwy5wmC zx-uiwqQux0{d^a@Oq;b9K`ZAB=o)0LtAu*#$*s)~BR)KJK+n!bs6`3rO`SWYSO?#> zQaydvfS!IiK1fP%k~X&9Vin z53K&>+99L5l8C}$4&$R|t@4043ZHSE$CDcn#Zu9+a)nacgkGpbKtOUmK zdf%po?RTrT->qT4tJhL5J-M~#GHgcOVEdn2i}}HOOC>NLpMT_{q8`I9Td#Vz5vO1e zC#TEmr6;%c{zqf=>cMx;sGVtqT9iOsS=!zV^KrGVMV}wsF{Ac{mtsP_^yD_no?3mG z>ISwSebxFyElMChZuI7bg$81-#oij?t`h2{C%0K<``yZ2Yb;a8epf9@AkL2(M~(G{ zy;GTQ#KYFQN~o8f+-BK$TXD9kuU>!52(>7I^=jx2)L8wuGb;NVF}g&km!8~a*%fxT zvdsAP>gO7v7A3Im{^q?4iniL+qV(pMtyjO!dQb`V(v#aPJI^BMop!(WMhZm?1A0!iQk`U_ zQbN7-r{yQ7(N~o8f z+-6yiMbJHMM%`e9T9m;3XPD=IHe$NXTHK{7p7CjQRu3iAOHXdI>};#`&cB^e8*7AGl)(8+SO*`m zm^r`sd~fZyrlEv->B()r z->vUwXARizsznK$mxXqT4tAu*#$!)&ht$)>K752MoQ3B_FVSjb0oep07 z>mjxAHcFIGFFm=nb2y75{r|d$sc4 zcj)@aymXJ^k8~Kd*oHfzHaUKZptS z(v#aPd-moN>Z`sry0WGbYEgn;e|L>-Zatws;~%3dzpzp%psGw|Xk$ zj8Kab{QA3V3_s(D`YXHiRCcmbDWP6^a+_tJ{A_4_x9VG!V~kLX68!qRYm7R1X#J6{ zw<=%xUQDQ$p4?{H?0a{skNwKZ)jf<*ixT|$yK8KG-){9)jW}$tm{2c7qHrR-`O(|g z|M^%)b;G?!)zqQ{zy9tT>mIdzeci|DL^jn0J@W@9*>M<2;=AGiS=Z=bn2qGk0XV+W-Vx zn9#4kTOap=*a^bNc`(5$uG}K`xhCw5m@v@Y3xX|7=-1z^k30~gK}<^^SjClFW6t{} z$Gd#_aQ8tFY+*vb{%(DY0}%r8B(5$Ktm4Y8F*mMG^Zx#PwA&EZiY-j&*Way=n~EV= z#g$uQ{yvZq{`SYQ?oylwTbPiHGx!eu-u#U4co22_#uKcP?Vuw3*ny1D2oSYEu!RZz z`nx@kZaXtVhe14tqhf+pT)B;2D@U%Cv@5nSpN3G9uG|{4 z^@2)nKSYKbL9m4h{rbE0@ivGTK%7ATV1iX#xsAp|_Z`GU8J*d}gns?q`dES}{bnqR zGQldY+#2&9)YCzI0UvB(LcjiQeLMwXF=G1#7!8=-r#Vl9U<(ucwRvOqf~fv(nsX_RiV0S6<<^)}h;E;6%LrWuf-Oww z>YnyIW`fAtm=S7#D9Qw@xN?hj1!BO~jPS)E*usSP3)UGee`u`x-$xnY&NwP2SjClF zW03E<$ag)-ciF;(T(@AIQRKTW@?B5zT_#w?mD^~(>muLvB;REV6LSB9bw-izy2y7u z$#m6(#dG0^x$irNz14`+ zY+*wBW3bNXo)PKpAml$E-WgA@iYvEx<8W0sx5kB){P#hyg$ao(!8)TqtnTJ!)UM=L zxGtVx6<2PJDLb@{`yR5(K_J+|gv7^Sol)ewF7jPp@?9oa#g$td+mY}3lJByG35oN; zI-|&UT_GgjWr9^)xi#i-j5zCG@8cwemI%B?XIkTaB=FwnmY?TRf-Nd6G4Gy3ec zVW%^Q$+%Wbu!<|U#xEe!x|~)r8zY~T#hV*3086CHk$8-knj4E@3Msn$vA^`M!&=S|B^#v{js=% zOt4C}gNktIU`F^#5D$W23loxG2j{Wk$Bb|xj%o#tiV0S6<@WU4z?XcNElkKfA-Eq4 zSEYFeajoVf%V2_4T)8!74kBp16~p}|H-MljFcUK03EI`*Uvs<@%ZB??q?HiCDz4n3 z?Oq%9u8XxqwlE>{wxEB^2hj?|e)wR5Rb08nyOxNc`_ZFh2FVsCWd0fS^8)vxY90U+P?CEsNW6H*Td z;x6)CANg)HiZa0}uH52VVW?&N{Yk3-8GNvX38`xY=eW^7}#nokkRb07^=DR-fT~G2|wlE=e zzaYOtzUw33_39y8VuDp%xsB$#KJr~p@?EwtA@$23Pei`!Bj5ET-(`YTT)D+}TM-X; zA{Xrjf-Oww>Yg^={RzZk#Kj$GB}}l2YqF@fgLvbsj8G8>wlKkUSYyurX{>uwI3u(s zO6-V!v*OFmIruK4-Ig_@I-J-Mx%LYjJKzHKRVMpe*Y+*v@hStY% z)EFA0I)s>+GFlq7PIYI7&)0>Rlo8( zBaI$Y9}neqb8i4K5YdM%Oz2$Q`q(wFjr${N0G$#DR+SvSGjj94>f^~FZQN@>G($^d z3lmy%us)7%N_7qL>NgVzRy8l!896KCk=V8Bgbevc5WR6!Y+*ucC)P)GE2SF$GnLTXEliz#U|QRau`GL{g5ck7Kys6G1FS zD`5*0TFbINIwRk$jMg|hfne3_n|DQC#Fr3kKQE7#z7;LL7mkW8OlVEc`lyTyxjFh_ zrv!pk#|n2vw)RyYtpP`j8I8Lxla=aR!NR})j0Lh`Cvw<6^PEUd{-@rgw&9&kKBD3;dUUp zBoMM+RlWMy9y*We$f?f;@fnVaElg<5+WNQ;weYKAXU+tx*3{ce_hSl(4j?Xt54JF& zwRh_S_uOlRJJ=leoC#K4i0@wo?W#HmX(du&VG9%bHw5cr1M-D&Xo*rOVuDo-n(m|i zu@uC75F2nFY+*wG7Gix|8~dwF1@u}bSXJ-!ebmnpb3KW@5_j3cg#Jy(`sjmvcP%1= z)R38A)yM{g6tA8HQ3Avrh(2s#LjN{peH0+y{cKPh_l5+5RZHdblu*$i% zh{i!79>Ew@4Of>fOz7V{tq;UpUt+JsT_#v{-@GCk&k=KdiMP>yc;_p~OUi)w8#QE^f>pJDDWd$U9I6r@ zf>?~`!xkp=Z|T-YAIzIuAojLRAXqiD#D2;X8-jQnIh?^!v4siEMXis2F#jKp*jp=s zVAY%o`%mYn_&XViSVUEKVCN%f8J|=)TcW*}cy99z&a2 zSS4-2^>Sk8fqd6TzUxW8%N8c&{>xm=`ar(xBj5ET-(`YT(hFL)Q6Fv4c1wU*fYF&P zOz7Ou`WS*9^&V;sx8OXOV3qXE4)4v1oku2!H6WUUU<(sE$F)A5!rb|KRD^fnsF+}t zM5RNW)JFrvlFva5iA5i^FrjmG>!Uv+TvJ3+$t-zatdi&&-Z3+F9&J%)IEgyL0$g3T zFrhUE>!USl3@za2iUfjHGD=h)t3HtL`p9>qN5vKI&V6t#vS2?VQT3_iSjM(kSs4B`n}B+>0+E*nBq&RkdCquEo`53lmzCvpyvEK_=r%zRLuwBq!=PNqrpr zDaSJ)e!@|)g$b=KS|2r0mG~32hF>tMF~KUy?S31eK9KKv$anqnu{=>NOlXbN`ar%L zM!xHRl0dLZvdpcwsSo74VdT5M=DTW1B&3FHeIVZrA>Z{i-&I2Pt18LP^=OSjz8gZm z>r1}N7ACZ2ZGEiAXwwyEUMYcKmCQ1N`*APk26aJHz#U`@6Iy$Z-4D!hI^zz?+<*yI z$!sZTSM5Pu0pe=-U<(uaHw5bg`L2U}*Oz>k30BFhFX$ig1jG*@${{AQg$eyzi1o1> zdCw|D(pm`wt7I-3^z$RAO3aV-TDCBuf77u(8X|v_O6M^2S|(T}v+y8ZwF7Yth<=DZ zY+*v?(NaUUKBUG_FtCj;bp|F_CDnu=?sf+;0kJnXRy9xy6H*V58nX2<1KIHdn^OHy z0>LV&is&eTXYN3}jM#n)j*2Zz=-&#h4`i<{@?BpteI{5XwVGfY+y~-D)R4DeRAUPh z`ZrJO<6cw@{Mg9J1goS<6^!RXtOSvcR>Br0^l!J;M+wvz{ze9{5J$xXtEAc% z!mpquvV{q*!y0n{Z@6{1Cna=o^od`)uY;{})-(Oz_8pN0C+BpMe>bK9h+&y2p#l(W zVS=l;_+l^KaO=PMSg0_8VAZK#c0|@c{&394k9Y%n3f?Y$1J%jqtm=J!ex$|4b7MZ1RcY*Q#~U^?@YWVvnBcmvF*P$9y5;cR&*TJxRik_5N9w(* zKCZ=E#j9VKNaJvdb51ct$ znBXd|F}JR->egMk)ww=_U{!g1C2i)5>Z2y!mi6(r?0t9!oh?jo-8cG02lsJ&(P2sg z!KxX(cSgRh@ks1EUd20c&)|y=m*e?%wlKkUUt==xzS>oIFRnoX!K&@+cSd?lP#=XO zk2;4zjK@*2g$b_v8k2*wz5-`IEP-Ivg7yWGH@;LKPvD)nSMV105ZpnwFu_$^`~?ed zxLt&|i~A)Itm@zuM82>2XzW^T>6GV;10ip1v4sh)`{I7!4Y%vi8vjcmSkSGbwZAHAHnTM;(7ACmvYs~BDe}Cak(+3g=RxQfk6}fGq`Z)RwzQKaGi}9YV&lV=Q z?rTgnM1=;6o4Lah2v&WJl^rq`sE;DN;dTrWXaxwiFu`?SR1K!3gi;XYHYX6Qk}PxG zv+CpQoRrXZ5Y<4iC6Um&FV+m3niAd#;`{_cXjSc7u!qj0#jKR@uXwxo1PHb;!Bt#* z0TbV{7>F}Z#r#sAN7wP@lMeS5b{nOTbSS~E}k5~ zH&QyGM{Q0ZSXKGMebmqAgLnqf`Ys$5TbSS~F1}`kH@5CZWEhx0uC%r83+%+-v%)qU*-A^XU-NTxb6!dP)4Svg!U&8tSZsm z)^}|#`ZbhiA@)|q|JlL>*L{sa%=IPqO5A0FRdTeGx6h7^wI!f@a%M{S8~mRwOmGz! z_XB61v;J84hXjIEa@BiXr9Rq$$j95ogJM@#ElhCT*O+f`2bUp|-jqPFN?OmpH*#X< zQ3k~Icn`96td*#R39jNAvlcD!=nHeaL-4`-VwLoQV-3|uSGjcg9==R{ z)By1vh=U;5!UR`w@f9dUxJ~yR^)@6BtddySVcpEwd3*)p61*pT5eT+0!F69_dO{rm zl}NBkMu|we`k0N;ph@*oekEL8wlKj}Ts%pR5$82T(lQAIt7Nph^KA987uV?$5G8OP zY+-`yzNmiS?xo|tmrNj7C8PGG@6U)`t5m#AUJq}Re;ON|)xrc!X5!4*!UR`w@x&JT-^+Nr|M>)hRgy)$b&L8q55y`E&wyYH z6I{i`{2X!QY4mn}@hSA@?(Jp3Ei=}-7zf>n}b z_HCs;kne^i_DbAkOCq6FTw~Ivr-bsMu8}|ptt!dRgY)P&DcAw9}7K%YbBWsTbSS~E@}W6XNwR?M))w*}A3f?T+;=8eC9~I{ zpFa=c9`su2=WJnutGLFzftm0DL{j;t6BDeGS$Ghy&PD$AH)2Ui+(EW5!Bt$Wh=3Zy zLBvG)UIr7al4?Q_ccsRFT7$232DLB|UlCr6?06YsZwk(X_r)ryiUi|F7kpE#D!%A2 z30IdbOmGz!U*AKPk6ME#bp|F_CDol^9P9<6622bU5CmJ8;3_V@q=Wg*#4dT>c?kro zq~;Wi=PzM?v!PR-Hw#ynElh9~*O-&282pDwIxm4>l~mg_`@lQysH*)h7hfd7)nyA4 zT*bxer>HTsd#bBfK30d*eX&ZahMGm;eNI#d?_S!~8yc$)s)Y%z;u`Z4DvqCO z0>LV&eg=6W@?97CZdmeNwlKj}Tw|`p{Qs9BDd8On1goCk9Mohnn*h;2GbLOP1Y4Nk zI;=6zOw4xLHpBPTqhIW``#Q(utY^B;GF+>3AI3WFQr|smdbZ>IF}%aMAlSkL*L{t- zI)A#;Fdtu*Pas%TZQYJYgXh%8ZQG|ieRnqv$(PdE!UWfSjrq1rmNNt2yC0B1u`?raLRJ@`9{A zzyzyGe4HN{^|AWck2Nhyfan5(ElhCT*O<4z@8bM{)qy%C5UlFmcxR+c`$uBuu?=fl z48`g|SAt**6I}Pj+kjZ1q96Ro$_`Ah>W8H}BYl^tk4*(loR7ch;>dT;*}??ZeetHn z6SbUPSYIuXVAU-b6-3JYt3EQZLdE*nx=UDkLkxMd0L9m4huKODEd&;KJGOU*}DS=>>(|T9r_UY=QI##v%9P0^5k75fG zT=z9*AbQhE^h4>jOt7lu=3S9%R;rKJK@@=yA8cVl@~)sF+!QNRJc8&jIDueQ*+IJ_ z&d2KGc0`^|Sn=it5Nu(B>%PX^&?vJ*D%Rn-DuG~?WSNJ*P#<2^%nnPZWIJO)uqBZQ zD#DMaWv+W3gseTlglwy7@!~yn9tWyruIrDZl2w%0!UR`wjkzD+hu?xTmvt?fVAcK2 z_tO2SjTI_>|7yB39t2yM;JU9dPh(Y}>q=)ivLXT#tQzvkUTRm*gD3?e8w6XJ;JPnX zGE3PM-q~!7^Kb&es^@RnNBv^}h>fw<&K4%P?u)pKRe|!l4UL`$6Rhe{xR3gInydLALFPIn%G54JEN^Y-8`SQlW0ikYzp z#{{cx+FD3)w;9$EdL1jK$qFuPVS=l;Sjp^%F5c=`q-KIu&$lU}@#FaSUAz?-4LZXI zTbSUwuQ7LEjh~@dUrkm-V1iYBu)aYs4!%A<-IF!%WE^A*6I}N-re2Ss-jG3dn=p-cR{e+e%s9f5+#CPGU6=wlKkUU%UaDKiykb*few&d@#YP zoD9?~Pv?n!vC_@3ZB3(V(XoXIuKVH(0#oqrZuQI#vU(j8tZF;h)^}|#iU{g?RWdtB z++_^OmN-T7^mw{uMr~Y`~-qk(l;y4 znH4*a`>))o`2k{I*9a_XbPm~?MCRtJ*U&K4%P z?u)m6u?Ej`yPJ4}5(rjFtStTX%-DIPW1XJ^h`o(Lu!RY(`{HeKtR-|iVz1H~r;OmGz!f5)ktx$a4<4wOi+O0vw9bJT}_UgkRF zyPoE|YDpx5itssgq8aiTgzQ&UlAQ&KkoCjN&;JU9dO)xi@hifHQmkCzM zEF-ud<*@4et+-Y)H((1BGEWF9!Z%}_ZH!1NF_8&YIhaQU?dlE?`>+aM4-jl&g6qD< zTvLBjXmP7C(W7F5Rnb}B>He`Bv%3q?+9fYx3lm($HRctpao8I@Dv@B7%teEKUWm18 zcOmx5I#_IBf~&ZA_5&4zJ&3)s1}GD(l392VuQoqf%PEKG^B@SeFu_$^e2oNaPL9Wl zY~vCLR!MCjh`SFXbG=V^MZkhy>}-Ntdd$yFb?(|pYH5@x|UZL1Y4Nkx^Fb!b%tU^HmwxtzE~wSr(it4 z096Thpz+$k2V0onx-Y&8jEdL4X`8}{1goUl7UU(*v>M~c8icZ18e5p)x-Z%;R->JR zNGh`lCRim^!yv!vi5f$FtVTNu1Y4MhuL$=>jiCWzuVj5puu7_*n%fzZiYjMOVbgF) z5Nu(B>%PWBre!-fb;w+&by3|HtA;HKYO=;GLA7?{55w0L!3SHI;5sZS!hbdLuii4l zY2CerJ8{a+Nb5n1RqRv`L-Z()q$LtkI5j?lMt-Bt$IP^(bps+dlpBP zTdJy`vg~W8G<>jXO^scVHcRY&;|XWg_uf~f%Dd-*U<(s}j@uQ9bl0QW1!5S8D-#G- zrR*+<94)O!^}@>Uy)7WF0l^j~u77%0nQ*R~_T^trp9F$c zojTyl^_6VI!1GriCV-IE&K4$Kth+CgTBtr&URBQ>P&3cDHi2N(kM9&lo;adD{s-a* z5G_EkYUPN1k(^OB`ot5BOEhsu zTCsOl$u*pEK>l_o@v1fM$AtVAUfaTbUHAksmwN?QA@ z%(>C)6Hlz&7;)x}sO66Z!4@W@Kb||o(il0{N1V4t*77ALGQle8|J6#%Uzg;lwjeTW z19343R!J;*@e{k>c%nAqRipgN{W>7n!i2=JL|OvDDv7RxZqcJ^_CkN> z=N*^(M`JNj_a$-n`G4(xhzd9=CRimS z(L+P@sA6N3uVa*2n2_=6%2Mj%I7ZI1vztZFocF~l8BvF|Rv%Ab_+Wxnl0`k#K#!_+-uGTd5FJ3UO7g3M7WSy(iOR^~oaJA8 zjX|)53CZogJfgjJ74pOrAY}Ytf>n}>?&_cwJR$k+W1r9P zB;REV6Osqtdpah54C3J}GrUd-1gj*!ZaP$B;y@6SzMSF79b^j=KaVMh46dwaj{MO7 zuld{IMhOI~wwg{k<5Nu&$Xa52kaS#jr3N79aou5FkisuP<3JFBr zR&R&!|LA$>41x*q_i99E6Kinh3o)CJ*3SE470)v8l-^mXZrbtZoSak5{oK3uMK*jY zxxt6)Yp>rI`S(#7kw09&a?-xY=Zj}|`rmI6#Ki9Bq`K?=e9pP?WOJV_tuEacdGv5j zRK|$kN6f99hC0wd}YvB!P%iZQdK1)W{yKF%REg z!mR;f2F`<3mtj4pW4Fil8%MM+@wRj43w7M}APiZU=#KH@9OQ}i%-=8dwo@^;j(d%1 z5l66Ue1*M{iSJ9E_#v*NpWr*-_(5^1Y4M> z_4%Gi739=ob9vMZ8)NRO(5 znc?M*zQp|oXU?iVukVVCPPHu~o|tP6dN1^<=>8!D?Td-L2k}g5FKt&h{dd4C1hE-pkJi?n3F0~sZE+r~I$m{Gq|s8l-*}>6U=4rL`CFXfAlSmh;qM9}%?|2O z9UEN3|GfGZrxA{d30CC~E{NQ4iH#C?Qg%oU|J#~doC-K|R$aHeAac(&Hh#ntCw{xa zZ}oIvXEpjcTbS6GQxLi9S&cqBj$Yx9U((mP0Y}9It4^jBL~{N)eN@M;@IP4E*Led+ z#j3tTp(-&a+Kb|eS4y|?H=b&qi=WRHCS+UY3APWu3gROW_?fz|I z#}hknKb~3C*Ly#9KXhMA$h~=KuBDCHh1pr%phxvG zdTr|)EBX)OJXjU&T@Ts)#uFn?9`Nn}Q4#0C7AB<6FIlBWb@kaZybDKP;{OXDOt4Dg zSnalw^~tq*@?^I6(a1~uUvM6*l1TK$e!JgzA{G;UjfuK1CL})Q9oM6}1(AB>jF$ep zI1kVy= zM|4HD)OFc$?*|Z)$>_eAkeulJW7=zrBUmMwT8}b%RL{akgQdqkiS4YC9B%qSyWe=? zud`F#VShg7y^f<|3ll4mS$1xtM|Bvv=sO_felWo*$xEwu)(H1Lh|+&O=Zyow7AF3k zx-Zi6O7&6Kv~c@XE(m)G1gpN?Z!1N%58imHxx2n>LHGsSLAEfld5I*6p1zU7m zh9+Mz{l_NmxH4_!m&+F279WSs&X25k zrF85(iX&L1+t$acr7O7mbNk3Imo2(2KKi!Y8JX5aeF#wm0>3zdRl03`T+`-L=as?3 zT>Ns`qTAx*_n8He+x{yRJC80gqC%60;|Nyiw)HW1{{Uyvf(Kpva@nHW(QEbduE^Bw z>SJh(sCe!CIN}hgbldtky0UesikIc$m&+F279VfkwkLA+X7zEb7=l&09rKY{#;cMy z*~KrHExIi}9{zZ5+0f{%NE@hA9ZK# zkJS8LeJC-q{G)LMt90A?82f2Qe?n#>7r$J#=(hNHef)vQts}Lck1K{?m2O)f9X8zN zPw0M*i(f8VbX$C!)$(BENJWi_#SyI1ZR_LsYa{&geput+w}LIYEj~)TeK7Ln`|3l8 zDj=r*a&E4wWM8b(ZR_K}fr-A^(aOPZ1zU7md^~adU}V$?J2K$iR}g1`z%Pzqm2O)f z#!U6`UT*Y1w&=F{DA}-lESCIVgsOy=ZR_I*j%wrfRvvz-Y|(AKRxj;VA4*Klcq5LG zGgp;vTOYCe;o*LyvPHMWhg|iXSruaE5xXBA?nj!cWM8b(ZR;b}N~CS2u|>DVhqSSa z(kjM$6i2X1x2=y@|BybC#unWcAJSLu%2OY){&5DuD&4j|u6nkf|9*q6@=IfjZi^4; z^E)oC6g!WO#SpC0ZR;a#=`ruZ%)5O2(%7Qg;zMHB*W=YkgBWq~#By;2t90A?nAmEG zw|M+$AHOuV=(hNf82s29>O+aLZ6A#zSf$(6$EGo5y!=&@ef-kcqTAv_#*!AFsShRU zHX9m8uu8YBk54{r9Xc7#^6^V!i*Ab#8593nuRcC5hG3O$TOS|q8sMB*@Su-h8e4Q* ze8|{dcai$oSPa1`-L^hjxBt{BGkBPfUm9CPi{3?wt zx*fe%$lOiqJ>5sf*YNR6V~cK!56OK;?$mfC#G@eAmz|cXD%lsSbldv)GIy|hTZ4Tb zeyMEHZSf&FeEH_;qd0<9x@~GcQ%?dFU)m z$IPj@G9Gf|$SJyI@&=E)WD{m6a%(K^r$C7v-Y+*v)DyV;4uP*ywf>nHk z@jlqXguEkgqFu7{V1iY}pE+CPnf;S%?0)$g#vc`1n2@LOmw%t^sF+|Ck3R7}*usQ7 zzdyN}_H(|vOt6YapLib}YdN-W!(a7BOiAX0d#d(%X)*EyZSr=-`;sTV&!1rT%f5?0 zDkkJv?hA(}J1X86t2oZb`(O(b@+|iYwS@Z3ls7zxAv~$304)~uDFHE`zCsIi*N00VM5*{ zNq*0nU=`g>)kvGIc^?T=4{}cx;a+#G<3H zJcq8=M|=lWPRrP9#TF*S-?8s>eqJ2GD!C#-m6Hip$(i^0pWScq1Y4Mpdo$&>WJkpW ztEB%2bx}SlZa?x4=g!HtEpdCZdSo%tOolB?$h)Lcjkfs}`(T1q^6y#?IMat(m=J%@ z*G!hl@V;2ZSya3awlE=Ar0k$%KA2z?=UVYT_#Q~)y!JwS*NVR%Y+*uT@WcaJ@#3q? z1gm6}2X;_Rh*H> z-w(DhA@7AGZ@WyeiepT?54JEN{&+d^BK!RUBOte9(25ymXsm??Lfbmn}?4ww!VLZ(e+@m|&G;=fPiP zm|zPNlJ(zpVX{`j1gj(`3jQj?K3FCBPMMl^zr_=5VL~#et0cDz{*J>(#TF(c zpG$sqnP3&SeCt6+PPQ;1d8yw2;t5t2-=o+f8M#IV?wj#G*usR&ag&b*Ot4Dk)WKhV z`0BES37M-WAJv#(6-SKt^I!`TQccitw|Ih899K>gX}F8gXPv)UZ~tncnXFWYEur2NX}}2&d=q!}a!wf_OsS9=J48 zA^P_k>0MII7DAr*Z~K}3_jrOWOlWQ3%rj?#Rq~F&6|0l^U<(rx`J_&LrVl1qCC~5Y zOibp3RWc?@ZCdtQJi!(wbl!gEQ8B?Pd4B)BOOhQGTbPh+P^!*n`e1@p^8CKG>G(Uy z7A9ntAywxyeK5f)Zu#*(4OPY{fPIx)>ll{qvWWav9it%{s^R7|jn zdvpB#U<(sk6*fPTbPhGCV#Iz(+3l*;`<-(gIk~GzIt_&w?uBEOlVen z=20=hD!H?jA5PZV*}{a@2F~=s1gp69#Gg4^n9$llav$0fS;cKE-iM4)?q(aWG|QCz zN-yZK-Tr$#!4@Voe?0T3m|zvh%6K1aVL~&`Gkq|@Dvqe}K4kpx@3YZT>jAP~8M}_u zP8LPk!i3H&&paw7SS6$O_1`4Bx@=)W=RRlpV1iYAXXDSDEllX#=S&|=u!`@0ybsR8 zw1Ob}mHaVzM#dHp6m{?g$b=Qp6P=LR&nczKXbM)p>?e@eK5f) zZezwAemcwD{rsR1e#>R8z9%0lx8a__k@dPQ>jBETeUeklzsD17Nk-V!1YP5-&83d?;}dEB^hCTq})BpeJ%Sk55H6N z!!MNy-4>Os+xXlP^&vzB5cs9CB^hCTG|9ftz38V69)59z(xQ^}Cx0$dA55?%8DV{t zt=Qjf{MvC3zf>l4TU4@+=DK?D z@JnM$GQ#?J^UZnAucyZN_{9-Qi%QlnZqiNLTYWQ6sRy=IyU)>{wy2NP^bMpz%{gP!(5CUjd=vTl6P&(Q}@6KqLF zSRaTb5=Wx3gbCdi)xkQ26t56VP7`cNMpz$+i4qT^F_8(~7S&HVg%o!Y6D1x-V`amw~BM*&cmQ3ijsJ5NL z8g88Lo+j9mjEM6Q&8eBtZ9NaowWB$;_=pm+U$rD7tdCB(R_{-{%)xI36S^%bxeD7l zXx`2QTapphN9>+ExbG{N&}~u4-Q0b=Y%FJp-E#-`eFa;R5!OenB|2!oafH&Ml2$qQ zE%m_!TapphN30Jz=!Ywq&}~sgd)HX?5$l5v`r!(;BqOYkSS)c7PjZ>iZBa>-Xx>46 z#9~R5U`sN>`iMn17jZF{3EdWzM7!5Zst+dEl8mrE9$Rp!fA2xZ#V?l$-4>NZ?Y%q7 z#O^s0Y)M8~A7#?2`R{$)%f&C33EdWzj6Qu^4pK7&wNRFW+R=Ml@PqXb)$5!MH;m7~{+3EdWzWc|VYz_mI}uq7E` zeH>Xg&+%~2@ylgGw?!qhm!MrS!Ior%^%0w^xtOcvGNId|l37^LKVow=7jv~-wj?90 z5A-NU`ydm#Eh?E!2K}4~wj?9055y9QBhgsGgl>yUX2n6gLM%B=uq7E`eIUX~JdDOf zCUjd=GP@7rE)#4?Mpz$+)DqXDv7HIs7L`;fg7Je1wj?90k62A6I^r;)+oFnATTYLI zv6@VjU`sN>`iRw*qGK%+x-BZH8U^EdthN*#YuS>Fus)ChNR2F-GccjsqLS)Yke4vQ zmSlwWflNkfebL;93EdWzRPloRN(kgV(cFhE$q4HM8JVj&922@NDyc?lHfRhJY)M8~ zAGV5YpFB$+wJ-8%Sl;vaaDCZ*`yvY#+HLucM&u`XmQ%iXQXIjm4JY?T*6xkbaYUSj z_AB25*^u)8BUly5#av9i`NqXLZITi4rI32hSj(2wqR88y z+3n&9wlLB6mZHd;^OE^sf>nI9@vVg0()5mnkp;tISCsC5Ji%>=iD^$4M$)72MhX;)0Jid$v;QL%*y$!f~fOx8b`U{&$0U5>r^Jb5PZ!}W3%CjQTE%h8UGej_E> znX83~17=smd)LzO=fV48m3&WX#l!N9c%l!!AAH?}P9Cq=!i4zvx@@vm!UU^sm{)K* zy2hUeTbNjUaX}D+V~CB^Y+*va73OSA)@zwy)y4kKpg+d>_~4=Z({ZW$OZlgxfqc8o zIXjsTwlE>zLhCoIIHLUmdE4Q`^=${+C-Y>R_Y{Av*uuo~c$-6`Yw-lD`26AtZoAyZ zq_5PUo~$LZg$e059is1;B(_8*SS7t{#FS({WL$b{v~ATg`e^TBI{rM^!i4nNjN> zRU9Sa&x0*Y)E~05n9-RDRuvz8xLrwJ`uff@+gSWjNd};;j|s^*laC)vu!?(Hybrc8 zAsMHRaK#g>;{F&<$X(MGC-+}lhTNyRmnCZ@Y+*toTfT{RxZ9~E1ekcirI zb}}DKu!^I0ybsQhhb^)-b{P#g_l+mm!i4N8`B5>!D(;W*KG?#95s{yDCbm?qi7$Lj3aq|#TF(c`#3#H#4fMRWSC$T zA7T9cU<(rxOOlT`Ot32c%zOVc+0VM!c=)C2y8!ZibKU0W$n1B|nb4=giX-gvSC5y- z^e>sT&ciR23EdWzKKo^TFu|5&g!SQE*wY`3@0Z}0#)NK*N}v6*KA2!jGQ#?3b7g%$ z$L%7&G$wRgRQeR6^&!M85cs9BB^hCT{QF;lcggZ0K7Mh8(xTF*5Ur2@h+s=H!ups| z=z7k$i9UX5Oz5_#^eIH^g9)}IBdm`~E2f5?nv&(?m&Sx{i%OqWwLU5m!Ior%_3=up zCC+?&p$We zmb7#K30>*qm&Sx{i%Q=Sus)bzOESXxxTJ4?ciIbodibR>q1&R;C$p^&CfJgUus%Ne zeVp5Jy=RQhDL^&vzn5cs9CB^hCT$eUCe8JW;+^&wAYTOWypT9Ogg$Im#b z&tIA1;I~3lOz0Eea)k1}f%PH877+NYV2jeSU;TIMe#CB^hCT#9E28tz0H_TU63wKOoB~Jdh(Jp?uOz5_#qzB78X4c0QM6e|pVSO}xY--4xlI7x;%Y<%=N+OZG zuV#HTA%ZQ*2wx~4MvObt#OESXx zXpZk8zf^ypGjl?d_VUH&#m&lZknd2->RjP#%5RW$Cgq#k?Q-nDV|_Kml7A3O-fExo zK3kZOHMlY#v$QdnFKq8R%^SNHRL*V31gloz3*!$xsy^;{rM;V7x3OCt1Y4Mp?~~_j zRbtL_?c8UbE8X`-c4@~JCS+}|wOjP4YW#M}ne$GDTjQg9-e-bU@&)x%JJrX;W@X&> zFHU!-T=Mw4tdh08PCzBsDxL^kUdDYrE#3Vi_3?Mv!i22twfTe|)%a7VoR8OJxP2Ga zY0m_!=?9);eqDN@V`b#ZTZub_t?UOtOoW;HT7}b_XC`7pLo#yzHfSaCRin3 z0bj)i>W~3lp;9Sk`yi689~s=g&y(>OT3|o_0*ID(}Hvk$>~mM|Z^bvR8F+ zZ_8WNjx9{c>SGrbsE@hu@fCbL^jSQ?Dp^lsIKDw>TjGKy_5C4E7q{GriEY`!gsf5a z&FktTHTx#NW~<8XV^=)+9uusRwLpeEqCPs-?&;T>Si}9h?LF<-!i20>Rs_P{!9~+= z@^5TY89geVV3n*^viWxPu@-aAjBz#GoYIZjvxNy+)ok~D>Z9oS2mE&5KIPFPo~5bj+Q1Oj_qWT4!53wlE>&vD1t!08$(SOJDqV}HeKQY<=qK|P( zuNz=}#4Jq6s%G-{;n@8+mF3_1@SuzFiz8SS^|45O)Icrc$3DiZSo1=AR51$^;_vfu z>f?M|s~U%%@}95U!}^F3tdgt#(m?fbU&&0r|G0JDEq(3%Pzw`s-L3~=&!fuH2mJJJ zpYpoiXYYp+tdh2{vaR}f;oMBW$JBM+&VIYzXA2W@|DU@=eKbS=_^4%N|Gh4yqAgMP z#VY9q=b_#nyB}z~6UNo>hs_)s?H_7kLfY}7QtG1~d{l2$*>Bj+_75dkC4IBp_hn-~ zzK4$~@NuZ!{n1{l7AB-WF8H==>{>nXOg;bVhF$%eXFM8>3`(#{qS7Q!eauF@+S##- z-!B%g)WU?sm0QE=;~?VIywtA#v{<}Sf>jbLSHGk_I>X0F__(m=KhY?v7A7P<{+*{j zHe)n6w|l04uwIq5yf0Qs%&+;V`nVdgeeSX${=W@6wr2|y66Y_Qt3Hb0qwt1If84xy zf>kmSHOf{W%j~G;=bu+SI;yFK2^rz;nWR46wIior=bZu3QB4U}$%s04iu(Ae<ed-y_)7$gDSS1 z%i3KL&BE2fgyh=cPxL%SU~Vv{Zezd4u8n4zp)6SjL@k;-#N_IA( z7A9n#P!@!}ALqT$-fdRDv44JS{-Fe`WG3U{3mf)Y^+t_sWA2|`-icY!S&>?pkQvgt zp6WwpUN6_*=gq>*i}%GUnUNI^P#@3#HqO1;o8t8!_1ybxVM11Ju5^0*c<`mc?gba@ z^S-RSFpglAtod{6Q1y}f$2hmyb5p#xhL>H-7A9l`>ZVKeJXX}7?B24Zrni0Wo$Z-m zm8?W0qqDtMTTW%UjcTVX#cwTJn2_yYJpT$lMlPx8ynNk7XAr6q-}M@6?z85fEVtyE z_9^&vU<>b8w!8kJ=do`2V0TW9ea^HIz1AfXs*LYh#x|jb{E$14E&c-6n_;!Fa;7AF4sZ(n5pp)#>+b@zcLUhhL)oP#)X zCRoK!Ef`bbxmsTRiRsQ35Nu)Msd@V%XKzp+&SSN_!h|z+H=Rel+cG