Source code for tendril.gedaif.gerberfiles

#!/usr/bin/env python
# encoding: utf-8

# Copyright (C) 2015 Chintalagiri Shashank
#
# This file is part of tendril.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""
Docstring for gerberfiles
"""

from gerber.render.cairo_backend import PCBCairoContext
from gerber.render.cairo_backend import GerberCairoContext
from gerber.common import read
from gerber.render import theme


[docs]class TendrilPCBCairoContext(PCBCairoContext): outline_color = (0.0, 0.612, 0.396) outline_alpha = 1.0 copper_color = theme.COLORS['enig copper'] copper_alpha = 1.0 mask_color = theme.COLORS['green soldermask'] mask_alpha = 0.75 silk_color = theme.COLORS['white'] silk_alpha = 1.0 drill_color = theme.COLORS['black'] drill_alpha = 1.0 layer_colors = [ (0.804, 0.216, 0), (0.329, 0.545, 0.329), (0.545, 0.137, 0.137), (0.227, 0.373, 0.804), (0.78, 0.776, 0.251), (0.545, 0.451, 0.333), (0, 0.525, 0.545), (0.133, 0.545, 0.133), ] far_side = []
[docs] def render_top_view(self, output_filename=None, quick=False, nox=False): output_filename = '{0}.top.png'.format(output_filename) ctx = GerberCairoContext() if self.outline_color is not None: ctx.color = self.outline_color if self.outline_alpha is not None: ctx.alpha = self.outline_alpha outline = read(self.layers.outline) outline.render(ctx) if self.copper_color is not None: ctx.color = self.copper_color if self.copper_alpha is not None: ctx.alpha = self.copper_alpha copper = read(self.layers.top) copper.render(ctx) if self.mask_color is not None: ctx.color = self.mask_color if self.mask_alpha is not None: ctx.alpha = self.mask_alpha mask = read(self.layers.topmask) mask.render(ctx, invert=True) if self.silk_color is not None: ctx.color = self.silk_color if self.silk_alpha is not None: ctx.alpha = self.silk_alpha silk = read(self.layers.topsilk) silk.render(ctx) if self.drill_color is not None: ctx.color = self.drill_color if self.drill_alpha is not None: ctx.alpha = self.drill_alpha drill = read(self.layers.drill) drill.render(ctx) ctx.dump(output_filename)
[docs] def render_bottom_view(self, output_filename=None, quick=False, nox=False): output_filename = '{0}.bottom.png'.format(output_filename) ctx = GerberCairoContext() if self.outline_color is not None: ctx.color = self.outline_color if self.outline_alpha is not None: ctx.alpha = self.outline_alpha outline = read(self.layers.outline) outline.render(ctx) if self.copper_color is not None: ctx.color = self.copper_color if self.copper_alpha is not None: ctx.alpha = self.copper_alpha copper = read(self.layers.bottom) copper.render(ctx) if self.mask_color is not None: ctx.color = self.mask_color if self.mask_alpha is not None: ctx.alpha = self.mask_alpha mask = read(self.layers.bottommask) mask.render(ctx, invert=True) if self.silk_color is not None: ctx.color = self.silk_color if self.silk_alpha is not None: ctx.alpha = self.silk_alpha silk = read(self.layers.bottomsilk) silk.render(ctx) if self.drill_color is not None: ctx.color = self.drill_color if self.drill_alpha is not None: ctx.alpha = self.drill_alpha drill = read(self.layers.drill) drill.render(ctx) ctx.dump(output_filename)
[docs] def render_devel_view(self, output_filename=None, quick=False, nox=False): output_filename = '{0}.devel.png'.format(output_filename) ctx = GerberCairoContext() ctx.color = theme.COLORS['fr-4'] ctx.alpha = 1.0 outline = read(self.layers.outline) outline.render(ctx) ctx.color = self.copper_color bottompaste = read(self.layers.bottompaste) bottompaste.render(ctx) ctx.alpha = 0.9 ctx.color = self.silk_color bottomsilk = read(self.layers.bottomsilk) bottomsilk.render(ctx) num_copper_layers = len(self.layers.internal) if self.layers.top is not None: num_copper_layers += 1 if self.layers.bottom is not None: num_copper_layers += 1 ctx.color = self.layer_colors[num_copper_layers - 1] bottom = read(self.layers.bottom) bottom.render(ctx) ctx.alpha = 0.5 for idx, l in enumerate(self.layers.internal): layer = read(l) ctx.color = self.layer_colors[num_copper_layers - 2 - idx] layer.render(ctx) ctx.alpha = 0.9 ctx.color = self.layer_colors[0] top = read(self.layers.top) top.render(ctx) ctx.color = self.silk_color topsilk = read(self.layers.topsilk) topsilk.render(ctx) ctx.color = self.copper_color toppaste = read(self.layers.toppaste) toppaste.render(ctx) ctx.color = theme.COLORS['black'] ctx.alpha = 1.0 drill = read(self.layers.drill) drill.render(ctx) ctx.dump(output_filename)
[docs] def render(self, *args, **kwargs): self.layers = self.dialect(self.filenames) self.render_top_view(*args, **kwargs) self.render_bottom_view(*args, **kwargs) self.render_devel_view(*args, **kwargs)