From 4eb0e063bcd34c21b737023aa6ed5baed80658d1 Mon Sep 17 00:00:00 2001 From: jaseg Date: Sun, 13 Jun 2021 15:00:17 +0200 Subject: Repo re-org, make gerberex tests run --- gerbonara/gerber/__main__.py | 122 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 gerbonara/gerber/__main__.py (limited to 'gerbonara/gerber/__main__.py') diff --git a/gerbonara/gerber/__main__.py b/gerbonara/gerber/__main__.py new file mode 100644 index 0000000..988adff --- /dev/null +++ b/gerbonara/gerber/__main__.py @@ -0,0 +1,122 @@ +#! /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. + +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__': + main() + -- cgit