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,11 +919,6 @@ class BuildVolume(SceneNode):
# \return The property of the specified setting in the specified extruder. # \return The property of the specified setting in the specified extruder.
def _getSettingFromExtruder(self, setting_key, extruder_setting_key, prop = "value"): def _getSettingFromExtruder(self, setting_key, extruder_setting_key, prop = "value"):
extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "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_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)]
extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]

View file

@ -47,6 +47,24 @@ class CuraStackBuilder:
new_global_stack.setName(generated_name) new_global_stack.setName(generated_name)
extruder_definition = registry.findDefinitionContainers(machine = machine_definition.getId())
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
)
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): for extruder_definition in registry.findDefinitionContainers(machine = machine_definition.id):
position = extruder_definition.getMetaDataEntry("position", None) position = extruder_definition.getMetaDataEntry("position", None)
if not position: if not position:
@ -62,7 +80,7 @@ class CuraStackBuilder:
variant = "default", variant = "default",
next_stack = new_global_stack next_stack = new_global_stack
) )
# new_global_stack.addExtruder(new_extruder) new_global_stack.addExtruder(new_extruder)
return new_global_stack return new_global_stack

View file

@ -193,6 +193,7 @@ class ExtruderManager(QObject):
if global_container_stack.getId() in self._extruder_trains: if global_container_stack.getId() in self._extruder_trains:
if str(self._active_extruder_index) in self._extruder_trains[global_container_stack.getId()]: 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 self._extruder_trains[global_container_stack.getId()][str(self._active_extruder_index)]
return None return None
## Get an extruder stack by index ## Get an extruder stack by index
@ -435,6 +436,10 @@ class ExtruderManager(QObject):
scene_root = Application.getInstance().getController().getScene().getRoot() 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 # 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()] meshes = [node for node in DepthFirstIterator(scene_root) if type(node) is SceneNode and node.isSelectable()]
for mesh in meshes: for mesh in meshes:

View file

@ -340,8 +340,6 @@ class MachineManager(QObject):
old_active_container_stack = self._active_container_stack old_active_container_stack = self._active_container_stack
self._active_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() 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() self._error_check_timer.start()