mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-09 06:45:09 -06:00
Merge branch 'refactoring_machine_manager' of github.com:Ultimaker/Cura into refactoring_machine_manager
This commit is contained in:
commit
a2f3cdc0be
6 changed files with 43 additions and 35 deletions
|
@ -1,16 +1,17 @@
|
|||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from UM.Logger import Logger
|
||||
from typing import Optional
|
||||
|
||||
from UM.Logger import Logger
|
||||
from UM.Settings.Interfaces import DefinitionContainerInterface
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Util import parseBool
|
||||
|
||||
from cura.Machines.VariantManager import VariantType
|
||||
from .GlobalStack import GlobalStack
|
||||
from .ExtruderStack import ExtruderStack
|
||||
from typing import Optional
|
||||
|
||||
|
||||
## Contains helper functions to create new machines.
|
||||
|
@ -37,18 +38,32 @@ class CuraStackBuilder:
|
|||
|
||||
machine_definition = definitions[0]
|
||||
|
||||
# get variant container for the global stack
|
||||
global_variant_container = application.empty_variant_container
|
||||
if parseBool(machine_definition.getMetaDataEntry("has_variant_buildplates", False)):
|
||||
global_variant_name = machine_definition.getMetaDataEntry("preferred_variant_buildplate_name")
|
||||
if global_variant_name:
|
||||
variant_node = variant_manager.getVariantNode(definition_id, global_variant_name,
|
||||
variant_type = VariantType.BUILD_PLATE)
|
||||
if variant_node is None:
|
||||
raise RuntimeError("Cannot find buildplate variant with definition [%s] and variant name [%s]" %
|
||||
(definition_id, global_variant_name))
|
||||
global_variant_container = variant_node.getContainer()
|
||||
|
||||
|
||||
# get variant container for extruders
|
||||
variant_container = application.empty_variant_container
|
||||
extruder_variant_container = application.empty_variant_container
|
||||
# Only look for the preferred variant if this machine has variants
|
||||
variant_name = None
|
||||
extruder_variant_name = None
|
||||
if parseBool(machine_definition.getMetaDataEntry("has_variants", False)):
|
||||
variant_name = machine_definition.getMetaDataEntry("preferred_variant_name")
|
||||
if variant_name:
|
||||
variant_node = variant_manager.getVariantNode(definition_id, variant_name)
|
||||
extruder_variant_name = machine_definition.getMetaDataEntry("preferred_variant_name")
|
||||
if extruder_variant_name:
|
||||
variant_node = variant_manager.getVariantNode(definition_id, extruder_variant_name)
|
||||
# Sanity check. If you see this error, the related definition files should be fixed.
|
||||
if variant_node is None:
|
||||
raise RuntimeError("Cannot find variant with definition [%s] and variant name [%s]" % (definition_id, variant_name))
|
||||
variant_container = variant_node.getContainer()
|
||||
raise RuntimeError("Cannot find extruder variant with definition [%s] and variant name [%s]" %
|
||||
(definition_id, extruder_variant_name))
|
||||
extruder_variant_container = variant_node.getContainer()
|
||||
|
||||
# get material container for extruders
|
||||
material_container = application.empty_material_container
|
||||
|
@ -58,11 +73,11 @@ class CuraStackBuilder:
|
|||
approximate_material_diameter = str(round(material_diameter))
|
||||
root_material_id = machine_definition.getMetaDataEntry("preferred_material")
|
||||
root_material_id = material_manager.getRootMaterialIDForDiameter(root_material_id, approximate_material_diameter)
|
||||
material_node = material_manager.getMaterialNode(definition_id, variant_name, material_diameter, root_material_id)
|
||||
material_node = material_manager.getMaterialNode(definition_id, extruder_variant_name, material_diameter, root_material_id)
|
||||
# Sanity check. If you see this error, the related definition files should be fixed.
|
||||
if not material_node:
|
||||
raise RuntimeError("Cannot find material with definition [%s], variant_name [%s], and root_material_id [%s]" %
|
||||
(definition_id, variant_name, root_material_id))
|
||||
raise RuntimeError("Cannot find material with definition [%s], extruder_variant_name [%s], and root_material_id [%s]" %
|
||||
(definition_id, extruder_variant_name, root_material_id))
|
||||
material_container = material_node.getContainer()
|
||||
|
||||
generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName())
|
||||
|
@ -75,7 +90,7 @@ class CuraStackBuilder:
|
|||
new_global_stack = cls.createGlobalStack(
|
||||
new_stack_id = generated_name,
|
||||
definition = machine_definition,
|
||||
variant_container = application.empty_variant_container, # TODO: fix for build plate
|
||||
variant_container = global_variant_container,
|
||||
material_container = application.empty_material_container,
|
||||
quality_container = application.empty_quality_container,
|
||||
)
|
||||
|
@ -99,9 +114,10 @@ class CuraStackBuilder:
|
|||
extruder_definition = extruder_definition,
|
||||
machine_definition_id = definition_id,
|
||||
position = position,
|
||||
variant_container = variant_container,
|
||||
variant_container = extruder_variant_container,
|
||||
material_container = material_container,
|
||||
quality_container = application.empty_quality_container,
|
||||
global_stack = new_global_stack,
|
||||
)
|
||||
new_extruder.setNextStack(new_global_stack)
|
||||
new_global_stack.addExtruder(new_extruder)
|
||||
|
@ -133,11 +149,11 @@ class CuraStackBuilder:
|
|||
@classmethod
|
||||
def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, machine_definition_id: str,
|
||||
position: int,
|
||||
variant_container, material_container, quality_container) -> ExtruderStack:
|
||||
variant_container, material_container, quality_container, global_stack) -> ExtruderStack:
|
||||
from cura.CuraApplication import CuraApplication
|
||||
application = CuraApplication.getInstance()
|
||||
|
||||
stack = ExtruderStack(new_stack_id)
|
||||
stack = ExtruderStack(new_stack_id, parent = global_stack)
|
||||
stack.setName(extruder_definition.getName())
|
||||
stack.setDefinition(extruder_definition)
|
||||
|
||||
|
|
|
@ -36,22 +36,15 @@ class ExtruderManager(QObject):
|
|||
self._global_container_stack_definition_id = None
|
||||
self._addCurrentMachineExtruders()
|
||||
|
||||
Application.getInstance().globalContainerStackChanged.connect(self.__globalContainerStackChanged)
|
||||
#Application.getInstance().globalContainerStackChanged.connect(self._globalContainerStackChanged)
|
||||
Selection.selectionChanged.connect(self.resetSelectedObjectExtruders)
|
||||
|
||||
## Signal to notify other components when the list of extruders for a machine definition changes.
|
||||
extrudersChanged = pyqtSignal(QVariant)
|
||||
|
||||
## Signal to notify other components when the global container stack is switched to a definition
|
||||
# that has different extruders than the previous global container stack
|
||||
globalContainerStackDefinitionChanged = pyqtSignal()
|
||||
|
||||
## Notify when the user switches the currently active extruder.
|
||||
activeExtruderChanged = pyqtSignal()
|
||||
|
||||
## The signal notifies subscribers if extruders are added
|
||||
extrudersAdded = pyqtSignal()
|
||||
|
||||
## Gets the unique identifier of the currently active extruder stack.
|
||||
#
|
||||
# The currently active extruder stack is the stack that is currently being
|
||||
|
@ -371,11 +364,10 @@ class ExtruderManager(QObject):
|
|||
|
||||
return result[:machine_extruder_count]
|
||||
|
||||
def __globalContainerStackChanged(self) -> None:
|
||||
def _globalContainerStackChanged(self) -> None:
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if global_container_stack and global_container_stack.getBottom() and global_container_stack.getBottom().getId() != self._global_container_stack_definition_id:
|
||||
self._global_container_stack_definition_id = global_container_stack.getBottom().getId()
|
||||
self.globalContainerStackDefinitionChanged.emit()
|
||||
|
||||
# If the global container changed, the machine changed and might have extruders that were not registered yet
|
||||
self._addCurrentMachineExtruders()
|
||||
|
@ -415,7 +407,6 @@ class ExtruderManager(QObject):
|
|||
|
||||
if extruders_changed:
|
||||
self.extrudersChanged.emit(global_stack_id)
|
||||
self.extrudersAdded.emit()
|
||||
self.setActiveExtruderIndex(0)
|
||||
|
||||
## Get all extruder values for a certain setting.
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
from typing import Any, TYPE_CHECKING, Optional
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Decorators import override
|
||||
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
|
||||
from UM.Settings.ContainerStack import ContainerStack
|
||||
|
@ -34,7 +33,7 @@ class ExtruderStack(CuraContainerStack):
|
|||
#
|
||||
# This will set the next stack and ensure that we register this stack as an extruder.
|
||||
@override(ContainerStack)
|
||||
def setNextStack(self, stack: ContainerStack) -> None:
|
||||
def setNextStack(self, stack: CuraContainerStack) -> None:
|
||||
super().setNextStack(stack)
|
||||
stack.addExtruder(self)
|
||||
self.addMetaDataEntry("machine", stack.id)
|
||||
|
|
|
@ -283,6 +283,7 @@ class MachineManager(QObject):
|
|||
containers = container_registry.findContainerStacks(id = stack_id)
|
||||
if containers:
|
||||
Application.getInstance().setGlobalContainerStack(containers[0])
|
||||
ExtruderManager.getInstance()._globalContainerStackChanged()
|
||||
|
||||
self.__emitChangedSignals()
|
||||
|
||||
|
@ -877,9 +878,10 @@ class MachineManager(QObject):
|
|||
|
||||
@pyqtSlot(int, result = QObject)
|
||||
def getExtruder(self, position: int):
|
||||
extruder = None
|
||||
if self._global_container_stack:
|
||||
return self._global_container_stack.extruders.get(str(position))
|
||||
return None
|
||||
extruder = self._global_container_stack.extruders.get(str(position))
|
||||
return extruder
|
||||
|
||||
def _onMachineNameChanged(self):
|
||||
self.globalContainerChanged.emit()
|
||||
|
|
|
@ -88,7 +88,6 @@ class CuraEngineBackend(QObject, Backend):
|
|||
#
|
||||
self._global_container_stack = None
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
|
||||
Application.getInstance().getExtruderManager().extrudersAdded.connect(self._onGlobalStackChanged)
|
||||
self._onGlobalStackChanged()
|
||||
|
||||
Application.getInstance().stacksValidationFinished.connect(self._onStackErrorCheckFinished)
|
||||
|
|
|
@ -13,7 +13,8 @@ Menu
|
|||
title: "Nozzle"
|
||||
|
||||
property int extruderIndex: 0
|
||||
property var extruderStack: Cura.MachineManager.getExtruder(menu.extruderIndex)
|
||||
property QtObject extruderStack: Cura.MachineManager.getExtruder(menu.extruderIndex)
|
||||
property bool hasExtruderStack: extruderStack != null
|
||||
|
||||
Cura.NozzleModel
|
||||
{
|
||||
|
@ -24,7 +25,7 @@ Menu
|
|||
{
|
||||
target: Cura.MachineManager
|
||||
onGlobalContainerChanged: {
|
||||
menu.extruderStack = Cura.MachineManager.getExtruder(extruderIndex);
|
||||
menu.extruderStack = Cura.MachineManager.getExtruder(menu.extruderIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +37,7 @@ Menu
|
|||
{
|
||||
text: model.hotend_name
|
||||
checkable: true
|
||||
checked: extruderStack.variant.name == model.hotend_name
|
||||
checked: menu.hasExtruderStack && extruderStack.variant.name == model.hotend_name
|
||||
exclusiveGroup: group
|
||||
onTriggered: {
|
||||
Cura.MachineManager.setVariantGroup(extruderIndex, model.container_node);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue