diff options
| author | Lex Neva <github.com@lexneva.name> | 2023-04-03 22:59:02 -0400 |
|---|---|---|
| committer | Lex Neva <github.com@lexneva.name> | 2023-04-03 22:59:02 -0400 |
| commit | 63effb841fa3ea507135e10331b8ecb1a64e94dd (patch) | |
| tree | 24643ed08826e423c6700a720fed95776a0351d9 | |
| parent | c01fb85c3d6e7d6a30282cb0a4db8d511b4d4f86 (diff) | |
add meander angle
| -rw-r--r-- | lib/elements/fill_stitch.py | 12 | ||||
| -rw-r--r-- | lib/stitches/meander_fill.py | 2 | ||||
| -rw-r--r-- | lib/svg/tags.py | 1 | ||||
| -rw-r--r-- | lib/tiles.py | 20 |
4 files changed, 24 insertions, 11 deletions
diff --git a/lib/elements/fill_stitch.py b/lib/elements/fill_stitch.py index 7b146a36..8f22278b 100644 --- a/lib/elements/fill_stitch.py +++ b/lib/elements/fill_stitch.py @@ -186,8 +186,20 @@ class FillStitch(EmbroideryElement): return self.get_param('meander_pattern', min(tiles.all_tiles()).id) @property + @param('meander_angle', + _('Meander pattern angle'), + type='float', unit="degrees", + default=0, + select_items=[('fill_method', 'meander_fill')], + sort_index=4) + def meander_angle(self): + return math.radians(self.get_float_param('meander_angle', 0)) + + @property @param('meander_scale_percent', _('Meander pattern scale'), + tooltip=_("Percentage to stretch or compress the meander pattern. You can scale horizontally " + + "and vertically individually by giving two percentages separated by a space. "), type='float', unit="%", default=100, select_items=[('fill_method', 'meander_fill')], diff --git a/lib/stitches/meander_fill.py b/lib/stitches/meander_fill.py index 6fdd94b8..08ff4999 100644 --- a/lib/stitches/meander_fill.py +++ b/lib/stitches/meander_fill.py @@ -27,7 +27,7 @@ def meander_fill(fill, shape, original_shape, shape_index, starting_point, endin debug.log(f"tile name: {tile.name}") debug.log_line_strings(lambda: ensure_geometry_collection(shape.boundary).geoms, 'Meander shape') - graph = tile.to_graph(shape, fill.meander_scale) + graph = tile.to_graph(shape, fill.meander_scale, fill.meander_angle) if not graph: label = fill.node.label or fill.node.get_id() diff --git a/lib/svg/tags.py b/lib/svg/tags.py index 951821b5..bbef6ebb 100644 --- a/lib/svg/tags.py +++ b/lib/svg/tags.py @@ -81,6 +81,7 @@ inkstitch_attribs = [ 'reverse', 'meander_pattern', 'meander_scale_percent', + 'meander_angle', 'expand_mm', 'fill_underlay', 'fill_underlay_angle', diff --git a/lib/tiles.py b/lib/tiles.py index 15017e91..0bf92abc 100644 --- a/lib/tiles.py +++ b/lib/tiles.py @@ -111,20 +111,20 @@ class Tile: return translated_tile - def _scale(self, x_scale, y_scale): - scaled_shift0 = self.shift0.scale(x_scale, y_scale) - scaled_shift1 = self.shift1.scale(x_scale, y_scale) + def _scale_and_rotate(self, x_scale, y_scale, angle): + transformed_shift0 = self.shift0.scale(x_scale, y_scale).rotate(angle) + transformed_shift1 = self.shift1.scale(x_scale, y_scale).rotate(angle) - scaled_tile = [] + transformed_tile = [] for start, end in self.tile: - start = start.scale(x_scale, y_scale) - end = end.scale(x_scale, y_scale) - scaled_tile.append((start, end)) + start = start.scale(x_scale, y_scale).rotate(angle) + end = end.scale(x_scale, y_scale).rotate(angle) + transformed_tile.append((start, end)) - return scaled_shift0, scaled_shift1, scaled_tile + return transformed_shift0, transformed_shift1, transformed_tile @debug.time - def to_graph(self, shape, scale): + def to_graph(self, shape, scale, angle): """Apply this tile to a shape, repeating as necessary. Return value: @@ -134,7 +134,7 @@ class Tile: """ self._load() x_scale, y_scale = scale - shift0, shift1, tile = self._scale(x_scale, y_scale) + shift0, shift1, tile = self._scale_and_rotate(x_scale, y_scale, angle) shape_center, shape_width, shape_height = self._get_center_and_dimensions(shape) prepared_shape = prep(shape) |
