diff options
| author | Lex Neva <github.com@lexneva.name> | 2023-08-05 11:31:12 -0400 |
|---|---|---|
| committer | Lex Neva <github.com@lexneva.name> | 2023-08-05 11:31:12 -0400 |
| commit | acd565c640adeeae387dd68802527fa7be58f8d8 (patch) | |
| tree | 8f580b8c50e8864ba1c29e66dc521ca69c737637 /lib/elements/satin_column.py | |
| parent | 178a8e821e7c6e965aab6694587302ffa2a95fa7 (diff) | |
obey reversed rails when synthesizing rungs
Diffstat (limited to 'lib/elements/satin_column.py')
| -rw-r--r-- | lib/elements/satin_column.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/elements/satin_column.py b/lib/elements/satin_column.py index 4ea26575..b0106958 100644 --- a/lib/elements/satin_column.py +++ b/lib/elements/satin_column.py @@ -249,7 +249,7 @@ class SatinColumn(EmbroideryElement): def reverse_rails(self): return self.get_param('reverse_rails', 'automatic') - def _get_rails_to_reverse(self, rails): + def _get_rails_to_reverse(self): choice = self.reverse_rails if choice == 'first': @@ -259,6 +259,7 @@ class SatinColumn(EmbroideryElement): elif choice == 'both': return True, True elif choice == 'automatic': + rails = [shgeo.LineString(self.flatten_subpath(rail)) for rail in self.rails] if len(rails) == 2: # Sample ten points along the rails. Compare the distance # between corresponding points on both rails with and without @@ -283,7 +284,7 @@ class SatinColumn(EmbroideryElement): # reverse the second rail return False, True - return None + return False, False @property @param( @@ -477,7 +478,7 @@ class SatinColumn(EmbroideryElement): """The rails, as LineStrings.""" paths = [shgeo.LineString(self.flatten_subpath(rail)) for rail in self.rails] - rails_to_reverse = self._get_rails_to_reverse(paths) + rails_to_reverse = self._get_rails_to_reverse() if paths and rails_to_reverse is not None: for i, reverse in enumerate(rails_to_reverse): if reverse: @@ -506,14 +507,19 @@ class SatinColumn(EmbroideryElement): else: return [subpath for i, subpath in enumerate(self.csp) if i not in self.rail_indices] + @cache def _synthesize_rungs(self): rung_endpoints = [] # check for unequal length of rails equal_length = len(self.rails[0]) == len(self.rails[1]) - for rail in self.rails: + rails_to_reverse = self._get_rails_to_reverse() + for i, rail in enumerate(self.rails): points = self.strip_control_points(rail) + if rails_to_reverse[i]: + points = points[::-1] + if len(points) > 2 or not equal_length: # Don't bother putting rungs at the start and end. points = points[1:-1] |
