add tags capability

pull/1254/head
Lex Neva 2021-08-07 11:37:17 -04:00
rodzic 84cb4e2c33
commit 8fc42628e2
1 zmienionych plików z 32 dodań i 3 usunięć

Wyświetl plik

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