From 9a6ab822f2ef388a07c4a85effbd1adc08618ea5 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 19 Oct 2020 12:26:43 +0200 Subject: [PATCH 1/2] gerbolyze: Add --exact option and fix copper layer processing --- gerbolyze | 3 ++- gerbolyze.py | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gerbolyze b/gerbolyze index e6c6d67..fad68b4 100755 --- a/gerbolyze +++ b/gerbolyze @@ -16,6 +16,7 @@ if __name__ == '__main__': vectorize_parser.add_argument('side', choices=['top', 'bottom'], help='Target board side') vectorize_parser.add_argument('--layer', '-l', choices=['silk', 'mask', 'copper'], default='silk', help='Target layer on given side') + vectorize_parser.add_argument('--exact', '-x', action='store_true', default=False, help='Do not subtract existing features on other layers from overlay') vectorize_parser.add_argument('source', help='Source gerber directory') vectorize_parser.add_argument('target', help='Target gerber directory') @@ -29,7 +30,7 @@ if __name__ == '__main__': args = parser.parse_args() if args.command == 'vectorize': - gerbolyze.process_gerbers(args.source, args.target, args.image, args.side, args.layer, args.debugdir) + gerbolyze.process_gerbers(args.source, args.target, args.image, args.side, args.layer, args.exact, args.debugdir) else: # command == render gerbolyze.render_preview(args.source, args.image, args.side, args.fab_resolution, args.oversampling) diff --git a/gerbolyze.py b/gerbolyze.py index 3284ae7..37d2356 100755 --- a/gerbolyze.py +++ b/gerbolyze.py @@ -305,7 +305,7 @@ LAYER_SPEC = { # Command line interface # ====================== -def process_gerbers(source, target, image, side, layer, debugdir): +def process_gerbers(source, target, image, side, layer, exact, debugdir): if not os.path.isdir(source): raise ValueError(f'Given source "{source}" is not a directory.') @@ -326,7 +326,7 @@ def process_gerbers(source, target, image, side, layer, debugdir): print('Target layer file {}'.format(os.path.basename(tname))) oname, ogrb = find_gerber_in_dir(source, layers['outline']) print('Outline layer file {}'.format(os.path.basename(oname))) - subtract = find_gerber_in_dir(source, layers[slayer]) if slayer else None + subtract = [find_gerber_in_dir(source, layers[slayer])] if slayer and not exact else [] # Prepare output. Do this now to error out as early as possible if there's a problem. if os.path.exists(target): @@ -337,7 +337,7 @@ def process_gerbers(source, target, image, side, layer, debugdir): sys.exit(1) # Generate output - out = paste_image(tgrb, ogrb, source_img, [subtract], debugdir=debugdir, status_print=lambda *args: print(*args, flush=True)) + out = paste_image(tgrb, ogrb, source_img, subtract, debugdir=debugdir, status_print=lambda *args: print(*args, flush=True)) shutil.copytree(source, target) with open(os.path.join(target, os.path.basename(tname)), 'w') as f: From cfcf4c53955a70e896511e30cda206c1dd081099 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 19 Oct 2020 12:27:09 +0200 Subject: [PATCH 2/2] gerbolyze: Add new KiCAD nightly extensions --- gerbolyze.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gerbolyze.py b/gerbolyze.py index 37d2356..bf26a33 100755 --- a/gerbolyze.py +++ b/gerbolyze.py @@ -288,14 +288,14 @@ def find_gerber_in_dir(dir_path, extensions, exclude=''): LAYER_SPEC = { 'top': { 'paste': '.gtp|-F_Paste.gbr|-F.Paste.gbr|.pmc', - 'silk': '.gto|-F_SilkS.gbr|-F.SilkS.gbr|.plc', + 'silk': '.gto|-F_SilkS.gbr|-F.SilkS.gbr|.plc|-F_Silkscreen.gbr', 'mask': '.gts|-F_Mask.gbr|-F.Mask.gbr|.stc', 'copper': '.gtl|-F_Cu.gbr|-F.Cu.gbr|.cmp', 'outline': '.gko|.gm1|-Edge_Cuts.gbr|-Edge.Cuts.gbr|.gmb', }, 'bottom': { 'paste': '.gbp|-B_Paste.gbr|-B.Paste.gbr|.pms', - 'silk': '.gbo|-B_SilkS.gbr|-B.SilkS.gbr|.pls', + 'silk': '.gbo|-B_SilkS.gbr|-B.SilkS.gbr|.pls|-B_Silkscreen.gbr', 'mask': '.gbs|-B_Mask.gbr|-B.Mask.gbr|.sts', 'copper': '.gbl|-B_Cu.gbr|-B.Cu.gbr|.sol', 'outline': '.gko|.gm1|-Edge_Cuts.gbr|-Edge.Cuts.gbr|.gmb'