mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-18 04:07:57 -06:00
Fix single extrusion machines without an ExtruderStack
CURA-5736
This commit is contained in:
parent
e5778be887
commit
ddc5d983a1
3 changed files with 56 additions and 4 deletions
|
@ -136,6 +136,50 @@ class CuraStackBuilder:
|
||||||
|
|
||||||
return new_global_stack
|
return new_global_stack
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def createExtruderStackWithDefaultSetup(cls, global_stack: "GlobalStack", extruder_position: int) -> None:
|
||||||
|
from cura.CuraApplication import CuraApplication
|
||||||
|
application = CuraApplication.getInstance()
|
||||||
|
variant_manager = application.getVariantManager()
|
||||||
|
material_manager = application.getMaterialManager()
|
||||||
|
registry = application.getContainerRegistry()
|
||||||
|
|
||||||
|
# get variant container for extruders
|
||||||
|
extruder_variant_container = application.empty_variant_container
|
||||||
|
extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE)
|
||||||
|
extruder_variant_name = None
|
||||||
|
if extruder_variant_node:
|
||||||
|
extruder_variant_container = extruder_variant_node.getContainer()
|
||||||
|
if not extruder_variant_container:
|
||||||
|
extruder_variant_container = application.empty_variant_container
|
||||||
|
extruder_variant_name = extruder_variant_container.getName()
|
||||||
|
|
||||||
|
extruder_definition_dict = global_stack.getMetaDataEntry("machine_extruder_trains")
|
||||||
|
extruder_definition_id = extruder_definition_dict[str(extruder_position)]
|
||||||
|
extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0]
|
||||||
|
|
||||||
|
# get material container for extruders
|
||||||
|
material_container = application.empty_material_container
|
||||||
|
material_node = material_manager.getDefaultMaterial(global_stack, extruder_position, extruder_variant_name,
|
||||||
|
extruder_definition = extruder_definition)
|
||||||
|
if material_node and material_node.getContainer():
|
||||||
|
material_container = material_node.getContainer()
|
||||||
|
|
||||||
|
new_extruder_id = registry.uniqueName(extruder_definition_id)
|
||||||
|
new_extruder = cls.createExtruderStack(
|
||||||
|
new_extruder_id,
|
||||||
|
extruder_definition = extruder_definition,
|
||||||
|
machine_definition_id = global_stack.definition.getId(),
|
||||||
|
position = extruder_position,
|
||||||
|
variant_container = extruder_variant_container,
|
||||||
|
material_container = material_container,
|
||||||
|
quality_container = application.empty_quality_container
|
||||||
|
)
|
||||||
|
new_extruder.setNextStack(global_stack)
|
||||||
|
global_stack.addExtruder(new_extruder)
|
||||||
|
|
||||||
|
registry.addContainer(new_extruder)
|
||||||
|
|
||||||
## Create a new Extruder stack
|
## Create a new Extruder stack
|
||||||
#
|
#
|
||||||
# \param new_stack_id The ID of the new stack.
|
# \param new_stack_id The ID of the new stack.
|
||||||
|
@ -157,7 +201,7 @@ class CuraStackBuilder:
|
||||||
stack.setName(extruder_definition.getName())
|
stack.setName(extruder_definition.getName())
|
||||||
stack.setDefinition(extruder_definition)
|
stack.setDefinition(extruder_definition)
|
||||||
|
|
||||||
stack.setMetaDataEntry("position", position)
|
stack.setMetaDataEntry("position", str(position))
|
||||||
|
|
||||||
user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id,
|
user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id,
|
||||||
is_global_stack = False)
|
is_global_stack = False)
|
||||||
|
|
|
@ -358,8 +358,15 @@ class ExtruderManager(QObject):
|
||||||
# "fdmextruder". We need to check a machine here so its extruder definition is correct according to this.
|
# "fdmextruder". We need to check a machine here so its extruder definition is correct according to this.
|
||||||
def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None:
|
def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None:
|
||||||
expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"]
|
expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"]
|
||||||
extruder_stack_0 = global_stack.extruders["0"]
|
extruder_stack_0 = global_stack.extruders.get("0")
|
||||||
if extruder_stack_0.definition.getId() != expected_extruder_definition_0_id:
|
|
||||||
|
if extruder_stack_0 is None:
|
||||||
|
Logger.log("i", "No extruder stack for global stack [%s], create one", global_stack.getId())
|
||||||
|
# Single extrusion machine without an ExtruderStack, create it
|
||||||
|
from cura.Settings.CuraStackBuilder import CuraStackBuilder
|
||||||
|
CuraStackBuilder.createExtruderStackWithDefaultSetup(global_stack, 0)
|
||||||
|
|
||||||
|
elif extruder_stack_0.definition.getId() != expected_extruder_definition_0_id:
|
||||||
Logger.log("e", "Single extruder printer [{printer}] expected extruder [{expected}], but got [{got}]. I'm making it [{expected}].".format(
|
Logger.log("e", "Single extruder printer [{printer}] expected extruder [{expected}], but got [{got}]. I'm making it [{expected}].".format(
|
||||||
printer = global_stack.getId(), expected = expected_extruder_definition_0_id, got = extruder_stack_0.definition.getId()))
|
printer = global_stack.getId(), expected = expected_extruder_definition_0_id, got = extruder_stack_0.definition.getId()))
|
||||||
container_registry = ContainerRegistry.getInstance()
|
container_registry = ContainerRegistry.getInstance()
|
||||||
|
|
|
@ -367,6 +367,7 @@ class MachineManager(QObject):
|
||||||
return
|
return
|
||||||
|
|
||||||
global_stack = containers[0]
|
global_stack = containers[0]
|
||||||
|
ExtruderManager.getInstance()._fixSingleExtrusionMachineExtruderDefinition(global_stack)
|
||||||
if not global_stack.isValid():
|
if not global_stack.isValid():
|
||||||
# Mark global stack as invalid
|
# Mark global stack as invalid
|
||||||
ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId())
|
ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId())
|
||||||
|
@ -375,7 +376,7 @@ class MachineManager(QObject):
|
||||||
self._global_container_stack = global_stack
|
self._global_container_stack = global_stack
|
||||||
self._application.setGlobalContainerStack(global_stack)
|
self._application.setGlobalContainerStack(global_stack)
|
||||||
ExtruderManager.getInstance()._globalContainerStackChanged()
|
ExtruderManager.getInstance()._globalContainerStackChanged()
|
||||||
self._initMachineState(containers[0])
|
self._initMachineState(global_stack)
|
||||||
self._onGlobalContainerChanged()
|
self._onGlobalContainerChanged()
|
||||||
|
|
||||||
self.__emitChangedSignals()
|
self.__emitChangedSignals()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue