CURA-4400 not sending objects that are printed with a disabled extruder

This commit is contained in:
Jack Ha 2018-02-28 12:56:39 +01:00
parent 86c13e86c7
commit f28bed9b4f
2 changed files with 20 additions and 7 deletions

View file

@ -43,6 +43,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
# The variant of the extruder. # The variant of the extruder.
VariantRole = Qt.UserRole + 7 VariantRole = Qt.UserRole + 7
StackRole = Qt.UserRole + 8
## List of colours to display if there is no material or the material has no known ## List of colours to display if there is no material or the material has no known
# colour. # colour.
@ -62,6 +63,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
self.addRoleName(self.DefinitionRole, "definition") self.addRoleName(self.DefinitionRole, "definition")
self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.MaterialRole, "material")
self.addRoleName(self.VariantRole, "variant") self.addRoleName(self.VariantRole, "variant")
self.addRoleName(self.StackRole, "stack")
self._update_extruder_timer = QTimer() self._update_extruder_timer = QTimer()
self._update_extruder_timer.setInterval(100) self._update_extruder_timer.setInterval(100)
@ -188,6 +190,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
"definition": extruder.getBottom().getId(), "definition": extruder.getBottom().getId(),
"material": extruder.material.getName() if extruder.material else "", "material": extruder.material.getName() if extruder.material else "",
"variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core "variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core
"stack": extruder,
} }
items.append(item) items.append(item)

View file

@ -110,6 +110,7 @@ class StartSliceJob(Job):
return return
stack = Application.getInstance().getGlobalContainerStack() stack = Application.getInstance().getGlobalContainerStack()
extruder_stack_id_to_position = {} # a lookup table because we need the position, not the id.
if not stack: if not stack:
self.setResult(StartJobResult.Error) self.setResult(StartJobResult.Error)
return return
@ -129,7 +130,8 @@ class StartSliceJob(Job):
self.setResult(StartJobResult.MaterialIncompatible) self.setResult(StartJobResult.MaterialIncompatible)
return return
for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(stack.getId()): for position, extruder_stack in stack.extruders.items():
extruder_stack_id_to_position[extruder_stack.getId()] = position
material = extruder_stack.findContainer({"type": "material"}) material = extruder_stack.findContainer({"type": "material"})
if material: if material:
if material.getMetaDataEntry("compatible") == False: if material.getMetaDataEntry("compatible") == False:
@ -193,11 +195,19 @@ class StartSliceJob(Job):
if per_object_stack: if per_object_stack:
is_non_printing_mesh = any(per_object_stack.getProperty(key, "value") for key in NON_PRINTING_MESH_SETTINGS) is_non_printing_mesh = any(per_object_stack.getProperty(key, "value") for key in NON_PRINTING_MESH_SETTINGS)
if node.callDecoration("getBuildPlateNumber") == self._build_plate_number: # Find a reason not to add the node
if not getattr(node, "_outside_buildarea", False) or is_non_printing_mesh: if node.callDecoration("getBuildPlateNumber") != self._build_plate_number:
temp_list.append(node) continue
if not is_non_printing_mesh: if getattr(node, "_outside_buildarea", False) and is_non_printing_mesh:
has_printing_mesh = True continue
node_extruder_id = node.callDecoration("getActiveExtruder")
node_position = extruder_stack_id_to_position.get(node_extruder_id, "0")
if not stack.extruders[str(node_position)].isEnabled:
continue
temp_list.append(node)
if not is_non_printing_mesh:
has_printing_mesh = True
Job.yieldThread() Job.yieldThread()
@ -382,7 +392,7 @@ class StartSliceJob(Job):
def _buildGlobalInheritsStackMessage(self, stack): def _buildGlobalInheritsStackMessage(self, stack):
for key in stack.getAllKeys(): for key in stack.getAllKeys():
extruder = int(round(float(stack.getProperty(key, "limit_to_extruder")))) extruder = int(round(float(stack.getProperty(key, "limit_to_extruder"))))
if extruder >= 0: #Set to a specific extruder. if extruder >= 0 and stack.extruders[str(extruder)].isEnabled: #Set to a specific extruder.
setting_extruder = self._slice_message.addRepeatedMessage("limit_to_extruder") setting_extruder = self._slice_message.addRepeatedMessage("limit_to_extruder")
setting_extruder.name = key setting_extruder.name = key
setting_extruder.extruder = extruder setting_extruder.extruder = extruder