From 7ee1866b607f5a7227c0fb949fd909f49c1b6334 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Silva Date: Wed, 5 Feb 2014 00:34:57 +0100 Subject: N w modular organization. * parser and render separeted on its own modules. * svn made optional. * PEP-8 compiant. --- gerber/__main__.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 gerber/__main__.py (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py new file mode 100644 index 0000000..6f861cf --- /dev/null +++ b/gerber/__main__.py @@ -0,0 +1,31 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2013-2014 Paulo Henrique Silva + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if __name__ == '__main__': + from .parser import GerberParser + from .render import GerberContext + + import sys + + if len(sys.argv) < 2: + print >> sys.stderr, "Usage: python -m gerber ..." + sys.exit(1) + + for filename in sys.argv[1:]: + print "parsing %s" % filename + g = GerberParser(GerberContext()) + g.parse(filename) -- cgit From 695e3d9220be8773f6630bb5c512d122b8576742 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Sun, 28 Sep 2014 18:07:15 -0400 Subject: Added excellon support and refactored project --- gerber/__main__.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 6f861cf..d32fa01 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -16,16 +16,23 @@ # limitations under the License. if __name__ == '__main__': - from .parser import GerberParser - from .render import GerberContext - - import sys - - if len(sys.argv) < 2: - print >> sys.stderr, "Usage: python -m gerber ..." - sys.exit(1) - - for filename in sys.argv[1:]: - print "parsing %s" % filename - g = GerberParser(GerberContext()) - g.parse(filename) + from .gerber import GerberFile + from .excellon import ExcellonParser + from .render import GerberSvgContext + + #import sys + # + #if len(sys.argv) < 2: + # print >> sys.stderr, "Usage: python -m gerber ..." + # sys.exit(1) + # + ##for filename in sys.argv[1]: + ## print "parsing %s" % filename + ctx = GerberSvgContext() + g = GerberFile.read('SCB.GTL') + g.render('test.svg', ctx) + p = ExcellonParser(ctx) + p.parse('ncdrill.txt') + p.dump('testwithdrill.svg') + + -- cgit From 3a5dbcf1e13704b7352d5fb3c4777d7df3fed081 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Sun, 28 Sep 2014 21:17:13 -0400 Subject: added ExcellonFile class --- gerber/__main__.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index d32fa01..31b70f8 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -10,10 +10,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. if __name__ == '__main__': from .gerber import GerberFile @@ -34,5 +34,3 @@ if __name__ == '__main__': p = ExcellonParser(ctx) p.parse('ncdrill.txt') p.dump('testwithdrill.svg') - - -- cgit From af97dcf2a8200d9319e20d2789dbb0baa0611ba5 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Tue, 7 Oct 2014 22:44:08 -0400 Subject: fix excellon render --- gerber/__main__.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 31b70f8..26f36e1 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -16,21 +16,20 @@ # the License. if __name__ == '__main__': - from .gerber import GerberFile - from .excellon import ExcellonParser + import gerber + import excellon from .render import GerberSvgContext #import sys # - #if len(sys.argv) < 2: + #if len(sys.argv) < 2:` # print >> sys.stderr, "Usage: python -m gerber ..." # sys.exit(1) # ##for filename in sys.argv[1]: ## print "parsing %s" % filename ctx = GerberSvgContext() - g = GerberFile.read('SCB.GTL') + g = gerber.read('examples/test.gtl') g.render('test.svg', ctx) - p = ExcellonParser(ctx) - p.parse('ncdrill.txt') - p.dump('testwithdrill.svg') + p = excellon.read('ncdrill.txt') + p.render('testwithdrill.svg', ctx) -- cgit From 1653ae5cbe88757e453bccf499dc1b8ccb278e58 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Wed, 8 Oct 2014 09:27:52 -0400 Subject: Update readme and example --- gerber/__main__.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 26f36e1..ab0f377 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -16,20 +16,20 @@ # the License. if __name__ == '__main__': - import gerber - import excellon + from .common import read from .render import GerberSvgContext + import sys + + if len(sys.argv) < 2: + print >> sys.stderr, "Usage: python -m gerber ..." + sys.exit(1) - #import sys - # - #if len(sys.argv) < 2:` - # print >> sys.stderr, "Usage: python -m gerber ..." - # sys.exit(1) - # - ##for filename in sys.argv[1]: - ## print "parsing %s" % filename ctx = GerberSvgContext() - g = gerber.read('examples/test.gtl') - g.render('test.svg', ctx) - p = excellon.read('ncdrill.txt') - p.render('testwithdrill.svg', ctx) + + for filename in sys.argv[1:]: + print "parsing %s" % filename + gerberfile = read(filename) + gerberfile.render(ctx) + print('Saving image to test.svg') + ctx.dump('test.svg') + -- cgit From c50949e15a839ecd27a6da273ccaf1dc3a7d7853 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Mon, 13 Oct 2014 13:26:32 -0400 Subject: Add SVG transparency --- gerber/__main__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index ab0f377..10da12e 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -25,11 +25,18 @@ if __name__ == '__main__': sys.exit(1) ctx = GerberSvgContext() - + ctx.set_alpha(0.95) for filename in sys.argv[1:]: print "parsing %s" % filename + if 'GTO' in filename or 'GBO' in filename: + ctx.set_color((1,1,1)) + ctx.set_alpha(0.8) + elif 'GTS' in filename or 'GBS' in filename: + ctx.set_color((0.2,0.2,0.75)) + ctx.set_alpha(0.8) gerberfile = read(filename) gerberfile.render(ctx) + print('Saving image to test.svg') ctx.dump('test.svg') -- cgit From 18e3b87625ddb739faeddffcaed48e12db6c7e8b Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Sun, 19 Oct 2014 22:23:00 -0400 Subject: Test update --- gerber/__main__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 10da12e..71e3bfc 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -29,14 +29,13 @@ if __name__ == '__main__': for filename in sys.argv[1:]: print "parsing %s" % filename if 'GTO' in filename or 'GBO' in filename: - ctx.set_color((1,1,1)) + ctx.set_color((1, 1, 1)) ctx.set_alpha(0.8) elif 'GTS' in filename or 'GBS' in filename: - ctx.set_color((0.2,0.2,0.75)) + ctx.set_color((0.2, 0.2, 0.75)) ctx.set_alpha(0.8) gerberfile = read(filename) gerberfile.render(ctx) print('Saving image to test.svg') ctx.dump('test.svg') - -- cgit From d98d23f8b5d61bb9d20e743a3c44bf04b6b2330a Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Mon, 2 Feb 2015 00:43:08 -0500 Subject: More tests and bugfixes --- gerber/__main__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 71e3bfc..8f20212 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -25,15 +25,15 @@ if __name__ == '__main__': sys.exit(1) ctx = GerberSvgContext() - ctx.set_alpha(0.95) + ctx.alpha = 0.95 for filename in sys.argv[1:]: print "parsing %s" % filename if 'GTO' in filename or 'GBO' in filename: - ctx.set_color((1, 1, 1)) - ctx.set_alpha(0.8) + ctx.color = (1, 1, 1) + ctx.alpha = 0.8 elif 'GTS' in filename or 'GBS' in filename: - ctx.set_color((0.2, 0.2, 0.75)) - ctx.set_alpha(0.8) + ctx.color = (0.2, 0.2, 0.75) + ctx.alpha = 0.8 gerberfile = read(filename) gerberfile.render(ctx) -- cgit From 0e98a3f0d451795b302a299fe801eb7ece8f735f Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Fri, 13 Feb 2015 01:42:39 +0100 Subject: Python3 needs print() --- gerber/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 8f20212..6e25bf3 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -27,7 +27,7 @@ if __name__ == '__main__': ctx = GerberSvgContext() ctx.alpha = 0.95 for filename in sys.argv[1:]: - print "parsing %s" % filename + print("parsing %s" % filename) if 'GTO' in filename or 'GBO' in filename: ctx.color = (1, 1, 1) ctx.alpha = 0.8 -- cgit From 7ace94b0230e9acd85097c1812840250d551015c Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Wed, 18 Feb 2015 15:35:01 +0100 Subject: Make gerber.render a package & fix more relative import statements --- gerber/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 6e25bf3..599c161 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -16,9 +16,9 @@ # the License. if __name__ == '__main__': - from .common import read - from .render import GerberSvgContext import sys + from gerber.common import read + from gerber.render import GerberSvgContext if len(sys.argv) < 2: print >> sys.stderr, "Usage: python -m gerber ..." -- cgit From ed7d9ceb349f405ca40f43835a5fd6fc1beed98b Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Wed, 18 Feb 2015 15:57:49 +0100 Subject: accidentially changed import order in 7ace94b --- gerber/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 599c161..a792182 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -16,9 +16,9 @@ # the License. if __name__ == '__main__': - import sys from gerber.common import read from gerber.render import GerberSvgContext + import sys if len(sys.argv) < 2: print >> sys.stderr, "Usage: python -m gerber ..." -- cgit From f74d9fcdf1d5634d915e9b84418d61d4b5e34d55 Mon Sep 17 00:00:00 2001 From: Philipp Klaus Date: Wed, 18 Feb 2015 15:39:42 +0100 Subject: `sys.stderr.write()` instead of `print >> sys.stderr, "..."` --- gerber/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index a792182..195973b 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -21,7 +21,7 @@ if __name__ == '__main__': import sys if len(sys.argv) < 2: - print >> sys.stderr, "Usage: python -m gerber ..." + sys.stderr.write("Usage: python -m gerber ...\n") sys.exit(1) ctx = GerberSvgContext() -- cgit From 7e2e469f5e705bcede137f15555da19898bf1f44 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Silva Date: Sun, 15 Nov 2015 22:31:36 -0200 Subject: Remove svgwrite backend We moved the functionality to cairo backend, it can write png and svg and maybe more (pdfs?) --- gerber/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 195973b..6643b54 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -17,14 +17,14 @@ if __name__ == '__main__': from gerber.common import read - from gerber.render import GerberSvgContext + from gerber.render import GerberCairoContext import sys if len(sys.argv) < 2: sys.stderr.write("Usage: python -m gerber ...\n") sys.exit(1) - ctx = GerberSvgContext() + ctx = GerberCairoContext() ctx.alpha = 0.95 for filename in sys.argv[1:]: print("parsing %s" % filename) -- cgit From 9cc42d9b7752603ae409e7c95a8cb5bec4d7b5b2 Mon Sep 17 00:00:00 2001 From: Chintalagiri Shashank Date: Sat, 11 May 2019 04:23:19 +0530 Subject: Make __main__ functional again and install a script entry point. --- gerber/__main__.py | 126 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 103 insertions(+), 23 deletions(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 6643b54..202c00b 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -15,27 +15,107 @@ # License for the specific language governing permissions and limitations under # the License. +import os +import argparse +from .render import available_renderers +from .render import theme +from .pcb import PCB +from . import load_layer + + +def main(): + parser = argparse.ArgumentParser( + description='Render gerber files to image', + prog='gerber-render' + ) + parser.add_argument( + 'filenames', metavar='FILENAME', type=str, nargs='+', + help='Gerber files to render. If a directory is provided, it should ' + 'be provided alone and should contain the gerber files for a ' + 'single PCB.' + ) + parser.add_argument( + '--outfile', '-o', type=str, nargs='?', default='out', + help="Output Filename (extension will be added automatically)" + ) + parser.add_argument( + '--backend', '-b', choices=available_renderers.keys(), default='cairo', + help='Choose the backend to use to generate the output.' + ) + parser.add_argument( + '--theme', '-t', choices=theme.THEMES.keys(), default='default', + help='Select render theme.' + ) + parser.add_argument( + '--width', type=int, default=1920, help='Maximum width.' + ) + parser.add_argument( + '--height', type=int, default=1080, help='Maximum height.' + ) + parser.add_argument( + '--verbose', '-v', action='store_true', default=False, + help='Increase verbosity of the output.' + ) + # parser.add_argument( + # '--quick', '-q', action='store_true', default=False, + # help='Skip longer running rendering steps to produce lower quality' + # ' output faster. This only has an effect for the freecad backend.' + # ) + # parser.add_argument( + # '--nox', action='store_true', default=False, + # help='Run without using any GUI elements. This may produce suboptimal' + # 'output. For the freecad backend, colors, transparancy, and ' + # 'visibility cannot be set without a GUI instance.' + # ) + + args = parser.parse_args() + + renderer = available_renderers[args.backend]() + + if args.backend in ['cairo', ]: + outext = 'png' + else: + outext = None + + if os.path.exists(args.filenames[0]) and os.path.isdir(args.filenames[0]): + directory = args.filenames[0] + pcb = PCB.from_directory(directory) + + if args.backend in ['cairo', ]: + top = pcb.top_layers + bottom = pcb.bottom_layers + copper = pcb.copper_layers + + outline = pcb.outline_layer + if outline: + top = [outline] + top + bottom = [outline] + bottom + copper = [outline] + copper + pcb.drill_layers + + renderer.render_layers( + layers=top, theme=theme.THEMES[args.theme], + max_height=args.height, max_width=args.width, + filename='{0}.top.{1}'.format(args.outfile, outext) + ) + renderer.render_layers( + layers=bottom, theme=theme.THEMES[args.theme], + max_height=args.height, max_width=args.width, + filename='{0}.bottom.{1}'.format(args.outfile, outext) + ) + renderer.render_layers( + layers=copper, theme=theme.THEMES['Transparent Multilayer'], + max_height=args.height, max_width=args.width, + filename='{0}.copper.{1}'.format(args.outfile, outext)) + else: + pass + else: + filenames = args.filenames + for filename in filenames: + layer = load_layer(filename) + settings = theme.THEMES[args.theme].get(layer.layer_class, None) + renderer.render_layer(layer, settings=settings) + renderer.dump(filename='{0}.{1}'.format(args.outfile, outext)) + + if __name__ == '__main__': - from gerber.common import read - from gerber.render import GerberCairoContext - import sys - - if len(sys.argv) < 2: - sys.stderr.write("Usage: python -m gerber ...\n") - sys.exit(1) - - ctx = GerberCairoContext() - ctx.alpha = 0.95 - for filename in sys.argv[1:]: - print("parsing %s" % filename) - if 'GTO' in filename or 'GBO' in filename: - ctx.color = (1, 1, 1) - ctx.alpha = 0.8 - elif 'GTS' in filename or 'GBS' in filename: - ctx.color = (0.2, 0.2, 0.75) - ctx.alpha = 0.8 - gerberfile = read(filename) - gerberfile.render(ctx) - - print('Saving image to test.svg') - ctx.dump('test.svg') + main() -- cgit From 404384cf912fa082c120ba5be81973ea097958fc Mon Sep 17 00:00:00 2001 From: Paulo Henrique Silva Date: Mon, 25 Nov 2019 23:56:24 -0300 Subject: Fix #98 --- gerber/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gerber/__main__.py') diff --git a/gerber/__main__.py b/gerber/__main__.py index 6643b54..50c5a42 100644 --- a/gerber/__main__.py +++ b/gerber/__main__.py @@ -17,7 +17,7 @@ if __name__ == '__main__': from gerber.common import read - from gerber.render import GerberCairoContext + from gerber.render.cairo_backend import GerberCairoContext import sys if len(sys.argv) < 2: -- cgit