summaryrefslogtreecommitdiff
path: root/examples/panelize.py
blob: 20a2caca95420aa085a6fb7f8aef9fd2b3360415 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/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')