QualityAndUserProfilesModel.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Copyright (c) 2016 Ultimaker B.V.
  2. # Cura is released under the terms of the AGPLv3 or higher.
  3. from UM.Application import Application
  4. from cura.QualityManager import QualityManager
  5. from cura.Settings.ProfilesModel import ProfilesModel
  6. from cura.Settings.ExtruderManager import ExtruderManager
  7. ## QML Model for listing the current list of valid quality and quality changes profiles.
  8. #
  9. class QualityAndUserProfilesModel(ProfilesModel):
  10. def __init__(self, parent = None):
  11. super().__init__(parent)
  12. ## Fetch the list of containers to display.
  13. #
  14. # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
  15. def _fetchInstanceContainers(self):
  16. global_container_stack = Application.getInstance().getGlobalContainerStack()
  17. if not global_container_stack:
  18. return []
  19. # Fetch the list of quality changes.
  20. quality_manager = QualityManager.getInstance()
  21. machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.getBottom())
  22. quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition)
  23. # Get the list of extruders and place the selected extruder at the front of the list.
  24. extruder_manager = ExtruderManager.getInstance()
  25. active_extruder = extruder_manager.getActiveExtruderStack()
  26. extruder_stacks = extruder_manager.getActiveExtruderStacks()
  27. if active_extruder in extruder_stacks:
  28. extruder_stacks.remove(active_extruder)
  29. extruder_stacks = [active_extruder] + extruder_stacks
  30. # Fetch the list of useable qualities across all extruders.
  31. # The actual list of quality profiles come from the first extruder in the extruder list.
  32. quality_list = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
  33. extruder_stacks)
  34. # Filter the quality_change by the list of available quality_types
  35. quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list])
  36. filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set]
  37. return quality_list + filtered_quality_changes