From 6f6bd526869d7160ae9fedf81632a219a64eadaa Mon Sep 17 00:00:00 2001 From: Mario Voigt Date: Thu, 24 Jun 2021 00:16:22 +0200 Subject: [PATCH] Added some option to remove subsplits in contour scanner --- .../contour_scanner_and_trimmer.inx | 1 + .../contour_scanner_and_trimmer.py | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx index 670902ce..3db73666 100644 --- a/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx +++ b/extensions/fablabchemnitz/contour_scanner_and_trimmer/contour_scanner_and_trimmer.inx @@ -76,6 +76,7 @@ true true false + true true true 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 04c59af5..8d317681 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 @@ -18,6 +18,7 @@ Extension for InkScape 1.0+ - maybe option: convert rel path to abs path replacedelement.path = replacedelement.path.to_absolute().to_superpath().to_path() - maybe option: break apart while keeping relative/absolute commands (more complex and not sure if we have a great advantage having this) + - note: running this extension might leave some empty parent groups in some circumstances. run the clean groups extension separately to fix that - important to notice - this algorithm might be really slow. Reduce flattening quality to speed up @@ -52,7 +53,7 @@ Extension for InkScape 1.0+ Author: Mario Voigt / FabLab Chemnitz Mail: mario.voigt@stadtfabrikanten.org Date: 09.08.2020 (extension originally called "Contour Scanner") -Last patch: 23.06.2021 +Last patch: 24.06.2021 License: GNU GPL v3 ''' @@ -74,7 +75,7 @@ if speedups.available: speedups.enable() idPrefixSubSplit = "subsplit" -idPrefixTrimming = "shapely" +idPrefixTrimming = "trimmed" intersectedVerb = "intersected" collinearVerb = "collinear" @@ -649,6 +650,7 @@ class ContourScannerAndTrimmer(inkex.EffectExtension): pars.add_argument("--combine_nonintersects", type=inkex.Boolean, default=True, help="Combine non-intersected lines") pars.add_argument("--remove_trim_duplicates", type=inkex.Boolean, default=True, help="Remove duplicate trim lines") pars.add_argument("--reverse_trim_removal_order", type=inkex.Boolean, default=False, help="Reverses the order of removal. Relevant for keeping certain styles of elements") + pars.add_argument("--remove_subsplit_after_trimming", type=inkex.Boolean, default=True, help="Remove sub split lines after trimming") #Trimming - Bentley-Ottmann sweep line settings pars.add_argument("--bent_ott_use_ignore_segment_endings", type=inkex.Boolean, default=True, help="Whether to ignore intersections of line segments when both their end points form the intersection point") pars.add_argument("--bent_ott_use_debug", type=inkex.Boolean, default=False) @@ -696,7 +698,8 @@ class ContourScannerAndTrimmer(inkex.EffectExtension): if so.highlight_merges is True: so.filter_subsplit_collinear = True - if so.filter_subsplit_collinear_action == "separate_group": + if so.filter_subsplit_collinear is True: #this is a must. + #if so.draw_subsplit is disabled bu we filter sub split lines and follow with trim operation we lose a lot of elements which may not be deleted! so.draw_subsplit = True #some constant stuff / styles @@ -1087,11 +1090,21 @@ class ContourScannerAndTrimmer(inkex.EffectExtension): if so.remove_trim_duplicates is True: if so.show_debug is True: self.msg("checking for duplicate trim lines and deleting them") self.remove_trim_duplicates(allTrimGroups) - + if so.combine_nonintersects is True: if so.show_debug is True: self.msg("glueing together all non-intersected sub split lines to larger path structures again (cleaning up)") - self. combine_nonintersects(allTrimGroups) + self.combine_nonintersects(allTrimGroups) + if so.remove_subsplit_after_trimming is True: + if so.show_debug is True: self.msg("removing unwanted subsplit lines after trimming") + for subSplitLine in subSplitLineArray: + ssl_parent = subSplitLine.getparent() + subSplitLine.delete() + if ssl_parent is not None and len(ssl_parent) == 0: + if self.options.show_debug is True: + self.msg("Deleting group {}".format(ssl_parent.get('id'))) + ssl_parent.delete() + except AssertionError as e: self.msg("Error calculating global intersections.\n\ See https://github.com/ideasman42/isect_segments-bentley_ottmann.\n\n\