diff options
author | Hamilton Kibbe <hamilton.kibbe@gmail.com> | 2016-01-28 12:19:03 -0500 |
---|---|---|
committer | Hamilton Kibbe <hamilton.kibbe@gmail.com> | 2016-01-28 12:19:03 -0500 |
commit | 5df38c014fd09792995b2b12b1982c535c962c9a (patch) | |
tree | 3dd1f118a752b7b6e75511e1f3b3af3ac1b67bdc /gerber/pcb.py | |
parent | b9f1b106c3006f1dddb1279ae9622630a29d18c7 (diff) | |
download | gerbonara-5df38c014fd09792995b2b12b1982c535c962c9a.tar.gz gerbonara-5df38c014fd09792995b2b12b1982c535c962c9a.tar.bz2 gerbonara-5df38c014fd09792995b2b12b1982c535c962c9a.zip |
Cleanup, rendering fixes.
fixed rendering of tented vias
fixed rendering of semi-transparent layers
fixed file type detection issues
added some examples
Diffstat (limited to 'gerber/pcb.py')
-rw-r--r-- | gerber/pcb.py | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/gerber/pcb.py b/gerber/pcb.py index 92a1f28..a213fb3 100644 --- a/gerber/pcb.py +++ b/gerber/pcb.py @@ -18,7 +18,7 @@ import os from .exceptions import ParseError -from .layers import PCBLayer, LayerSet, sort_layers +from .layers import PCBLayer, sort_layers from .common import read as gerber_read from .utils import listdir @@ -29,22 +29,26 @@ class PCB(object): def from_directory(cls, directory, board_name=None, verbose=False): layers = [] names = set() + # Validate directory = os.path.abspath(directory) if not os.path.isdir(directory): raise TypeError('{} is not a directory.'.format(directory)) + # Load gerber files for filename in listdir(directory, True, True): try: camfile = gerber_read(os.path.join(directory, filename)) - layer = PCBLayer.from_gerber(camfile) + layer = PCBLayer.from_cam(camfile) layers.append(layer) names.add(os.path.splitext(filename)[0]) if verbose: - print('Added {} layer <{}>'.format(layer.layer_class, filename)) + print('[PCB]: Added {} layer <{}>'.format(layer.layer_class, + filename)) except ParseError: if verbose: - print('Skipping file {}'.format(filename)) + print('[PCB]: Skipping file {}'.format(filename)) + # Try to guess board name if board_name is None: if len(names) == 1: @@ -66,14 +70,16 @@ class PCB(object): board_layers = [l for l in reversed(self.layers) if l.layer_class in ('topsilk', 'topmask', 'top')] drill_layers = [l for l in self.drill_layers if 'top' in l.layers] - return board_layers + drill_layers + # Drill layer goes under soldermask for proper rendering of tented vias + return [board_layers[0]] + drill_layers + board_layers[1:] @property def bottom_layers(self): board_layers = [l for l in self.layers if l.layer_class in ('bottomsilk', 'bottommask', 'bottom')] drill_layers = [l for l in self.drill_layers if 'bottom' in l.layers] - return board_layers + drill_layers + # Drill layer goes under soldermask for proper rendering of tented vias + return [board_layers[0]] + drill_layers + board_layers[1:] @property def drill_layers(self): @@ -81,8 +87,9 @@ class PCB(object): @property def copper_layers(self): - return [layer for layer in self.layers if layer.layer_class in - ('top', 'bottom', 'internal')] + return list(reversed([layer for layer in self.layers if + layer.layer_class in + ('top', 'bottom', 'internal')])) @property def layer_count(self): |