add meander angle

pull/2190/head dev-build-lexelby-meander-fixes
Lex Neva 2023-04-03 22:59:02 -04:00
rodzic c01fb85c3d
commit 63effb841f
4 zmienionych plików z 24 dodań i 11 usunięć

Wyświetl plik

@ -185,9 +185,21 @@ class FillStitch(EmbroideryElement):
def meander_pattern(self):
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')],

Wyświetl plik

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

Wyświetl plik

@ -81,6 +81,7 @@ inkstitch_attribs = [
'reverse',
'meander_pattern',
'meander_scale_percent',
'meander_angle',
'expand_mm',
'fill_underlay',
'fill_underlay_angle',

Wyświetl plik

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