KiBot/docs/populate.md

4.1 KiB

Populate

Populate allows you to write a simple population guide for you board in markdown and automatically convert to either a webpage with images or a markdown files with images suitable for GitHub wiki.

It allows you to write text, incrementally add new components to the board and highlight newly added components.

The core code for this tool comes from the PcbDraw project. This documentation is adapted from the original project.

Usage

You must define a populate type output, and this output must indicate how to draw the steps using a pcbdraw type output. The name of the output using to draw is indicated in the renderer option. So you need to define at least two outputs, i.e.:

kiplot:
  version: 1

outputs:
  - name: PcbDraw
    comment: "How to draw a step"
    type: pcbdraw
    run_by_default: false
    options:
      format: png

  - name: Populate
    comment: "Populate example"
    type: populate
    dir: Populate
    options:
      renderer: PcbDraw
      input: tests/data/plain_html.md

When using the populate command from the pcbdraw project all the options to render the images is contained in the input markdown file (tests/data/plain_html.md in the above example). When using KiBot all the information comes from the KiBot configuration file, and the YAML text from the input markdown file is discarded.

You can try the above example using the following PCB example. From the root of the KiBot repository you can run:

src/kibot -c tests/yaml_samples/populate_simple.kibot.yaml -b tests/data/ArduinoLearningKitStarter.kicad_pcb -d example

Then load the generated web page: example/PopulateSimple/index.html

Source file format

The source file format is a simple markdown file with two specialties -- each list item is considered as a single step in populating and will generate an image. The content of the item is the step description. See example.

Note: list items without an explicit step will be processed as regular list items. Avoid mixing regular list items and steps in the same list.

To specify which side of the board and which components to add and highlight start the item with a clause in form:

- [[<front|back> | <comma separated list of components to add> ]]

For example:

  • [[front | R1,R2 ]] will render front side of the board and adds R1 and R2.
  • [[back | ]] will render the back side and no components will be added

Note that KiBot also allows to include groups of components selected by a filter. If you use [[front | R1,_kf(all_smd) ]] and you have the following filter:

  - name: all_smd
    type: generic
    exclude_smd: true
    invert: true

The list will be expanded to R1 plus all the SMD components of the board. But suppose you want to select all the SMD components of the top side of the board, you could use [[front | _kf(all_smd;all_front) ]] adding the following filter:

  - name: all_front
    type: generic
    exclude_bottom: true

Note that we use ; as separator because , is the separator in the list of references. You can also use the ! (not) operator, like this: [[front | _kf(all_tht;!all_conn) ]] This will select all THT components that aren't connectors, assuming you provide the correct filters. Here is an example to try.

Handlebars template

To specify HTML output you can use a Handlebar template. The template is fed with a data structure like this:

{
    "items": [
        {
            "type": "comment",
            "is_comment": true,
            "content": "Generated HTML from markdown of the comment"
        },
        {
            "type": "step",
            "is_step": true,
            "steps": [
                {
                    "img": "path to generated image",
                    "comment": "Generated HTML from markdown of the comment"
                }
            ]
        }
    ]
}

There can be multiple step and comment sections.