Setup

We test PCBmodE with Python 3.7 under Linux, but it may or may not work on other operating systems.

It comes in the form of a installable tool called pcbmode which is run from the command line.

What you’ll need

  • Python 3.7+
  • Inkscape 1.0+
  • Text editor

Installation in a virtual environment

Use a virtual environment to keep PCBmodE in its own isolated environments, for example Python3’s venv. If you don’t have venv, get it like this:

sudo apt-get install python3-venv

These instructions describe how to build PCBmodE for use in a virtual environment. To be able to build python-lxml (one of PCBmodE’s dependencies) you need to install some system-level development packages. On Debian based systems these are installed like this:

sudo apt-get install libxml2-dev libxslt1-dev python-dev

Note

You’re reading the documentation for version 5 of PCBmodE, ‘Cinco’. The link below will get you that branch while we’re working on it, and before its release.

Get the PCBModE source from GitHub.

git clone https://github.com/boldport/pcbmode/tree/cinco-master

Now run these commands to create a virtual environment, for example in the directory pcbmode-env/ next to pcbmode/. Then create the virtual environment like this:

python3 -m venv pcbmode-env
source pcbmode-env/bin/activate
cd pcbmode

where you can replace pcbmode-env with a name of your chooseing. If you want to install PCBmodE, run

pip install .

but if you want to develop it, run

pip install --editable .

After installation, PCBmodE will be available in your path as an executable pcbmode. But since it was installed in a virtual environment, the pcbmode command will only be available in your path after running source pcbmode-env/bin/activate and will no longer be in your path after running deactivate, which gets you out of the virtual environment. You will need to activate the virtual environment each time you want to run pcbmode from a new terminal window.

Packages are not installed globally, so to start from scratch you can just follow these steps:

deactivate         # skip if pcbmode-env is not active
rm -r pcbmode-env
cd pcbmode
git clean -dfX     # erases any untracked files (build files etc). Save your work!

Running PCBmodE

Tip

To see all the options that PCBmodE supports, use pcbmode --help

To make a create an SVG of your board you’d use a command like this:

pcbmode -b <board-name>.json -m

where board-name.json is your board file. If you’re nor running pcbmode at the path where board.json is, you’ll need to specify the path to it, like this for example:

boards/<project-name>/<board-name>.json

Youre board-name.json will tell PCBmodE where the rest of the file are, for example

"project-params":
{
"input":
  {
    "routing-file": "board-routing.json",
    "svg-file": "build/gent-pcbmode-v5-test.svg"
  },
  "output":
  {
    "svg-file": "build/gent-pcbmode-v5-test.svg",
    "gerber-preamble": "build/prod/gent-pcbmode-v5-test_"
  }
}

Again, you’ll need to specify the path where PCBmodE should expect file and place files relative to the path where board-name.json is.

Where component and shape files are are defined in pcbmode_config.json. PCBmodE will load its default settings and override it with settings in a local config/pcbmode_config.json if it exists.

The defaults for where to find component and shape files are the following:

"shapes":
{
  "path": "shapes"
},
"components":
{
  "path": "components"
}

So here’s one way to organise the build environment

beautiful-pcbs/
  pcbmode-env/
  pcbmode/
  boards/
    my-board/                # a PCB project
      my-board.json
      my-board_routing.json
      components/
      shapes/
      docs/
        ...
    cordwood/                # another PCB project
      ...

To make the my-board board from the beautiful-pcbs path, run

pcbmode -b boards/my-board/my-board.json -m

and then open the SVG with Inkscape

inkscape beautiful-pcbs/boards/my-board/build/my-board.svg

If the SVG opens you’re good to go!

Note

PCBmodE processes a lot of shapes on the first time it is run, so it will take a noticeable amount. This time will be dramatically reduced on subsequent invocations since PCBmodE caches the shapes in a datafile within the project’s build directory.