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 |