Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • pub/libraries
  • calischs/libraries
2 results
Select Git revision
  • master
  • patch-1
2 results
Show changes
Showing
with 6509 additions and 0 deletions
(module fab_IC_SOIC14 (layer F.Cu) (tedit 5F8872F2)
(attr smd)
(fp_text reference IC_SOIC14 (at 0 -5.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 5.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1 -4.5) (end -2 -3.5) (layer F.SilkS) (width 0.12))
(fp_line (start -2 4.5) (end -2 -4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 2 4.5) (end -2 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 2 -4.5) (end 2 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -2 -4.5) (end 2 -4.5) (layer F.SilkS) (width 0.12))
(pad 1 smd roundrect (at -3.15214 -3.81 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 2 smd rect (at -3.15214 -2.54 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -3.15214 -1.27 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -3.15214 0 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at -3.15214 1.27 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at -3.15214 2.54 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at -3.15214 3.81 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 3.15214 3.81 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at 3.15214 2.54 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at 3.15214 1.27 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 3.15214 0 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 3.15214 -1.27 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 3.15214 -2.54 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 3.15214 -3.81 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
)
(module fab_IC_SOIC20 (layer F.Cu) (tedit 5F8875D0)
(attr smd)
(fp_text reference IC_SOIC20 (at 0 -7.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -3.75 -6.5) (end 3.75 -6.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.75 6.5) (end -3.75 6.5) (layer F.SilkS) (width 0.12))
(fp_line (start -3.75 6.5) (end -3.75 -6.5) (layer F.SilkS) (width 0.12))
(fp_line (start -2.5 -6.5) (end -3.75 -5.25) (layer F.SilkS) (width 0.12))
(fp_line (start 3.75 -6.5) (end 3.75 6.5) (layer F.SilkS) (width 0.12))
(pad 1 smd roundrect (at -4.953 -5.715) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 2 smd rect (at -4.953 -4.445) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -4.953 -3.175) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -4.953 -1.905) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at -4.953 -0.635) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at -4.953 0.635) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at -4.953 1.905) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at -4.953 3.175) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at -4.953 4.445) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at -4.953 5.715) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 4.953 5.715) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 4.953 4.445) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 4.953 3.175) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 4.953 1.905) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 15 smd rect (at 4.953 0.635) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 16 smd rect (at 4.953 -0.635) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 17 smd rect (at 4.953 -1.905) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 4.953 -3.175) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 19 smd rect (at 4.953 -4.445) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
(pad 20 smd rect (at 4.953 -5.715) (size 2.2 0.5) (layers F.Cu F.Paste F.Mask))
)
(module fab_IC_SOIC8 (layer F.Cu) (tedit 5F8871ED)
(attr smd)
(fp_text reference IC_SOIC8 (at 0 -3.4925) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 3.429) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2 -2.5) (end 2 -2.5) (layer F.SilkS) (width 0.12))
(fp_line (start 2 -2.5) (end 2 2.5) (layer F.SilkS) (width 0.12))
(fp_line (start 2 2.5) (end -2 2.5) (layer F.SilkS) (width 0.12))
(fp_line (start -2 2.5) (end -2 -2.5) (layer F.SilkS) (width 0.12))
(fp_line (start -1 -2.5) (end -2 -1.5) (layer F.SilkS) (width 0.12))
(pad 1 smd roundrect (at -3.15214 -1.905 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 2 smd rect (at -3.15214 -0.64262 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -3.15214 0.62484 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -3.15214 1.89484 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 3.15214 1.905 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 3.15214 0.635 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at 3.15214 -0.635 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 3.15214 -1.905 270) (size 0.5 2.2) (layers F.Cu F.Paste F.Mask))
)
(module fab_LED_1206 (layer F.Cu) (tedit 5F887772)
(attr smd)
(fp_text reference LED_1206 (at 0 -1.905) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 1.905) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.127))
(fp_line (start 2.032 -1.016) (end 2.032 1.016) (layer B.SilkS) (width 0.127))
(fp_line (start 2.032 1.016) (end -2.032 1.016) (layer F.SilkS) (width 0.127))
(fp_line (start -2.032 1.016) (end -2.032 -1.016) (layer B.SilkS) (width 0.127))
(fp_line (start -2.6 -1) (end -2.6 1) (layer F.SilkS) (width 0.12))
(pad 1 smd rect (at -1.778 0) (size 1.5 2) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 1.778 0) (size 1.5 2) (layers F.Cu F.Paste F.Mask))
)
(module fab_LED_RGB (layer F.Cu) (tedit 5F887A11)
(fp_text reference REF** (at 0 2.2) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED_RGB (at 0 -2.2) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.7 -1.4) (end 1.7 -1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.7 -1.4) (end 1.7 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.7 1.4) (end -1.7 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start -1.7 1.4) (end -1.7 -1.4) (layer F.SilkS) (width 0.12))
(fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12))
(fp_line (start -1 -1.4) (end -1.7 -0.7) (layer F.SilkS) (width 0.12))
(pad 1 smd rect (at -2.2 -0.8) (size 2 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -2.2 0.8) (size 2 0.7) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 2.2 0.8) (size 2 0.7) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 2.2 -0.8) (size 2 0.7) (layers F.Cu F.Paste F.Mask))
)
(module fab_R_1206 (layer F.Cu) (tedit 5F886E48)
(attr smd)
(fp_text reference R_1206 (at 0 -1.905) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 1.905) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.032 1.016) (end -2.032 -1.016) (layer B.SilkS) (width 0.127))
(fp_line (start 2.032 1.016) (end -2.032 1.016) (layer F.SilkS) (width 0.127))
(fp_line (start 2.032 -1.016) (end 2.032 1.016) (layer B.SilkS) (width 0.127))
(fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.127))
(pad 1 smd rect (at -1.778 0) (size 1.5 2) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 1.778 0) (size 1.5 2) (layers F.Cu F.Paste F.Mask))
)
(module fab_SMD_SOT223 (layer F.Cu) (tedit 5F88793B)
(fp_text reference REF** (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SMD_SOT223 (at 0 -6) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -3.2 1.8) (end -3.2 -1.8) (layer F.SilkS) (width 0.12))
(fp_line (start 3.2 1.8) (end -3.2 1.8) (layer F.SilkS) (width 0.12))
(fp_line (start 3.2 -1.8) (end 3.2 1.8) (layer F.SilkS) (width 0.12))
(fp_line (start -3.2 -1.8) (end 3.2 -1.8) (layer F.SilkS) (width 0.12))
(pad 1 smd rect (at -2.25 3.75) (size 1 3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 0 3.75) (size 1 3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 2.25 3.75) (size 1 3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 0 -3.75) (size 3.5 3) (layers F.Cu F.Paste F.Mask))
)
(module fab_SMD_SOT23 (layer F.Cu) (tedit 5F88736F)
(attr smd)
(fp_text reference SMD_SOT23 (at 0 -3) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value REF** (at 0 3) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 0.8636 -0.6604) (end 1.4224 -0.6604) (layer B.SilkS) (width 0.1524))
(fp_line (start 1.4224 -0.6604) (end 1.4224 0.1524) (layer B.SilkS) (width 0.1524))
(fp_line (start -1.4224 -0.6604) (end -0.8636 -0.6604) (layer B.SilkS) (width 0.1524))
(fp_line (start -1.4224 0.1524) (end -1.4224 -0.6604) (layer B.SilkS) (width 0.1524))
(fp_line (start -1.4224 -0.6604) (end 1.4224 -0.6604) (layer F.SilkS) (width 0.1524))
(fp_line (start -1.4224 0.6604) (end -1.4224 -0.6604) (layer F.SilkS) (width 0.1524))
(fp_line (start 1.4224 0.6604) (end -1.4224 0.6604) (layer F.SilkS) (width 0.1524))
(fp_line (start 1.4224 -0.6604) (end 1.4224 0.6604) (layer F.SilkS) (width 0.1524))
(pad 1 smd rect (at -0.94996 1.5) (size 0.5 1.6) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 0.94996 1.5) (size 0.5 1.6) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 0 -1.5) (size 0.5 1.6) (layers F.Cu F.Paste F.Mask))
)
(module fab_SW_pushbutton (layer F.Cu) (tedit 5F88811F)
(fp_text reference REF** (at 0 2.2) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_pushbutton (at 0 -4.2) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 0 1.2) (layer F.SilkS) (width 0.12))
(fp_line (start -3.2 3) (end -3.2 -3) (layer F.SilkS) (width 0.12))
(fp_line (start 3.2 3) (end -3.2 3) (layer F.SilkS) (width 0.12))
(fp_line (start 3.2 -3) (end 3.2 3) (layer F.SilkS) (width 0.12))
(fp_line (start -3.2 -3) (end 3.2 -3) (layer F.SilkS) (width 0.12))
(pad 1 smd rect (at -3.6 -2) (size 4 0.8) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3.6 2) (size 4 0.8) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 3.6 2) (size 4 0.8) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at 3.6 -2) (size 4 0.8) (layers F.Cu F.Paste F.Mask))
)
kicad/footprints.png

35.5 KiB

This diff is collapsed.
<a href='https://www.mattkeeter.com/projects/kokopelli/'>Kokopelli</a> is an old (but great) project from <a href='https://www.mattkeeter.com/'>Matt Keeter</a>. Its a full-blown CAD program, but it can be used for designing PCBs. The programmatic interface makes it easy to set up relationships between components, traces, etc. and you can toolpath for the circuit mill right in kokopelli.
To use it, clone it from github: https://github.com/mkeeter/kokopelli and install with the makefile.
I've added a couple small utilities to Matt's original PCB design library. If you'd like to use them, you can replace the existing koko/lib/pcb.py with <a href='pcb.py'>pcb.py</a> and reinstall.
A fun example using several of the included features is a stepper driver board I designed:
<img src='servo-stepper-v1-layout.png' width=500px>
This diff is collapsed.
kokopelli/servo-stepper-v1-layout.png

88.1 KiB

#!/usr/bin/env node
//
// frep.js
// functional representation solver
//
// usage:
// pcb.py | frep.js [dpi [workers [filename]]]
// with:
// https://gitlab.cba.mit.edu/pub/libraries/blob/master/python/pcb.py
//
// Neil Gershenfeld 12/7/19
//
// This work may be reproduced, modified, distributed,
// performed, and displayed for any purpose, but must
// acknowledge this project. Copyright is retained and
// must be preserved. The work is provided as is; no
// warranty is provided, and users accept all liability.
//
const fs = require("fs")
const os = require("os")
const {Worker} = require('worker_threads')
//
// get frep from stdin
//
var input = ''
process.stdin.on('readable',() => {
var chunk = process.stdin.read()
if (chunk != null)
input += chunk
})
process.stdin.on('end',() => {
render(JSON.parse(input))
})
//
// render function
//
function render(frep) {
//
// check arguments
//
if (frep.zmin != frep.zmax) {
console.log('> 2D not (yet) supported')
process.exit()
}
if (frep.type != 'RGB') {
console.log('types other than RGB not (yet) supported')
process.exit()
}
if (process.argv.length == 2) {
var dpi = 100
workers = os.cpus().length
var filename = 'out.png'
console.log('output to out.png at 100 DPI')
}
else if (process.argv.length == 3) {
var dpi = parseInt(process.argv[2])
workers = os.cpus().length
var filename = 'out.png'
console.log('output to out.png at '+dpi+' DPI')
}
else if (process.argv.length == 4) {
var dpi = parseInt(process.argv[2])
var workers = parseInt(process.argv[3])
var filename = 'out.png'
console.log('output to '+filename+' at '+dpi+' DPI')
}
else if (process.argv.length == 5) {
var dpi = parseInt(process.argv[2])
var workers = parseInt(process.argv[3])
var filename = process.argv[4]
console.log('output to '+filename+' at '+dpi+' DPI')
}
//
// set variables
//
var delta = (25.4/dpi)/frep.mm_per_unit
var width = Math.floor(1+(frep.xmax-frep.xmin)/delta)
var height = Math.floor(1+(frep.ymax-frep.ymin)/delta)
var buf = new SharedArrayBuffer(width*height*4)
var data = new Uint8Array(buf)
//
// worker thread
//
var thread =
`
const Worker = require('worker_threads')
Worker.parentPort.on('message',(msg) => {
var fn = Function('X','Y','Z','return('+msg.fn+')')
var data = new Uint8Array(msg.buf)
var width = msg.width
var height = msg.height
var xmin = msg.xmin
var ymin = msg.ymin
var delta = msg.delta
var z = msg.z
var index = msg.index
var workers = msg.workers
var start = Math.round(width*index/workers)
var stop = Math.round(width*(index+1)/workers)-1
console.log(index+': '+start+'-'+stop)
var x,y,f
for (let row = 0; row < height; ++row) {
y = ymin+(height-1-row)*delta
for (let col = start; col <= stop; ++col) {
x = xmin+col*delta
f = fn(x,y,z)
data[row*width*4+col*4+0] = (f & 255)
data[row*width*4+col*4+1] = ((f >> 8) & 255)
data[row*width*4+col*4+2] = ((f >> 16) & 255)
data[row*width*4+col*4+3] = 255
}
}
Worker.parentPort.postMessage(index)
})
`
//
// start workers
//
console.log('start '+workers+' workers')
var count = 0
for (let i = 0; i < workers; ++i) {
var worker = new Worker(thread,{eval:true})
//
// worker message handler
//
worker.on('message',(msg) => {
console.log('done: '+msg)
count += 1
//
// check if done
//
if (count == workers) {
var dpm = 1000*dpi/25.4
fs.writeFileSync(filename,PNG(data,width,height,dpm))
console.log('wrote '+width+'x'+height)
process.exit()
}
})
worker.postMessage({index:i,workers:workers,
delta:delta,width:width,height:height,xmin:frep.xmin,ymin:frep.ymin,
z:frep.layers[0], // need to handle multiple layers
buf:buf,fn:frep.function})
}
}
//
// PNG function
//
function PNG(array,width,height,dpm) {
//
// PNG buffer
//
var length =
8 // signature
+ 25 // IHDR
+ 21 // pHYs
+ 12 // IDAT length, type, CRC
+ 2 // zlib header
+ 4 // zlib checksum
+ 5*(Math.ceil((height+width*height*4)/0xffff)) // block headers
+ width*height*4 // pixels
+ height // scanline filters
+ 12 // IEND
var buf = new ArrayBuffer(length)
var arr = new Uint8Array(buf)
var view = new DataView(buf)
//
// checksum functions
//
var CRC32table = []
for (let n = 0; n < 256; ++n) {
var crc = new Uint32Array(1)
crc[0] = n
for (let i = 0; i < 8; ++i) {
if (crc[0] & 1)
crc[0] = 0xedb88320 ^ (crc[0] >>> 1)
else
crc[0] = crc[0] >>> 1
}
CRC32table[n] = crc[0]
}
function CRC32(buf,start,stop) {
var crc = new Uint32Array(1)
crc[0] = 0xffffffff
for (let i = start; i < stop; ++i)
crc[0] = CRC32table[(crc[0] ^ buf[i]) & 0xff] ^ (crc[0] >>> 8);
crc[0] = crc[0] ^ 0xffffffff
return(crc[0])
}
var CRCAdler32 = new Uint32Array([1,0,0])
function Adler32(byte,crc) {
crc[0] = (crc[0]+byte)%65521
crc[1] = (crc[1]+crc[0])%65521
crc[2] = (crc[1]<<16)+crc[0]
return(crc)
}
//
var ptr = 0
var LengthPtr,DataStart,CRCstart,AdlerStart
//
// signature
//
arr.set([137,80,78,71,13,10,26,10],ptr)
ptr += 8
//
// IHDR length
//
view.setUint32(ptr,13,false)
ptr += 4
//
// IHDR type
//
CRCstart = ptr
arr.set([73,72,68,82],ptr)
ptr += 4
//
// IHDR data
//
view.setUint32(ptr,width,false) // width
ptr += 4
view.setUint32(ptr,height,false) // height
ptr += 4
arr.set([8,6,0,0,0],ptr)// 8 bit depth, RGBA, deflate compression, adaptive filter
ptr += 5
//
// IHDR CRC
//
view.setUint32(ptr,CRC32(arr,CRCstart,ptr),false)
ptr += 4
//
// pHYs length
//
view.setUint32(ptr,9,false)
ptr += 4
//
// pHYs type
//
CRCstart = ptr
arr.set([112,72,89,115],ptr)
ptr += 4
//
// pHYs data
//
view.setUint32(ptr,dpm) // x pixels per unit
ptr += 4
view.setUint32(ptr,dpm) // y pixels per unit
ptr += 4
view.setUint8(ptr,1) // meter unit
ptr += 1
//
// pHYs CRC
//
view.setUint32(ptr,CRC32(arr,CRCstart,ptr),false)
ptr += 4
//
// IDAT length location
//
LengthPtr = ptr
ptr += 4
//
// IDAT type
//
CRCstart = ptr
arr.set([73,68,65,84],ptr)
ptr += 4
//
// IDAT data
//
// IDAT data zlib header
//
DataStart = ptr
arr.set([0x78,0x01],ptr)
ptr += 2
//
// IDAT data deflate blocks
//
var BlockSize = 0xffff
var BlockByte = 0
var DataSize = height+width*height*4
var DataByte = 0
function BlockData(byte) {
if (BlockByte == 0) { // start of new block
if (DataByte+BlockSize < DataSize) {
var BlockLength = BlockSize
view.setUint8(ptr,0) // block header, not last block, no compression
ptr += 1
}
else if (DataByte+BlockSize == DataSize) {
var BlockLength = BlockSize
view.setUint8(ptr,1) // block header, last block, no compression
ptr += 1
}
else {
var BlockLength = DataSize-DataByte
view.setUint8(ptr,1) // block header, last block, no compression
ptr += 1
}
view.setUint16(ptr,BlockLength,true) // block length, little-endian
ptr += 2
view.setUint16(ptr,0xffff ^ view.getUint16(ptr-2,true),true) // block length one's complement
ptr += 2
}
CRCAdler32 = Adler32(byte,CRCAdler32) // update zlib checksum
view.setUint8(ptr,byte) // save byte to PNG buffer
ptr += 1 // move PNG pointer
DataByte += 1 // move data counter
BlockByte += 1 // move block counter
if (BlockByte == BlockSize) // end of deflate block
BlockByte = 0 // next byte starts new block
}
//
// IDAT data scan lines
//
for (let row = 0; row < height; ++row) {
BlockData(0) // scan line, no filter
for (let col = 0; col < width; ++col) {
BlockData(array[row*width*4+col*4+0]) // R
BlockData(array[row*width*4+col*4+1]) // G
BlockData(array[row*width*4+col*4+2]) // B
BlockData(array[row*width*4+col*4+3]) // A
}
}
//
// IDAT data zlib checksum
//
view.setUint32(ptr,CRCAdler32[2],false) // zlib Adler32
ptr += 4
//
// set IDAT length
//
view.setUint32(LengthPtr,ptr-DataStart,false)
//
// IDAT CRC
//
view.setUint32(ptr,CRC32(arr,CRCstart,ptr),false)
ptr += 4
//
// IEND length
//
view.setUint32(ptr,0,false)
ptr += 4
//
// IEND type
//
CRCstart = ptr
arr.set([73,69,78,68],ptr)
ptr += 4
//
// no IEND data
//
// IHDR CRC
//
view.setUint32(ptr,CRC32(arr,CRCstart,ptr),false)
ptr += 4
//
// return
//
return arr
}
python/Gerber/Gerber.png

18 KiB

%MOIN*%
%LPD*%
%FSLAX66Y66*%
G01*
%LPD*%
G36*
X0410184Y0103554D02*
X0410184Y0104054D01*
X0407683Y0104054D01*
X0398179Y0108556D01*
X0391175Y0115560D01*
X0388174Y0121063D01*
X0386173Y0127066D01*
X0386173Y0128066D01*
X0385673Y0138071D01*
X0389175Y0147576D01*
X0393176Y0153079D01*
X0395177Y0155080D01*
X0107048Y0684354D01*
X0105047Y0684354D01*
X0095043Y0683854D01*
X0085538Y0687356D01*
X0079536Y0691858D01*
X0075034Y0697361D01*
X0072032Y0703864D01*
X0071032Y0707866D01*
X0070532Y0718372D01*
X0074033Y0727877D01*
X0078035Y0733380D01*
X0085038Y0738883D01*
X0088039Y0740383D01*
X0094042Y0742384D01*
X0095043Y0742384D01*
X0105047Y0742885D01*
X0114551Y0739383D01*
X0120554Y0734880D01*
X0125056Y0729378D01*
X0128057Y0722874D01*
X0129058Y0718872D01*
X0129558Y0708367D01*
X0126057Y0698862D01*
X0121555Y0692859D01*
X0120054Y0691358D01*
X0408183Y0162084D01*
X0410184Y0162084D01*
X0420189Y0162584D01*
X0421689Y0162084D01*
X0720823Y0758393D01*
X0716321Y0762895D01*
X0713320Y0768398D01*
X0711319Y0774401D01*
X0711319Y0775401D01*
X0710819Y0785407D01*
X0714320Y0794912D01*
X0718822Y0800915D01*
X0724325Y0805417D01*
X0730828Y0808419D01*
X0734830Y0809419D01*
X0745334Y0809919D01*
X0754839Y0806418D01*
X0760341Y0802415D01*
X0765844Y0795412D01*
X0767344Y0792410D01*
X0769345Y0786407D01*
X0769345Y0785407D01*
X0769845Y0775401D01*
X0766344Y0765897D01*
X0762342Y0760394D01*
X0756339Y0755391D01*
X0749836Y0752390D01*
X0745835Y0751389D01*
X0735330Y0750889D01*
X0733829Y0751389D01*
X0434695Y0155080D01*
X0439197Y0150578D01*
X0442198Y0145075D01*
X0444199Y0139072D01*
X0444199Y0138071D01*
X0444700Y0128066D01*
X0441198Y0118561D01*
X0437196Y0113059D01*
X0431193Y0108056D01*
X0424691Y0105054D01*
X0420689Y0104054D01*
X0410184Y0103554D01*
X0410184Y0103554D01*
G37*
%LPD*%
G36*
X0760341Y0103554D02*
X0760341Y0104054D01*
X0757840Y0104054D01*
X0748336Y0108556D01*
X0741833Y0115060D01*
X0738331Y0121063D01*
X0736330Y0127066D01*
X0736330Y0128066D01*
X0735830Y0138071D01*
X0739332Y0147576D01*
X0743333Y0153079D01*
X0749336Y0158082D01*
X0755839Y0161083D01*
X0759841Y0162084D01*
X0768345Y0163084D01*
X0768345Y0164085D01*
X0771846Y0173590D01*
X0933919Y0635829D01*
X0928917Y0639831D01*
X0924915Y0645334D01*
X0923414Y0648336D01*
X0921413Y0654339D01*
X0921413Y0655339D01*
X0920913Y0665344D01*
X0924415Y0674849D01*
X0928417Y0680352D01*
X0935420Y0685855D01*
X0938421Y0687356D01*
X0942923Y0689357D01*
X0942923Y0852942D01*
X0582261Y0852942D01*
X0582261Y0829429D01*
X0589765Y0826428D01*
X0595767Y0821926D01*
X0600770Y0815422D01*
X0602270Y0812421D01*
X0604271Y0806418D01*
X0604271Y0805417D01*
X0604771Y0795412D01*
X0601270Y0785907D01*
X0597268Y0780404D01*
X0591265Y0775401D01*
X0584762Y0772400D01*
X0580761Y0771399D01*
X0570256Y0770899D01*
X0560752Y0774401D01*
X0555249Y0778403D01*
X0550247Y0784406D01*
X0547246Y0790909D01*
X0546245Y0794912D01*
X0545745Y0805417D01*
X0549246Y0814922D01*
X0553748Y0820925D01*
X0560251Y0825928D01*
X0563253Y0827428D01*
X0567755Y0829429D01*
X0567755Y0852942D01*
X0308638Y0852942D01*
X0308638Y0851441D01*
X0304637Y0843437D01*
X0298134Y0836933D01*
X0292131Y0833431D01*
X0286128Y0831430D01*
X0285128Y0831430D01*
X0275123Y0830930D01*
X0265619Y0834432D01*
X0260117Y0838434D01*
X0255114Y0844437D01*
X0252113Y0850941D01*
X0251113Y0854943D01*
X0250612Y0865448D01*
X0254114Y0874953D01*
X0258616Y0880956D01*
X0265119Y0885959D01*
X0268120Y0887459D01*
X0274123Y0889460D01*
X0275123Y0889460D01*
X0285128Y0889961D01*
X0294632Y0886459D01*
X0300635Y0881957D01*
X0305637Y0875453D01*
X0307138Y0872452D01*
X0309639Y0867449D01*
X0952928Y0867449D01*
X0955929Y0864948D01*
X0957430Y0861946D01*
X0957430Y0689357D01*
X0964933Y0686355D01*
X0970936Y0681853D01*
X0975938Y0675350D01*
X0977439Y0672348D01*
X0979439Y0666345D01*
X0979439Y0665344D01*
X0979940Y0655339D01*
X0976438Y0645834D01*
X0971936Y0639831D01*
X0965433Y0634829D01*
X0962432Y0633328D01*
X0956429Y0631327D01*
X0955429Y0631327D01*
X0947425Y0630326D01*
X0947425Y0629326D01*
X0943923Y0619821D01*
X0781851Y0157582D01*
X0786853Y0153580D01*
X0790855Y0148077D01*
X0792355Y0145075D01*
X0794356Y0139072D01*
X0794356Y0138071D01*
X0794857Y0128066D01*
X0791355Y0118561D01*
X0786853Y0112558D01*
X0780350Y0107556D01*
X0777349Y0106055D01*
X0771346Y0104054D01*
X0770346Y0104054D01*
X0760341Y0103554D01*
X0760341Y0103554D01*
G37*
M02*
M48
INCH,LZ
VER,1
FMAT,2
T1C0.032
T2C0.033
M95
G05
T1
X000994Y007119
T2
X002801Y008592
X005748Y008004
X007399Y007804
X009496Y006595
X007653Y001318
X004151Y001318
M30
%MOIN*%
%LPD*%
%FSLAX66Y66*%
G01*
%ADD10C,0.001*%
D10*
X0050022Y0050026D02*
X0050022Y0919976D01*
X1070480Y0919976D01*
X1070480Y0050026D01*
X0050022Y0050026D01*
X0050022Y0050026D01*
M02*