diff --git a/cura/CuraActions.py b/cura/CuraActions.py index d6e5add912..4d121338d8 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -67,11 +67,15 @@ class CuraActions(QObject): current_node = parent_node parent_node = current_node.getParent() - # This was formerly done with SetTransformOperation but because of - # unpredictable matrix deconstruction it was possible that mirrors - # could manifest as rotations. Centering is therefore done by - # moving the node to negative whatever its position is: - center_operation = TranslateOperation(current_node, -current_node._position) + # Find out where the bottom of the object is + bbox = current_node.getBoundingBox() + if bbox: + center_y = current_node.getWorldPosition().y - bbox.bottom + else: + center_y = 0 + + # Move the object so that it's bottom is on to of the buildplate + center_operation = TranslateOperation(current_node, Vector(0, center_y, 0), set_position = True) operation.addOperation(center_operation) operation.push() diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 2a055b86ac..a9e570e0cb 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -507,7 +507,15 @@ class PauseAtHeight(Script): else: Logger.log("w", "No previous feedrate found in gcode, feedrate for next layer(s) might be incorrect") - prepend_gcode += self.putValue(M = 82) + " ; switch back to absolute E values\n" + extrusion_mode_string = "absolute" + extrusion_mode_numeric = 82 + + relative_extrusion = Application.getInstance().getGlobalContainerStack().getProperty("relative_extrusion", "value") + if relative_extrusion: + extrusion_mode_string = "relative" + extrusion_mode_numeric = 83 + + prepend_gcode += self.putValue(M = extrusion_mode_numeric) + " ; switch back to " + extrusion_mode_string + " E values\n" # reset extrude value to pre pause value prepend_gcode += self.putValue(G = 92, E = current_e) + "\n"