summaryrefslogtreecommitdiff
path: root/gerber/pcb.py
diff options
context:
space:
mode:
Diffstat (limited to 'gerber/pcb.py')
-rw-r--r--gerber/pcb.py23
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):