summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLex Neva <github.com@lexneva.name>2021-08-07 11:37:17 -0400
committerLex Neva <github.com@lexneva.name>2021-08-07 11:37:17 -0400
commit8fc42628e285160f8f747772b6d5674a1bf23a09 (patch)
treee9bd97128cac93bd2ac617a55f5fee5dc6021926
parent84cb4e2c333d331eb863714797a55589f41e51b2 (diff)
add tags capability
-rw-r--r--lib/stitch_plan/stitch.py35
1 files changed, 32 insertions, 3 deletions
diff --git a/lib/stitch_plan/stitch.py b/lib/stitch_plan/stitch.py
index 85d71935..ea4423fa 100644
--- a/lib/stitch_plan/stitch.py
+++ b/lib/stitch_plan/stitch.py
@@ -7,7 +7,9 @@ from ..utils.geometry import Point
class Stitch(Point):
- def __init__(self, x, y=None, color=None, jump=False, stop=False, trim=False, color_change=False, tie_modus=0, no_ties=False):
+ """A stitch is a Point with extra information telling how to sew it."""
+
+ def __init__(self, x, y=None, color=None, jump=False, stop=False, trim=False, color_change=False, tie_modus=0, no_ties=False, tags=None):
Point.__init__(self, x, y)
self.color = color
self.jump = jump
@@ -16,6 +18,9 @@ class Stitch(Point):
self.color_change = color_change
self.tie_modus = tie_modus
self.no_ties = no_ties
+ self.tags = set()
+
+ self.add_tags(tags or [])
# Allow creating a Stitch from a Point
if isinstance(x, Point):
@@ -34,8 +39,32 @@ class Stitch(Point):
"NO TIES" if self.no_ties else " ",
"COLOR CHANGE" if self.color_change else " ")
+ def add_tags(self, tags):
+ for tag in tags:
+ self.add_tag(tag)
+
+ def add_tag(self, tag):
+ """Store arbitrary information about a stitch.
+
+ Tags can be used to store any information about a stitch. This can be
+ used by other parts of the code to keep track of where a Stitch came
+ from. The Stitch treats tags as opaque.
+
+ Use strings as tags. Python automatically optimizes this kind of
+ usage of strings, and it doesn't have to constantly do string
+ comparisons. More details here:
+
+ https://stackabuse.com/guide-to-string-interning-in-python
+ """
+ self.tags.add(tag)
+
+ def has_tag(self, tag):
+ return tag in self.tags
+
def copy(self):
- return Stitch(self.x, self.y, self.color, self.jump, self.stop, self.trim, self.color_change, self.tie_modus, self.no_ties)
+ return Stitch(self.x, self.y, self.color, self.jump, self.stop, self.trim, self.color_change, self.tie_modus, self.no_ties, self.tags)
def __json__(self):
- return vars(self)
+ attributes = dict(vars(self))
+ attributes['tags'] = list(attributes['tags'])
+ return attributes