gerbonara/examples/panelize.py

73 wiersze
1.9 KiB
Python
Executable File

#!/usr/bin/env python
import sys, os
import gerberex
from gerberex import DxfFile, GerberComposition, DrillComposition
exts = ['GTL', 'GTO', 'GTP', 'GTS', 'GBL', 'GBO', 'GBP', 'GBS', 'TXT']
boards=[
('inputs/sonopi-digi.', 0, 0, 0),
('inputs/sonopi-digi.', 0, 22.5, 0),
('inputs/rcstick-f-small.', 0, 60, 0),
('inputs/rcstick-f-small.', 20, 60, 0),
('inputs/rcstick-f-small.', 40, 60, 0),
('inputs/rcstick-f.', 92.216, 55.238, 190),
('inputs/rcstick-jig.', 0, 44, 0),
('inputs/stm32breakout.', 78.0, 59.36, 90),
('inputs/stm32breakout.', 100.0, 59.36, 90),
]
outline = 'inputs/outline.dxf'
mousebites = 'inputs/mousebites.dxf'
outputs = 'outputs/panelized'
os.chdir(os.path.dirname(__file__))
try:
os.mkdir('outputs')
except FileExistsError:
pass
def putstr(text):
sys.stdout.write(text)
sys.stdout.flush()
for ext in exts:
putstr('merging %s: ' % ext)
if ext == 'TXT':
ctx = DrillComposition()
else:
ctx = GerberComposition()
for path, x_offset, y_offset, angle in boards:
file = gerberex.read(path + ext)
file.to_metric()
file.rotate(angle)
file.offset(x_offset, y_offset)
ctx.merge(file)
putstr('.')
if ext == 'TXT':
file = gerberex.read(mousebites)
file.draw_mode = DxfFile.DM_MOUSE_BITES
file.to_metric()
file.width = 0.5
file.format = (3, 3)
ctx.merge(file)
else:
file = gerberex.read(outline)
ctx.merge(file)
ctx.dump(outputs + '.' + ext)
putstr(' end\n')
putstr('generating GML: ')
file = gerberex.read(outline)
file.write(outputs + '.GML')
putstr('.')
ctx = GerberComposition()
base = gerberex.rectangle(width=100, height=100, left=0, bottom=0, units='metric')
base.draw_mode = DxfFile.DM_FILL
ctx.merge(base)
file.draw_mode = DxfFile.DM_FILL
file.negate_polarity()
ctx.merge(file)
ctx.dump(outputs + '-fill.GML')
putstr('. end\n')