add rungs when rails are intersecting (#3344)

pull/3346/head dev-build-kaalleen-lettering-automated-size-info
Kaalleen 2024-12-15 14:58:30 +01:00 zatwierdzone przez GitHub
rodzic 98cf7a5955
commit f2d2d154d0
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
1 zmienionych plików z 22 dodań i 11 usunięć

Wyświetl plik

@ -1003,23 +1003,34 @@ class SatinColumn(EmbroideryElement):
"""
for path_list in path_lists:
num_paths = len(path_list)
if path_list is None:
continue
if len(path_list) in (2, 4):
if num_paths in (2, 4):
# Add the rung just after the start of the satin.
# If the rails have opposite directions it may end up at the end of the satin.
rung_start = path_list[0].interpolate(0.3)
rails_to_reverse = self._get_rails_to_reverse()
if rails_to_reverse[0] == rails_to_reverse[1]:
rung_end = path_list[1].interpolate(0.3)
else:
rung_end = path_list[1].interpolate(-0.3)
rung = shgeo.LineString((rung_start, rung_end))
self._add_rung(path_list, 0.3)
# When rails are intersecting, add two more rung to prevent bad rail detection
if num_paths == 2 and path_list[0].intersects(path_list[1]):
self._add_rung(path_list, 0.5, True)
self._add_rung(path_list, -0.3)
# make it a bit bigger so that it definitely intersects
rung = shaffinity.scale(rung, 1.1, 1.1)
def _add_rung(self, path_list, position, normalized=False):
rung_start = path_list[0].interpolate(position, normalized=normalized)
rails_to_reverse = self._get_rails_to_reverse()
if rails_to_reverse[0] == rails_to_reverse[1]:
rung_end = path_list[1].interpolate(position, normalized=normalized)
else:
rung_end = path_list[1].interpolate(-position, normalized=normalized)
rung = shgeo.LineString((rung_start, rung_end))
path_list.append(rung)
# make it a bit bigger so that it definitely intersects
rung = shaffinity.scale(rung, 1.1, 1.1)
if rung.length < 5:
rung = shaffinity.scale(rung, 3, 3)
path_list.append(rung)
def _path_list_to_satins(self, path_list):
linestrings = line_strings_to_csp(path_list)