Add test swatches extension (#2528)

* remove duplicates (tags)
* sort extensions (init)
* add test swatches extension
pull/2535/head
Kaalleen 2023-10-02 17:17:04 +02:00 zatwierdzone przez GitHub
rodzic 327a64402e
commit 61b76c7e8e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 182 dodań i 41 usunięć

Wyświetl plik

@ -51,60 +51,62 @@ from .simulator import Simulator
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 .update_svg import UpdateSvg
from .zigzag_line_to_satin import ZigzagLineToSatin
from .zip import Zip
from.lettering_along_path import LetteringAlongPath
__all__ = extensions = [StitchPlanPreview,
StitchPlanPreviewUndo,
DensityMap,
Install,
Params,
Print,
Input,
Output,
Zip,
Flip,
SelectionToPattern,
SelectionToGuideLine,
ObjectCommands,
ObjectCommandsToggleVisibility,
LayerCommands,
GlobalCommands,
__all__ = extensions = [ApplyThreadlist,
AutoRun,
AutoSatin,
BreakApart,
Cleanup,
CommandsScaleSymbols,
ConvertToSatin,
StrokeToLpeSatin,
ZigzagLineToSatin,
ConvertToStroke,
JumpToStroke,
FillToStroke,
CutSatin,
AutoSatin,
AutoRun,
CutworkSegmentation,
DensityMap,
DuplicateParams,
FillToStroke,
Flip,
GeneratePalette,
GlobalCommands,
GradientBlocks,
Input,
Install,
InstallCustomPalette,
JumpToStroke,
LayerCommands,
Lettering,
LetteringGenerateJson,
LetteringUpdateJsonGlyphlist,
LetteringRemoveKerning,
LetteringAlongPath,
LetteringCustomFontDir,
LetteringForceLockStitches,
LetteringAlongPath,
LetteringGenerateJson,
LetteringRemoveKerning,
LetteringUpdateJsonGlyphlist,
LettersToFont,
Troubleshoot,
RemoveEmbroiderySettings,
Cleanup,
UpdateSvg,
BreakApart,
GradientBlocks,
ApplyThreadlist,
InstallCustomPalette,
GeneratePalette,
ObjectCommands,
ObjectCommandsToggleVisibility,
Output,
PaletteSplitText,
PaletteToText,
Simulator,
Reorder,
DuplicateParams,
Params,
Preferences,
Print,
RemoveEmbroiderySettings,
Reorder,
SelectElements,
CutworkSegmentation]
SelectionToGuideLine,
SelectionToPattern,
Simulator,
StitchPlanPreview,
StitchPlanPreviewUndo,
StrokeToLpeSatin,
TestSwatches,
Troubleshoot,
UpdateSvg,
ZigzagLineToSatin,
Zip]

Wyświetl plik

@ -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)

Wyświetl plik

@ -98,7 +98,6 @@ inkstitch_attribs = [
'underlay_underpath',
'underpath',
'flip',
'expand_mm',
'clip',
# stroke
'stroke_method',
@ -124,7 +123,6 @@ inkstitch_attribs = [
'satin_method',
'short_stitch_distance_mm',
'short_stitch_inset',
'running_stitch_length_mm',
'reverse_rails',
'swap_satin_rails',
'center_walk_underlay',

Wyświetl plik

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension translationdomain="inkstitch" xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<name>Generate Test Swatches from Selection</name>
<id>org.inkstitch.test_swatches</id>
<param name="extension" type="string" gui-hidden="true">test_swatches</param>
<effect>
<object-type>all</object-type>
<effects-menu>
<submenu name="Ink/Stitch" translatable="no">
<submenu name="Edit" />
</submenu>
</effects-menu>
</effect>
<param name="options" type="notebook">
<page name="options" gui-text="Options">
<param name="param" type="optiongroup" gui-text="Param" appearance="combo">
<option value="angle">Angle (Fill)</option>
<option value="bean_stitch_repeats">Bean Stitch Repeats (Bean Stitch)</option>
<option value="center_walk_underlay_position">Center Walk Underlay: Position (Satin)</option>
<option value="center_walk_underlay_repeats">Center Walk Underlay: Repeats (Satin)</option>
<option value="center_walk_underlay_stitch_length_mm">center Walk Underlay: Stitch Length mm (Satin)</option>
<option value="contour_underlay_inset_mm">Contour Underlay: Inset mm (Satin)</option>
<option value="contour_underlay_inset_percent">Contour Underlay: Inset percent (Satin)</option>
<option value="contour_underlay_stitch_length_mm">Contour Underlay: Stitch Length mm (Satin)</option>
<option value="end_row_spacing_mm">End Row Spacing mm (Fill)</option>
<option value="expand_mm">Expand mm (Fill)</option>
<option value="exponent">Exponent (Stroke)</option>
<option value="fill_underlay_angle">Fill Underlay: Angle (Fill)</option>
<option value="fill_underlay_inset_mm">Fill Underlay: Inset mm (Fill)</option>
<option value="fill_underlay_max_stitch_length_mm">Fill Underlay: Maximum Stitch Length mm (Fill)</option>
<option value="fill_underlay_row_spacing_mm">Fill Underlay: Row Spacing mm (Fill)</option>
<option value="grid_size_mm">Grid Size mm (Ripple)</option>
<option value="line_count">Line Count (Ripple)</option>
<option value="max_stitch_length_mm">Maximum Stitch Length mm (Fill, Satin)</option>
<option value="meander_angle">Meander Pattern: Angle (Meander Fill)</option>
<option value="meander_scale_percent">Meander Pattern: Scale Percent (Meander Fill)</option>
<option value="min_line_dist_mm">Minimum Line Distanse mm (Ripple)</option>
<option value="min_random_split_length_mm">Minimum Random Split Length mm (Satin)</option>
<option value="pull_compensation_mm">Pull Compensation mm (Satin, ZigZag)</option>
<option value="pull_compensation_percent">Pull Compensation percent (Satin)</option>
<option value="random_split_jitter_percent">Random Split Jitter percent (Satin)</option>
<option value="random_width_decrease_percent">Random Width Decrease percent (Satin)</option>
<option value="random_width_increase_percent">Random width Increase percent (Satin)</option>
<option value="random_zigzag_spacing_percent">Random Zigzag Spacing percent (Satin)</option>
<option value="repeats">Repeats (Fill, Stroke)</option>
<option value="row_spacing_mm">Row Spacing mm (Fill)</option>
<option value="running_stitch_length_mm">Running Stitch Length mm (Stroke, Fill)</option>
<option value="running_stitch_tolerance_mm">Running Stitch Tolerance mm (Stroke, Fill)</option>
<option value="scale_end">Scale End (Ripple)</option>
<option value="scale_start">Scale Start (Ripple)</option>
<option value="short_stitch_distance_mm">Short Stitch: Distance mm (Satin)</option>
<option value="short_stitch_inset">Short Stitch: Inset (Satin)</option>
<option value="skip_end">Skip End (Ripple)</option>
<option value="skip_start">Skip Start (Ripple)</option>
<option value="smoothness_mm">Smoothness mm (Fill)</option>
<option value="split_staggers">Split Staggers (Satin)</option>
<option value="staggers">Staggers (Fill)</option>
<option value="zigzag_spacing_mm">Zigzag Spacing mm (Satin, Zigzag)</option>
<option value="zigzag_underlay_inset_mm">Zigzag Underlay: Inset_mm (Satin)</option>
<option value="zigzag_underlay_inset_percent">Zigzag Underlay: Inset percent (Satin)</option>
<option value="zigzag_underlay_max_stitch_length_mm">ZigZag Underlay: Maximum Stitch Length mm (Satin)</option>
<option value="zigzag_underlay_spacing_mm">Zigzag Underlay: Spacing mm (Satin)</option>
</param>
<param name="start-value" type="float" precision="2" min="0" max="500"
gui-text="Start Value">2.5</param>
<param name="step" type="float" gui-text="Increase by" min="0" max="50" precision="2"
gui-description="Increase by this value with each swatch.">0.5</param>
<param name="num-rows" type="int" gui-text="Rows" min="0" max="50">5</param>
<param name="num-cols" type="int" gui-text="Columns" min="0" max="50">5</param>
<param name="spacing" type="float" gui-text="Spacing" min="0" max="50"
gui-descritpion="Spacing between swatches (user units)">5</param>
</page>
<page name="info" gui-text="Help">
<label appearance="header">Test Swatches</label>
<label>This extension generates test swatches from a selection.</label>
<label>Test swatches help to find best stitch settings for your design.</label>
<label>Sew them out with the same thread and fabric as the final designs.</label>
<spacer />
<label>Get more information on our website</label>
<label appearance="url">https://inkstitch.org/docs/edit/#generate-test-swatches-from-selection</label>
</page>
</param>
<script>
{{ command_tag | safe }}
</script>
</inkscape-extension>