From 2bf51541e212f792d6fe8aaa812aa1d1f68fe3e2 Mon Sep 17 00:00:00 2001 From: Mario Voigt Date: Tue, 13 Jul 2021 01:57:17 +0200 Subject: [PATCH] modified lasercut jigsaw to create single puzzle pieces; fixed bug in contour scanner --- .../contour_scanner_and_trimmer.py | 17 +- .../lasercut_jigsaw/lasercut_jigsaw.inx | 35 ++-- .../lasercut_jigsaw/lasercut_jigsaw.py | 177 +++++++++++------- 3 files changed, 148 insertions(+), 81 deletions(-) diff --git a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py index bad36185..3503efa0 100644 --- a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py +++ b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.py @@ -1197,10 +1197,19 @@ class ContourScannerAndTrimmer(inkex.EffectExtension): allSubSplitLineStrings = [] + allSubSplitLineStringsTransformed = [] for subSplitLine in subSplitLineArray: csp = subSplitLine.path.to_arrays() + cspTransformed = Path(subSplitLine.path.transform(subSplitLine.getparent().composed_transform())).to_arrays() lineString = [(csp[0][1][0], csp[0][1][1]), (csp[1][1][0], csp[1][1][1])] + lineStringTransformed = [(cspTransformed[0][1][0], cspTransformed[0][1][1]), (cspTransformed[1][1][0], cspTransformed[1][1][1])] if so.remove_trim_duplicates is True: + if so.visualize_global_intersections is True: #ignore that calculation if false + if lineStringTransformed not in allSubSplitLineStringsTransformed: + allSubSplitLineStringsTransformed.append(lineStringTransformed) + else: + if so.show_debug is True: + self.msg("transformed line {} already in sub split line collection. Dropping ...".format(lineStringTransformed)) if lineString not in allSubSplitLineStrings: allSubSplitLineStrings.append(lineString) else: @@ -1208,18 +1217,20 @@ class ContourScannerAndTrimmer(inkex.EffectExtension): self.msg("line {} already in sub split line collection. Dropping ...".format(lineString)) else: #if false we append all segments without filtering duplicate ones allSubSplitLineStrings.append(lineString) + if so.visualize_global_intersections is True: #ignore that calculation if false + allSubSplitLineStringsTransformed.append(allSubSplitLineStringsTransformed) - # Very small step sizes over near-vertical lines can cause errors. We hide exceptions with try-catch, thus we disabled the debugging in poly_point_isect: - # by setting USE_DEBUG = False (True was default setting) if so.show_debug is True: self.msg("Going to calculate intersections using Bentley Ottmann Sweep Line Algorithm") globalIntersectionPoints = MultiPoint(isect_segments(allSubSplitLineStrings, validate=True)) + if so.visualize_global_intersections is True: #ignore that calculation to save time + globalIntersectionPointsTransformed = MultiPoint(isect_segments(allSubSplitLineStringsTransformed, validate=True)) if so.show_debug is True: self.msg("global intersection points count: {}".format(len(globalIntersectionPoints))) if len(globalIntersectionPoints) > 0: if so.visualize_global_intersections is True: - self.visualize_global_intersections(globalIntersectionPoints) + self.visualize_global_intersections(globalIntersectionPointsTransformed) ''' now we trim the sub split lines at all calculated intersection points. diff --git a/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx index 4955d04d..7aea3e54 100644 --- a/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx +++ b/extensions/fablabchemnitz/lasercut_jigsaw/lasercut_jigsaw.inx @@ -3,22 +3,27 @@ Lasercut Jigsaw fablabchemnitz.de.lasercut_jigsaw + + + 4278190335 + 65535 + - 100.0 - 80.0 - 5.0 - + 100.0 + 80.0 + 5.0 + - false - 20.0 - 5.0 - + false + 20.0 + 5.0 + @@ -28,13 +33,13 @@ - 0.5 - 0.4 - false - 10 - true - 12345 - false + 0.5 + 0.4 + false + 10 + true + 12345 + false