Browse Source

Fix build plate compatibility check

CURA-5078
Lipu Fei 7 years ago
parent
commit
2c5cc17b49
2 changed files with 14 additions and 3 deletions
  1. 12 2
      cura/Settings/MachineManager.py
  2. 2 1
      plugins/XmlMaterialProfile/XmlMaterialProfile.py

+ 12 - 2
cura/Settings/MachineManager.py

@@ -919,11 +919,21 @@ class MachineManager(QObject):
 
     def activeMaterialsCompatible(self):
         # check material - variant compatibility
+        result = True
+        machine_has_buildplate = Util.parseBool(self._global_container_stack.getMetaDataEntry("has_variant_buildplates", False))
         if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)):
             for position, extruder in self._global_container_stack.extruders.items():
                 if not extruder.material.getMetaDataEntry("compatible"):
-                    return False
-        return True
+                    result = False
+                    break
+                if machine_has_buildplate:
+                    buildplate_compatibility_dict = extruder.material.getMetaDataEntry("buildplate_compatible")
+                    if buildplate_compatibility_dict:
+                        buildplate_name = self._global_container_stack.variant.getName()
+                        result = buildplate_compatibility_dict.get(buildplate_name, True)
+                        if not result:
+                            break
+        return result
 
     ## Update current quality type and machine after setting material
     def _updateQualityWithMaterial(self):

+ 2 - 1
plugins/XmlMaterialProfile/XmlMaterialProfile.py

@@ -617,7 +617,8 @@ class XmlMaterialProfile(InstanceContainer):
 
                         from cura.Machines.VariantManager import VariantType
                         variant_manager = CuraApplication.getInstance().getVariantManager()
-                        variant_node = variant_manager.getVariantNode(machine_id, buildplate_id)
+                        variant_node = variant_manager.getVariantNode(machine_id, buildplate_id,
+                                                                      variant_type = VariantType.BUILD_PLATE)
                         if not variant_node:
                             continue