Create extruder stack for single extrusion machines when adding new machine - CURA-4482

This commit is contained in:
ChrisTerBeke 2017-10-31 09:49:24 +01:00
parent 9806ec7374
commit f36c9ffbc0
4 changed files with 37 additions and 21 deletions

View file

@ -919,13 +919,8 @@ class BuildVolume(SceneNode):
# \return The property of the specified setting in the specified extruder.
def _getSettingFromExtruder(self, setting_key, extruder_setting_key, prop = "value"):
extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value")
# TODO: remove this - CURA-4482
if str(extruder_index) == "-1": # If extruder index is -1 use global instead
extruder_stack = self._global_container_stack
else:
extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)]
extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]
extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)]
extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]
value = extruder_stack.getProperty(setting_key, prop)
setting_type = extruder_stack.getProperty(setting_key, "type")

View file

@ -47,22 +47,40 @@ class CuraStackBuilder:
new_global_stack.setName(generated_name)
for extruder_definition in registry.findDefinitionContainers(machine = machine_definition.id):
position = extruder_definition.getMetaDataEntry("position", None)
if not position:
Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.id)
extruder_definition = registry.findDefinitionContainers(machine = machine_definition.getId())
new_extruder_id = registry.uniqueName(extruder_definition.id)
if not extruder_definition:
# create extruder stack for single extrusion machines that have no separate extruder definition files
extruder_definition = registry.findDefinitionContainers(id = "fdmextruder")
new_extruder_id = registry.uniqueName(machine_definition.getId() + " " + "fdmextruder")
new_extruder = cls.createExtruderStack(
new_extruder_id,
definition = extruder_definition,
machine_definition = machine_definition,
quality = "default",
material = "default",
variant = "default",
next_stack = new_global_stack
definition=extruder_definition,
machine_definition=machine_definition,
quality="default",
material="default",
variant="default",
next_stack=new_global_stack
)
# new_global_stack.addExtruder(new_extruder)
new_global_stack.addExtruder(new_extruder)
else:
# create extruder stack for each found extruder definition
for extruder_definition in registry.findDefinitionContainers(machine = machine_definition.id):
position = extruder_definition.getMetaDataEntry("position", None)
if not position:
Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.id)
new_extruder_id = registry.uniqueName(extruder_definition.id)
new_extruder = cls.createExtruderStack(
new_extruder_id,
definition = extruder_definition,
machine_definition = machine_definition,
quality = "default",
material = "default",
variant = "default",
next_stack = new_global_stack
)
new_global_stack.addExtruder(new_extruder)
return new_global_stack

View file

@ -193,6 +193,7 @@ class ExtruderManager(QObject):
if global_container_stack.getId() in self._extruder_trains:
if str(self._active_extruder_index) in self._extruder_trains[global_container_stack.getId()]:
return self._extruder_trains[global_container_stack.getId()][str(self._active_extruder_index)]
return None
## Get an extruder stack by index
@ -435,6 +436,10 @@ class ExtruderManager(QObject):
scene_root = Application.getInstance().getController().getScene().getRoot()
# If no extruders are registered in the extruder manager yet, return an empty array
if len(self.extruderIds) == 0:
return []
# Get the extruders of all printable meshes in the scene
meshes = [node for node in DepthFirstIterator(scene_root) if type(node) is SceneNode and node.isSelectable()]
for mesh in meshes:

View file

@ -340,8 +340,6 @@ class MachineManager(QObject):
old_active_container_stack = self._active_container_stack
self._active_container_stack = ExtruderManager.getInstance().getActiveExtruderStack()
# if not self._active_container_stack:
# self._active_container_stack = self._global_container_stack
self._error_check_timer.start()