diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 37a2116f5d..a0a16e7d26 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -6,7 +6,7 @@ import numpy from string import Formatter from enum import IntEnum import time -from typing import Any, cast, Dict, List, Optional, Set +from typing import Any, cast, Dict, List, Optional, Set, Tuple import re import pyArcus as Arcus # For typing. from PyQt6.QtCore import QCoreApplication @@ -68,6 +68,14 @@ class GcodeStartEndFormatter(Formatter): self._default_extruder_nr: int = default_extruder_nr self._additional_per_extruder_settings: Optional[Dict[str, Dict[str, any]]] = additional_per_extruder_settings + def get_field(self, field_name, args: [str], kwargs: dict) -> Tuple[str, str]: + # get_field method parses all fields in the format-string and parses them individually to the get_value method. + # e.g. for a string "Hello {foo.bar}" would the complete field "foo.bar" would be passed to get_field, and then + # the individual parts "foo" and "bar" would be passed to get_value. This poses a problem for us, because want + # to parse the entire field as a single expression. To solve this, we override the get_field method and return + # the entire field as the expression. + return self.get_value(field_name, args, kwargs), field_name + def get_value(self, expression: str, args: [str], kwargs: dict) -> str: # The following variables are not settings, but only become available after slicing.