pcb-rnd modularization (original) (raw)

Fortunately PCB already had a strong infrastructure supporting this idea. It has dynamic loadable plugins and the GUI and exporters are in separate HID modules. While working on pcb-gpmi and later pcb-rnd, I added the gpmi module as a separate plugin.

In version 1.0.8 to 1.1.0 a considerable chunk of core code has been moved into_core plugins_. A core plugin is just a plugin that is maintained together with the core, in the same repository, still the code is somewhat detached from the core. More importantly, the user can choose, for each plugin, separately:

(Red means the plugin doesn't really work).

module

size [sloc]

status

configure
default

class

description

acompnet

304

WIP

disable

feature

Auto-complete the current network. A very limited autorouter/assistant.

act_draw

603

works

buildin

feature

Expose drawing related API as actions

act_read

416

works

buildin

feature

Data access related API as actions

ar_cpcb

319

WIP

buildin

feature

Autoroute using external tool c-pcb

asm

559

works

buildin

feature

hand assembly assistant GUI

autocrop

51

works

buildin

feature

Reduce the board dimensions to just enclose the objects on the board.

autoplace

645

works

buildin

feature

Automatically place subcircuits.

autoroute

4385

works

buildin

feature

Automatically route selected or all rats. This is the original autorouter.

cam

1595

works

buildin

export

Configurable output job based batch exporting

ddraft

2129

WIP

buildin

export

Actions and a command interpreter for supporting advanced/precise 2 dimensional drafting

diag

803

works

disable

feature

Actions for pcb-rnd core diagnostics, intended for developers. These are not in core because end users normally don't need these. As a plugin, due to dynamic loading, it can be dropped on an existing pcb-rnd installation with minimal risk of scaring away a reproducible bug.

dialogs

8918

works

disable

feature

Interactive core functionality: HID-independent GUI dialogs (enabled by GUI HIDs)

distalign

443

works

buildin

feature

Introducing Align() and Distribute(), which work much like the similarly named functions in Visio. Given that PCB does not have the concept of "first selected object" to draw on, the reference points can be selected by arguments.

distaligntext

474

works

buildin

feature

Same as distalign, operates on text objects.

djopt

2250

works

buildin

feature

Various board optimization algorithms.

draw_csect

800

works

disable

feature

Draw cross section and layer map.

draw_fab

290

works

buildin

feature

Draw the fab layer (for various exporters).

draw_fontsel

143

works

disable

feature

Draw the font selector GUI

drc_orig

352

buildin

feature

A few simple, hardwired Design Rule Checks.

expfeat

31

works

disable

feature

Staging plugin for experimenting with new actions and dialogs before getting them into core or other plugins

export_bom

218

works

buildin

export

Export bom (Bill of Materials)

export_dsn

445

works

buildin

export

Export specctra .dsn files

export_dxf

2340

works

buildin

export

Export dxf

export_excellon

583

works

buildin

export

Export to excellon drill/cnc files

export_fidocadj

274

WIP

buildin

export

Export to FidoCadJ format (.fcd)

export_gcode

309

WIP

buildin

export

Export to gcode

export_gerber

1198

works

buildin

export

Export to gerber

export_ipcd356

383

works

buildin

export

IPC-D-356 Netlist export.

export_lpr

104

works

buildin

export

Export to lpr (using export_ps to generate postscript)

export_oldconn

240

works

buildin

export

Export subc/terminal connection map in an old, custom file format

export_openems

2186

WIP

buildin

export

Export copper to OpenEMS simulation

export_openscad

719

WIP

buildin

export

Export openscad

export_png

1457

works

buildin

export

Export to png, gif and jpeg

export_ps

1566

works

buildin

export

Export postscript or embedded postscript.

export_stat

320

works

buildin

export

Export various board statistics in lihata format

export_stl

189

WIP

buildin

export

Export stl (triangulated surface)

export_svg

719

works

buildin

export

Scalable Vector Graphics (SVG) exporter

export_test

90

WIP

disable

export

A thin layer of code to dump exporter calls for testing the HID exporter API.

export_vfs_fuse

311

WIP

disable

export

Export all data and config of a board to a FUSE mountable filesystem

export_vfs_mc

149

WIP

disable

export

Export all data and config of a board to GNU mc

export_xy

987

works

buildin

export

Template based export of XY centroid subcircuit data e.g. for pick & place.

extedit

352

works

buildin

feature

invoke external program to edit parts of the current board

exto_std

1261

WIP

buildin

feature

Extended objects for: line-of-vias, dimension

fontmode

257

works

buildin

feature

Font editing actions.

fp_board

120

WIP

buildin

fp

Footprint: load a board and expose all the unique subcircuits on that board as a footprint library

fp_fs

439

works

buildin

fp

Footprint: file system based implementation. Used to be called Newlib: load footprints from directories. Run external processes for the parametric footprints.

fp_wget

686

works

buildin

fp

Footprint: get static (file) footprints from the web, e.g. from http://gedasymbols.org

hid_batch

325

works

buildin

hid

HID without GUI: read actions from stdin.

hid_gtk2_gdk

1288

works

buildin

hid

GUI: GTK2 HID with GDK software rendering.

hid_gtk2_gl

769

works

buildin

hid

GUI: GTK2 with opengl rendering

hid_lesstif

9199

works

buildin

hid

GUI: the lesstif HID.

hid_remote

1100

WIP

disable-all

hid

Remote access HID: implement a protocol and use it to relay between a core and a remote HID implementation.

import_calay

213

works

buildin

import

Import the netlist and footprints from a calay netlist.

import_dsn

268

works

buildin

import

Import specctra .dsn files

import_edif

3637

works

buildin

import

Import plugin for netlists in the EDIF format.

import_fpcb_nl

192

works

buildin

import

Import the netlist and footprints from freepcb format (exported by e.g. easyeda)

import_gnetlist

135

works

buildin

import

Import gEDA/gschem schematics running gnetlist

import_hpgl

131

works

buildin

import

Emulate a plotter and import the plot as lines, arcs and polygons.

import_ipcd356

430

works

buildin

import

IPC-D-356 Netlist and pad centroid import

import_ltspice

566

works

buildin

import

Import the netlist and footprints from an ltspice .asc and .net pair of files

import_mentor_sch

522

works

buildin

import

Import Mentor Graphics Design Capture from flattened .edf netlist, using a parts conversion table.

import_mucs

122

works

buildin

import

Import lines and vias from MUCS unixplot .pl files

import_net_action

75

works

buildin

import

Import the netlist and footprints from an action script.

import_net_cmd

68

works

buildin

import

Import schematics/netlist by running a commandline

import_netlist

142

works

buildin

import

Import plugin for netlists in the classic pcb netlist format.

import_pxm_gd

103

works

buildin

import

Import png, gif and jpeg using libgd

import_pxm_pnm

119

works

buildin

import

Import pnm P4, P5 and P6 into pcb-rnd pixmaps

import_sch

321

works

buildin

import

Imports footprints and netlist data from the schematics (or some other source).

import_sch2

496

WIP

buildin

import

Imports footprints and netlist data from the schematics (or some other source).

import_tinycad

199

works

buildin

import

Import the netlist and footprints from a tinycad netlist.

import_ttf

163

WIP

buildin

import

Import outline ttf glyphs into the current font, either as polygons or lines

io_autotrax

1584

works

buildin

io

Import and export autotrax layouts and footprints.

io_dsn

1673

works

disable

io

Load and save specctra DSN files

io_eagle

4116

works

buildin

io

Load the design from eagle's xml and binary formats.

io_hyp

4097

works

buildin

io

Import plugin for hyperlynx geometry (no polygons yet).

io_kicad

3572

works

buildin

io

Load and save the design and footprints in Kicad's s-expression format - this is the new, currently preferred format in Kicad.

io_kicad_legacy

901

works

buildin

io

Export the design and footprints in Kicad's legacy format.

io_lihata

4338

works

buildin

io

Load and save the design and footprints in the lihata board format.

io_mentor_cell

1875

WIP

disable

io

Load Mentor Graphics cell footprint library and make footprints available (e.g. for fp_board)

io_pcb

2948

works

buildin

io

Load and save the design and footprints in the original gEDA/PCB text format.

io_tedax

2565

works

buildin

io

Import and export tEDAx netlists and footprints.

jostle

420

works

buildin

feature

Pushes lines out of the way.

lib_compat_help

1254

works

buildin

lib

a library of functions providing a simplified API compatibility layer, mainly for I/O plugins

lib_gensexpr

13

works

disable-all

lib

S-expression parser lib

lib_gtk_common

5689

works

disable-all

lib

hid_gtk* common code (regardless of rendering mechanism: for both gdk sw rendering and gl)

lib_hid_common

2389

works

disable-all

lib

hidlib common helper functions for non-PCB GUI

lib_hid_gl

1083

works

disable-all

lib

generic openGL renderer shared among GUI HIDs

lib_hid_pcbui

2268

works

disable-all

lib

PCB related helper functions for GUI HIDs

lib_netmap

218

works

disable-all

lib

create disposable cross-reference maps between all objects and all nets

lib_polyhelp

766

works

buildin

lib

functions to help plugins processing polygons and PolyHatch() action

lib_vfs

458

works

disable-all

lib

Retrieve, sort and query data under VFS export plugins

lib_wget

67

works

disable-all

lib

retrieve files from the web using wget(1)

loghid

295

WIP

disable

feature

Sits between a HID (or exporter) and the core and logs all core->plugin calls made through the HID structure.

millpath

491

WIP

disable

feature

Calculate and simulate toolpath for milling away opper

mincut

889

works

buildin

feature

Use the minimal cut algorithm to indicate shorts: instead of highlighting two random pins/pads, try to highlight the least number of objects that connect the two networks.

oldactions

289

works

disable

feature

Random collection of old/obsolete actions. Bell(): audible feedback, DumpLibrary(): print footprint library on stdout, a set of debug actions useful for writing pcb scripts: Debug(), DebugXY(), Return(). Old plugin actions to toggle or set settings that are now accessible via the unified config system (vendordrill, djopt)

order

309

WIP

disable

feature

order boards through the Internet

order_pcbway

612

WIP

disable

feature

order from PCBWay through the Internet

polycombine

206

works

buildin

feature

The selected polygons are combined together according to the ordering of their points.

polystitch

95

works

buildin

feature

The polygon under the cursor (based on closest-corner) is stitched together with the polygon surrounding it on the same layer. Use with pstoedit conversions where there's a "hole" in the shape - select the hole.

propedit

1984

works

buildin

feature

List and edit properties of a group of objects.

puller

1747

works

buildin

feature

Pull traces to minimize their length.

query

2318

works

buildin

feature

pcb-rnd query language: execute expressions on objects and rules for the programmed drc.

renumber

321

works

buildin

feature

Renumber subcircuits (renaming them) and generate a text file for back annotation.

report

896

works

buildin

feature

Report() and ReportObject() actions - print a report about design objects.

rubberband_orig

1219

works

buildin

feature

The original rubberband code.

script

1503

works

buildin

feature

Load and execute scripts written in any language supported by fungw

serpentine

369

WIP

disable-all

feature

Create serpentines on existing lines.

shand_cmd

165

works

buildin

feature

vi-like command shorthands (1..3 character long commands)

shape

860

works

buildin

feature

Generate objects of regular shape (regular polygons, circle, round rect)

sketch_route

2702

WIP

disable

feature

TODO

smartdisperse

164

works

buildin

feature

Improve the initial dispersion of subcircuits by choosing an order based on the netlist, rather than the arbitrary subcircuit order. This isn't the same as a global autoplace, it's more of a linear autoplace. It might make some useful local groupings. For example, you should not have to chase all over the board to find the resistor that goes with a given LED.

stroke

290

works

buildin

feature

Configurable gesture recognition with libstroke.

teardrops

215

works

buildin

feature

Draw teardrops on pins.

tool_std

2255

works

buildin

feature

The basic set of PCB drawing tools

vendordrill

514

works

buildin

feature

Vendor drill mapping.

Each plugin implements a class (rarely a set of classes). Classes are:

name description
feature random features directly accessible for the user, usually actions
lib support code library for other plugins (core doesn't depend on these); functionality not directly accessible for the user but other plugins may depend on it
hid Human Interface Device: interactive user interface, usually GUI
import load alien formats into the design space
export save (parts of) the design space in alien formats
fp footprint (element) library implementation
io native file format (save & load) implementation

Common status column values mean:

name description
works production quality code - configures, compiles, tested
WIP work in progress: the plugin may be avaialble for testing but is not yet production quality
abandoned unmaintained plugin; may be in working condition but there is no developer supporting it
deprecated legacy plugin scheduled for removal; may still work but will soon be removed; if your workflow depends on it, please report ASAP