From 49f2fb2cea8a741a02971171fad76066fc940851 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 30 May 2017 16:55:01 +0200 Subject: [PATCH] Fix filtering maerials after editing materials NB: previously the "approximate_diameter" metadata was stored as a number. This caused some issues passing arguments from QML to Python. Now "approximate_diameter" is stored as a string. --- cura/Settings/ContainerManager.py | 2 +- cura/Settings/ExtruderManager.py | 4 ++-- cura/Settings/MachineManager.py | 2 +- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +- resources/qml/Menus/MaterialMenu.qml | 2 +- resources/qml/Preferences/MaterialView.qml | 5 +++-- resources/qml/Preferences/MaterialsPage.qml | 5 ++++- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index e65cda001c..1da0a7e3de 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -746,7 +746,7 @@ class ContainerManager(QObject): if not global_stack: return "" - approximate_diameter = round(global_stack.getProperty("material_diameter", "value")) + approximate_diameter = str(round(global_stack.getProperty("material_diameter", "value"))) containers = self._container_registry.findInstanceContainers(id = "generic_pla*", approximate_diameter = approximate_diameter) if not containers: Logger.log("d", "Unable to create a new material by cloning Generic PLA, because it cannot be found for the material diameter for this machine.") diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index ce6fd47de6..3baa2f5dce 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -310,9 +310,9 @@ class ExtruderManager(QObject): if 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")) + approximate_material_diameter = str(round(global_stack[0].getProperty("material_diameter", "value"))) else: - approximate_material_diameter = round(machine_definition.getProperty("material_diameter", "value")) + approximate_material_diameter = str(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"): diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 33372a3228..d0c04cd26a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1125,7 +1125,7 @@ class MachineManager(QObject): if not definition.getMetaDataEntry("has_materials"): return self._empty_material_container - approximate_material_diameter = round(stack.getProperty("material_diameter", "value")) + approximate_material_diameter = str(round(stack.getProperty("material_diameter", "value"))) search_criteria = { "type": "material", "approximate_diameter": approximate_material_diameter } if definition.getMetaDataEntry("has_machine_materials"): diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 8ad4c2815e..04fc09019b 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -473,7 +473,7 @@ class XmlMaterialProfile(InstanceContainer): if tag_name in self.__material_properties_setting_map: common_setting_values[self.__material_properties_setting_map[tag_name]] = entry.text - meta_data["approximate_diameter"] = round(float(property_values.get("diameter", 2.85))) # In mm + meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm meta_data["properties"] = property_values self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0]) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index cb1a4cf644..9127276f3d 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -150,7 +150,7 @@ Menu function materialFilter() { - var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) }; + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value).toString() }; if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index d7a4440d16..30edb063c1 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -168,8 +168,9 @@ TabView { // This does not use a SettingPropertyProvider, because we need to make the change to all containers // which derive from the same base_file - Cura.ContainerManager.setContainerProperty(base.containerId, "material_diameter", "value", value) - base.setMetaDataEntry("properties/diameter", properties.diameter, value) + base.setMetaDataEntry("approximate_diameter", properties.approximate_diameter, Math.round(value).toString()); + base.setMetaDataEntry("properties/diameter", properties.diameter, value); + Cura.ContainerManager.setContainerProperty(base.containerId, "material_diameter", "value", value); } onValueChanged: updateCostPerMeter() } diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index c46b482d10..0921b8c7c2 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -24,7 +24,7 @@ UM.ManagementPage { filter: { - var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value) } + var result = { "type": "material", "approximate_diameter": Math.round(materialDiameterProvider.properties.value).toString() } if(Cura.MachineManager.filterMaterialsByMachine) { result.definition = Cura.MachineManager.activeQualityDefinitionId; @@ -253,6 +253,7 @@ UM.ManagementPage property real density: 0.0; property real diameter: 0.0; + property string approximate_diameter: "0"; property real spool_cost: 0.0; property real spool_weight: 0.0; @@ -397,11 +398,13 @@ UM.ManagementPage { materialProperties.density = currentItem.metadata.properties.density ? currentItem.metadata.properties.density : 0.0; materialProperties.diameter = currentItem.metadata.properties.diameter ? currentItem.metadata.properties.diameter : 0.0; + materialProperties.approximate_diameter = currentItem.metadata.approximate_diameter ? currentItem.metadata.approximate_diameter : "0"; } else { materialProperties.density = 0.0; materialProperties.diameter = 0.0; + materialProperties.approximate_diameter = "0"; } }