From 743b8cd1567d90295807fa07efc990ccaed49c58 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 30 Aug 2019 15:53:23 +0200 Subject: [PATCH] Fix multi extrusion gcode loading CURA-6604 --- plugins/GCodeReader/FlavorParser.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 09fa2b4502..5a57618983 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -3,7 +3,7 @@ import math import re -from typing import Dict, List, NamedTuple, Optional, Union +from typing import Dict, List, NamedTuple, Optional, Union, Set import numpy @@ -38,6 +38,8 @@ class FlavorParser: self._message = None # type: Optional[Message] self._layer_number = 0 self._extruder_number = 0 + # All extruder numbers that have been seen + self._extruders_seen = {0} # type: Set[int] self._clearValues() self._scene_node = None # X, Y, Z position, F feedrate and E extruder values are stored @@ -418,6 +420,7 @@ class FlavorParser: if line.startswith("T"): T = self._getInt(line, "T") if T is not None: + self._extruders_seen.add(T) self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) current_path.clear() @@ -468,12 +471,16 @@ class FlavorParser: if self._layer_number == 0: Logger.log("w", "File doesn't contain any valid layers") - settings = CuraApplication.getInstance().getGlobalContainerStack() - if settings is not None and not settings.getProperty("machine_center_is_zero", "value"): - machine_width = settings.getProperty("machine_width", "value") - machine_depth = settings.getProperty("machine_depth", "value") + if not global_stack.getProperty("machine_center_is_zero", "value"): + machine_width = global_stack.getProperty("machine_width", "value") + machine_depth = global_stack.getProperty("machine_depth", "value") scene_node.setPosition(Vector(-machine_width / 2, 0, machine_depth / 2)) + # Make sure that all seen extruders (if exist in the currently active machine) are enabled. + for extruder_nr in self._extruders_seen: + if str(extruder_nr) in global_stack.extruders: + CuraApplication.getInstance().getMachineManager().setExtruderEnabled(extruder_nr, True) + Logger.log("d", "GCode loading finished") if CuraApplication.getInstance().getPreferences().getValue("gcodereader/show_caution"):