Catch error when loading gcode with more extruders than the current machine.

CURA-10183
This commit is contained in:
Joey de l'Arago 2023-02-09 16:47:49 +01:00
parent 8d6ab7aa30
commit ba63109d84

View file

@ -32,6 +32,7 @@ class FlavorParser:
"""This parser is intended to interpret the common firmware codes among all the different flavors""" """This parser is intended to interpret the common firmware codes among all the different flavors"""
MAX_EXTRUDER_COUNT = 16 MAX_EXTRUDER_COUNT = 16
DEFAULT_FILAMENT_DIAMETER = 2.85
def __init__(self) -> None: def __init__(self) -> None:
CuraApplication.getInstance().hideMessageSignal.connect(self._onHideMessage) CuraApplication.getInstance().hideMessageSignal.connect(self._onHideMessage)
@ -48,7 +49,7 @@ class FlavorParser:
self._is_layers_in_file = False # Does the Gcode have the layers comment? self._is_layers_in_file = False # Does the Gcode have the layers comment?
self._extruder_offsets = {} # type: Dict[int, List[float]] # Offsets for multi extruders. key is index, value is [x-offset, y-offset] self._extruder_offsets = {} # type: Dict[int, List[float]] # Offsets for multi extruders. key is index, value is [x-offset, y-offset]
self._current_layer_thickness = 0.2 # default self._current_layer_thickness = 0.2 # default
self._filament_diameter = 2.85 # default self._current_filament_diameter = 2.85 # default
self._previous_extrusion_value = 0.0 # keep track of the filament retractions self._previous_extrusion_value = 0.0 # keep track of the filament retractions
CuraApplication.getInstance().getPreferences().addPreference("gcodereader/show_caution", True) CuraApplication.getInstance().getPreferences().addPreference("gcodereader/show_caution", True)
@ -152,7 +153,7 @@ class FlavorParser:
def _calculateLineWidth(self, current_point: Position, previous_point: Position, current_extrusion: float, previous_extrusion: float, layer_thickness: float) -> float: def _calculateLineWidth(self, current_point: Position, previous_point: Position, current_extrusion: float, previous_extrusion: float, layer_thickness: float) -> float:
# Area of the filament # Area of the filament
Af = (self._filament_diameter / 2) ** 2 * numpy.pi Af = (self._current_filament_diameter / 2) ** 2 * numpy.pi
# Length of the extruded filament # Length of the extruded filament
de = current_extrusion - previous_extrusion de = current_extrusion - previous_extrusion
# Volume of the extruded filament # Volume of the extruded filament
@ -287,7 +288,11 @@ class FlavorParser:
def processTCode(self, global_stack, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position: def processTCode(self, global_stack, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
self._extruder_number = T self._extruder_number = T
self._filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value") try:
self._current_filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value")
except IndexError:
self._current_filament_diameter = self.DEFAULT_FILAMENT_DIAMETER
if self._extruder_number + 1 > len(position.e): if self._extruder_number + 1 > len(position.e):
self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1)) self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1))
position.e.extend([0] * (self._extruder_number - len(position.e) + 1)) position.e.extend([0] * (self._extruder_number - len(position.e) + 1))
@ -323,7 +328,7 @@ class FlavorParser:
if not global_stack: if not global_stack:
return None return None
self._filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value") self._current_filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value")
scene_node = CuraSceneNode() scene_node = CuraSceneNode()