From 1f3f15efdeb569854f54fa4be22b35bb45ae1996 Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Sat, 14 Dec 2024 16:49:42 +0100 Subject: [PATCH] auto satin: add option to keep original path elements (#3332) --- lib/extensions/auto_satin.py | 11 ++++++++++- lib/stitches/auto_satin.py | 15 ++++++++++----- templates/auto_satin.xml | 10 +++++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/extensions/auto_satin.py b/lib/extensions/auto_satin.py index d5456bcb1..a5e6ab3fc 100644 --- a/lib/extensions/auto_satin.py +++ b/lib/extensions/auto_satin.py @@ -20,6 +20,7 @@ class AutoSatin(CommandsExtension): CommandsExtension.__init__(self, *args, **kwargs) self.arg_parser.add_argument("--notebook") self.arg_parser.add_argument("-p", "--preserve_order", dest="preserve_order", type=inkex.Boolean, default=False) + self.arg_parser.add_argument("-k", "--keep_originals", dest="keep_originals", type=inkex.Boolean, default=False) def get_starting_point(self): return self.get_point("autoroute_start") @@ -56,6 +57,13 @@ class AutoSatin(CommandsExtension): return True + def _get_parent_and_index(self): + last_element = self.svg.selection[-1] + if last_element.TAG == 'g': + parent = last_element.getparent() + return parent, parent.index(last_element) + 1 + return None, None + def effect(self): if not self.check_selection(): return @@ -71,4 +79,5 @@ class AutoSatin(CommandsExtension): if not elements: return - auto_satin(elements, self.options.preserve_order, starting_point, ending_point, self.options.trim) + parent, index = self._get_parent_and_index() + auto_satin(elements, self.options.preserve_order, starting_point, ending_point, self.options.trim, self.options.keep_originals, parent, index) diff --git a/lib/stitches/auto_satin.py b/lib/stitches/auto_satin.py index 7d3cb05e4..1ef224c8b 100644 --- a/lib/stitches/auto_satin.py +++ b/lib/stitches/auto_satin.py @@ -293,7 +293,7 @@ class RunningStitch(object): return RunningStitch(new_path, self.original_element) -def auto_satin(elements, preserve_order=False, starting_point=None, ending_point=None, trim=False): +def auto_satin(elements, preserve_order=False, starting_point=None, ending_point=None, trim=False, keep_originals=False, parent=None, index=None): """Find an optimal order to stitch a list of SatinColumns. Add running stitch and jump stitches as necessary to construct a stitch @@ -340,8 +340,10 @@ def auto_satin(elements, preserve_order=False, starting_point=None, ending_point """ # save these for create_new_group() call below - parent = elements[0].node.getparent() - index = parent.index(elements[0].node) + if parent is None: + parent = elements[-1].node.getparent() + if index is None: + index = parent.index(elements[-1].node) + 1 # apply live path effects # It would be nice if we could preserve them, but this could have unwanted side effects @@ -360,12 +362,15 @@ def auto_satin(elements, preserve_order=False, starting_point=None, ending_point operations = collapse_sequential_segments(operations) new_elements, trims, original_parents = operations_to_elements_and_trims(operations, preserve_order) - remove_original_elements(elements) + if not keep_originals: + remove_original_elements(elements) - if preserve_order: + if preserve_order and not keep_originals: preserve_original_groups(new_elements, original_parents) else: group = create_new_group(parent, index, _("Auto-Route")) + if keep_originals and parent.TAG == "svg": + group.set('inkscape:groupmode', "layer") add_elements_to_group(new_elements, group) name_elements(new_elements, preserve_order) diff --git a/templates/auto_satin.xml b/templates/auto_satin.xml index f8bb6952c..fda72e212 100644 --- a/templates/auto_satin.xml +++ b/templates/auto_satin.xml @@ -5,9 +5,13 @@ - true - false - auto_satin + true + false + auto_satin + + + + false