diff options
Diffstat (limited to 'lib/extensions/generate_palette.py')
| -rw-r--r-- | lib/extensions/generate_palette.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/extensions/generate_palette.py b/lib/extensions/generate_palette.py new file mode 100644 index 00000000..4255cfba --- /dev/null +++ b/lib/extensions/generate_palette.py @@ -0,0 +1,85 @@ +# Authors: see git history +# +# Copyright (c) 2022 Authors +# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. + +import os +import sys + +import inkex + +from ..i18n import _ +from ..utils import guess_inkscape_config_path +from .base import InkstitchExtension + + +class GeneratePalette(InkstitchExtension): + # Generate a custom color palette in object related order + def __init__(self, *args, **kwargs): + InkstitchExtension.__init__(self, *args, **kwargs) + self.arg_parser.add_argument("-n", "--palette_name", type=str, default=None, dest="palette_name") + self.arg_parser.add_argument("-f", "--palette_folder", type=str, default=None, dest="palette_folder") + self.arg_parser.add_argument("-o", "--options", type=str, default=None, dest="page_options") + self.arg_parser.add_argument("-i", "--info", type=str, default=None, dest="page_help") + + def effect(self): + path = self.options.palette_folder + brand = self.options.palette_name + file_name = "InkStitch %s.gpl" % brand + color_palette_name = '\nName: Ink/Stitch: %s' % brand + + if not brand: + inkex.errormsg(_("Please specify a name for your color palette.")) + sys.exit() + + if path: + if not os.path.isdir(path): + inkex.errormsg(_("Unkown directory path.")) + sys.exit() + else: + path = os.path.join(guess_inkscape_config_path(), 'palettes') + if not os.path.isdir(path): + inkex.errormsg(_("Ink/Stitch cannot find your palette folder automatically. Please enter the path manually.")) + sys.exit() + + elements = self.svg.selected.rendering_order() + + if not elements: + inkex.errormsg(_("No element selected.\n\nPlease select at least one text element with a fill color.")) + sys.exit() + + colors = self._get_color_from_elements(elements) + + if not colors: + inkex.errormsg(_("We couldn't find any fill colors on your text elements. Please read the instructions on our website.")) + sys.exit() + + colors = ['GIMP Palette', color_palette_name, '\nColumns: 4', '\n# RGB Value\t Color Name Number'] + colors + + file_path = os.path.join(path, file_name) + with open(file_path, 'w', encoding='utf-8') as gpl: + gpl.writelines(colors) + + def _get_color_from_elements(self, elements): + colors = [] + for element in elements: + if 'fill' not in element.style.keys() or type(element) != inkex.TextElement: + continue + + color = inkex.Color(element.style['fill']).to_rgb() + color_name = element.get_text().split(' ') + if len(color_name) > 1 and color_name[-1].isdigit(): + number = color_name[-1] + name = ' '.join(color_name[:-1]) + else: + number = 0 + name = ' '.join(color_name) + color = "\n%s\t%s\t%s\t%s %s" % (str(color[0]).rjust(3), str(color[1]).rjust(3), str(color[2]).rjust(3), name.rjust(30), number) + colors.append(color) + + return colors + + +if __name__ == '__main__': + e = GeneratePalette() + e.affect() |
