Machine_id instead of definition_id is now used to link extruders

Contributes to CURA-1898
This commit is contained in:
Jaime van Kessel 2016-07-13 11:17:44 +02:00
parent 936617f2aa
commit 726eb97d9f
5 changed files with 21 additions and 22 deletions

View file

@ -37,7 +37,7 @@ class ExtruderManager(QObject):
if not UM.Application.getInstance().getGlobalContainerStack(): if not UM.Application.getInstance().getGlobalContainerStack():
return None #No active machine, so no active extruder. return None #No active machine, so no active extruder.
try: try:
return self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getBottom().getId()][str(self._active_extruder_index)].getId() return self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getId()][str(self._active_extruder_index)].getId()
except KeyError: #Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong. except KeyError: #Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong.
return None return None
@ -84,37 +84,35 @@ class ExtruderManager(QObject):
## Adds all extruders of a specific machine definition to the extruder ## Adds all extruders of a specific machine definition to the extruder
# manager. # manager.
# #
# \param machine_definition The machine to add the extruders for. # \param machine_definition The machine definition to add the extruders for.
def addMachineExtruders(self, machine_definition): # \param machine_id The machine_id to add the extruders for.
def addMachineExtruders(self, machine_definition, machine_id):
changed = False changed = False
machine_id = machine_definition.getId() machine_definition_id = machine_definition.getId()
if machine_id not in self._extruder_trains: if machine_id not in self._extruder_trains:
self._extruder_trains[machine_id] = { } self._extruder_trains[machine_id] = { }
changed = True changed = True
container_registry = UM.Settings.ContainerRegistry.getInstance() container_registry = UM.Settings.ContainerRegistry.getInstance()
if container_registry: if container_registry:
# Add the extruder trains that don't exist yet. # Add the extruder trains that don't exist yet.
for extruder_definition in container_registry.findDefinitionContainers(machine = machine_definition.getId()): for extruder_definition in container_registry.findDefinitionContainers(machine = machine_definition_id):
position = extruder_definition.getMetaDataEntry("position", None) position = extruder_definition.getMetaDataEntry("position", None)
if not position: if not position:
UM.Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.getId()) UM.Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.getId())
if not container_registry.findContainerStacks(machine = machine_id, position = position): # Doesn't exist yet. if not container_registry.findContainerStacks(machine = machine_id, position = position): # Doesn't exist yet.
self.createExtruderTrain(extruder_definition, machine_definition, position) self.createExtruderTrain(extruder_definition, machine_definition, position, machine_id)
changed = True changed = True
# Gets the extruder trains that we just created as well as any that still existed. # Gets the extruder trains that we just created as well as any that still existed.
extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_definition.getId()) extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_id)
for extruder_train in extruder_trains: for extruder_train in extruder_trains:
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train
# Ensure that the extruder train stacks are linked to global stack. # Ensure that the extruder train stacks are linked to global stack.
extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack()) extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack())
changed = True changed = True
if changed: if changed:
self.extrudersChanged.emit(machine_definition) self.extrudersChanged.emit(machine_id)
## Creates a container stack for an extruder train. ## Creates a container stack for an extruder train.
# #
@ -127,17 +125,18 @@ class ExtruderManager(QObject):
# \param extruder_definition The extruder to create the extruder train for. # \param extruder_definition The extruder to create the extruder train for.
# \param machine_definition The machine that the extruder train belongs to. # \param machine_definition The machine that the extruder train belongs to.
# \param position The position of this extruder train in the extruder slots of the machine. # \param position The position of this extruder train in the extruder slots of the machine.
def createExtruderTrain(self, extruder_definition, machine_definition, position): # \param machine_id The id of the "global" stack this extruder is linked to.
def createExtruderTrain(self, extruder_definition, machine_definition, position, machine_id):
# Cache some things. # Cache some things.
container_registry = UM.Settings.ContainerRegistry.getInstance() container_registry = UM.Settings.ContainerRegistry.getInstance()
machine_id = machine_definition.getId() machine_definition_id = machine_definition.getId()
# Create a container stack for this extruder. # Create a container stack for this extruder.
extruder_stack_id = container_registry.uniqueName(extruder_definition.getId()) extruder_stack_id = container_registry.uniqueName(extruder_definition.getId())
container_stack = UM.Settings.ContainerStack(extruder_stack_id) container_stack = UM.Settings.ContainerStack(extruder_stack_id)
container_stack.setName(extruder_definition.getName()) # Take over the display name to display the stack with. container_stack.setName(extruder_definition.getName()) # Take over the display name to display the stack with.
container_stack.addMetaDataEntry("type", "extruder_train") container_stack.addMetaDataEntry("type", "extruder_train")
container_stack.addMetaDataEntry("machine", machine_definition.getId()) container_stack.addMetaDataEntry("machine", machine_id)
container_stack.addMetaDataEntry("position", position) container_stack.addMetaDataEntry("position", position)
container_stack.addContainer(extruder_definition) container_stack.addContainer(extruder_definition)
@ -145,7 +144,7 @@ class ExtruderManager(QObject):
variant = container_registry.findInstanceContainers(id = "empty_variant")[0] variant = container_registry.findInstanceContainers(id = "empty_variant")[0]
if machine_definition.getMetaDataEntry("has_variants"): if machine_definition.getMetaDataEntry("has_variants"):
# First add any variant. Later, overwrite with preference if the preference is valid. # First add any variant. Later, overwrite with preference if the preference is valid.
variants = container_registry.findInstanceContainers(definition = machine_id, type = "variant") variants = container_registry.findInstanceContainers(definition = machine_definition_id, type = "variant")
if len(variants) >= 1: if len(variants) >= 1:
variant = variants[0] variant = variants[0]
preferred_variant_id = machine_definition.getMetaDataEntry("preferred_variant") preferred_variant_id = machine_definition.getMetaDataEntry("preferred_variant")
@ -163,9 +162,9 @@ class ExtruderManager(QObject):
if machine_definition.getMetaDataEntry("has_materials"): if machine_definition.getMetaDataEntry("has_materials"):
# First add any material. Later, overwrite with preference if the preference is valid. # First add any material. Later, overwrite with preference if the preference is valid.
if machine_definition.getMetaDataEntry("has_variant_materials", default = "False") == "True": if machine_definition.getMetaDataEntry("has_variant_materials", default = "False") == "True":
materials = container_registry.findInstanceContainers(type = "material", definition = machine_id, variant = variant.getId()) materials = container_registry.findInstanceContainers(type = "material", definition = machine_definition_id, variant = variant.getId())
else: else:
materials = container_registry.findInstanceContainers(type = "material", definition = machine_id) materials = container_registry.findInstanceContainers(type = "material", definition = machine_definition_id)
if len(materials) >= 1: if len(materials) >= 1:
material = materials[0] material = materials[0]
preferred_material_id = machine_definition.getMetaDataEntry("preferred_material") preferred_material_id = machine_definition.getMetaDataEntry("preferred_material")
@ -247,4 +246,4 @@ class ExtruderManager(QObject):
def _addCurrentMachineExtruders(self): def _addCurrentMachineExtruders(self):
global_stack = UM.Application.getInstance().getGlobalContainerStack() global_stack = UM.Application.getInstance().getGlobalContainerStack()
if global_stack and global_stack.getBottom(): if global_stack and global_stack.getBottom():
self.addMachineExtruders(global_stack.getBottom()) self.addMachineExtruders(global_stack.getBottom(), global_stack.getId())

View file

@ -115,7 +115,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
changed = True changed = True
manager = ExtruderManager.getInstance() manager = ExtruderManager.getInstance()
for extruder in manager.getMachineExtruders(global_container_stack.getBottom().getId()): for extruder in manager.getMachineExtruders(global_container_stack.getId()):
extruder_name = extruder.getName() extruder_name = extruder.getName()
material = extruder.findContainer({ "type": "material" }) material = extruder.findContainer({ "type": "material" })
if material: if material:

View file

@ -292,7 +292,7 @@ class MachineManager(QObject):
new_global_stack.addContainer(quality_instance_container) new_global_stack.addContainer(quality_instance_container)
new_global_stack.addContainer(current_settings_instance_container) new_global_stack.addContainer(current_settings_instance_container)
ExtruderManager.getInstance().addMachineExtruders(definition) ExtruderManager.getInstance().addMachineExtruders(definition, new_global_stack.getId())
Application.getInstance().setGlobalContainerStack(new_global_stack) Application.getInstance().setGlobalContainerStack(new_global_stack)

View file

@ -129,7 +129,7 @@ class StartSliceJob(Job):
self._buildGlobalSettingsMessage(stack) self._buildGlobalSettingsMessage(stack)
for extruder_stack in cura.Settings.ExtruderManager.getInstance().getMachineExtruders(stack.getBottom().getId()): for extruder_stack in cura.Settings.ExtruderManager.getInstance().getMachineExtruders(stack.getId()):
self._buildExtruderMessage(extruder_stack) self._buildExtruderMessage(extruder_stack)
for group in object_groups: for group in object_groups:

View file

@ -88,7 +88,7 @@ class GCodeWriter(MeshWriter):
data = {"global_quality": serialized} data = {"global_quality": serialized}
manager = ExtruderManager.getInstance() manager = ExtruderManager.getInstance()
for extruder in manager.getMachineExtruders(stack.getBottom().getId()): for extruder in manager.getMachineExtruders(stack.getId()):
extruder_quality = extruder.findContainer({"type": "quality"}) extruder_quality = extruder.findContainer({"type": "quality"})
flat_extruder_quality_id = machine_manager.duplicateContainer(extruder_quality.getId()) flat_extruder_quality_id = machine_manager.duplicateContainer(extruder_quality.getId())