Extension for pcb-tools package to panelize gerber files
Project description
pcb-tools-extension
pcb-tools-extension is a Python library to panelize gerber files. This library is designed based on pcb-tools which provides cool functionality to handle PCB such as generationg PCB image from gerber files.
pcb-tools-extension adds following function to pcb-tools.
- Rotate PCB data
- Write back loaded PCB data (original pcb-tools does not work in some condition)
- Merge multiple PCB data
- Translate DXF file to gerber data
Only RS-274x format and Excellon drill format data can be handled by current version of this library.
Install
$ pip install pcb-tools-extension
How to panelize
Following code is a example to panelize two top metal layer files.
import gerberex
ctx = gerberex.GerberComposition()
metal1 = gerberex.read('board1.gtl')
ctx.merge(metal1)
metal2 = gerberex.read('board2.gtl')
metal2.to_metric()
metal2.rotate(-20)
metal2.offset(30, 0)
ctx.merge(metal2)
ctx.dump('panelized-board.gtl')
rotate()
method can be used to rotate PCB data counterclockwise. you have to specify angle in degree.
offset()
method can be used to move PCB data. Specified offset values are interpreted according to unit setting of PCB data. In case of the above code, board2.gtl
move to 30mm left since to_metric()
is called.
In case of Excellon drill data, you have to use DrillCompositon
instead of GerberComposition
.
import gerberex
ctx = gerberex.DrillComposition()
drill1 = gerberex.read('board1.txt')
ctx.merge(drill1)
drill2 = gerberex.read('board2.txt')
drill2.to_metric()
drill2.rotate(-20)
drill2.offset(30, 0)
ctx.merge(drill2)
ctx.dump('panelized-board.txt')
DXF file translation
PCB Outline
You can also load a dxf file and handle that as same as RX-274x gerber file.
This function is useful to generate outline data of pnanelized PCB boad.
import gerberex
ctx = gerberex.GerberComposition()
dxf = gerberex.read('outline.dxf')
ctx.merge(dxf)
Circle object, Arc object, Line object and Polyline object are supported. Other kind of objects in DXF file are ignored when translating to gerber data.
You can specify line width (default 0). PCB tools extension will translate DXF primitive shape to RX-274x line or arc sequense using circle aperture with diamater as same as specified line width.
import gerberex
dxf = gerberex.read('outline.dxf')
dxf.to_inch()
dxf.width = 0.004
dxf.write('outline.gml')
You can also translate DXF closed shape such as circle to RX-274x polygon fill sequence.
In order to fill closed shape, DM_FILL
has to be set to draw_mode
property. In this mode, All object except closed shapes listed below are ignored.
- circle
- closed polyline
- closed path which consists of lines and arcs
import gerberex
dxf = gerberex.read('outline.dxf')
dxf.draw_mode = dxf.DM_FILL
dxf.write('outline.gml')
If you want to arrange simple rectangle for PCB outline, gerberex.rectangle()
is better solution. This generate a object representing a rectangle compatible with DXF file object.
import gerberex
outline = gerberex.rectangle(width=100, height=100, units='metric')
outline.write('outline.gml')
Mouse bites
If DM_MOUSE_BITES
is specified for draw_mode
, filled circles are arranged along a DXF line object at equal intervals.
DXF file object in this state can be merged to excellon file also. That means you can arrange mouse bites easily.
import gerberex
ctx = gerberex.DrillComposition()
drill = gerberex.read('drill.txt')
ctx.merge(drill)
dxf = gerberex.read('mousebites.dxf')
dxf.draw_mode = dxf.DM_MOUSE_BITES
dxf.to_metric()
dxf.width = 0.5
dxf.pitch = 1
ctx.merge(dxf)
ctx.dump('merged_drill.txt')
Panelizing Example
This example board image is generated by following scripts from these source data.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for pcb_tools_extension-0.1.4_5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d821c258e703cc185388a7808363bc46fada6e4609124834b582750ced01322 |
|
MD5 | 7aff0e7a309baa54e13ef1ef9499437a |
|
BLAKE2b-256 | 62af6dc143250e38c3b3654feeb83e350afbe4d457eb01a5fa68a5ca44db21ef |