From 61b76c7e8e1414039704b776f431fde5f0886fa4 Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Mon, 2 Oct 2023 17:17:04 +0200 Subject: Add test swatches extension (#2528) * remove duplicates (tags) * sort extensions (init) * add test swatches extension --- lib/extensions/test_swatches.py | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 lib/extensions/test_swatches.py (limited to 'lib/extensions/test_swatches.py') diff --git a/lib/extensions/test_swatches.py b/lib/extensions/test_swatches.py new file mode 100644 index 00000000..a5b12d2f --- /dev/null +++ b/lib/extensions/test_swatches.py @@ -0,0 +1,55 @@ +# Authors: see git history +# +# Copyright (c) 2023 Authors +# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. + +from inkex import errormsg + +from ..i18n import _ +from ..svg.tags import EMBROIDERABLE_TAGS +from .base import InkstitchExtension + + +class TestSwatches(InkstitchExtension): + ''' + This generates swatches from selection by altering one param each time. + ''' + def __init__(self, *args, **kwargs): + InkstitchExtension.__init__(self, *args, **kwargs) + self.arg_parser.add_argument("--options") + self.arg_parser.add_argument("--info") + + self.arg_parser.add_argument("-p", "--param", type=str, default="max_stitch_length_mm", dest="param") + self.arg_parser.add_argument("-s", "--start-value", type=float, default="max_stitch_length_mm", dest="start_value") + self.arg_parser.add_argument("-i", "--step", type=float, default="0.5", dest="step") + self.arg_parser.add_argument("-r", "--num-rows", type=int, default="5", dest="num_rows") + self.arg_parser.add_argument("-c", "--num-cols", type=int, default="5", dest="num_cols") + self.arg_parser.add_argument("-d", "--spacing", type=float, default="1", dest="spacing") + + def effect(self): + if not self.svg.selection: + errormsg(_("Please select one or more elements.")) + return + + for element in self.svg.selection: + dimensions = element.bounding_box() + param_value = self.options.start_value + for rows in range(0, self.options.num_rows): + for cols in range(0, self.options.num_cols): + new_element = element.duplicate() + translate_x = cols * dimensions.width + cols * self.options.spacing + translate_y = rows * dimensions.height + rows * self.options.spacing + new_element.transform.add_translate((translate_x, translate_y)) + if new_element.TAG == "g": + for embroidery_element in new_element.iterdescendants(EMBROIDERABLE_TAGS): + # Since this won't effect functionality, we can simply ignore the fact + # that this will also set the value to guide lines etc. + self._set_param(embroidery_element, param_value) + else: + self._set_param(new_element, param_value) + param_value += self.options.step + # remove old element + element.getparent().remove(element) + + def _set_param(self, element, value): + element.set(f'inkstitch:{ self.options.param }', value) -- cgit v1.2.3