node-pcb-stackup

Render PCBs as beautiful, precise SVGs from Gerber / NC drill files

Usage no npm install needed!

<script type="module">
  import nodePcbStackup from 'https://cdn.skypack.dev/node-pcb-stackup';
</script>

README

pcb stackup

latest next david

Render PCBs as beautiful, precise SVGs from Gerber / NC drill files

Part of the tracespace collection of PCB visualization tools.

install

npm install --save pcb-stackup
# or
yarn add pcb-stackup

Or, use a script tag:

<script src="https://unpkg.com/pcb-stackup@^4.0.0/dist/pcb-stackup.min.js"></script>
<script>
  // global variable pcbStackup now available
  pcbStackup(layers).then(stackup => {
    // ...
  })
</script>

example

arduino-uno-top arduino-uno-bottom

After you clone and set-up the repository as detailed in development setup, you can run pcb-stackup's example script to render the top and bottom of an Arduino Uno PCB.

cd tracespace/packages/pcb-stackup
yarn example

Arduino Uno design files used here under the terms of the Creative Commons Attribution Share-Alike license.

usage

This module is designed to work in Node or in the browser with Browserify or Webpack. The function takes three parameters: an array of layer objects an optional settings object and a callback function.

const fs = require('fs')
const pcbStackup = require('node-pcb-stackup')

const fileNames = [
  '/path/to/board-F.Cu.gtl',
  '/path/to/board-F.Mask.gts',
  '/path/to/board-F.SilkS.gto',
  '/path/to/board-F.Paste.gtp',
  '/path/to/board-B.Cu.gbl',
  '/path/to/board-B.Mask.gbs',
  '/path/to/board-B.SilkS.gbo',
  '/path/to/board-B.Paste.gbp',
  '/path/to/board-Edge.Cuts.gm1',
  '/path/to/board.drl',
  '/path/to/board-NPTH.drl',
]

const layers = fileNames.map(filename => ({
  filename,
  gerber: fs.createReadStream(filename),
}))

pcbStackup(layers).then(stackup => {
  console.log(stackup.top.svg) // logs "<svg ... </svg>"
  console.log(stackup.bottom.svg) // logs "<svg ... </svg>"
})

API

See the API documentation.

If your board doesn't appear at all or looks weirdly distorted, try rendering it with the options {maskWithOutline: false} or filling in gaps in the outline with e.g. {outlineGapFill: 0.011}.