diff --git a/embroider_params.py b/embroider_params.py index 289f0d8e6..88d5772c6 100644 --- a/embroider_params.py +++ b/embroider_params.py @@ -424,28 +424,34 @@ class SettingsFrame(wx.Frame): def generate_patches(self): patches = [] + nodes = [] for tab in self.tabs: tab.apply() - try: - if tab.enabled() and not tab.is_dependent_tab(): - for node in tab.nodes: - if self.simulate_refresh_needed.is_set(): - # cancel, we need to start over - return [] + if tab.enabled() and not tab.is_dependent_tab(): + nodes.extend(tab.nodes) - # Making a copy of the embroidery element is an easy - # way to drop the cache in the @cache decorators used - # for many params in embroider.py. + # sort nodes into the proper stacking order + nodes.sort(key=lambda node: node.order) - patches.extend(copy(node).to_patches(None)) - except SystemExit: - raise - except: - # Ignore errors. This can be things like incorrect paths for - # satins or division by zero caused by incorrect param values. - pass + try: + for node in nodes: + if self.simulate_refresh_needed.is_set(): + # cancel; params were updated and we need to start over + return [] + + # Making a copy of the embroidery element is an easy + # way to drop the cache in the @cache decorators used + # for many params in embroider.py. + + patches.extend(copy(node).to_patches(None)) + except SystemExit: + raise + except: + # Ignore errors. This can be things like incorrect paths for + # satins or division by zero caused by incorrect param values. + pass return patches @@ -631,9 +637,11 @@ class EmbroiderParams(inkex.Effect): nodes = self.get_nodes() nodes_by_class = defaultdict(list) - for node in self.get_nodes(): + for z, node in enumerate(self.get_nodes()): for cls in self.embroidery_classes(node): - nodes_by_class[cls].append(node) + element = cls(node) + element.order = z + nodes_by_class[cls].append(element) return sorted(nodes_by_class.items(), key=lambda (cls, nodes): cls.__name__) @@ -659,7 +667,6 @@ class EmbroiderParams(inkex.Effect): def create_tabs(self, parent): tabs = [] for cls, nodes in self.get_nodes_by_class(): - nodes = [cls(node) for node in nodes] params = cls.get_params() for param in params: diff --git a/embroider_simulate.py b/embroider_simulate.py index 0bee63279..5654b9c34 100644 --- a/embroider_simulate.py +++ b/embroider_simulate.py @@ -177,7 +177,6 @@ class EmbroiderySimulator(wx.Frame): min_x = min(min_x, x) min_y = min(min_y, y) - new_segments = [] for segment in self.segments: