mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-13 09:47:50 -06:00
WIP: Remove old quality models
This commit is contained in:
parent
1a19175b35
commit
2cfdbc1b16
5 changed files with 1 additions and 361 deletions
|
@ -53,11 +53,9 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.Settings.SettingFunction import SettingFunction
|
from UM.Settings.SettingFunction import SettingFunction
|
||||||
from cura.Settings.MachineNameValidator import MachineNameValidator
|
from cura.Settings.MachineNameValidator import MachineNameValidator
|
||||||
from cura.Machines.Models.NozzleModel import NozzleModel
|
from cura.Machines.Models.NozzleModel import NozzleModel
|
||||||
from cura.Settings.ProfilesModel import ProfilesModel, NewQualityProfilesModel, NewCustomQualityProfilesModel
|
from cura.Settings.ProfilesModel import NewQualityProfilesModel, NewCustomQualityProfilesModel
|
||||||
from cura.Settings.MaterialsModel import MaterialsModel, BrandMaterialsModel, GenericMaterialsModel, NewMaterialsModel
|
from cura.Settings.MaterialsModel import MaterialsModel, BrandMaterialsModel, GenericMaterialsModel, NewMaterialsModel
|
||||||
from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel
|
|
||||||
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
|
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
|
||||||
from cura.Settings.UserProfilesModel import UserProfilesModel
|
|
||||||
from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager
|
from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager
|
||||||
|
|
||||||
from cura.Machines.VariantManager import VariantManager
|
from cura.Machines.VariantManager import VariantManager
|
||||||
|
@ -934,7 +932,6 @@ class CuraApplication(QtApplication):
|
||||||
qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer")
|
qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer")
|
||||||
qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
|
qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
|
||||||
qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
||||||
qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel)
|
|
||||||
|
|
||||||
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
|
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
|
||||||
qmlRegisterType(BrandMaterialsModel, "Cura", 1, 0, "BrandMaterialsModel")
|
qmlRegisterType(BrandMaterialsModel, "Cura", 1, 0, "BrandMaterialsModel")
|
||||||
|
@ -948,8 +945,6 @@ class CuraApplication(QtApplication):
|
||||||
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
|
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
|
||||||
|
|
||||||
qmlRegisterType(MaterialsModel, "Cura", 1, 0, "MaterialsModel")
|
qmlRegisterType(MaterialsModel, "Cura", 1, 0, "MaterialsModel")
|
||||||
qmlRegisterType(QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel")
|
|
||||||
qmlRegisterType(UserProfilesModel, "Cura", 1, 0, "UserProfilesModel")
|
|
||||||
qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
||||||
qmlRegisterType(QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
qmlRegisterType(QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
||||||
qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
|
qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
|
||||||
|
|
|
@ -18,10 +18,8 @@ from UM.Application import Application
|
||||||
from UM.Preferences import Preferences
|
from UM.Preferences import Preferences
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
from UM.Decorators import deprecated
|
|
||||||
|
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.Settings.ContainerStack import ContainerStack
|
|
||||||
from UM.Settings.InstanceContainer import InstanceContainer
|
from UM.Settings.InstanceContainer import InstanceContainer
|
||||||
from UM.Settings.SettingFunction import SettingFunction
|
from UM.Settings.SettingFunction import SettingFunction
|
||||||
from UM.Signal import postponeSignals, CompressTechnique
|
from UM.Signal import postponeSignals, CompressTechnique
|
||||||
|
@ -36,8 +34,6 @@ from .CuraStackBuilder import CuraStackBuilder
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
from cura.Settings.ProfilesModel import ProfilesModel
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||||
from cura.Settings.CuraContainerStack import CuraContainerStack
|
from cura.Settings.CuraContainerStack import CuraContainerStack
|
||||||
|
@ -72,7 +68,6 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
|
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
|
||||||
Application.getInstance().getContainerRegistry().containerLoadComplete.connect(self._onInstanceContainersChanged)
|
Application.getInstance().getContainerRegistry().containerLoadComplete.connect(self._onInstanceContainersChanged)
|
||||||
self._connected_to_profiles_model = False
|
|
||||||
|
|
||||||
## When the global container is changed, active material probably needs to be updated.
|
## When the global container is changed, active material probably needs to be updated.
|
||||||
self.globalContainerChanged.connect(self.activeMaterialChanged)
|
self.globalContainerChanged.connect(self.activeMaterialChanged)
|
||||||
|
@ -269,13 +264,6 @@ class MachineManager(QObject):
|
||||||
self.__emitChangedSignals()
|
self.__emitChangedSignals()
|
||||||
|
|
||||||
def _onInstanceContainersChanged(self, container) -> None:
|
def _onInstanceContainersChanged(self, container) -> None:
|
||||||
# This should not trigger the ProfilesModel to be created, or there will be an infinite recursion
|
|
||||||
if not self._connected_to_profiles_model and ProfilesModel.hasInstance():
|
|
||||||
# This triggers updating the qualityModel in SidebarSimple whenever ProfilesModel is updated
|
|
||||||
Logger.log("d", "Connecting profiles model...")
|
|
||||||
ProfilesModel.getInstance().itemsChanged.connect(self._onProfilesModelChanged)
|
|
||||||
self._connected_to_profiles_model = True
|
|
||||||
|
|
||||||
self._instance_container_timer.start()
|
self._instance_container_timer.start()
|
||||||
|
|
||||||
def _onPropertyChanged(self, key: str, property_name: str) -> None:
|
def _onPropertyChanged(self, key: str, property_name: str) -> None:
|
||||||
|
|
|
@ -131,207 +131,3 @@ class NewCustomQualityProfilesModel(NewQualityProfilesModel):
|
||||||
item_list.append(item)
|
item_list.append(item)
|
||||||
|
|
||||||
self.setItems(item_list)
|
self.setItems(item_list)
|
||||||
|
|
||||||
|
|
||||||
## QML Model for listing the current list of valid quality profiles.
|
|
||||||
#
|
|
||||||
class ProfilesModel(InstanceContainersModel):
|
|
||||||
LayerHeightRole = Qt.UserRole + 1001
|
|
||||||
LayerHeightWithoutUnitRole = Qt.UserRole + 1002
|
|
||||||
AvailableRole = Qt.UserRole + 1003
|
|
||||||
|
|
||||||
def __init__(self, parent = None):
|
|
||||||
super().__init__(parent)
|
|
||||||
self.addRoleName(self.LayerHeightRole, "layer_height")
|
|
||||||
self.addRoleName(self.LayerHeightWithoutUnitRole, "layer_height_without_unit")
|
|
||||||
self.addRoleName(self.AvailableRole, "available")
|
|
||||||
|
|
||||||
Application.getInstance().globalContainerStackChanged.connect(self._update)
|
|
||||||
Application.getInstance().getMachineManager().activeVariantChanged.connect(self._update)
|
|
||||||
Application.getInstance().getMachineManager().activeStackChanged.connect(self._update)
|
|
||||||
Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update)
|
|
||||||
|
|
||||||
self._empty_quality = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
|
|
||||||
|
|
||||||
# Factory function, used by QML
|
|
||||||
@staticmethod
|
|
||||||
def createProfilesModel(engine, js_engine):
|
|
||||||
return ProfilesModel.getInstance()
|
|
||||||
|
|
||||||
## Get the singleton instance for this class.
|
|
||||||
@classmethod
|
|
||||||
def getInstance(cls) -> "ProfilesModel":
|
|
||||||
# Note: Explicit use of class name to prevent issues with inheritance.
|
|
||||||
if not ProfilesModel.__instance:
|
|
||||||
ProfilesModel.__instance = cls()
|
|
||||||
return ProfilesModel.__instance
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def hasInstance(cls) -> bool:
|
|
||||||
return ProfilesModel.__instance is not None
|
|
||||||
|
|
||||||
__instance = None # type: "ProfilesModel"
|
|
||||||
|
|
||||||
## Fetch the list of containers to display.
|
|
||||||
#
|
|
||||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
|
||||||
def _fetchInstanceContainers(self):
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
|
||||||
if global_container_stack is None:
|
|
||||||
return {}, {}
|
|
||||||
global_stack_definition = global_container_stack.definition
|
|
||||||
|
|
||||||
# Get the list of extruders and place the selected extruder at the front of the list.
|
|
||||||
extruder_stacks = self._getOrderedExtruderStacksList()
|
|
||||||
materials = [extruder.material for extruder in extruder_stacks]
|
|
||||||
|
|
||||||
# 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)
|
|
||||||
|
|
||||||
if len(result) > 1 and self._empty_quality in result:
|
|
||||||
result.remove(self._empty_quality)
|
|
||||||
|
|
||||||
return {item.getId(): item for item in result}, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet.
|
|
||||||
|
|
||||||
## Re-computes the items in this model, and adds the layer height role.
|
|
||||||
def _recomputeItems(self):
|
|
||||||
# Some globals that we can re-use.
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
|
||||||
if global_container_stack is None:
|
|
||||||
return
|
|
||||||
|
|
||||||
extruder_stacks = self._getOrderedExtruderStacksList()
|
|
||||||
container_registry = ContainerRegistry.getInstance()
|
|
||||||
|
|
||||||
# Get a list of usable/available qualities for this machine and material
|
|
||||||
qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks)
|
|
||||||
|
|
||||||
unit = global_container_stack.getBottom().getProperty("layer_height", "unit")
|
|
||||||
if not unit:
|
|
||||||
unit = ""
|
|
||||||
|
|
||||||
# group all quality items according to quality_types, so we know which profile suits the currently
|
|
||||||
# active machine and material, and later yield the right ones.
|
|
||||||
tmp_all_quality_items = OrderedDict()
|
|
||||||
for item in super()._recomputeItems():
|
|
||||||
profiles = container_registry.findContainersMetadata(id = item["id"])
|
|
||||||
if not profiles or "quality_type" not in profiles[0]:
|
|
||||||
quality_type = ""
|
|
||||||
else:
|
|
||||||
quality_type = profiles[0]["quality_type"]
|
|
||||||
|
|
||||||
if quality_type not in tmp_all_quality_items:
|
|
||||||
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:
|
|
||||||
tmp_all_quality_items[quality_type]["suitable_container"] = item
|
|
||||||
|
|
||||||
# reverse the ordering (finest first, coarsest last)
|
|
||||||
all_quality_items = OrderedDict()
|
|
||||||
for key in reversed(tmp_all_quality_items.keys()):
|
|
||||||
all_quality_items[key] = tmp_all_quality_items[key]
|
|
||||||
|
|
||||||
# First the suitable containers are set in the model
|
|
||||||
containers = []
|
|
||||||
for data_item in all_quality_items.values():
|
|
||||||
suitable_item = data_item["suitable_container"]
|
|
||||||
if suitable_item is not None:
|
|
||||||
containers.append(suitable_item)
|
|
||||||
|
|
||||||
# Once the suitable containers are collected, the rest of the containers are appended
|
|
||||||
for data_item in all_quality_items.values():
|
|
||||||
for item in data_item["all_containers"]:
|
|
||||||
if item not in containers:
|
|
||||||
containers.append(item)
|
|
||||||
|
|
||||||
# Now all the containers are set
|
|
||||||
for item in containers:
|
|
||||||
profile = container_registry.findContainers(id = item["id"])
|
|
||||||
|
|
||||||
# When for some reason there is no profile container in the registry
|
|
||||||
if not profile:
|
|
||||||
self._setItemLayerHeight(item, "", "")
|
|
||||||
item["available"] = False
|
|
||||||
yield item
|
|
||||||
continue
|
|
||||||
|
|
||||||
profile = profile[0]
|
|
||||||
|
|
||||||
# When there is a profile but it's an empty quality should. It's shown in the list (they are "Not Supported" profiles)
|
|
||||||
if profile.getId() == "empty_quality":
|
|
||||||
self._setItemLayerHeight(item, "", "")
|
|
||||||
item["available"] = True
|
|
||||||
yield item
|
|
||||||
continue
|
|
||||||
|
|
||||||
item["available"] = profile in qualities
|
|
||||||
|
|
||||||
# Easy case: This profile defines its own layer height.
|
|
||||||
if profile.hasProperty("layer_height", "value"):
|
|
||||||
self._setItemLayerHeight(item, profile.getProperty("layer_height", "value"), unit)
|
|
||||||
yield item
|
|
||||||
continue
|
|
||||||
|
|
||||||
machine_manager = Application.getInstance().getMachineManager()
|
|
||||||
|
|
||||||
# Quality-changes profile that has no value for layer height. Get the corresponding quality profile and ask that profile.
|
|
||||||
quality_type = profile.getMetaDataEntry("quality_type", None)
|
|
||||||
if quality_type:
|
|
||||||
quality_results = machine_manager.determineQualityAndQualityChangesForQualityType(quality_type)
|
|
||||||
for quality_result in quality_results:
|
|
||||||
if quality_result["stack"] is global_container_stack:
|
|
||||||
quality = quality_result["quality"]
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
# No global container stack in the results:
|
|
||||||
if quality_results:
|
|
||||||
# Take any of the extruders.
|
|
||||||
quality = quality_results[0]["quality"]
|
|
||||||
else:
|
|
||||||
quality = None
|
|
||||||
if quality and quality.hasProperty("layer_height", "value"):
|
|
||||||
self._setItemLayerHeight(item, quality.getProperty("layer_height", "value"), unit)
|
|
||||||
yield item
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Quality has no value for layer height either. Get the layer height from somewhere lower in the stack.
|
|
||||||
skip_until_container = global_container_stack.material
|
|
||||||
if not skip_until_container or skip_until_container == ContainerRegistry.getInstance().getEmptyInstanceContainer(): # No material in stack.
|
|
||||||
skip_until_container = global_container_stack.variant
|
|
||||||
if not skip_until_container or skip_until_container == ContainerRegistry.getInstance().getEmptyInstanceContainer(): # No variant in stack.
|
|
||||||
skip_until_container = global_container_stack.getBottom()
|
|
||||||
self._setItemLayerHeight(item, global_container_stack.getRawProperty("layer_height", "value", skip_until_container = skip_until_container.getId()), unit) # Fall through to the currently loaded material.
|
|
||||||
yield item
|
|
||||||
|
|
||||||
## Get a list of extruder stacks with the active extruder at the front of the list.
|
|
||||||
@staticmethod
|
|
||||||
def _getOrderedExtruderStacksList() -> List["ExtruderStack"]:
|
|
||||||
extruder_manager = ExtruderManager.getInstance()
|
|
||||||
extruder_stacks = extruder_manager.getActiveExtruderStacks()
|
|
||||||
active_extruder = extruder_manager.getActiveExtruderStack()
|
|
||||||
|
|
||||||
if active_extruder in extruder_stacks:
|
|
||||||
extruder_stacks.remove(active_extruder)
|
|
||||||
extruder_stacks = [active_extruder] + extruder_stacks
|
|
||||||
|
|
||||||
return extruder_stacks
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _setItemLayerHeight(item, value, unit):
|
|
||||||
item["layer_height"] = str(value) + unit
|
|
||||||
item["layer_height_without_unit"] = str(value)
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
# Copyright (c) 2016 Ultimaker B.V.
|
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
|
||||||
from UM.Application import Application
|
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
|
||||||
|
|
||||||
from cura.QualityManager import QualityManager
|
|
||||||
from cura.Settings.ProfilesModel import ProfilesModel
|
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
|
||||||
|
|
||||||
|
|
||||||
## QML Model for listing the current list of valid quality and quality changes profiles.
|
|
||||||
#
|
|
||||||
class QualityAndUserProfilesModel(ProfilesModel):
|
|
||||||
def __init__(self, parent = None):
|
|
||||||
super().__init__(parent)
|
|
||||||
|
|
||||||
self._empty_quality = ContainerRegistry.getInstance().findInstanceContainers(id = "empty_quality")[0]
|
|
||||||
|
|
||||||
## Fetch the list of containers to display.
|
|
||||||
#
|
|
||||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
|
||||||
def _fetchInstanceContainers(self):
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
|
||||||
if not global_container_stack:
|
|
||||||
return {}, {}
|
|
||||||
|
|
||||||
# Fetch the list of quality changes.
|
|
||||||
quality_manager = QualityManager.getInstance()
|
|
||||||
machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.definition)
|
|
||||||
quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition)
|
|
||||||
|
|
||||||
extruder_manager = ExtruderManager.getInstance()
|
|
||||||
active_extruder = extruder_manager.getActiveExtruderStack()
|
|
||||||
extruder_stacks = self._getOrderedExtruderStacksList()
|
|
||||||
|
|
||||||
# Fetch the list of usable qualities across all extruders.
|
|
||||||
# The actual list of quality profiles come from the first extruder in the extruder list.
|
|
||||||
quality_list = quality_manager.findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks)
|
|
||||||
|
|
||||||
# Filter the quality_change by the list of available quality_types
|
|
||||||
quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list])
|
|
||||||
# Also show custom profiles based on "Not Supported" quality profile
|
|
||||||
quality_type_set.add(self._empty_quality.getMetaDataEntry("quality_type"))
|
|
||||||
filtered_quality_changes = {qc.getId(): qc for qc in quality_changes_list if
|
|
||||||
qc.getMetaDataEntry("quality_type") in quality_type_set and
|
|
||||||
qc.getMetaDataEntry("extruder") is not None and
|
|
||||||
(qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or
|
|
||||||
qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())}
|
|
||||||
|
|
||||||
result = filtered_quality_changes
|
|
||||||
for q in quality_list:
|
|
||||||
if q.getId() != "empty_quality":
|
|
||||||
result[q.getId()] = q
|
|
||||||
return result, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet.
|
|
|
@ -1,85 +0,0 @@
|
||||||
# Copyright (c) 2017 Ultimaker B.V.
|
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
|
||||||
|
|
||||||
from UM.Application import Application
|
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
|
||||||
|
|
||||||
from cura.QualityManager import QualityManager
|
|
||||||
from cura.Settings.ProfilesModel import ProfilesModel
|
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
|
||||||
|
|
||||||
## QML Model for listing the current list of valid quality changes profiles.
|
|
||||||
#
|
|
||||||
class UserProfilesModel(ProfilesModel):
|
|
||||||
def __init__(self, parent = None):
|
|
||||||
super().__init__(parent)
|
|
||||||
|
|
||||||
#Need to connect to the metaDataChanged signal of the active materials.
|
|
||||||
self.__current_extruders = []
|
|
||||||
self.__current_materials = []
|
|
||||||
|
|
||||||
Application.getInstance().getExtruderManager().extrudersChanged.connect(self.__onExtrudersChanged)
|
|
||||||
self.__onExtrudersChanged()
|
|
||||||
self.__current_materials = [extruder.material for extruder in self.__current_extruders]
|
|
||||||
for material in self.__current_materials:
|
|
||||||
material.metaDataChanged.connect(self._onContainerChanged)
|
|
||||||
|
|
||||||
self._empty_quality = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
|
|
||||||
|
|
||||||
## Fetch the list of containers to display.
|
|
||||||
#
|
|
||||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
|
||||||
def _fetchInstanceContainers(self):
|
|
||||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
|
||||||
if not global_container_stack:
|
|
||||||
return {}, {}
|
|
||||||
|
|
||||||
# Fetch the list of quality changes.
|
|
||||||
quality_manager = QualityManager.getInstance()
|
|
||||||
machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.definition)
|
|
||||||
quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition)
|
|
||||||
|
|
||||||
extruder_manager = ExtruderManager.getInstance()
|
|
||||||
active_extruder = extruder_manager.getActiveExtruderStack()
|
|
||||||
extruder_stacks = self._getOrderedExtruderStacksList()
|
|
||||||
|
|
||||||
# Fetch the list of usable qualities across all extruders.
|
|
||||||
# The actual list of quality profiles come from the first extruder in the extruder list.
|
|
||||||
quality_list = quality_manager.findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks)
|
|
||||||
|
|
||||||
# Filter the quality_change by the list of available quality_types
|
|
||||||
quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list])
|
|
||||||
quality_type_set.add(self._empty_quality.getMetaDataEntry("quality_type"))
|
|
||||||
|
|
||||||
filtered_quality_changes = {qc.getId():qc for qc in quality_changes_list if
|
|
||||||
qc.getMetaDataEntry("quality_type") in quality_type_set and
|
|
||||||
qc.getMetaDataEntry("extruder") is not None and
|
|
||||||
(qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or
|
|
||||||
qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())}
|
|
||||||
|
|
||||||
return filtered_quality_changes, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet.
|
|
||||||
|
|
||||||
## Called when a container changed on an extruder stack.
|
|
||||||
#
|
|
||||||
# If it's the material we need to connect to the metaDataChanged signal of
|
|
||||||
# that.
|
|
||||||
def __onContainerChanged(self, new_container):
|
|
||||||
#Careful not to update when a quality or quality changes profile changed!
|
|
||||||
#If you then update you're going to have an infinite recursion because the update may change the container.
|
|
||||||
if new_container.getMetaDataEntry("type") == "material":
|
|
||||||
for material in self.__current_materials:
|
|
||||||
material.metaDataChanged.disconnect(self._onContainerChanged)
|
|
||||||
self.__current_materials = [extruder.material for extruder in self.__current_extruders]
|
|
||||||
for material in self.__current_materials:
|
|
||||||
material.metaDataChanged.connect(self._onContainerChanged)
|
|
||||||
|
|
||||||
## Called when the current set of extruders change.
|
|
||||||
#
|
|
||||||
# This makes sure that we are listening to the signal for when the
|
|
||||||
# materials change.
|
|
||||||
def __onExtrudersChanged(self):
|
|
||||||
for extruder in self.__current_extruders:
|
|
||||||
extruder.containersChanged.disconnect(self.__onContainerChanged)
|
|
||||||
self.__current_extruders = Application.getInstance().getExtruderManager().getExtruderStacks()
|
|
||||||
for extruder in self.__current_extruders:
|
|
||||||
extruder.containersChanged.connect(self.__onContainerChanged)
|
|
Loading…
Add table
Add a link
Reference in a new issue