mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-03 12:03:57 -06:00
Fix referencing nodes for quality changes
Contributes to issue CURA-6600.
This commit is contained in:
parent
5fadc7019d
commit
5d8fff69e4
2 changed files with 29 additions and 14 deletions
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
||||||
|
|
||||||
from UM.Application import Application
|
import cura.CuraApplication
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Qt.ListModel import ListModel
|
from UM.Qt.ListModel import ListModel
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
@ -35,15 +35,13 @@ class QualitySettingsModel(ListModel):
|
||||||
self.addRoleName(self.CategoryRole, "category")
|
self.addRoleName(self.CategoryRole, "category")
|
||||||
|
|
||||||
self._container_registry = ContainerRegistry.getInstance()
|
self._container_registry = ContainerRegistry.getInstance()
|
||||||
self._application = Application.getInstance()
|
self._application = cura.CuraApplication.CuraApplication.getInstance()
|
||||||
self._quality_manager = self._application.getQualityManager()
|
self._application.getMachineManager().activeStackChanged.connect(self._update)
|
||||||
|
|
||||||
self._selected_position = self.GLOBAL_STACK_POSITION #Must be either GLOBAL_STACK_POSITION or an extruder position (0, 1, etc.)
|
self._selected_position = self.GLOBAL_STACK_POSITION #Must be either GLOBAL_STACK_POSITION or an extruder position (0, 1, etc.)
|
||||||
self._selected_quality_item = None # The selected quality in the quality management page
|
self._selected_quality_item = None # The selected quality in the quality management page
|
||||||
self._i18n_catalog = None
|
self._i18n_catalog = None
|
||||||
|
|
||||||
self._quality_manager.qualitiesUpdated.connect(self._update)
|
|
||||||
|
|
||||||
self._update()
|
self._update()
|
||||||
|
|
||||||
selectedPositionChanged = pyqtSignal()
|
selectedPositionChanged = pyqtSignal()
|
||||||
|
@ -99,15 +97,25 @@ class QualitySettingsModel(ListModel):
|
||||||
# Here, if the user has selected a quality changes, then "quality_changes_group" will not be None, and we fetch
|
# Here, if the user has selected a quality changes, then "quality_changes_group" will not be None, and we fetch
|
||||||
# the settings in that quality_changes_group.
|
# the settings in that quality_changes_group.
|
||||||
if quality_changes_group is not None:
|
if quality_changes_group is not None:
|
||||||
|
container_registry = ContainerRegistry.getInstance()
|
||||||
|
global_containers = container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])
|
||||||
|
global_container = None if len(global_containers) == 0 else global_containers[0]
|
||||||
|
extruders_containers = {pos: container_registry.findContainers(id = quality_changes_group.metadata_per_extruder[pos]["id"]) for pos in quality_changes_group.metadata_per_extruder}
|
||||||
|
extruders_container = {pos: None if not containers else containers[0] for pos, containers in extruders_containers.items()}
|
||||||
if self._selected_position == self.GLOBAL_STACK_POSITION:
|
if self._selected_position == self.GLOBAL_STACK_POSITION:
|
||||||
quality_changes_node = quality_changes_group.node_for_global
|
quality_changes_metadata = global_container.getMetaData()
|
||||||
else:
|
else:
|
||||||
quality_changes_node = quality_changes_group.nodes_for_extruders.get(str(self._selected_position))
|
quality_changes_metadata = extruders_container.get(str(self._selected_position))
|
||||||
if quality_changes_node is not None and quality_changes_node.container is not None: # it can be None if number of extruders are changed during runtime
|
if quality_changes_metadata is not None: # It can be None if number of extruders are changed during runtime.
|
||||||
quality_containers.insert(0, quality_changes_node.container)
|
container = container_registry.findContainers(id = quality_changes_metadata["id"])
|
||||||
settings_keys.update(quality_changes_group.getAllKeys())
|
if container:
|
||||||
|
quality_containers.insert(0, container[0])
|
||||||
|
|
||||||
# We iterate over all definitions instead of settings in a quality/qualtiy_changes group is because in the GUI,
|
settings_keys.update(global_container.getAllKeys())
|
||||||
|
for container in extruders_container.values():
|
||||||
|
settings_keys.update(container.getAllKeys())
|
||||||
|
|
||||||
|
# We iterate over all definitions instead of settings in a quality/quality_changes group is because in the GUI,
|
||||||
# the settings are grouped together by categories, and we had to go over all the definitions to figure out
|
# the settings are grouped together by categories, and we had to go over all the definitions to figure out
|
||||||
# which setting belongs in which category.
|
# which setting belongs in which category.
|
||||||
current_category = ""
|
current_category = ""
|
||||||
|
|
|
@ -1139,8 +1139,13 @@ class MachineManager(QObject):
|
||||||
if quality_group is None:
|
if quality_group is None:
|
||||||
self._fixQualityChangesGroupToNotSupported(quality_changes_group)
|
self._fixQualityChangesGroupToNotSupported(quality_changes_group)
|
||||||
|
|
||||||
|
container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
|
||||||
quality_changes_container = empty_quality_changes_container
|
quality_changes_container = empty_quality_changes_container
|
||||||
quality_container = empty_quality_container # type: Optional[InstanceContainer]
|
quality_container = empty_quality_container # type: Optional[InstanceContainer]
|
||||||
|
if quality_changes_group.metadata_for_global:
|
||||||
|
global_containers = container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])
|
||||||
|
if global_containers:
|
||||||
|
quality_changes_container = global_containers[0]
|
||||||
if quality_changes_group.node_for_global and quality_changes_group.node_for_global.container:
|
if quality_changes_group.node_for_global and quality_changes_group.node_for_global.container:
|
||||||
quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.container)
|
quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.container)
|
||||||
if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.container:
|
if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.container:
|
||||||
|
@ -1150,15 +1155,17 @@ class MachineManager(QObject):
|
||||||
self._global_container_stack.qualityChanges = quality_changes_container
|
self._global_container_stack.qualityChanges = quality_changes_container
|
||||||
|
|
||||||
for position, extruder in self._global_container_stack.extruders.items():
|
for position, extruder in self._global_container_stack.extruders.items():
|
||||||
quality_changes_node = quality_changes_group.nodes_for_extruders.get(position)
|
|
||||||
quality_node = None
|
quality_node = None
|
||||||
if quality_group is not None:
|
if quality_group is not None:
|
||||||
quality_node = quality_group.nodes_for_extruders.get(position)
|
quality_node = quality_group.nodes_for_extruders.get(position)
|
||||||
|
|
||||||
quality_changes_container = empty_quality_changes_container
|
quality_changes_container = empty_quality_changes_container
|
||||||
quality_container = empty_quality_container
|
quality_container = empty_quality_container
|
||||||
if quality_changes_node and quality_changes_node.container:
|
quality_changes_metadata = quality_changes_group.metadata_for_extruders.get(position)
|
||||||
quality_changes_container = cast(InstanceContainer, quality_changes_node.container)
|
if quality_changes_metadata:
|
||||||
|
containers = container_registry.findContainers(id = quality_changes_metadata["id"])
|
||||||
|
if containers:
|
||||||
|
quality_changes_container = cast(InstanceContainer, containers[0])
|
||||||
if quality_node and quality_node.container:
|
if quality_node and quality_node.container:
|
||||||
quality_container = quality_node.container
|
quality_container = quality_node.container
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue