diff options
author | Diego Prado Gesto <d.pradogesto@ultimaker.com> | 2017-09-25 15:43:29 +0300 |
---|---|---|
committer | Diego Prado Gesto <d.pradogesto@ultimaker.com> | 2017-09-25 15:43:29 +0300 |
commit | 2ae1700a156eebbd6a930245fd5d0f81cf78ee75 (patch) | |
tree | 58ff7025f511b345024cd7933f412419ec71b3d4 /cura | |
parent | c22928f5d1bdc2a53f7360eaf36d85e73dc44798 (diff) |
Solved the issue with the slider that was no showing in gray the unavailable profiles - CURA-4327
Diffstat (limited to 'cura')
-rw-r--r-- | cura/QualityManager.py | 25 | ||||
-rw-r--r-- | cura/Settings/ProfilesModel.py | 55 |
2 files changed, 24 insertions, 56 deletions
diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 763599ac73..c0b5afb71e 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -64,19 +64,6 @@ class QualityManager: result = [quality_change for quality_change in result if quality_change.getName() == quality_changes_name]
return result
- ## Fetch the list of available quality types for this machine definition.
- #
- # \param machine_definition \type{DefinitionContainer}
- # \param material_containers \type{List[InstanceContainer]}
- # \return \type{List[str]}
- def findAllQualityTypesForMachine(self, machine_definition: "DefinitionContainerInterface") -> List[str]:
- # Determine the common set of quality types which can be
- # applied to all of the materials for this machine.
- quality_type_dict = self.__fetchQualityTypeDict(machine_definition)
- common_quality_types = set(quality_type_dict.keys())
-
- return list(common_quality_types)
-
## Fetch the list of available quality types for this combination of machine definition and materials.
#
# \param machine_definition \type{DefinitionContainer}
@@ -109,18 +96,6 @@ class QualityManager: # \param machine_definition \type{DefinitionContainer} the machine definition.
# \param material \type{InstanceContainer} the material.
# \return \type{Dict[str, InstanceContainer]} the dict of suitable quality type names mapping to qualities.
- def __fetchQualityTypeDict(self, machine_definition: "DefinitionContainerInterface") -> Dict[str, InstanceContainer]:
- qualities = self.findAllQualitiesForMachineMaterial(machine_definition, None)
- quality_type_dict = {}
- for quality in qualities:
- quality_type_dict[quality.getMetaDataEntry("quality_type")] = quality
- return quality_type_dict
-
- ## Fetches a dict of quality types names to quality profiles for a combination of machine and material.
- #
- # \param machine_definition \type{DefinitionContainer} the machine definition.
- # \param material \type{InstanceContainer} the material.
- # \return \type{Dict[str, InstanceContainer]} the dict of suitable quality type names mapping to qualities.
def __fetchQualityTypeDictForMaterial(self, machine_definition: "DefinitionContainerInterface", material: InstanceContainer) -> Dict[str, InstanceContainer]:
qualities = self.findAllQualitiesForMachineMaterial(machine_definition, material)
quality_type_dict = {}
diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 715f290352..c5de9b9136 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -54,36 +54,36 @@ class ProfilesModel(InstanceContainersModel): global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack is None:
return []
- # global_stack_definition = global_container_stack.getBottom()
+ global_stack_definition = global_container_stack.getBottom()
# Get the list of extruders and place the selected extruder at the front of the list.
extruder_manager = ExtruderManager.getInstance()
active_extruder = extruder_manager.getActiveExtruderStack()
extruder_stacks = extruder_manager.getActiveExtruderStacks()
+ materials = [global_container_stack.material]
if active_extruder in extruder_stacks:
extruder_stacks.remove(active_extruder)
extruder_stacks = [active_extruder] + extruder_stacks
+ materials = [extruder.material for extruder in extruder_stacks]
- # if ExtruderManager.getInstance().getActiveExtruderStacks():
- # # Multi-extruder machine detected.
- # materials = [extruder.material for extruder in extruder_stacks]
- # else:
- # # Machine with one extruder.
- # materials = [global_container_stack.material]
- #
- # # Fetch the list of usable qualities across all extruders.
- # # The actual list of quality profiles come from the first extruder in the extruder list.
- # result = QualityManager.getInstance().findAllQualitiesForMachineAndMaterials(global_stack_definition,
- # materials)
- #
- # for quality in QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(
- # global_container_stack, extruder_stacks):
- # if quality not in result:
- # result.append(quality)
- quality_list = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
- extruder_stacks)
-
- return quality_list
+ # Fetch the list of usable qualities across all extruders.
+ # The actual list of quality profiles come from the first extruder in the extruder list.
+ result = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks)
+
+ # The usable quality types are set
+ quality_type_set = set([x.getMetaDataEntry("quality_type") for x in result])
+
+ # Fetch all qualities available for this machine and the materials selected in extruders
+ all_qualities = QualityManager.getInstance().findAllQualitiesForMachineAndMaterials(global_stack_definition, materials)
+
+ # If in the all qualities there is some of them that are not available due to incompatibility with materials
+ # we also add it so that they will appear in the slide quality bar. However in recomputeItems will be marked as
+ # not available so they will be shown in gray
+ for quality in all_qualities:
+ if quality.getMetaDataEntry("quality_type") not in quality_type_set:
+ result.append(quality)
+
+ return result
## Re-computes the items in this model, and adds the layer height role.
def _recomputeItems(self):
@@ -96,21 +96,14 @@ class ProfilesModel(InstanceContainersModel): extruder_manager = ExtruderManager.getInstance()
active_extruder = extruder_manager.getActiveExtruderStack()
extruder_stacks = extruder_manager.getActiveExtruderStacks()
- material = global_container_stack.material
if active_extruder in extruder_stacks:
extruder_stacks.remove(active_extruder)
extruder_stacks = [active_extruder] + extruder_stacks
- material = active_extruder.material
- # Get a list of available qualities for this machine and material
+ # Get a list of usable/available qualities for this machine and material
qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
extruder_stacks)
- all_qualities = []
- for extruder in extruder_stacks:
- all_qualities.append(QualityManager.getInstance().findAllQualitiesForMachineMaterial(global_container_stack.getBottom(), extruder.material))
- all_qualities2 = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, [])
-
container_registry = ContainerRegistry.getInstance()
machine_manager = Application.getInstance().getMachineManager()
@@ -129,7 +122,7 @@ class ProfilesModel(InstanceContainersModel): tmp_all_quality_items[quality_type] = {"suitable_container": None, "all_containers": []}
tmp_all_quality_items[quality_type]["all_containers"].append(item)
- if tmp_all_quality_items[quality_type]["suitable_container"] is None and profile[0] in qualities:
+ if tmp_all_quality_items[quality_type]["suitable_container"] is None:
tmp_all_quality_items[quality_type]["suitable_container"] = item
# reverse the ordering (finest first, coarsest last)
@@ -154,7 +147,7 @@ class ProfilesModel(InstanceContainersModel): for item in containers:
profile = container_registry.findContainers(id=item["id"])
if not profile:
- item["layer_height"] = "" # Can't update a profile that is unknown.
+ self._setItemLayerHeight(item, "", unit)
item["available"] = False
yield item
continue
|