From d4c55d635e91c261675f47cbff9c4a604f9b216c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 29 Aug 2016 13:30:46 +0200 Subject: [PATCH 1/3] Adhesion settings now inherit from the correct stack CURA-2202 --- resources/definitions/fdmprinter.def.json | 115 ++++++++++++++-------- 1 file changed, 73 insertions(+), 42 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index c1fb8c53e2..ce406dc923 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -628,7 +628,8 @@ "value": "line_width", "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "support_line_width": { @@ -1575,7 +1576,8 @@ "value": "speed_layer_0", "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "max_feedrate_z_override": { @@ -1840,7 +1842,8 @@ "minimum_value_warning": "100", "maximum_value_warning": "10000", "enabled": "acceleration_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" }, @@ -2059,7 +2062,8 @@ "maximum_value_warning": "50", "value": "jerk_layer_0", "enabled": "jerk_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" } } }, @@ -2701,7 +2705,8 @@ "maximum_value_warning": "10", "enabled": "adhesion_type == \"skirt\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "skirt_gap": { @@ -2714,7 +2719,8 @@ "maximum_value_warning": "100", "enabled": "adhesion_type == \"skirt\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "skirt_brim_minimal_length": { @@ -2728,7 +2734,8 @@ "maximum_value_warning": "2500", "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "brim_width": { @@ -2742,6 +2749,7 @@ "enabled": "adhesion_type == \"brim\"", "settable_per_mesh": false, "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr", "children": { "brim_line_count": @@ -2755,7 +2763,8 @@ "value": "math.ceil(brim_width / skirt_brim_line_width)", "enabled": "adhesion_type == \"brim\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" } } }, @@ -2767,7 +2776,8 @@ "default_value": true, "enabled": "adhesion_type == \"brim\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_margin": { @@ -2778,7 +2788,8 @@ "default_value": 15, "minimum_value_warning": "0", "maximum_value_warning": "10", - "enabled": "adhesion_type == \"raft\"" + "enabled": "adhesion_type == \"raft\"", + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_airgap": { @@ -2791,7 +2802,8 @@ "maximum_value_warning": "1.0", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "layer_0_z_overlap": { "label": "Initial Layer Z Overlap", @@ -2804,7 +2816,8 @@ "maximum_value_warning": "layer_height", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_surface_layers": { @@ -2816,7 +2829,8 @@ "maximum_value_warning": "20", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_surface_thickness": { @@ -2830,7 +2844,8 @@ "maximum_value_warning": "2.0", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_surface_line_width": { @@ -2844,7 +2859,8 @@ "maximum_value_warning": "machine_nozzle_size * 2", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_surface_line_spacing": { @@ -2858,7 +2874,8 @@ "enabled": "adhesion_type == \"raft\"", "value": "raft_surface_line_width", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_thickness": { @@ -2872,7 +2889,8 @@ "maximum_value_warning": "5.0", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_line_width": { @@ -2886,7 +2904,8 @@ "maximum_value_warning": "machine_nozzle_size * 2", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_line_spacing": { @@ -2900,7 +2919,8 @@ "maximum_value_warning": "15.0", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_thickness": { @@ -2914,7 +2934,8 @@ "maximum_value_warning": "5.0", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_line_width": { @@ -2928,7 +2949,8 @@ "maximum_value_warning": "machine_nozzle_size * 3", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_line_spacing": { @@ -2942,7 +2964,8 @@ "maximum_value_warning": "100", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_speed": { @@ -2958,6 +2981,7 @@ "value": "speed_print / 60 * 30", "settable_per_mesh": false, "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr", "children": { "raft_surface_speed": @@ -2973,7 +2997,8 @@ "enabled": "adhesion_type == \"raft\"", "value": "raft_speed", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_speed": { @@ -2988,7 +3013,8 @@ "maximum_value_warning": "150", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_speed": { @@ -3003,13 +3029,11 @@ "enabled": "adhesion_type == \"raft\"", "value": "0.75 * raft_speed", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" } } }, - - - "raft_acceleration": { "label": "Raft Print Acceleration", "description": "The acceleration with which the raft is printed.", @@ -3022,6 +3046,7 @@ "value": "acceleration_print", "enabled": "adhesion_type == \"raft\" and acceleration_enabled", "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr", "children": { "raft_surface_acceleration": { "label": "Raft Top Print Acceleration", @@ -3034,7 +3059,8 @@ "minimum_value_warning": "100", "maximum_value_warning": "10000", "enabled": "adhesion_type == \"raft\" and acceleration_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_acceleration": { "label": "Raft Middle Print Acceleration", @@ -3047,7 +3073,8 @@ "minimum_value_warning": "100", "maximum_value_warning": "10000", "enabled": "adhesion_type == \"raft\" and acceleration_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_acceleration": { "label": "Raft Base Print Acceleration", @@ -3060,13 +3087,11 @@ "minimum_value_warning": "100", "maximum_value_warning": "10000", "enabled": "adhesion_type == \"raft\" and acceleration_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" } } }, - - - "raft_jerk": { "label": "Raft Print Jerk", "description": "The jerk with which the raft is printed.", @@ -3079,6 +3104,7 @@ "value": "jerk_print", "enabled": "adhesion_type == \"raft\" and jerk_enabled", "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr", "children": { "raft_surface_jerk": { "label": "Raft Top Print Jerk", @@ -3091,7 +3117,8 @@ "minimum_value_warning": "5", "maximum_value_warning": "100", "enabled": "adhesion_type == \"raft\" and jerk_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_jerk": { "label": "Raft Middle Print Jerk", @@ -3104,7 +3131,8 @@ "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "adhesion_type == \"raft\" and jerk_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_jerk": { "label": "Raft Base Print Jerk", @@ -3117,12 +3145,11 @@ "minimum_value_warning": "5", "maximum_value_warning": "50", "enabled": "adhesion_type == \"raft\" and jerk_enabled", - "settable_per_mesh": false + "settable_per_mesh": false, + "global_inherits_stack": "adhesion_extruder_nr" } } }, - - "raft_fan_speed": { "label": "Raft Fan Speed", "description": "The fan speed for the raft.", @@ -3134,6 +3161,7 @@ "settable_per_mesh": false, "settable_per_extruder": true, "enabled": "adhesion_type == \"raft\"", + "global_inherits_stack": "adhesion_extruder_nr", "children": { "raft_surface_fan_speed": @@ -3148,7 +3176,8 @@ "value": "raft_fan_speed", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_interface_fan_speed": { @@ -3162,7 +3191,8 @@ "value": "raft_fan_speed", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" }, "raft_base_fan_speed": { @@ -3176,7 +3206,8 @@ "value": "raft_fan_speed", "enabled": "adhesion_type == \"raft\"", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": true, + "global_inherits_stack": "adhesion_extruder_nr" } } } From 3d41e25a4e5c365801bb24265b321346faa1bd7b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 29 Aug 2016 13:43:42 +0200 Subject: [PATCH 2/3] Fixed setting visibility if a parent setting is not settable per extruder but it's relations are This fix also removes the hack to ensure that use_support was set correctly. Fixes CURA-2202 --- cura/Settings/MachineManager.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 732c484cff..823e59b4b8 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -8,6 +8,8 @@ from UM.Application import Application from UM.Preferences import Preferences from UM.Logger import Logger +from UM.Settings.SettingRelation import RelationType + import UM.Settings from cura.PrinterOutputDevice import PrinterOutputDevice @@ -240,15 +242,19 @@ class MachineManager(QObject): def _onPropertyChanged(self, key, property_name): if property_name == "value": - # If a setting is not settable per extruder but at the same time settable per mesh, the engine needs a value in the extruder stack - # This is mainly the case for the "support_enable" setting. - if self._active_container_stack.getProperty(key, "settable_per_mesh") and not self._active_container_stack.getProperty(key, "settable_per_extruder"): - if self._active_container_stack and self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: - new_value = self._global_container_stack.getProperty(key, "value") - stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] - for extruder_stack in stacks: - if extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.getTop().setProperty(key, "value", new_value) + # If a setting is not settable per extruder, but "has enabled relations" that are settable per extruder + # we need to copy the value to global, so that the front-end displays the right settings. + if not self._active_container_stack.getProperty(key, "settable_per_extruder"): + relations = self._global_container_stack.getBottom()._getDefinition(key).relations + for relation in filter(lambda r: r.role == "enabled" and r.type == RelationType.RequiredByTarget, relations): + # Target setting is settable per extruder + if self._active_container_stack.getProperty(relation.target.key, "settable_per_extruder"): + new_value = self._global_container_stack.getProperty(key, "value") + stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + for extruder_stack in stacks: + if extruder_stack.getProperty(key, "value") != new_value: + extruder_stack.getTop().setProperty(key, "value", new_value) + break if property_name == "validationState": if self._active_stack_valid: From e0e11477081bfd57465282262c0538a895128d87 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 29 Aug 2016 14:40:37 +0200 Subject: [PATCH 3/3] Somewhat working materialspage duplicate. Contributes to CURA-1969 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 40d85e8ab0..77f775ee27 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -23,7 +23,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): def duplicate(self, new_id, new_name = None): base_file = self.getMetaDataEntry("base_file", None) - if base_file: + if base_file != self.id: containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = base_file) if containers: new_basefile = containers[0].duplicate(self.getMetaDataEntry("brand") + "_" + new_id, new_name) @@ -36,11 +36,16 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): variant_containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = variant) if variant_containers: new_id += "_" + variant_containers[0].getName().replace(" ", "_") + has_base_file = True + else: + has_base_file = False new_id = UM.Settings.ContainerRegistry.getInstance().createUniqueName("material", self._id, new_id, "") result = super().duplicate(new_id, new_name) - if result.getMetaDataEntry("base_file", None): + if has_base_file: result.setMetaDataEntry("base_file", base_file) + else: + result.setMetaDataEntry("base_file", result.id) return result ## Overridden from InstanceContainer