summaryrefslogtreecommitdiff
path: root/embroider.py
diff options
context:
space:
mode:
authorLex Neva <github@lexneva.name>2016-10-26 13:20:27 -0400
committerLex Neva <github@lexneva.name>2016-10-26 13:20:27 -0400
commita1cd95b2c80704078fb2351ac4ffca126b2b6a88 (patch)
tree450198907088aeb6c6ad76b05c38daf5524e3243 /embroider.py
parenta7ef5820251e75cfeb217c8f2b163680982365f5 (diff)
remove sortorder bits
Diffstat (limited to 'embroider.py')
-rw-r--r--embroider.py92
1 files changed, 19 insertions, 73 deletions
diff --git a/embroider.py b/embroider.py
index 2c18abd7..a959da76 100644
--- a/embroider.py
+++ b/embroider.py
@@ -173,14 +173,13 @@ def reverseTuple(t):
return tuple(reversed(t))
class Patch:
- def __init__(self, color=None, sortorder=None, stitches=None):
+ def __init__(self, color=None, stitches=None):
self.color = color
- self.sortorder = sortorder
self.stitches = stitches or []
def __add__(self, other):
if isinstance(other, Patch):
- return Patch(self.color, self.sortorder, self.stitches + other.stitches)
+ return Patch(self.color, self.stitches + other.stitches)
else:
raise TypeError("Patch can only be added to another Patch")
@@ -188,7 +187,7 @@ class Patch:
self.stitches.append(stitch)
def reverse(self):
- return Patch(self.color, self.sortorder, self.stitches[::-1])
+ return Patch(self.color, self.stitches[::-1])
class PatchList:
def __init__(self, patches):
@@ -272,19 +271,6 @@ class EmbroideryObject:
y.append(stitch.y)
return (min(x), min(y), max(x), max(y))
-class SortOrder:
- def __init__(self, *terms):
- self.sorttuple = terms
-
- def append(self, criterion):
- self.sorttuple += (criterion,)
-
- def __cmp__(self, other):
- return cmp(self.sorttuple, other.sorttuple)
-
- def __repr__(self):
- return "Sort%s" % self.sorttuple
-
class Embroider(inkex.Effect):
def __init__(self, *args, **kwargs):
#dbg.write("args: %s\n" % repr(sys.argv))
@@ -344,11 +330,7 @@ class Embroider(inkex.Effect):
help="Max number of backups of output files to keep.")
self.patches = []
- def get_sort_order(self, threadcolor, node):
- #print >> sys.stderr, "node", node.get("id"), self.order.get(node.get("id"))
- return SortOrder(self.order.get(node.get("id")), threadcolor)
-
- def process_one_path(self, node, shpath, threadcolor, sortorder, angle):
+ def process_one_path(self, node, shpath, threadcolor, angle):
#self.add_shapely_geo_to_svg(shpath.boundary, color="#c0c000")
hatching = get_boolean_param(node, "hatching", self.hatching)
@@ -367,7 +349,7 @@ class Embroider(inkex.Effect):
patches = []
for group_of_segments in groups_of_segments:
- patch = Patch(color=threadcolor,sortorder=sortorder)
+ patch = Patch(color=threadcolor)
first_segment = True
swap = False
last_end = None
@@ -605,14 +587,11 @@ class Embroider(inkex.Effect):
fill = self.filled_region_to_patchlist(node)
if get_boolean_param(node, "stroke_first", False):
- for patch in stroke:
- patch.sortorder.append(0)
-
- for patch in fill:
- patch.sortorder.append(1)
-
- self.patchList.patches.extend(stroke)
- self.patchList.patches.extend(fill)
+ self.patchList.patches.extend(stroke)
+ self.patchList.patches.extend(fill)
+ else:
+ self.patchList.patches.extend(fill)
+ self.patchList.patches.extend(stroke)
def get_style(self, node, style_name):
style = simplestyle.parseStyle(node.get("style"))
@@ -623,32 +602,6 @@ class Embroider(inkex.Effect):
return None
return value
- def cache_order(self):
- if self.options.order == "automatic":
- self.order = defaultdict(lambda: 0)
- return
-
- self.order = {}
-
- layer_tag = inkex.addNS("g", "svg")
- group_attr = inkex.addNS('groupmode', 'inkscape')
-
- def is_layer(node):
- return node.tag == layer_tag and node.get(group_attr) == "layer"
-
- def process(node, order=0):
- if self.options.order == "object" or (self.options.order == "layer" and is_layer(node)):
- order += 1
-
- self.order[node.get("id")] = order
-
- for child in node:
- order = process(child, order)
-
- return order
-
- process(self.document.getroot())
-
def get_output_path(self):
svg_filename = self.document.getroot().get(inkex.addNS('docname', 'sodipodi'))
csv_filename = svg_filename.replace('.svg', '.csv')
@@ -681,9 +634,6 @@ class Embroider(inkex.Effect):
old_stdout = sys.stdout
sys.stdout = sys.stderr
- self.cache_order()
- #print >> sys.stderr, "cached stacking order:", self.order
-
self.row_spacing_px = self.options.row_spacing_mm * pixels_per_millimeter
self.zigzag_spacing_px = self.options.zigzag_spacing_mm * pixels_per_millimeter
self.max_stitch_len_px = self.options.max_stitch_len_mm*pixels_per_millimeter
@@ -698,7 +648,7 @@ class Embroider(inkex.Effect):
dbg.write("starting nodes: %s" % time.time())
dbg.flush()
if self.selected:
- # be sure to visit selected nodes in the order they're stacked in
+ # be sure to visit selected nodes in the order they're stacked in
# the document
for node in self.document.getroot().iter():
if node.get("id") in self.selected:
@@ -770,7 +720,6 @@ class Embroider(inkex.Effect):
zigzag_spacing_px = get_float_param(node, "zigzag_spacing", self.zigzag_spacing_px)
repeats = get_int_param(node, "repeats", 1)
- sortorder = self.get_sort_order(threadcolor, node)
paths = flatten(parse_path(node), self.options.flat)
# regularize the points lists.
@@ -783,15 +732,15 @@ class Embroider(inkex.Effect):
path = [PyEmb.Point(x, y) for x, y in path]
if (stroke_width <= STROKE_MIN or dashed):
#dbg.write("self.max_stitch_len_px = %s\n" % self.max_stitch_len_px)
- patch = self.stroke_points(path, running_stitch_len_px, 0.0, repeats, threadcolor, sortorder)
+ patch = self.stroke_points(path, running_stitch_len_px, 0.0, repeats, threadcolor)
else:
- patch = self.stroke_points(path, zigzag_spacing_px*0.5, stroke_width, repeats, threadcolor, sortorder)
+ patch = self.stroke_points(path, zigzag_spacing_px*0.5, stroke_width, repeats, threadcolor)
patches.extend(patch)
return patches
- def stroke_points(self, emb_point_list, zigzag_spacing_px, stroke_width, repeats, threadcolor, sortorder):
- patch = Patch(color=threadcolor, sortorder=sortorder)
+ def stroke_points(self, emb_point_list, zigzag_spacing_px, stroke_width, repeats, threadcolor):
+ patch = Patch(color=threadcolor)
p0 = emb_point_list[0]
rho = 0.0
fact = 1
@@ -844,12 +793,10 @@ class Embroider(inkex.Effect):
paths = flatten(parse_path(node), self.options.flat)
shapelyPolygon = cspToShapelyPolygon(paths)
threadcolor = simplestyle.parseStyle(node.get("style"))["fill"]
- sortorder = self.get_sort_order(threadcolor, node)
return self.process_one_path(
node,
shapelyPolygon,
threadcolor,
- sortorder,
angle)
def fatal(self, message):
@@ -919,8 +866,7 @@ class Embroider(inkex.Effect):
path2 = csp[1]
threadcolor = simplestyle.parseStyle(node.get("style"))["stroke"]
- sortorder = self.get_sort_order(threadcolor, node)
- patch = Patch(color=threadcolor, sortorder=sortorder)
+ patch = Patch(color=threadcolor)
def offset_points(pos1, pos2, offset_px):
# Expand or contract points. This is useful for pull
@@ -1078,7 +1024,7 @@ class Embroider(inkex.Effect):
# "contour walk" underlay: do stitches up one side and down the
# other.
forward, back = walk_paths(underlay_stitch_len_px, -inset)
- return Patch(color=threadcolor, sortorder=sortorder, stitches=(forward + list(reversed(back))))
+ return Patch(color=threadcolor, stitches=(forward + list(reversed(back))))
def calculate_zigzag_underlay(zigzag_spacing, inset):
# zigzag underlay, usually done at a much lower density than the
@@ -1091,7 +1037,7 @@ class Embroider(inkex.Effect):
# "German underlay" described here:
# http://www.mrxstitch.com/underlay-what-lies-beneath-machine-embroidery/
- patch = Patch(color=threadcolor, sortorder=sortorder)
+ patch = Patch(color=threadcolor)
sides = walk_paths(zigzag_spacing/2.0, -inset)
sides = [sides[0][::2] + list(reversed(sides[0][1::2])), sides[1][1::2] + list(reversed(sides[1][::2]))]
@@ -1109,7 +1055,7 @@ class Embroider(inkex.Effect):
#
# /|/|/|/|/|/|/|/|
- patch = Patch(color=threadcolor, sortorder=sortorder)
+ patch = Patch(color=threadcolor)
sides = walk_paths(zigzag_spacing, pull_compensation)