kopia lustrzana https://github.com/inkstitch/inkstitch
rodzic
c01fb85c3d
commit
63effb841f
|
@ -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')],
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -81,6 +81,7 @@ inkstitch_attribs = [
|
|||
'reverse',
|
||||
'meander_pattern',
|
||||
'meander_scale_percent',
|
||||
'meander_angle',
|
||||
'expand_mm',
|
||||
'fill_underlay',
|
||||
'fill_underlay_angle',
|
||||
|
|
20
lib/tiles.py
20
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)
|
||||
|
|
Ładowanie…
Reference in New Issue