diff options
| author | Kaalleen <36401965+kaalleen@users.noreply.github.com> | 2022-06-30 19:22:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-30 19:22:33 +0200 |
| commit | 8d5ef5b6635b5b84f12409b535114853954680d1 (patch) | |
| tree | c963bf0e1ddc4ee584c08b4014232f0f067ae512 /lib/stitch_plan | |
| parent | 725281f075f8d40a68427733f377983b6f7c607b (diff) | |
Fixes (#1703)
* guide line position
* use direction from line to shape
* optimize intersection detection
* fix flapack elf
* handle weird guide lines better
* update starting point for self crossing (multiple) fills
* ripple: fixes and non circular join style
* avoid jumps in ripple stitch
* fallback only necessary if shape does not intersect grating
* make valid may return a polygon
* add profiling
* Stitch.__init__ didn't work right and was super slow
* shrink or grow to multipolygon
Co-authored-by: Lex Neva
Diffstat (limited to 'lib/stitch_plan')
| -rw-r--r-- | lib/stitch_plan/stitch.py | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/lib/stitch_plan/stitch.py b/lib/stitch_plan/stitch.py index a4c50b60..0d46b85d 100644 --- a/lib/stitch_plan/stitch.py +++ b/lib/stitch_plan/stitch.py @@ -4,7 +4,6 @@ # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. from ..utils.geometry import Point -from copy import deepcopy class Stitch(Point): @@ -12,10 +11,14 @@ class Stitch(Point): def __init__(self, x, y=None, color=None, jump=False, stop=False, trim=False, color_change=False, tie_modus=0, force_lock_stitches=False, no_ties=False, tags=None): + + base_stitch = None if isinstance(x, Stitch): # Allow creating a Stitch from another Stitch. Attributes passed as # arguments will override any existing attributes. - vars(self).update(deepcopy(vars(x))) + base_stitch = x + self.x = base_stitch.x + self.y = base_stitch.y elif isinstance(x, Point): # Allow creating a Stitch from a Point point = x @@ -24,17 +27,19 @@ class Stitch(Point): else: Point.__init__(self, x, y) - self.color = color - self.jump = jump - self.trim = trim - self.stop = stop - self.color_change = color_change - self.force_lock_stitches = force_lock_stitches - self.tie_modus = tie_modus - self.no_ties = no_ties - self.tags = set() + self._set('color', color, base_stitch) + self._set('jump', jump, base_stitch) + self._set('trim', trim, base_stitch) + self._set('stop', stop, base_stitch) + self._set('color_change', color_change, base_stitch) + self._set('force_lock_stitches', force_lock_stitches, base_stitch) + self._set('tie_modus', tie_modus, base_stitch) + self._set('no_ties', no_ties, base_stitch) + self.tags = set() self.add_tags(tags or []) + if base_stitch is not None: + self.add_tags(base_stitch.tags) def __repr__(self): return "Stitch(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (self.x, @@ -48,6 +53,14 @@ class Stitch(Point): "NO TIES" if self.no_ties else " ", "COLOR CHANGE" if self.color_change else " ") + def _set(self, attribute, value, base_stitch): + # Set an attribute. If the caller passed a Stitch object, use its value, unless + # they overrode it with arguments. + if base_stitch is not None: + setattr(self, attribute, getattr(base_stitch, attribute)) + if value or base_stitch is None: + setattr(self, attribute, value) + def add_tags(self, tags): for tag in tags: self.add_tag(tag) |
