diff options
| author | Lex Neva <github@lexneva.name> | 2016-11-04 20:31:13 -0400 |
|---|---|---|
| committer | Lex Neva <github@lexneva.name> | 2016-11-04 20:31:13 -0400 |
| commit | b16f7de2fc69b9c8b131d5636950468ed345e902 (patch) | |
| tree | 14d4134884ace0b5afde4513bbb3b9fa13a11240 /embroider.py | |
| parent | 318da3bb1852410648274e6ab0d7ed43be6f8414 (diff) | |
WIP
Diffstat (limited to 'embroider.py')
| -rw-r--r-- | embroider.py | 41 |
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] |
