diff --git a/lib/elements/element.py b/lib/elements/element.py index 6dc60f347..7164c17c4 100644 --- a/lib/elements/element.py +++ b/lib/elements/element.py @@ -12,7 +12,7 @@ from inkex import bezier from ..commands import find_commands from ..debug import debug from ..i18n import _ -from ..patterns import apply_patterns +from ..patterns import apply_patterns, get_patterns_cache_key_data from ..svg import (PIXELS_PER_MM, apply_transforms, convert_length, get_node_transform) from ..svg.tags import INKSCAPE_LABEL, INKSTITCH_ATTRIBS @@ -422,6 +422,10 @@ class EmbroideryElement(object): return params + @cache + def _get_patterns_cache_key_data(self): + return get_patterns_cache_key_data(self.node) + def _get_cache_key(self, previous_stitch): cache_key_generator = CacheKeyGenerator() cache_key_generator.update(self.__class__.__name__) @@ -430,6 +434,7 @@ class EmbroideryElement(object): cache_key_generator.update(list(self._get_specified_style().items())) cache_key_generator.update(previous_stitch) cache_key_generator.update([(c.command, c.target_point) for c in self.commands]) + cache_key_generator.update(self._get_patterns_cache_key_data()) # TODO: include commands and patterns that apply to this element diff --git a/lib/patterns.py b/lib/patterns.py index 136b988fe..da8c50bfc 100644 --- a/lib/patterns.py +++ b/lib/patterns.py @@ -10,6 +10,15 @@ from .stitch_plan import Stitch from .utils import Point +def get_patterns_cache_key_data(node): + patterns = get_marker_elements(node, "pattern") + data = [] + data.extend([fill.wkt for fill in patterns['fill']]) + data.extend([stroke.wkt for stroke in patterns['stroke']]) + + return data + + def apply_patterns(stitch_groups, node): patterns = get_marker_elements(node, "pattern") _apply_fill_patterns(patterns['fill'], stitch_groups)