summaryrefslogtreecommitdiff
path: root/embroider.py
diff options
context:
space:
mode:
authorLex Neva <github@lexneva.name>2016-11-04 20:31:13 -0400
committerLex Neva <github@lexneva.name>2016-11-04 20:31:13 -0400
commitb16f7de2fc69b9c8b131d5636950468ed345e902 (patch)
tree14d4134884ace0b5afde4513bbb3b9fa13a11240 /embroider.py
parent318da3bb1852410648274e6ab0d7ed43be6f8414 (diff)
WIP
Diffstat (limited to 'embroider.py')
-rw-r--r--embroider.py41
1 files changed, 23 insertions, 18 deletions
diff --git a/embroider.py b/embroider.py
index f1112d00..8dbe04e7 100644
--- a/embroider.py
+++ b/embroider.py
@@ -304,6 +304,19 @@ class Fill(EmbroideryElement):
return rows
+ def make_quadrilateral(self, segment1, segment2):
+ return shgeo.Polygon((segment1[0], segment1[1], segment2[1], segment2[0], segment1[0]))
+
+ def is_same_run(self, segment1, segment2):
+ if shgeo.LineString(segment1).distance(shgeo.LineString(segment1)) > self.row_spacing * 1.1:
+ return False
+
+ quad = make_quadrilateral(segment1, segment2)
+ quad_area = quad.area
+ intersection_area = self.shape.intersection(quad).area
+
+ return (intersection_area / quad_area) >= 0.9
+
def pull_runs(self, rows):
# Given a list of rows, each containing a set of line segments,
# break the area up into contiguous patches of line segments.
@@ -316,23 +329,6 @@ class Fill(EmbroideryElement):
# over to midway up the lower right leg. We want to stop there and
# start a new patch.
- # Segments more than this far apart are considered not to be part of
- # the same run.
- row_distance_cutoff = self.row_spacing * 1.1
-
- def make_quadrilateral(segment1, segment2):
- return shgeo.Polygon((segment1[0], segment1[1], segment2[1], segment2[0], segment1[0]))
-
- def is_same_run(segment1, segment2):
- if shgeo.LineString(segment1).distance(shgeo.LineString(segment1)) > row_distance_cutoff:
- return False
-
- quad = make_quadrilateral(segment1, segment2)
- quad_area = quad.area
- intersection_area = self.shape.intersection(quad).area
-
- return (intersection_area / quad_area) >= 0.9
-
# for row in rows:
# print >> sys.stderr, len(row)
@@ -349,7 +345,7 @@ class Fill(EmbroideryElement):
first, rest = row[0], row[1:]
# TODO: only accept actually adjacent rows here
- if prev is not None and not is_same_run(prev, first):
+ if prev is not None and not self.is_same_run(prev, first):
break
run.append(first)
@@ -464,6 +460,15 @@ class AutoFill(Fill):
def running_stitch_length(self):
return self.get_float_param("running_stitch_length_mm")
+ def is_same_run(self, segment1, segment2):
+ if shgeo.Point(segment1[0]).distance(shgeo.Point(segment2[0])) > self.max_stitch_length:
+ return False
+
+ if shgeo.Point(segment1[1]).distance(shgeo.Point(segment2[1])) > self.max_stitch_length:
+ return False
+
+ return True
+
def get_corner_points(self, section):
return section[0][0], section[0][-1], section[-1][0], section[-1][-1]