Browse Source

Fixed highlighting matching configuration if a material is empty

Jaime van Kessel 5 years ago
parent
commit
c32c642ba5

+ 18 - 1
cura/PrinterOutput/Models/ExtruderConfigurationModel.py

@@ -62,7 +62,24 @@ class ExtruderConfigurationModel(QObject):
         return " ".join(message_chunks)
 
     def __eq__(self, other) -> bool:
-        return hash(self) == hash(other)
+        if not isinstance(other, ExtruderConfigurationModel):
+            return False
+
+        if self._position != other.position:
+            return False
+        # Empty materials should be ignored for comparison
+        if self.activeMaterial is not None and other.activeMaterial is not None:
+            if self.activeMaterial.guid != other.activeMaterial.guid:
+                if self.activeMaterial.guid != "" and other.activeMaterial.guid != "":
+                    return False
+                else:
+                    # At this point there is no material, so it doesn't matter what the hotend is.
+                    return True
+
+        if self.hotendID != other.hotendID:
+            return False
+
+        return True
 
     #   Calculating a hash function using the position of the extruder, the material GUID and the hotend id to check if is
     #   unique within a set

+ 17 - 1
cura/PrinterOutput/Models/PrinterConfigurationModel.py

@@ -71,7 +71,23 @@ class PrinterConfigurationModel(QObject):
         return "\n".join(message_chunks)
 
     def __eq__(self, other):
-        return hash(self) == hash(other)
+        if not isinstance(other, PrinterConfigurationModel):
+            return False
+
+        if self.printerType != other.printerType:
+            return False
+
+        if self.buildplateConfiguration != other.buildplateConfiguration:
+            return False
+
+        if len(self.extruderConfigurations) != len(other.extruderConfigurations):
+            return False
+
+        for self_extruder, other_extruder in zip(sorted(self._extruder_configurations, key=lambda x: x.position), sorted(other.extruderConfigurations, key=lambda x: x.position)):
+            if self_extruder != other_extruder:
+                return False
+
+        return True
 
     ##  The hash function is used to compare and create unique sets. The configuration is unique if the configuration
     #   of the extruders is unique (the order of the extruders matters), and the type and buildplate is the same.