From 4749eca8fdfe1b3fe362cacd409147ff89f35629 Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Mon, 11 Mar 2024 14:08:56 +0100 Subject: [PATCH] Add apply palette extension (#2738) * add apply palette extension * thread catalog: apply palette: do not overwrite cutwork settings --- lib/extensions/__init__.py | 10 ++++----- lib/extensions/apply_palette.py | 39 +++++++++++++++++++++++++++++++++ lib/threads/catalog.py | 5 +++++ templates/apply_palette.xml | 32 +++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 lib/extensions/apply_palette.py create mode 100644 templates/apply_palette.xml diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py index 3012ca5ac..72cafcc0d 100644 --- a/lib/extensions/__init__.py +++ b/lib/extensions/__init__.py @@ -3,8 +3,7 @@ # Copyright (c) 2010 Authors # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. -from lib.extensions.troubleshoot import Troubleshoot - +from .apply_palette import ApplyPalette from .apply_threadlist import ApplyThreadlist from .auto_run import AutoRun from .auto_satin import AutoSatin @@ -30,6 +29,7 @@ from .install_custom_palette import InstallCustomPalette from .jump_to_stroke import JumpToStroke from .layer_commands import LayerCommands from .lettering import Lettering +from .lettering_along_path import LetteringAlongPath from .lettering_custom_font_dir import LetteringCustomFontDir from .lettering_force_lock_stitches import LetteringForceLockStitches from .lettering_generate_json import LetteringGenerateJson @@ -55,13 +55,13 @@ from .stitch_plan_preview import StitchPlanPreview from .stitch_plan_preview_undo import StitchPlanPreviewUndo from .stroke_to_lpe_satin import StrokeToLpeSatin from .test_swatches import TestSwatches +from .troubleshoot import Troubleshoot from .update_svg import UpdateSvg from .zigzag_line_to_satin import ZigzagLineToSatin from .zip import Zip -from.lettering_along_path import LetteringAlongPath - -__all__ = extensions = [ApplyThreadlist, +__all__ = extensions = [ApplyPalette, + ApplyThreadlist, AutoRun, AutoSatin, BreakApart, diff --git a/lib/extensions/apply_palette.py b/lib/extensions/apply_palette.py new file mode 100644 index 000000000..ce6c8f5c1 --- /dev/null +++ b/lib/extensions/apply_palette.py @@ -0,0 +1,39 @@ +# Authors: see git history +# +# Copyright (c) 2024 Authors +# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. + +from ..elements import FillStitch +from ..threads import ThreadCatalog, ThreadColor +from .base import InkstitchExtension + + +class ApplyPalette(InkstitchExtension): + ''' + Applies colors of a color palette to elements + ''' + def __init__(self, *args, **kwargs): + InkstitchExtension.__init__(self, *args, **kwargs) + self.arg_parser.add_argument("-o", "--tabs") + self.arg_parser.add_argument("-t", "--palette", type=str, default=None, dest="palette") + + def effect(self): + # Remove selection, we want all the elements in the document + self.svg.selection.clear() + + if not self.get_elements(): + return + + palette_name = self.options.palette + palette = ThreadCatalog().get_palette_by_name(palette_name) + + # Iterate through the color blocks to apply colors + for element in self.elements: + nearest_color = palette.nearest_color(ThreadColor(element.color)) + if isinstance(element, FillStitch): + element.node.style['fill'] = nearest_color.to_hex_str() + else: + element.node.style['stroke'] = nearest_color.to_hex_str() + + metadata = self.get_inkstitch_metadata() + metadata['thread-palette'] = palette_name diff --git a/lib/threads/catalog.py b/lib/threads/catalog.py index 68dc2009c..9c5666681 100644 --- a/lib/threads/catalog.py +++ b/lib/threads/catalog.py @@ -97,6 +97,11 @@ class _ThreadCatalog(Sequence): return palette def apply_palette(self, stitch_plan, palette): + for color_block in stitch_plan: + if color_block.color.chart: + # do not overwrite cutwork settings + continue + for color_block in stitch_plan: nearest = palette.nearest_color(color_block.color) diff --git a/templates/apply_palette.xml b/templates/apply_palette.xml new file mode 100644 index 000000000..f315916c7 --- /dev/null +++ b/templates/apply_palette.xml @@ -0,0 +1,32 @@ + + + Apply Palette + org.{{ id_inkstitch }}.apply_palette + apply_palette + + + + {%- for item in threadcatalog %} + {{ item }} + {%- endfor %} + + + + + + + + + + + all + + + + + + + +