Create own quality changes profiles instead of asking quality manager

It was a protected function call on a different class anyway, so that should never have gotten accepted.

Contributes to issue CURA-6600.
This commit is contained in:
Ghostkeeper 2019-09-05 17:26:48 +02:00
parent 9a6f76c069
commit 71b94f6d5b
No known key found for this signature in database
GPG key ID: 86BEF881AE2CF276
2 changed files with 26 additions and 9 deletions

View file

@ -20,7 +20,9 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.ContainerStack import ContainerStack from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
import cura.CuraApplication import cura.CuraApplication
from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.MaterialManager import MaterialManager from cura.Machines.MaterialManager import MaterialManager
if TYPE_CHECKING: if TYPE_CHECKING:
@ -271,24 +273,30 @@ class ContainerManager(QObject):
# \return \type{bool} True if successful, False if not. # \return \type{bool} True if successful, False if not.
@pyqtSlot(result = bool) @pyqtSlot(result = bool)
def updateQualityChanges(self) -> bool: def updateQualityChanges(self) -> bool:
global_stack = cura.CuraApplication.CuraApplication.getInstance().getMachineManager().activeMachine application = cura.CuraApplication.CuraApplication.getInstance()
global_stack = application.getMachineManager().activeMachine
if not global_stack: if not global_stack:
return False return False
cura.CuraApplication.CuraApplication.getInstance().getMachineManager().blurSettings.emit() application.getMachineManager().blurSettings.emit()
current_quality_changes_name = global_stack.qualityChanges.getName() current_quality_changes_name = global_stack.qualityChanges.getName()
current_quality_type = global_stack.quality.getMetaDataEntry("quality_type") current_quality_type = global_stack.quality.getMetaDataEntry("quality_type")
extruder_stacks = list(global_stack.extruders.values()) extruder_stacks = list(global_stack.extruders.values())
container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry() container_registry = cura.CuraApplication.CuraApplication.getInstance().getContainerRegistry()
quality_manager = QualityManager.getInstance() machine_definition_id = ContainerTree.getInstance().definitions[global_stack.definition.getId()].quality_definition
for stack in [global_stack] + extruder_stacks: for stack in [global_stack] + extruder_stacks:
# Find the quality_changes container for this stack and merge the contents of the top container into it. # Find the quality_changes container for this stack and merge the contents of the top container into it.
quality_changes = stack.qualityChanges quality_changes = stack.qualityChanges
if quality_changes.getId() == "empty_quality_changes": if quality_changes.getId() == "empty_quality_changes":
quality_changes = quality_manager._createQualityChanges(current_quality_type, current_quality_changes_name, quality_changes = InstanceContainer(container_registry.uniqueName((stack.getId() + "_" + current_quality_changes_name).lower().replace(" ", "_")))
global_stack, stack) quality_changes.setName(current_quality_changes_name)
quality_changes.setMetaDataEntry("type", "quality_changes")
quality_changes.setMetaDataEntry("quality_type", current_quality_type)
quality_changes.setMetaDataEntry("position", stack.getMetaDataEntry("position"))
quality_changes.setMetaDataEntry("setting_version", application.SettingVersion)
quality_changes.setDefinition(machine_definition_id)
container_registry.addContainer(quality_changes) container_registry.addContainer(quality_changes)
stack.qualityChanges = quality_changes stack.qualityChanges = quality_changes

View file

@ -116,17 +116,22 @@ class GCodeWriter(MeshWriter):
# \return A serialised string of the settings. # \return A serialised string of the settings.
def _serialiseSettings(self, stack): def _serialiseSettings(self, stack):
container_registry = self._application.getContainerRegistry() container_registry = self._application.getContainerRegistry()
quality_manager = self._application.getQualityManager()
prefix = self._setting_keyword + str(GCodeWriter.version) + " " # The prefix to put before each line. prefix = self._setting_keyword + str(GCodeWriter.version) + " " # The prefix to put before each line.
prefix_length = len(prefix) prefix_length = len(prefix)
quality_type = stack.quality.getMetaDataEntry("quality_type") quality_type = stack.quality.getMetaDataEntry("quality_type")
container_with_profile = stack.qualityChanges container_with_profile = stack.qualityChanges
machine_definition_id_for_quality = ContainerTree.getInstance().machines[stack.definition.getId()].quality_definition
if container_with_profile.getId() == "empty_quality_changes": if container_with_profile.getId() == "empty_quality_changes":
# If the global quality changes is empty, create a new one # If the global quality changes is empty, create a new one
quality_name = container_registry.uniqueName(stack.quality.getName()) quality_name = container_registry.uniqueName(stack.quality.getName())
container_with_profile = quality_manager._createQualityChanges(quality_type, quality_name, stack, None) quality_id = container_registry.uniqueName((stack.definition.getId() + "_" + quality_name).lower().replace(" ", "_"))
container_with_profile = InstanceContainer(quality_id)
container_with_profile.setName(quality_name)
container_with_profile.setMetaDataEntry("type", "quality_changes")
container_with_profile.setMetaDataEntry("quality_type", quality_type)
container_with_profile.setDefinition(machine_definition_id_for_quality)
flat_global_container = self._createFlattenedContainerInstance(stack.userChanges, container_with_profile) flat_global_container = self._createFlattenedContainerInstance(stack.userChanges, container_with_profile)
# If the quality changes is not set, we need to set type manually # If the quality changes is not set, we need to set type manually
@ -138,7 +143,6 @@ class GCodeWriter(MeshWriter):
flat_global_container.setMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal")) flat_global_container.setMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal"))
# Get the machine definition ID for quality profiles # Get the machine definition ID for quality profiles
machine_definition_id_for_quality = ContainerTree.getInstance().machines[stack.definition.getId()].quality_definition
flat_global_container.setMetaDataEntry("definition", machine_definition_id_for_quality) flat_global_container.setMetaDataEntry("definition", machine_definition_id_for_quality)
serialized = flat_global_container.serialize() serialized = flat_global_container.serialize()
@ -150,7 +154,12 @@ class GCodeWriter(MeshWriter):
if extruder_quality.getId() == "empty_quality_changes": if extruder_quality.getId() == "empty_quality_changes":
# Same story, if quality changes is empty, create a new one # Same story, if quality changes is empty, create a new one
quality_name = container_registry.uniqueName(stack.quality.getName()) quality_name = container_registry.uniqueName(stack.quality.getName())
extruder_quality = quality_manager._createQualityChanges(quality_type, quality_name, stack, None) quality_id = container_registry.uniqueName((stack.definition.getId() + "_" + quality_name).lower().replace(" ", "_"))
extruder_quality = InstanceContainer(quality_id)
extruder_quality.setName(quality_name)
extruder_quality.setMetaDataEntry("type", "quality_changes")
extruder_quality.setMetaDataEntry("quality_type", quality_type)
extruder_quality.setDefinition(machine_definition_id_for_quality)
flat_extruder_quality = self._createFlattenedContainerInstance(extruder.userChanges, extruder_quality) flat_extruder_quality = self._createFlattenedContainerInstance(extruder.userChanges, extruder_quality)
# If the quality changes is not set, we need to set type manually # If the quality changes is not set, we need to set type manually