From 705dabaa5670b9d5ec6c583e76d8441c6051334a Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Thu, 16 May 2024 06:43:01 +0200 Subject: fix gap after auto-route satin (#2907) --- lib/elements/satin_column.py | 7 ++++--- lib/stitches/auto_satin.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/elements/satin_column.py b/lib/elements/satin_column.py index 593eac01..063a95b8 100644 --- a/lib/elements/satin_column.py +++ b/lib/elements/satin_column.py @@ -795,7 +795,7 @@ class SatinColumn(EmbroideryElement): return self._csp_to_satin(self.csp) - def split(self, split_point): + def split(self, split_point, cut_points=None): """Split a satin into two satins at the specified point split_point is a point on or near one of the rails, not at one of the @@ -813,13 +813,14 @@ class SatinColumn(EmbroideryElement): their transforms applied. """ - cut_points = self._find_cut_points(split_point) + if cut_points is None: + cut_points = self.find_cut_points(split_point) path_lists = self._cut_rails(cut_points) self._assign_rungs_to_split_rails(path_lists) self._add_rungs_if_necessary(path_lists) return [self._path_list_to_satins(path_list) for path_list in path_lists] - def _find_cut_points(self, split_point): + def find_cut_points(self, split_point): """Find the points on each satin corresponding to the split point. split_point is a point that is near but not necessarily touching one diff --git a/lib/stitches/auto_satin.py b/lib/stitches/auto_satin.py index 09f331bf..e681a4f7 100644 --- a/lib/stitches/auto_satin.py +++ b/lib/stitches/auto_satin.py @@ -70,12 +70,18 @@ class SatinSegment(object): def to_satin(self): satin = self.satin + # get cut points before actually cutting the satin to avoid + # rounding errors which may produce gaps in between the satins if self.start > 0.0: - before, satin = satin.split(self.start) + start = satin.find_cut_points(self.start) + if self.end < 1.0: + end = satin.find_cut_points(self.end) + # cut satin + if self.start > 0.0: + before, satin = satin.split(None, cut_points=start) if self.end < 1.0: - satin, after = satin.split( - (self.end - self.start) / (1.0 - self.start)) + satin, after = satin.split(None, cut_points=end) if self.reverse: satin = satin.reverse() -- cgit v1.2.3