# PCB: Quick Reference

## Additional information

More information on PCB you can find in the PCB Command reference (`refcard.pdf`) containing description of all PCB shortcuts and in the PCB Manual (`pcb.pdf` or `pcb.html`) residing in the `doc/` directory of your PCB installation (its path may vary on various systems).

## Default Key Mapping

### All Keystrokes

Key | Mnemonic | Description
--- | --- | ---
`Esc` | select | enter select mode (same as `Space`, or `F11`)
`Esc` | end of action | terminate the current action, e.g. stop drawing tracks
`Insert` | insert point | enter insert point mode. Click and drag on track to insert a point
`Return` | click | same as a click on the left mouse button
`Space` | select | enter select mode (same as `Esc`, or `F11`)
`Tab` | flip up/down | view: vertical flip
`Shift`+`Tab` | flip left/right | view: horizontal flip
`Ctrl`+`Shift`+`Tab` | far side | view: exchange the roles of front side and far side
`Del` | delete | delete object under the mouse cursor
`Shift`+`Del` | del-sel | delete objects in selection
`Backspace` | del-sel | delete objects in selection
`Shift`+`Backspace` | del-copper | deletes connected copper under the cursor. Rats are considered a connection.
`|` | thin-draw | toggles thin draw mode
`A` | set same | read the parameters to use for new objects from the object below the cursor.
`Alt`+`A` | select-all | select all objects on active layers. Deactivated layers are ignored.
`Shift`+`Alt`+`A` | unselect | clear selection
`B` | to other side | flip object to the other side of the board
`C` | center | view: center display at cursor position
`Ctrl`+`C` | copy to buffer | copy selection to buffer and unselect
`D` | display name | display pin or pad name
`Shift`+`D` | pinout dialog | open pinout window for element under mouse cursor
`E` | eliminate rats | delete all rats
`Shift`+`E` | eliminate some rats | delete selected rats
`F` | find | highlight connections to object under mouse cursor. This includes rats and objects on invisible layers
`Ctrl`+`F` | add to found | add connections to object under mouse cursor to the set of found objects
`Shift`+`F` | un-find | un-highlight found connections
`G` | incr grid mil | increment grid by configured imperial increment
`Shift`+`G` | decr grid mil | decrement grid by configured imperial increment
`Ctrl`+`G` | incr grid mm | increment grid by configured metric increment
`Ctrl`+`Shift`+`G` | decr grid mm | decrement grid by configured metric increment
`H` | hide | toggle the visibility of the refdes or value attached to the component under the cursor
`Shift`+`H` | hide sel | toggle the visibility of the refdes or value attached to selected components
`Ctrl`+`H` | holeplate | toggle plating of a via. Used to produce non metalized mounting holes
`J` | lineclear | toggle the polygon clear flag of the line under the cursor
`Shift`+`J` | lineclear sel | toggle the polygon clear flag of selected lines
`K` | klear | increment clearance (soldermask to copper edge)
`Shift`+`K` | klear (-) | decrement clearance (soldermask to copper edge (NOTE: can go negative!))
`Ctrl`+`K` | klear sel | increment clearance of selected objects (soldermask to copper edge)
`Shift`+`Ctrl`+`K` | klear sel (-) | decrement clearance of selected objects (soldermask to copper edge)
`L` | increase line | increment width of the line tool, adds to the settings of the current line style
`Shift`+`L` | decrease line | reduce the current linewidth
`M` | move to layer | move the object under the cursor to the current layer
`Shift`+`M` | move selection to layer | move selected objects to the current working layer (see pcb tip)
`Ctrl`+`M` | move origin | set the origin to the current position of the mouse pointer
`N` | name | show object refdes / pin number at mouse pointer
`Shift`+`N` | next | Select the shortest unselected rat on the board
`O` | optimize rats | optimize and redraw all rats
`Shift`+`O` | optimize some rats | optimize and redraw selected nets only
`Ctrl`+`O` | octagon | toggle the octagon flag of the object under the cursor
`Shift`+`P` | polygon close | connect the first point of a polygon with the last
`Q` | square toggle | toggle square/round corners on pads
`Shift`+`R` | redo | redo what was undone with undo
`Ctrl`+`R` | report | show object report
`S` | size | increment size of the object under the cursor
`Shift`+`S` | size (-) | decrement size of the object under the cursor
`Alt`+`S` | sizehole | increase the hole of the object under the cursor
`Alt`+`Shift`+`S` | sizehole (-) | decrease the hole of the object under the cursor
`Ctrl`+`S` | sizehole | increase the hole of the object under the cursor
`Ctrl`+`Shift`+`S` | sizehole (-) | decrease the hole size
`T` | text tool size | increase the size of new text by 10 mil
`Shift`+`T` | text tool size (-) | decrease the size of new text by 10 mil
`V` | view extents | global view of working area
`Shift`+`V` | via tool dia | increase the diameter of new vias by 5 mil
`Ctrl`+`V` | paste buffer | paste from buffer
`Ctrl`+`Shift`+`V` | via tool dia (-) | decrease the diameter of new vias by 5 mil
`Alt`+`V` | via tool drill | increase the drill diameter of new vias by 5 mil
`Shift`+`Alt`+`V` | via tool drill (-) | decrease the drill diameter of new vias by 5 mil
`Ctrl`+`X` | cut to buffer | cut selection to buffer
`Z` | zoom | view: zoom in
`Shift`+`Z` | un-zoom | view: zoom out
`F1` | via | enter via tool
`F2` | line | enter line tool
`F3` | arc | enter arc tool
`F4` | text | enter text tool
`F5` | rectangle | enter rectangle tool
`F6` | polygon | enter polygon tool
`F7` | buffer | enter buffer mode
`F8` | delete | enter remove mode
`F9` | rotate | enter rotate mode
`F10` | file menu | file menu
`F11` | select | enter select mode (same as `Space`, or `Esc`)
`F12` | lock | enter lock mode

### Viewport Keystrokes

Key | Mnemonic | Description
--- | --- | ---
`V` | view extents | global view of working area
`C` | center | centers view on cursor
`Z` | zoom | zoom in
`Shift`+`Z` | un-zoom | zoom out
`|` | thin-draw | toggles thin draw mode
`Tab` | flip up/down | vertical flip
`Shift`+`Tab` | flip left/right | horizontal flip
`Ctrl`+`Shift`+`Tab` | far side | exchange the roles of front and far side

### Layers

Key | Mnemonic | Description
--- | --- | ---
`1` to `9` | - | select layers 1 to 9
`0` | - | select layer 10*
`Alt`+`1` to `Alt`+`9` | - | select layers 11 to 19*
`Alt`+`0` | - | select layer 20*
`Ctrl`+`1` to `Ctrl`+`9` | - | toggle visibility of layers 1 to 9*
`Ctrl`+`0` | - | toggle visibility of layer 10*
`Ctrl`+`Alt`+`1` to `Ctrl`+`Alt`+`9` | - | toggle visibility of 11 to 19*
`Ctrl`+`Alt`+`0` | - | toggle visibility of 20*

* These accels are available in PCB, GTK GUI in versions after August 2011

# Footprint Quick Reference

The Master document for footprint creation is the PCB Manual.

## General syntax

A pcb footprint file may contain any of the following commands:

- `Element [element_flags, description, pcb_name, value, mark_x, mark_y, text_x, text_y, text_direction, text_scale, text_flags]`
- `Pad [x1 y1 x2 y2 thickness clearance mask name pad_number flags]`
- `Pin [x y thickness clearance mask drillholedia name number flags]`
- `ElementArc [x y r1 r2 startangle sweepangle thickness]`
- `ElementLine [x1 y1 x2 y2 thickness] –> thickness != 1000 = 10 mils almost for all footprints`
- Comment lines start with the ‘`#`’-sign

## PCB Units

PCB handles metric and imperial units in the following way:

- The base Imperial unit is the “centimil”, or 1/100 of a thousandth, or 1/100,000 inch, or 0.00001 inch.
- Allowable imperial value range: “0.04” (0.0000004 inches) to approx. “78740000” (about 78-3/4”)
- The base Metric unit is 1nm (one nanometer). PCB parses in metric if the number has a “mm” behind it.
- Allowable metric value range: “0.000001mm” to “2000mm”
- NOTES:
  - use “mm” after number to specify metric
  - imperial and metric may be mixed within a footprint (!)

## Elements

`Element [element_flags, description, pcb_name, value, mark_x, mark_y, text_x, text_y, text_direction, text_scale, text_flags]`

| Allowed value (unit = 1e-5 inches) | Allowed Value (mm) | explanation | comment
--- | --- | --- | --- | ---
element_flags | unsigned hex value |  |  |
description | string |  | text description of footprint | user-defined
pcb_name | string |  | generic refdes (R?, U? etc.) | user-defined
value | string |  | component value (layout specific) | user-defined (blank)
mark_x | “1” to ~ “78740000” | “0.000001mm” to “2000mm” | (x,y) loc. of center mark |
mark_y | “1” to ~ “78740000” | “0.000001mm” to “2000mm” |  |
text_x | “1” to ~ “78740000” | “0.000001mm” to “2000mm” | (x,y) loc. of REFDES |
text_y | “1” to ~ “78740000” | “0.000001mm” to “2000mm” |  |
text_direction | decimal integer |  | 0=horiz; 1=ccw90; 2=180; 3=cw90 |
text_scale | decimal integer |  |  | usu. set to 100
text_flags | unsigned hex |  |  |

## Pads

`Pad[x1 y1 x2 y2 thickness clearance mask name pad_number flags]`

Item | Allowed Value | Explanation | Comment
--- | --- | --- | ---
x1 | 1/100th mil | x (1st point) |
y1 | 1/100th mil | y (1st point) |
x2 | 1/100th mil | x (2nd point) |
y2 | 1/100th mils | y (2nd point) |
thickness | 1/100 mils | width of metal surrounding line segment | see Brorson .pdf
clearance | 1/100 mils | distance to any other copper on any layer | actually 1/2 of this number is used!
mask | 1/100th mils | width of mask relief | actual width of the mask centered on pad copper
name | string | name of pad (arb. string) | e.g. "pad_1" or "positive" or any other string
pad_number | string | pad # | used for nets. it MUST be consistent with the definitions on the netlist.
flags | hex or string |  | examples:

## Pins

`Pin[x y thickness clearance mask drillholedia name number flags]`

Item | Allowed Value | Explanation | Comment
--- | --- | --- | ---
x | 1/100th mils | pin x coord. |
y | 1/100th mils | pin y coord. |
thickness | 1/100th mils | copper diameter |
clearance | 1/100th mils | 2*(cu to cu clearance) | if you want a 10 mil clearance, put 2000 (20 mils) here
mask | 1/100th mils | diameter of mask aperture | actual dia. of hole in mask
drillholedia | 1/100th mils | dia. of hole |
name | string | arb. pin name |
number | decimal integer | pin number used by nets/rats |
flags | hex | xxx |

## Examples

- `Pad[-24606 14760 -19538 14760 1181 2000 3181 "" "16" "square"]`
- `Pad[-14760 19538 -14760 24606 1181 2000 3181 "" "17" "square,edge2"]`
- `Pin[0 0 12000 2000 12500 6400 "" "1" 0×00000001]`
- `ElementArc [0 0 6800 6800 0 360 1000]`
- `ElementLine [-26696 -26696 26696 -26696 1000]`
- `# notes within PCB Footprints go after the pound sign`

# PCB Command Line Action Reference (abridged)

:FreeRotateBuffer(degrees) | Rotate buffer arbitrarily
:MoveObject(x,y,unit) | Move Absolute (x,y,mil) or Relative(+x,-y,mil)
:ChangeClearSize(Selected,<amount>,<unit>) | Clearance Size
:ChangeSize(SelectedPins, SIZE) | Pin Size
:ChangeSize(SelectedLines,+N,mils) | Line Size
:MinClearGap(Selected,<amount>,<unit>) | Clearance Gap

- units can be specified as mm or mil.
- Action Reference from the PCB Manual

# PCB Physical Layer Reference

- outline layer reference
- physical layer how-to (outline, direct (x,y) footprint placement, part insertion)