Index: trunk/doc-rnd/mincut.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/mincut.png =================================================================== --- trunk/doc-rnd/mincut.png (revision 2494) +++ trunk/doc-rnd/mincut.png (nonexistent) Property changes on: trunk/doc-rnd/mincut.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/ba.html =================================================================== --- trunk/doc-rnd/ba.html (revision 2494) +++ trunk/doc-rnd/ba.html (nonexistent) @@ -1,50 +0,0 @@ - - -

pcb-rnd - the [ba] patches

-Back annotation was a long standing missing functionality. There has been -different suggestions, including: - -

-The current implementation allows pcb-rnd users to make deliberate pin -swapping and footprint replacement. The changes can be saved in a -"netlist patch" format. A modified gschem can load these and present them -as search results pointing to parts of the schematics that need to be changed. -There is a -demo video about how this happens in practice. -

-The modified gschem can be checked out from svn://repo.hu/geda-gaf-ba/trunk -

-The underlying mechanism is versatile and potentially allows more changes -to be back annotated. These are not yet accessible due to the lack of PCB -actions and GUI. - -

Design decisions

-This devlog entry functions -as a design decision document. - Another entry is a summary -on how the feature ended up in a private feature-fork of gschem. - -

save/load and compatibility

-Deliberate changes are tracked so that a new forward annotation from -the old schematics won't break them. To do this, pcb-rnd saves a -NetListPatch() section in the file. Mainline PCB can not handle this section. -Compatibility, by use case: - - - -

plans

-Back annotation for further changes, e.g. value change, naming/renaming nets, -etc. - - Index: trunk/doc-rnd/res.html =================================================================== --- trunk/doc-rnd/res.html (revision 2494) +++ trunk/doc-rnd/res.html (nonexistent) @@ -1,129 +0,0 @@ - - -

pcb-rnd - the [res] patch

- -PCB used to have an own file format for describing resources (menu structure -and hotkey bindings, vendor drill mapping). The resource format was generic -enough to describe these things, but the syntax was somewhat wierd: mixed -positional and named fields. More precisely, composite nodes could contain -named and anonymous subnodes, and the meaning of anonymous subnodes depended -on their position in the anon-subnode-list. -

-The code that dealt with the in-memory representation of the resource tree -was wierd and big chunks duplicated in the HIDs and vendor drill module. It -was also hard to parse a resource file with external tools. -

-Since version 1.0.10, pcb-rnd replaces resource files with -lihata. Lihata is a small, generic -purpose container format that can describe arbitrary trees. Just like resource -file syntax, lihata is optimized for hand-editing: no need to use excess -quoting or long boilerplate blocks. -

-Liblihata also provides a lot of helper functions that made the code -dealing with the menus and vendor drill resources much simpler and less -redundant. Since the parser is small and external, and since there are -external converter tools available, it is also easier to deal with the -files outside of the pcb executable. - -

menu files

-There are pcb-menu-gtk.lht and pcb-menu-lesstif.lht. They are in trunk/src -in the source tree and are instaslled in the SHAREDIR. Currently each GUI -HID (lesstif, gtk) loads the corresponding menu file. - -

menu resource lihata structure

-The root of a menu resource file should be a ha: with the following -children: - -All children are optional, but recommended. Thus the file stucture, zoomed -out, is: -
-ha:{
-	li:mouse { ... }
-	li:main_menu { ... }
-	li:popups { ... }
-}
-
- -

li:mouse

-The mouse subtree may contain a li: for each mouse button action; -the children of the list are further li: nodes for key modifiers, whose -children are text nodes: actions executed in order. -

-Buttons supported are: left, right, middle, up, down - the last two -are for the scroll wheel. Modifier name should start with "press" or "release" -optionally followed by modifier key suffixes separated with dashes, e.g. -"press-alt-shift" means the given button is pressed while alt and shift -were also pressed. -

-Example structure: -

-	li:mouse {
-		li:left {
-			li:press            = { Mode(Notify) }
-			li:press-ctrl       = { Mode(Save); Mode(None); }
-		}
-	}
-
- -

li:main_menu

-The main menu is a list of menubar items that may host submenu items -recursively. Each normal item is a hash with the following children: - -Special menu items are text nodes instead of hashes; they are: - -

-A key description is a text in the form of: -

- -An example menu item with submenus (can be a main menu or a submenu of -another menu item): -
-ha:example menu item {
-	li:submenu {
-		ha:menu item {
-			action=Save(ElementConnections)
-			tip=example menu
-		}
-		-
-		ha:another menu item {
-			a={Shift-Alt<key>r}
-			action={Action1(); Action2();}
-		}
-	}
-}
-
- -

li:popups

-Each children is a hash that describes a popup menu. A popup menu behaves -exactly like a menu item, it should have a submenu list. Popup windows will -be popped up by executing an action with the name of the popup menu. - -

save/load and compatibility

-Not affected. - -

plans

-The resource file format conversion is done. There are other parts of the code -that will probably get lihata instead of the current custom parsers, e.g. -the preferences/settings file. - - - Index: trunk/doc-rnd/pcb-fp.html =================================================================== --- trunk/doc-rnd/pcb-fp.html (revision 2494) +++ trunk/doc-rnd/pcb-fp.html (nonexistent) @@ -1,36 +0,0 @@ - - -

pcb-rnd - the [pcb-fp] patch

- -Pcb-fp is an effort to clean up the footprint situation: - - -

Example

-Intaractive parametric footprint selection in pcb-rnd: -

- -

-An online footprint generator web1.0 version is also available. - -

save/load and compatibility

-Save/load files are not affected. If a schematics is written for the new -library and depends on parametric footprints: - - -

plans

-No plans - this feature is fully implemented. - - - Index: trunk/doc-rnd/square.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/square.png =================================================================== --- trunk/doc-rnd/square.png (revision 2494) +++ trunk/doc-rnd/square.png (nonexistent) Property changes on: trunk/doc-rnd/square.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/gpmi.html =================================================================== --- trunk/doc-rnd/gpmi.html (revision 2494) +++ trunk/doc-rnd/gpmi.html (nonexistent) @@ -1,41 +0,0 @@ - - -

pcb-rnd - the [gpmi] patch

- -Thanks to gpmi, pcb-rnd is scriptable in about 10 scripting languages (e.g. -lua, awk, ruby, python, scheme, tcl). Scripts are integrated in pcb-rnd and -have access to most of the internals. Scripts -are able to: - - -

-This feature has three options: -

- -

Example

-Check out the Rosetta stone of -pcb-rnd. - -

save/load and compatibility

-Save/load files are not affected. - -

plans

-Expose more internals, write more example scripts and documentation. - - - Index: trunk/doc-rnd/fp_wget.html =================================================================== --- trunk/doc-rnd/fp_wget.html (revision 2494) +++ trunk/doc-rnd/fp_wget.html (nonexistent) @@ -1,37 +0,0 @@ - - -

pcb-rnd - the [fp_wget] patch

- -Since version 1.0.10, pcb-rnd implements a new footprint mechanism (see -[fp_fs] and [library_t]). -The new code allows footprint backend plugins to get library from anywhere. -The [fp_wget] plugin is an implementation that: - -

-This is all transparent, the user experience is that the remote library is -like a read-only local library reachable from the library window. -

-A web site used as a library should be able to: -

-

-The plugin uses external program wget to communicate on the web. - - -

How to configure for gedasymbols.org

-Add wget@gedasymbols in the library search path (e.g. in preferences as library-newlib). - -

save/load and compatibility

-Not affected. - -

plans

-Better feedback on progress, explicit user requested refresh, refresh in -the background. - - - Index: trunk/doc-rnd/unglib.html =================================================================== --- trunk/doc-rnd/unglib.html (revision 2494) +++ trunk/doc-rnd/unglib.html (nonexistent) @@ -1,17 +0,0 @@ - - -

pcb-rnd - the [unglib] patch

- -Removes glib dependency from core, in favor of -minilibs to help -keeping the code small, modular -and easier to fix. - -

save/load and compatibility

-Not affected. - -

plans

-Remove glib dependency from the puller plugin. - - - Index: trunk/doc-rnd/jumper_1206.fp =================================================================== --- trunk/doc-rnd/jumper_1206.fp (revision 2494) +++ trunk/doc-rnd/jumper_1206.fp (nonexistent) @@ -1,7 +0,0 @@ -Element["nonetlist" "1206 jumper, 0 ohm" "" "1206" 0 0 -3150 -3150 0 100 ""] -( - Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square,intconn(1)"] - Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square,intconn(1)"] - ElementLine[-2362 -3740 2362 -3740 800] - ElementLine[-2362 3740 2362 3740 800] -) Index: trunk/doc-rnd/cycdrag.html =================================================================== --- trunk/doc-rnd/cycdrag.html (revision 2494) +++ trunk/doc-rnd/cycdrag.html (nonexistent) @@ -1,28 +0,0 @@ - - -

pcb-rnd - the [cycdrag] patches

- -A long standing misfeature of pcb (and pcb-rnd) has been that when dragging the -end of connected traces, pcb chosen one of the traces "randomly". It often -didn't pick the one the user wanted to move. The workaround was to move the -one that pcb picked and then return and move the target trace then -move the other trace back. This gets even more annoying if there are more than -two objects connected in the given point: 3 traces and a via for example. -

-The cycdrag patch addresses this issue by defining an action that can cycle -through objects that could be dragged in the given point while the left mouse -button is pressed. This lets the user explicitly select the one object to -work on. -

-This demo video -demonstrates how it works with three lines and a via. - -

save/load and compatibility

-Not affected. - -

plans

-It does not work with the lesstif HID. It does not work with the rubber band -mode. - - - Index: trunk/doc-rnd/negselect.html =================================================================== --- trunk/doc-rnd/negselect.html (revision 2494) +++ trunk/doc-rnd/negselect.html (nonexistent) @@ -1,23 +0,0 @@ - - -

pcb-rnd - the [cycdrag] patches, negative box select

- -When a selection is made using drag&drop (box selection), depending -on the direction the rule for object selection differ: - - -

save/load and compatibility

-Not affected. - -

plans

-Work more on some rough corners of the negative direction: e.g. pads are -handled as 0 width lines so the selection has to hit the center. - - - Index: trunk/doc-rnd/debian.html =================================================================== --- trunk/doc-rnd/debian.html (revision 2494) +++ trunk/doc-rnd/debian.html (nonexistent) @@ -1,18 +0,0 @@ - - -

pcb-rnd - the [debian] patch

- -The name of the package has been changed to pcb-rnd; a conflict with the -mainline pcb is set. -

-The lesstif variant and pcb documentation are not compiled or packaged -- I don't need them. The possibility is still there to compile them, tho. -

-The gtk variant (pcb-rnd-gtk) has both dbus and gl disabled. -

-Versioning scheme changed to match svn revisions and tags of pcb-rnd. - -

plans

-No plans - this feature is fully implemented. - - Index: trunk/doc-rnd/scconfig.html =================================================================== --- trunk/doc-rnd/scconfig.html (revision 2494) +++ trunk/doc-rnd/scconfig.html (nonexistent) @@ -1,15 +0,0 @@ - - -

pcb-rnd - the [scconfig] patch

- -Pcb-rnd uses scconfig -for ./configure instead of autotools. Scconfig is smaller and easier -to maintain. - -

save/load and compatibility

-Not affected. - -

plans

-No plans - this feature is fully implemented by now. - - Index: trunk/doc-rnd/library_t.html =================================================================== --- trunk/doc-rnd/library_t.html (revision 2494) +++ trunk/doc-rnd/library_t.html (nonexistent) @@ -1,28 +0,0 @@ - - -

pcb-rnd - the [library_t] patch

- -The original code has a special setup for representing trees, C structures -called LibraryMenu and LibraryEntry. This system can represent only a subset -of trees: there is a root, a level consist of directories only and a next level, -each directory consist of data nodes only. This has been enough for newlib, -which strictly follows this model in the file system hierarchy. The lesstif -HID also hardwired this model in the GUI. -

-In pcb-rnd this has been replaced with a new struct type called library_t -that can represent an arbitrary tree: directories and files within directories -down to many levels. -

-Both the gtk and the lesstif had has been modified accordingly and can -properly display the tree. This in turn enables alternative footprint backend -implementations such as fp_wget to import -more complex libraries, e.g. the one on gedasymbols.org. - -

save/load and compatibility

-Not affected. - -

plans

-Finished, no plans. - - - Index: trunk/doc-rnd/square.pcb =================================================================== --- trunk/doc-rnd/square.pcb (revision 2494) +++ trunk/doc-rnd/square.pcb (nonexistent) @@ -1,893 +0,0 @@ -# release: pcb 20110918 - -# To read pcb files, the pcb version (or the git source date) must be >= the file version -FileVersion[20070407] - -PCB["" 130000 105000] - -Grid[2500.0 0 0 1] -Cursor[0 0 0.000000] -PolyArea[3100.006200] -Thermal[0.500000] -DRC[1000 1000 1000 1000 1500 1000] -Flags("nameonpcb,uniquename,clearnew") -Groups("1,c:2,s:3:4:5:6:7:8") -Styles["Signal,1500,6000,3150,2500:Power,3000,6000,3937,2500:Fat,8000,6000,3500,2500:Skinny,1200,2402,1181,2500"] - -Symbol[' ' 1800] -( -) -Symbol['!' 1200] -( - SymbolLine[0 4500 0 5000 800] - SymbolLine[0 1000 0 3500 800] -) -Symbol['"' 1200] -( - SymbolLine[0 1000 0 2000 800] - SymbolLine[1000 1000 1000 2000 800] -) -Symbol['#' 1200] -( - SymbolLine[0 3500 2000 3500 800] - SymbolLine[0 2500 2000 2500 800] - SymbolLine[1500 2000 1500 4000 800] - SymbolLine[500 2000 500 4000 800] -) -Symbol['$' 1200] -( - SymbolLine[1500 1500 2000 2000 800] - SymbolLine[500 1500 1500 1500 800] - SymbolLine[0 2000 500 1500 800] - SymbolLine[0 2000 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4000 800] - SymbolLine[1500 4500 2000 4000 800] - SymbolLine[500 4500 1500 4500 800] - SymbolLine[0 4000 500 4500 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['%' 1200] -( - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[1000 2500 1500 2000 800] - SymbolLine[500 2500 1000 2500 800] - SymbolLine[0 2000 500 2500 800] - SymbolLine[0 5000 4000 1000 800] - SymbolLine[3500 5000 4000 4500 800] - SymbolLine[4000 4000 4000 4500 800] - SymbolLine[3500 3500 4000 4000 800] - SymbolLine[3000 3500 3500 3500 800] - SymbolLine[2500 4000 3000 3500 800] - SymbolLine[2500 4000 2500 4500 800] - SymbolLine[2500 4500 3000 5000 800] - SymbolLine[3000 5000 3500 5000 800] -) -Symbol['&' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 3500 1500 2000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[0 2500 2500 5000 800] - SymbolLine[500 1000 1000 1000 800] - SymbolLine[1000 1000 1500 1500 800] - SymbolLine[1500 1500 1500 2000 800] - SymbolLine[0 3500 0 4500 800] -) -Symbol[''' 1200] -( - SymbolLine[0 2000 1000 1000 800] -) -Symbol['(' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] -) -Symbol[')' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['*' 1200] -( - SymbolLine[0 2000 2000 4000 800] - SymbolLine[0 4000 2000 2000 800] - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol['+' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[1000 2000 1000 4000 800] -) -Symbol[',' 1200] -( - SymbolLine[0 6000 1000 5000 800] -) -Symbol['-' 1200] -( - SymbolLine[0 3000 2000 3000 800] -) -Symbol['.' 1200] -( - SymbolLine[0 5000 500 5000 800] -) -Symbol['/' 1200] -( - SymbolLine[0 4500 3000 1500 800] -) -Symbol['0' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4000 2000 2000 800] -) -Symbol['1' 1200] -( - SymbolLine[0 1800 800 1000 800] - SymbolLine[800 1000 800 5000 800] - SymbolLine[0 5000 1500 5000 800] -) -Symbol['2' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[0 5000 2500 2500 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['3' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 2800 1500 2800 800] - SymbolLine[2000 1500 2000 2300 800] - SymbolLine[2000 3300 2000 4500 800] - SymbolLine[2000 3300 1500 2800 800] - SymbolLine[2000 2300 1500 2800 800] -) -Symbol['4' 1200] -( - SymbolLine[0 3500 2000 1000 800] - SymbolLine[0 3500 2500 3500 800] - SymbolLine[2000 1000 2000 5000 800] -) -Symbol['5' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 1000 0 3000 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[500 2500 1500 2500 800] - SymbolLine[1500 2500 2000 3000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['6' 1200] -( - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1500 2800 2000 3300 800] - SymbolLine[0 2800 1500 2800 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3300 2000 4500 800] -) -Symbol['7' 1200] -( - SymbolLine[500 5000 2500 1000 800] - SymbolLine[0 1000 2500 1000 800] -) -Symbol['8' 1200] -( - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3700 0 4500 800] - SymbolLine[0 3700 700 3000 800] - SymbolLine[700 3000 1300 3000 800] - SymbolLine[1300 3000 2000 3700 800] - SymbolLine[2000 3700 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 2300 700 3000 800] - SymbolLine[0 1500 0 2300 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2300 800] - SymbolLine[1300 3000 2000 2300 800] -) -Symbol['9' 1200] -( - SymbolLine[500 5000 2000 3000 800] - SymbolLine[2000 1500 2000 3000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol[':' 1200] -( - SymbolLine[0 2500 500 2500 800] - SymbolLine[0 3500 500 3500 800] -) -Symbol[';' 1200] -( - SymbolLine[0 5000 1000 4000 800] - SymbolLine[1000 2500 1000 3000 800] -) -Symbol['<' 1200] -( - SymbolLine[0 3000 1000 2000 800] - SymbolLine[0 3000 1000 4000 800] -) -Symbol['=' 1200] -( - SymbolLine[0 2500 2000 2500 800] - SymbolLine[0 3500 2000 3500 800] -) -Symbol['>' 1200] -( - SymbolLine[0 2000 1000 3000 800] - SymbolLine[0 4000 1000 3000 800] -) -Symbol['?' 1200] -( - SymbolLine[1000 3000 1000 3500 800] - SymbolLine[1000 4500 1000 5000 800] - SymbolLine[0 1500 0 2000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 2000 800] - SymbolLine[1000 3000 2000 2000 800] -) -Symbol['@' 1200] -( - SymbolLine[0 1000 0 4000 800] - SymbolLine[0 4000 1000 5000 800] - SymbolLine[1000 5000 4000 5000 800] - SymbolLine[5000 3500 5000 1000 800] - SymbolLine[5000 1000 4000 0 800] - SymbolLine[4000 0 1000 0 800] - SymbolLine[1000 0 0 1000 800] - SymbolLine[1500 2000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 3000 3500 800] - SymbolLine[3000 3500 3500 3000 800] - SymbolLine[3500 3000 4000 3500 800] - SymbolLine[3500 3000 3500 1500 800] - SymbolLine[3500 2000 3000 1500 800] - SymbolLine[2000 1500 3000 1500 800] - SymbolLine[2000 1500 1500 2000 800] - SymbolLine[4000 3500 5000 3500 800] -) -Symbol['A' 1200] -( - SymbolLine[0 2000 0 5000 800] - SymbolLine[0 2000 700 1000 800] - SymbolLine[700 1000 1800 1000 800] - SymbolLine[1800 1000 2500 2000 800] - SymbolLine[2500 2000 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['B' 1200] -( - SymbolLine[0 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3300 2500 4500 800] - SymbolLine[2000 2800 2500 3300 800] - SymbolLine[500 2800 2000 2800 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2300 800] - SymbolLine[2000 2800 2500 2300 800] -) -Symbol['C' 1200] -( - SymbolLine[700 5000 2000 5000 800] - SymbolLine[0 4300 700 5000 800] - SymbolLine[0 1700 0 4300 800] - SymbolLine[0 1700 700 1000 800] - SymbolLine[700 1000 2000 1000 800] -) -Symbol['D' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[1800 1000 2500 1700 800] - SymbolLine[2500 1700 2500 4300 800] - SymbolLine[1800 5000 2500 4300 800] - SymbolLine[0 5000 1800 5000 800] - SymbolLine[0 1000 1800 1000 800] -) -Symbol['E' 1200] -( - SymbolLine[0 2800 1500 2800 800] - SymbolLine[0 5000 2000 5000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] -) -Symbol['F' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[0 2800 1500 2800 800] -) -Symbol['G' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[1000 3000 2000 3000 800] -) -Symbol['H' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[2500 1000 2500 5000 800] - SymbolLine[0 3000 2500 3000 800] -) -Symbol['I' 1200] -( - SymbolLine[0 1000 1000 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 1000 5000 800] -) -Symbol['J' 1200] -( - SymbolLine[700 1000 1500 1000 800] - SymbolLine[1500 1000 1500 4500 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 4500 0 4000 800] -) -Symbol['K' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3000 2000 1000 800] - SymbolLine[0 3000 2000 5000 800] -) -Symbol['L' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['M' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 1500 3000 800] - SymbolLine[1500 3000 3000 1000 800] - SymbolLine[3000 1000 3000 5000 800] -) -Symbol['N' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 1000 2500 5000 800] - SymbolLine[2500 1000 2500 5000 800] -) -Symbol['O' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['P' 1200] -( - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] -) -Symbol['Q' 1200] -( - SymbolLine[0 1500 0 4500 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1500 1000 800] - SymbolLine[1500 1000 2000 1500 800] - SymbolLine[2000 1500 2000 4000 800] - SymbolLine[1000 5000 2000 4000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[1000 3500 2000 5000 800] -) -Symbol['R' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[2500 1500 2500 2500 800] - SymbolLine[2000 3000 2500 2500 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[1300 3000 2500 5000 800] -) -Symbol['S' 1200] -( - SymbolLine[2000 1000 2500 1500 800] - SymbolLine[500 1000 2000 1000 800] - SymbolLine[0 1500 500 1000 800] - SymbolLine[0 1500 0 2500 800] - SymbolLine[0 2500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['T' 1200] -( - SymbolLine[0 1000 2000 1000 800] - SymbolLine[1000 1000 1000 5000 800] -) -Symbol['U' 1200] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 1000 2000 4500 800] -) -Symbol['V' 1200] -( - SymbolLine[0 1000 1000 5000 800] - SymbolLine[1000 5000 2000 1000 800] -) -Symbol['W' 1200] -( - SymbolLine[0 1000 0 3000 800] - SymbolLine[0 3000 500 5000 800] - SymbolLine[500 5000 1500 3000 800] - SymbolLine[1500 3000 2500 5000 800] - SymbolLine[2500 5000 3000 3000 800] - SymbolLine[3000 3000 3000 1000 800] -) -Symbol['X' 1200] -( - SymbolLine[0 5000 2500 1000 800] - SymbolLine[0 1000 2500 5000 800] -) -Symbol['Y' 1200] -( - SymbolLine[0 1000 1000 3000 800] - SymbolLine[1000 3000 2000 1000 800] - SymbolLine[1000 3000 1000 5000 800] -) -Symbol['Z' 1200] -( - SymbolLine[0 1000 2500 1000 800] - SymbolLine[0 5000 2500 1000 800] - SymbolLine[0 5000 2500 5000 800] -) -Symbol['[' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['\' 1200] -( - SymbolLine[0 1500 3000 4500 800] -) -Symbol[']' 1200] -( - SymbolLine[0 1000 500 1000 800] - SymbolLine[500 1000 500 5000 800] - SymbolLine[0 5000 500 5000 800] -) -Symbol['^' 1200] -( - SymbolLine[0 1500 500 1000 800] - SymbolLine[500 1000 1000 1500 800] -) -Symbol['_' 1200] -( - SymbolLine[0 5000 2000 5000 800] -) -Symbol['a' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 4500 800] - SymbolLine[2000 4500 2500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['b' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] -) -Symbol['c' 1200] -( - SymbolLine[500 3000 2000 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 2000 5000 800] -) -Symbol['d' 1200] -( - SymbolLine[2000 1000 2000 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] -) -Symbol['e' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[0 4000 2000 4000 800] - SymbolLine[2000 4000 2000 3500 800] -) -Symbol['f' 1000] -( - SymbolLine[500 1500 500 5000 800] - SymbolLine[500 1500 1000 1000 800] - SymbolLine[1000 1000 1500 1000 800] - SymbolLine[0 3000 1000 3000 800] -) -Symbol['g' 1200] -( - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[2000 3000 2000 6000 800] -) -Symbol['h' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] -) -Symbol['i' 1000] -( - SymbolLine[0 2000 0 2100 1000] - SymbolLine[0 3500 0 5000 800] -) -Symbol['j' 1000] -( - SymbolLine[500 2000 500 2100 1000] - SymbolLine[500 3500 500 6000 800] - SymbolLine[0 6500 500 6000 800] -) -Symbol['k' 1200] -( - SymbolLine[0 1000 0 5000 800] - SymbolLine[0 3500 1500 5000 800] - SymbolLine[0 3500 1000 2500 800] -) -Symbol['l' 1000] -( - SymbolLine[0 1000 0 4500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['m' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[2000 3500 2500 3000 800] - SymbolLine[2500 3000 3000 3000 800] - SymbolLine[3000 3000 3500 3500 800] - SymbolLine[3500 3500 3500 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['n' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 5000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['o' 1200] -( - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[2000 3500 2000 4500 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['p' 1200] -( - SymbolLine[500 3500 500 6500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[2500 3500 2500 4500 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[1000 5000 2000 5000 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['q' 1200] -( - SymbolLine[2000 3500 2000 6500 800] - SymbolLine[1500 3000 2000 3500 800] - SymbolLine[500 3000 1500 3000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[0 3500 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['r' 1200] -( - SymbolLine[500 3500 500 5000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[1000 3000 2000 3000 800] - SymbolLine[0 3000 500 3500 800] -) -Symbol['s' 1200] -( - SymbolLine[500 5000 2000 5000 800] - SymbolLine[2000 5000 2500 4500 800] - SymbolLine[2000 4000 2500 4500 800] - SymbolLine[500 4000 2000 4000 800] - SymbolLine[0 3500 500 4000 800] - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 2000 3000 800] - SymbolLine[2000 3000 2500 3500 800] - SymbolLine[0 4500 500 5000 800] -) -Symbol['t' 1000] -( - SymbolLine[500 1000 500 4500 800] - SymbolLine[500 4500 1000 5000 800] - SymbolLine[0 2500 1000 2500 800] -) -Symbol['u' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] - SymbolLine[2000 3000 2000 4500 800] -) -Symbol['v' 1200] -( - SymbolLine[0 3000 1000 5000 800] - SymbolLine[2000 3000 1000 5000 800] -) -Symbol['w' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[500 5000 1000 5000 800] - SymbolLine[1000 5000 1500 4500 800] - SymbolLine[1500 3000 1500 4500 800] - SymbolLine[1500 4500 2000 5000 800] - SymbolLine[2000 5000 2500 5000 800] - SymbolLine[2500 5000 3000 4500 800] - SymbolLine[3000 3000 3000 4500 800] -) -Symbol['x' 1200] -( - SymbolLine[0 3000 2000 5000 800] - SymbolLine[0 5000 2000 3000 800] -) -Symbol['y' 1200] -( - SymbolLine[0 3000 0 4500 800] - SymbolLine[0 4500 500 5000 800] - SymbolLine[2000 3000 2000 6000 800] - SymbolLine[1500 6500 2000 6000 800] - SymbolLine[500 6500 1500 6500 800] - SymbolLine[0 6000 500 6500 800] - SymbolLine[500 5000 1500 5000 800] - SymbolLine[1500 5000 2000 4500 800] -) -Symbol['z' 1200] -( - SymbolLine[0 3000 2000 3000 800] - SymbolLine[0 5000 2000 3000 800] - SymbolLine[0 5000 2000 5000 800] -) -Symbol['{' 1200] -( - SymbolLine[500 1500 1000 1000 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[0 3000 500 2500 800] - SymbolLine[0 3000 500 3500 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[500 4500 1000 5000 800] -) -Symbol['|' 1200] -( - SymbolLine[0 1000 0 5000 800] -) -Symbol['}' 1200] -( - SymbolLine[0 1000 500 1500 800] - SymbolLine[500 1500 500 2500 800] - SymbolLine[500 2500 1000 3000 800] - SymbolLine[500 3500 1000 3000 800] - SymbolLine[500 3500 500 4500 800] - SymbolLine[0 5000 500 4500 800] -) -Symbol['~' 1200] -( - SymbolLine[0 3500 500 3000 800] - SymbolLine[500 3000 1000 3000 800] - SymbolLine[1000 3000 1500 3500 800] - SymbolLine[1500 3500 2000 3500 800] - SymbolLine[2000 3500 2500 3000 800] -) -Attribute("PCB::grid::unit" "mil") - -Element["" "Dual in-line package, medium wide (400 mil)" "" "DIP14M" 62500 22500 22000 5000 3 100 ""] -( - Pin[0 0 6000 3000 6600 2800 "1" "1" "square"] - Pin[0 10000 6000 3000 6600 2800 "2" "2" ""] - Pin[0 20000 6000 3000 6600 2800 "3" "3" "thermal(1S)"] - Pin[0 30000 6000 3000 6600 2800 "4" "4" "square,shape(3)"] - Pin[0 40000 6000 3000 6600 2800 "5" "5" "square,shape(2)"] - Pin[0 50000 6000 3000 6600 2800 "6" "6" "square,shape(4)"] - Pin[0 60000 6000 3000 6600 2800 "7" "7" "square,shape(8)"] - Pin[40000 60000 6000 3000 6600 2800 "8" "8" "square,shape(8)"] - Pin[40000 50000 6000 3000 6600 2800 "9" "9" "square,shape(4)"] - Pin[40000 40000 6000 3000 6600 2800 "10" "10" "square,shape(2)"] - Pin[40000 30000 6000 3000 6600 2800 "11" "11" "square,shape(3)"] - Pin[40000 20000 6000 3000 6600 2800 "12" "12" ""] - Pin[40000 10000 6000 3000 6600 2800 "13" "13" ""] - Pin[40000 0 6000 3000 6600 2800 "14" "14" "square,shape(1)"] - ElementLine [-5000 -5000 -5000 65000 1000] - ElementLine [-5000 65000 45000 65000 1000] - ElementLine [45000 65000 45000 -5000 1000] - ElementLine [-5000 -5000 15000 -5000 1000] - ElementLine [25000 -5000 45000 -5000 1000] - ElementArc [20000 -5000 5000 5000 0 180 1000] - - ) -Layer(1 "component") -( -) -Layer(2 "solder") -( - Line[10000 17500 67500 17500 1500 5000 "clearline"] - Line[67500 17500 77500 27500 1500 5000 "clearline"] - Line[77500 27500 85000 27500 1500 5000 "clearline"] - Line[62500 22500 37500 22500 1500 5000 "clearline"] - Line[10000 27500 67500 27500 1500 5000 "clearline"] - Line[67500 27500 77500 37500 1500 5000 "clearline"] - Line[77500 37500 85000 37500 1500 5000 "clearline"] - Line[62500 32500 45000 32500 1500 5000 "clearline"] - Line[10000 37500 67500 37500 1500 5000 "clearline"] - Line[67500 37500 77500 47500 1500 5000 "clearline"] - Line[77500 47500 85000 47500 1500 5000 "clearline"] - Line[62500 42500 27500 42500 1500 5000 ""] - Line[10000 47500 67500 47500 1500 5000 "clearline"] - Line[67500 47500 77500 57500 1500 5000 "clearline"] - Line[77500 57500 85000 57500 1500 5000 "clearline"] - Line[62500 52500 37500 52500 1500 5000 "clearline"] - Line[37500 57500 67500 57500 1500 5000 "clearline"] - Line[67500 57500 77500 67500 1500 5000 "clearline"] - Line[77500 67500 85000 67500 1500 5000 "clearline"] - Line[62500 62500 37500 62500 1500 5000 "clearline"] - Line[37500 67500 67500 67500 1500 5000 "clearline"] - Line[67500 67500 77500 77500 1500 5000 "clearline"] - Line[77500 77500 85000 77500 1500 5000 "clearline"] - Line[62500 72500 37500 72500 1500 5000 "clearline"] - Line[37500 77500 67500 77500 1500 5000 "clearline"] - Line[67500 77500 77500 87500 1500 5000 "clearline"] - Line[77500 87500 85000 87500 1500 5000 "clearline"] - Line[62500 82500 37500 82500 1500 5000 "clearline"] - Line[65000 32500 60000 32500 6000 5000 "clearline"] - Line[105000 32500 100000 32500 6000 5000 "clearline"] - Line[102500 32500 125000 32500 1500 5000 "clearline"] - Line[102500 52500 125000 52500 1500 5000 "clearline"] - Line[102500 62500 125000 62500 1500 5000 "clearline"] - Line[102500 72500 125000 72500 1500 5000 "clearline"] - Line[102500 82500 125000 82500 1500 5000 "clearline"] - Line[102500 22500 125000 22500 1500 5000 "clearline"] - Polygon("clearpoly") - ( - [55000 37500] [70000 37500] [70000 47500] [55000 47500] - ) - Polygon("clearpoly") - ( - [85000 7500] [117500 7500] [117500 92500] [85000 92500] - ) -) -Layer(3 "GND") -( -) -Layer(4 "power") -( -) -Layer(5 "signal1") -( -) -Layer(6 "signal2") -( -) -Layer(7 "signal3") -( -) -Layer(8 "signal4") -( -) -Layer(9 "silk") -( -) -Layer(10 "silk") -( - Text[10000 17500 0 130 "square" "clearline"] - Text[10000 27500 0 130 "fat trace" "clearline"] - Text[10000 37500 0 130 "poly" "clearline"] - Text[25000 95000 1 130 "with [square]" "clearline"] - Text[15000 92500 1 130 "shaped pins" "clearline"] -) Index: trunk/doc-rnd/mincut.html =================================================================== --- trunk/doc-rnd/mincut.html (revision 2494) +++ trunk/doc-rnd/mincut.html (nonexistent) @@ -1,47 +0,0 @@ - - -

pcb-rnd - the [mincut] patch

- -The original code was highlighting pins/pads only when a short came around -after rats nest optimization. This was not very helpful on a complex board. -There had been a long discussion on the mailing list about the best solutions. -There were a few very good ideas, including: - -

-I choose minimal cut for my patch because it doesn't require tracing the -full history or any manual administration of nets vs. objects (which I -would find inevitable even with manual tagging - directly or indirectly -the user needs to be able to change net tags). -

-The minimal cut is the least amount of object whose removal would resolve -the short. It is best demonstrated on an example: -

- -

-Removing all the marked lines/polys/vias would surely resolve the short -(sometimes leaving rat lines behind). Minimal cut is better than randomly -removing objects, tho: it guarantees that the minimal amount of objects -are to be removed. On a complex board, this place is likely to be close -to the place where the problem really is - much closer than the pins/pads. -

-Since mincut can be expensive on large boards, the feature can be enabled -per board (a new PCB flag) and can be disbaled globally (--enable-mincut 0 -when starting PCB). - -

save/load and compatibility

-New PCB flag enablemincut. Mainline pcb ignores this flag but does not -preserve it. - -

plans

-Finished, no plans. - - Index: trunk/doc-rnd/flagcomp.html =================================================================== --- trunk/doc-rnd/flagcomp.html (revision 2494) +++ trunk/doc-rnd/flagcomp.html (nonexistent) @@ -1,23 +0,0 @@ - - -

pcb-rnd - the [flagcomp] patch

- -Many of the patches in this fork, and in possible future branches/forks -may introduce new pin, pad or element flags. PCB loads and saves flags -by converting the text representation to an in-memory binary format. Any -flag not understood is lost. -

-This patch adds a linked list of string flags, filled in with the unknown -flags while loading a PCB. On save, these flags are appended to the normal -flag list. This preserves all unknown flags (but not order of flags) in -a load/save cycle. - -

save/load and compatibility

-This patch ensures compatibility in save/load cycles with flags introduced -by later versions of mainline PCB or different branches/forks of PCB by -not removing flags they introduced. - -

plans

-No plans - this feature is fully implemented. - - Index: trunk/doc-rnd/square.html =================================================================== --- trunk/doc-rnd/square.html (revision 2494) +++ trunk/doc-rnd/square.html (nonexistent) @@ -1,71 +0,0 @@ - - -

pcb-rnd - the [square] patch

-Most of my PCBs end up in toner transfer. There are a lot -of tricks around prototyping at home. One of the problems I often -face is small rings peeling off during rework (and rework tend to -happen on the first prototypes). The solution for this is increasing -ring size - which is not suitable if traces are passing between pins. -Another solution is to increase the area of the pin: - - -

-The patch takes an octagon pin and stretches points in various directions. -There are 4 bits (for left, right, up and down) to indicate in which directions -the stretch applies. Pressing 'q' on a pin cycles thru round pin, square pin, -16 stretched octagons and the original octagon. -

-The code is also patched to handle clearances, shorts and connections (find.c). -

-Thermals are not fully working for funny shaped pins, but it has low priority: -they still work fine for rounded and square pins and if there is a poly around -the pin, I wouldn't use shaped pins anyway. - -

save/load and compatibility

-This patch introduces a new pin flag called shape(n), where n is an integer -selecting the shape of the pin when the square flag is also set: -
-Pin[40000 60000 6000 3000 6600 2800 "8" "8" "square,shape(3)"]
-
-Mainline PCB will load the design ignoring the custom shape and will use a -square pin. As long a traces end in the center point of the pin, this -should not break connections. -

-Mainline PCB doesn't save shape() - once the design is loaded and saved with -mainline PCB pin shape info is lost. - -

plans

-In the original code there are separate code paths for round, octagonal and -square pins. The separation repeats for at least: - -In most cases a set of hardwired constants are written in the C code. A notable -exception was the octagon pin draw function, that had x and y offsets in a const -table for 8 points and a loop to create the poly (or line segments in thin draw). -

-The [square] feature is a good base for cleaning up the code a bit and for -moving toward a generic pin shape patch: -

- - Index: trunk/doc-rnd/intconn.html =================================================================== --- trunk/doc-rnd/intconn.html (revision 2494) +++ trunk/doc-rnd/intconn.html (nonexistent) @@ -1,64 +0,0 @@ - - -

pcb-rnd - the [intconn] patch

- -There are parts with internal connections (e.g. pin 2 and 4 of a SO8 -package are internally connected). Mainline PCB can not handle this, -leaving the following options: - -

-The patch introduces a new pin flag intconn(g) which marks the pin -to have internal connections in group g. If there -are multiple pins using the same g value within a single element, they -are internally connected. In other words, g is a group (or net name) -within the element and pins can join to one of the numbered groups (or internal -nets). The value of g shall be between 1 and 255, 0 means no internal -connection (equivalent to the case when intconn(0) is omitted). -

-When pin numbers are displayed (key 'd'), internal connection groups are -written in square brackets, e.g. "2 [9]" means "pin 2, internally connected -to group 9". -

-Combined with the [nonetlist] patch, this -solves the "0-ohm 1206 jumper" problem: the element should be marked -as nonetlist, with both pins set intconn(1) - this will result in a 2 -pad element, pads internally connected, that can be part of any one network -without causing short. -

Example

-Crossing traces resolved using a 0 Ohm 1206 resistor called J1. The footprint -has an intconn between the two pads which resolves the final rat line. -

- -

- -

- -

- - - -

save/load and compatibility

-This patch introduces a new pin flag. In the following example -pin 2 and 4 are connected internally as group 9, while pin 3 -does not have any internal connections: -
-Pin[40000 60000 6000 3000 6600 2800 "2" "2" "square,intconn(9)"]
-Pin[40000 50000 6000 3000 6600 2800 "3" "3" "square"]
-Pin[40000 40000 6000 3000 6600 2800 "4" "4" "square,intconn(9)"]
-
-Mainline PCB will load the design ignoring internal connections - -this may introduce new rats. -

-Mainline PCB doesn't save intconn() and elements are embedded in the file - -once the design is loaded and saved with mainline PCB, internal connection -info is lost. - -

plans

-No plans - this feature is fully implemented. There is no plan for implementing -a GUI, internal connections should be hand-edited into the element. - - Index: trunk/doc-rnd/onpoint.html =================================================================== --- trunk/doc-rnd/onpoint.html (revision 2494) +++ trunk/doc-rnd/onpoint.html (nonexistent) @@ -1,50 +0,0 @@ - - -

pcb-rnd - the [onpoint] patches

- -Robert Drehmel writes: -
-When (e.g.) routing 5mm power traces on a small grid, it's not always easy to hit the
-point where the trace ended (which is the center of the semicircle at the end of the
-line) to start the next line.  If you have selected the line tool, finding the end of
-the line can become guesswork as the cursor doesn't change shape like it does with the
-select tool.
-I want my traces to consist of lines and arcs that are perfectly connected and I want
-to work as fast as possible.
-
-Attached is a small patch that
-
-  - makes it possible to deactivate snapping to "some sensible point along a line".
-    (that's what a comment in the code says). This snapping algorithm gets in the way
-    sometimes so you have to slowly go over a line to find out where it really ends,
-    bouncing back and forth between the points of the small grid, the end of the line
-    and these "sensible points", which is wasting time. The command is
-    "Display(ToggleSnapOffGridLine)". It is still activated by default to avoid
-    violating POLA.
-
-  - more importantly, introduces a new command called "Display(ToggleHighlightOnPoint)"
-    that highlights all lines and arcs which have (end)points exactly on the position
-    where the cross hair is currently snapped to. It therefore helps finding the end
-    points of lines and arcs, but sometimes also shows redundant traces, traces that
-    aren't perfectly connected to each other, traces that don't end directly on the
-    center of a via but should, etc. It works with thin draw too and I tested it with
-    gtk and lesstif.
-
-I use the second option mostly in conjunction with deactivating the first. Both commands
-have been added to the menu by means of (g)pcb-menu.res.in and are available as command
-line options as well.
-Caveats:
-  - The HID API expects all HIDs to make a copy of the color string when setting a color.
-  - The function that lightens up a color could be improved.
-  - I used it for a while, but after porting it from my local fork, it probably needs
-    more testing.
-
- -

save/load and compatibility

-Not affected. - -

plans

-The feature is complete. - - - Index: trunk/doc-rnd/io.html =================================================================== --- trunk/doc-rnd/io.html (revision 2494) +++ trunk/doc-rnd/io.html (nonexistent) @@ -1,23 +0,0 @@ - - -

pcb-rnd - the [io_*] patches

- -Mainline PCB core was coupled with the file format; the [io] patch set is -an effort to decouple any file design I/O from core. The original file format -(plain text .pcb and .fp) lives on as plugin called io_pcb. - -

-TODO - -

save/load and compatibility

-Not affected when io_pcb is used and .pcb or .fp files are loaded or saved. -

-Using other io_* implementations will obviously result in files that are -incompatible with mainline pcb (unless mainline pcb learns how to load those -formats). - -

plans

-The project is still in an early phase. - - - Index: trunk/doc-rnd/intconn3.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/intconn3.png =================================================================== --- trunk/doc-rnd/intconn3.png (revision 2494) +++ trunk/doc-rnd/intconn3.png (nonexistent) Property changes on: trunk/doc-rnd/intconn3.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/intconn2.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/intconn2.png =================================================================== --- trunk/doc-rnd/intconn2.png (revision 2494) +++ trunk/doc-rnd/intconn2.png (nonexistent) Property changes on: trunk/doc-rnd/intconn2.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/intconn1.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/intconn1.png =================================================================== --- trunk/doc-rnd/intconn1.png (revision 2494) +++ trunk/doc-rnd/intconn1.png (nonexistent) Property changes on: trunk/doc-rnd/intconn1.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/nonetlist.html =================================================================== --- trunk/doc-rnd/nonetlist.html (revision 2494) +++ trunk/doc-rnd/nonetlist.html (nonexistent) @@ -1,53 +0,0 @@ - - -

pcb-rnd - the [nonetlist] patch

- -The [nonetlist] patch adds an element flag that makes PCB ignore the marked -element when dealing with netlists. This means connecting a net to a pin of -a nonetlist element will not cause a short. The refdes of a nonetlist -part is drawn with color element-color-nonetlist (ElementColor_nonetlist -in the source; default value #777777, grey). -

-Uses of the nonetlist feature: -

-

-Preservation: gsch2pcb-rnd leaves nonetlist elements in the PCB. -

save/load and compatibility

-This patch introduces a new element flag. The following example demonstrates -a 1206 jumper footprint: -
-Element["nonetlist" "1206 jumper, 0 ohm" "" "1206" 0 0 -3150 -3150 0 100 ""]
-(
-	Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square,intconn(1)"]
-	Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square,intconn(1)"]
-	ElementLine[-2362 -3740 2362 -3740 800]
-	ElementLine[-2362 3740 2362 3740 800]
-)
-
-Mainline PCB will load the design ignoring internal connections and nonetlist -flag - this will cause shorts on all connected pins/pads and will break -the connection. -

-Mainline PCB doesn't save nonetlist and elements are embedded in the file - -once the design is loaded and saved with mainline PCB, the flag is lost. -After reloading the file in pcb-rnd, the element causes the same shorts -as in mainline PCB. - -

plans

-No plans, the feature is complete. - - Index: trunk/doc-rnd/pcblib.html =================================================================== --- trunk/doc-rnd/pcblib.html (revision 2494) +++ trunk/doc-rnd/pcblib.html (nonexistent) @@ -1,56 +0,0 @@ - - -

pcb-rnd - the [pcblib] and [pcblib-param] and [fp_fs] patches

- -
-The footprint library shipped with mainline pcb is cluttered with -special puprose parts. I believe PCB encourages the user from -an early stage to build his own library. Thus the purpose of -the library shipped with PCB should be -to provide a minimal collection of real essential footprints ... -
    -
  • ... for the very beginning of the learning curve; -
  • ... and to be the core of the user's own library later. -
-

-[pcblib] is a replacement of newlib/ and lib/ and the m4 macros with -such an essential core library of static footprints ("file elements") -and easier-to-use parametric footprints. -

-There is an online map of -the library and -an online interface to the parametric footprint generators. - -

Design decisions

-Parts are sorted only in a few directories: smd, tru-hole, connector and -parametric. I believe there are so many orthogonal properties of footpritns -that there's no obvious hierarchy. Also, pcblib contains much fewer footpritns -than newlib so it should be still easy to navigate. -

-Parametric footprints are in a separate directory for now, even tho they -would fit under smd, tru-hole or connector. The reason is purely historical -and the layout may change in the future. - -

Example

-To the right: Footprint selection dialog on pcblib, with the smd directory -open. Note how few smd parts are there. Still, smd/ is the most crowded -subdirectory! - -

[fp_fs]

-As of vesion 1.0.10, the footprint list/search/load of footprints is a plugin. -The original code that handles local file system footprint libraries (e.g. -pcblib or newlib) is now a plugin. Altnerative plugins can be provided that work -from databases or from the web. In extreme -situations the file system based footprint plugin can even be disabled. - -

save/load and compatibility

-Not affected: elements are embedded in the PCB. - -

plans

-None, the feature is complete. -
            - - -
- - Index: trunk/doc-rnd/pcb-fp.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/pcb-fp.png =================================================================== --- trunk/doc-rnd/pcb-fp.png (revision 2494) +++ trunk/doc-rnd/pcb-fp.png (nonexistent) Property changes on: trunk/doc-rnd/pcb-fp.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/polygrid.html =================================================================== --- trunk/doc-rnd/polygrid.html (revision 2494) +++ trunk/doc-rnd/polygrid.html (nonexistent) @@ -1,17 +0,0 @@ - - -

pcb-rnd - the [polygrid] patch

- -Polygrid adds an option to the ps exporter to fill polygons with a grid -of horizontal and vertical lines instead of full fill. When toner transfer -is used or test prints are produced, the grid may save some toner. - -

save/load and compatibility

-Not affected. - -

plans

-Fix bugs. -

-No (feature) plans - this feature is fully implemented. - - Index: trunk/doc-rnd/pcblib.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/pcblib.png =================================================================== --- trunk/doc-rnd/pcblib.png (revision 2494) +++ trunk/doc-rnd/pcblib.png (nonexistent) Property changes on: trunk/doc-rnd/pcblib.png ___________________________________________________________________ Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/tostyle.html =================================================================== --- trunk/doc-rnd/tostyle.html (revision 2494) +++ trunk/doc-rnd/tostyle.html (nonexistent) @@ -1,50 +0,0 @@ - - -

pcb-rnd - the [tostyle] patch

- -Footprints bring their own hole sizes, copper ring sizes and clearances. -These parameters often depend on the manufacturing process, and such a value -coming from a footprint may differ much from the values used on the board already. -

-PCB has actions (and menus and hotkeys) to change sizes manually. In my practice, -I try to stick to the sizes defined in my routing styles and try to avoid -manually changing clearances or ring sizes. Still, the random values coming -from various footprints should be changed. -

-After many years of struggling with this, I realized the feature I need is -a way to change object sizes to not a relative or absolute number but -to the current routing style. The [tostyle] patch does exactly this. -It implements the following new features: -

-

-The new route style set works on: -

- -

Example

-GUI: select a routing style; hover above a line, a via, a pin/pad of an element -or the silk of an element; press Shift+Y; undo if necessary. -

-CLI: select objects, execute action ChangeSizes(selected, style) -

-CLI: to adjust drill sizes only: select objects, execute action ChangeDrillSize(selected, style) - - -

save/load and compatibility

-Not affected, since the patch introduces actions and UI changes, no change -related to the data model. - -

plans

-No plans, the feature is complete. - - - Index: trunk/doc-rnd/dynstyle.html =================================================================== --- trunk/doc-rnd/dynstyle.html (revision 2494) +++ trunk/doc-rnd/dynstyle.html (nonexistent) @@ -1,20 +0,0 @@ - - -

pcb-rnd - the [dynstyle] patch

- -Pcb-rnd doesn't have a hardwired limit on number of routing styles -anymore. Routing styles can be created on the fly and are saved to and loaded -from .pcb files. -

-There's no theoretical maximum explicitly set either. An implicit maximum -exists and is sizeof(int) - should be at least 2^31 on most systems. - -

save/load and compatibility

-The first 4 styles are loaded and preserved by mainline. Styles above -4 would probably be deleted in a mainline load-save cycle. The number 4 -is a constant value that can be changed if mainline is recompiled. - -

plans

-GUI HID representation of styles (especially in menus) need more testing. - - Index: trunk/doc-rnd/settings.html =================================================================== --- trunk/doc-rnd/settings.html (revision 2494) +++ trunk/doc-rnd/settings.html (nonexistent) @@ -1,31 +0,0 @@ - - -

pcb-rnd - settings

- -There are a few minor changes in default settings compared to mainline -pcb. - - - - - -
name - description - where to change - -
layers - the default layer stack is optimized for two sided boards with 3 layers on both sides - edit or replace /usr/share/pcb-rnd/default.pcb - -
styles & DRC - default styles and DRC settings are optimized for toner transfer - edit or replace /usr/share/pcb-rnd/default.pcb - -
grid - on startup "enable visible grid" is on and grid is set to 25 mil - grep "SET.* grid" main.c - -
- - - Index: trunk/doc-rnd/features/ba.html =================================================================== --- trunk/doc-rnd/features/ba.html (nonexistent) +++ trunk/doc-rnd/features/ba.html (revision 2495) @@ -0,0 +1,50 @@ + + +

pcb-rnd - the [ba] patches

+Back annotation was a long standing missing functionality. There has been +different suggestions, including: + +

+The current implementation allows pcb-rnd users to make deliberate pin +swapping and footprint replacement. The changes can be saved in a +"netlist patch" format. A modified gschem can load these and present them +as search results pointing to parts of the schematics that need to be changed. +There is a +demo video about how this happens in practice. +

+The modified gschem can be checked out from svn://repo.hu/geda-gaf-ba/trunk +

+The underlying mechanism is versatile and potentially allows more changes +to be back annotated. These are not yet accessible due to the lack of PCB +actions and GUI. + +

Design decisions

+This devlog entry functions +as a design decision document. + Another entry is a summary +on how the feature ended up in a private feature-fork of gschem. + +

save/load and compatibility

+Deliberate changes are tracked so that a new forward annotation from +the old schematics won't break them. To do this, pcb-rnd saves a +NetListPatch() section in the file. Mainline PCB can not handle this section. +Compatibility, by use case: + + + +

plans

+Back annotation for further changes, e.g. value change, naming/renaming nets, +etc. + + Index: trunk/doc-rnd/features/cycdrag.html =================================================================== --- trunk/doc-rnd/features/cycdrag.html (nonexistent) +++ trunk/doc-rnd/features/cycdrag.html (revision 2495) @@ -0,0 +1,28 @@ + + +

pcb-rnd - the [cycdrag] patches

+ +A long standing misfeature of pcb (and pcb-rnd) has been that when dragging the +end of connected traces, pcb chosen one of the traces "randomly". It often +didn't pick the one the user wanted to move. The workaround was to move the +one that pcb picked and then return and move the target trace then +move the other trace back. This gets even more annoying if there are more than +two objects connected in the given point: 3 traces and a via for example. +

+The cycdrag patch addresses this issue by defining an action that can cycle +through objects that could be dragged in the given point while the left mouse +button is pressed. This lets the user explicitly select the one object to +work on. +

+This demo video +demonstrates how it works with three lines and a via. + +

save/load and compatibility

+Not affected. + +

plans

+It does not work with the lesstif HID. It does not work with the rubber band +mode. + + + Index: trunk/doc-rnd/features/debian.html =================================================================== --- trunk/doc-rnd/features/debian.html (nonexistent) +++ trunk/doc-rnd/features/debian.html (revision 2495) @@ -0,0 +1,18 @@ + + +

pcb-rnd - the [debian] patch

+ +The name of the package has been changed to pcb-rnd; a conflict with the +mainline pcb is set. +

+The lesstif variant and pcb documentation are not compiled or packaged +- I don't need them. The possibility is still there to compile them, tho. +

+The gtk variant (pcb-rnd-gtk) has both dbus and gl disabled. +

+Versioning scheme changed to match svn revisions and tags of pcb-rnd. + +

plans

+No plans - this feature is fully implemented. + + Index: trunk/doc-rnd/features/dynstyle.html =================================================================== --- trunk/doc-rnd/features/dynstyle.html (nonexistent) +++ trunk/doc-rnd/features/dynstyle.html (revision 2495) @@ -0,0 +1,20 @@ + + +

pcb-rnd - the [dynstyle] patch

+ +Pcb-rnd doesn't have a hardwired limit on number of routing styles +anymore. Routing styles can be created on the fly and are saved to and loaded +from .pcb files. +

+There's no theoretical maximum explicitly set either. An implicit maximum +exists and is sizeof(int) - should be at least 2^31 on most systems. + +

save/load and compatibility

+The first 4 styles are loaded and preserved by mainline. Styles above +4 would probably be deleted in a mainline load-save cycle. The number 4 +is a constant value that can be changed if mainline is recompiled. + +

plans

+GUI HID representation of styles (especially in menus) need more testing. + + Index: trunk/doc-rnd/features/flagcomp.html =================================================================== --- trunk/doc-rnd/features/flagcomp.html (nonexistent) +++ trunk/doc-rnd/features/flagcomp.html (revision 2495) @@ -0,0 +1,23 @@ + + +

pcb-rnd - the [flagcomp] patch

+ +Many of the patches in this fork, and in possible future branches/forks +may introduce new pin, pad or element flags. PCB loads and saves flags +by converting the text representation to an in-memory binary format. Any +flag not understood is lost. +

+This patch adds a linked list of string flags, filled in with the unknown +flags while loading a PCB. On save, these flags are appended to the normal +flag list. This preserves all unknown flags (but not order of flags) in +a load/save cycle. + +

save/load and compatibility

+This patch ensures compatibility in save/load cycles with flags introduced +by later versions of mainline PCB or different branches/forks of PCB by +not removing flags they introduced. + +

plans

+No plans - this feature is fully implemented. + + Index: trunk/doc-rnd/features/fp_wget.html =================================================================== --- trunk/doc-rnd/features/fp_wget.html (nonexistent) +++ trunk/doc-rnd/features/fp_wget.html (revision 2495) @@ -0,0 +1,37 @@ + + +

pcb-rnd - the [fp_wget] patch

+ +Since version 1.0.10, pcb-rnd implements a new footprint mechanism (see +[fp_fs] and [library_t]). +The new code allows footprint backend plugins to get library from anywhere. +The [fp_wget] plugin is an implementation that: + +

+This is all transparent, the user experience is that the remote library is +like a read-only local library reachable from the library window. +

+A web site used as a library should be able to: +

+

+The plugin uses external program wget to communicate on the web. + + +

How to configure for gedasymbols.org

+Add wget@gedasymbols in the library search path (e.g. in preferences as library-newlib). + +

save/load and compatibility

+Not affected. + +

plans

+Better feedback on progress, explicit user requested refresh, refresh in +the background. + + + Index: trunk/doc-rnd/features/gpmi.html =================================================================== --- trunk/doc-rnd/features/gpmi.html (nonexistent) +++ trunk/doc-rnd/features/gpmi.html (revision 2495) @@ -0,0 +1,41 @@ + + +

pcb-rnd - the [gpmi] patch

+ +Thanks to gpmi, pcb-rnd is scriptable in about 10 scripting languages (e.g. +lua, awk, ruby, python, scheme, tcl). Scripts are integrated in pcb-rnd and +have access to most of the internals. Scripts +are able to: + + +

+This feature has three options: +

+ +

Example

+Check out the Rosetta stone of +pcb-rnd. + +

save/load and compatibility

+Save/load files are not affected. + +

plans

+Expose more internals, write more example scripts and documentation. + + + Index: trunk/doc-rnd/features/intconn.html =================================================================== --- trunk/doc-rnd/features/intconn.html (nonexistent) +++ trunk/doc-rnd/features/intconn.html (revision 2495) @@ -0,0 +1,64 @@ + + +

pcb-rnd - the [intconn] patch

+ +There are parts with internal connections (e.g. pin 2 and 4 of a SO8 +package are internally connected). Mainline PCB can not handle this, +leaving the following options: + +

+The patch introduces a new pin flag intconn(g) which marks the pin +to have internal connections in group g. If there +are multiple pins using the same g value within a single element, they +are internally connected. In other words, g is a group (or net name) +within the element and pins can join to one of the numbered groups (or internal +nets). The value of g shall be between 1 and 255, 0 means no internal +connection (equivalent to the case when intconn(0) is omitted). +

+When pin numbers are displayed (key 'd'), internal connection groups are +written in square brackets, e.g. "2 [9]" means "pin 2, internally connected +to group 9". +

+Combined with the [nonetlist] patch, this +solves the "0-ohm 1206 jumper" problem: the element should be marked +as nonetlist, with both pins set intconn(1) - this will result in a 2 +pad element, pads internally connected, that can be part of any one network +without causing short. +

Example

+Crossing traces resolved using a 0 Ohm 1206 resistor called J1. The footprint +has an intconn between the two pads which resolves the final rat line. +

+ +

+ +

+ +

+ + + +

save/load and compatibility

+This patch introduces a new pin flag. In the following example +pin 2 and 4 are connected internally as group 9, while pin 3 +does not have any internal connections: +
+Pin[40000 60000 6000 3000 6600 2800 "2" "2" "square,intconn(9)"]
+Pin[40000 50000 6000 3000 6600 2800 "3" "3" "square"]
+Pin[40000 40000 6000 3000 6600 2800 "4" "4" "square,intconn(9)"]
+
+Mainline PCB will load the design ignoring internal connections - +this may introduce new rats. +

+Mainline PCB doesn't save intconn() and elements are embedded in the file - +once the design is loaded and saved with mainline PCB, internal connection +info is lost. + +

plans

+No plans - this feature is fully implemented. There is no plan for implementing +a GUI, internal connections should be hand-edited into the element. + + Index: trunk/doc-rnd/features/intconn1.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/intconn1.png =================================================================== --- trunk/doc-rnd/features/intconn1.png (nonexistent) +++ trunk/doc-rnd/features/intconn1.png (revision 2495) Property changes on: trunk/doc-rnd/features/intconn1.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/intconn2.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/intconn2.png =================================================================== --- trunk/doc-rnd/features/intconn2.png (nonexistent) +++ trunk/doc-rnd/features/intconn2.png (revision 2495) Property changes on: trunk/doc-rnd/features/intconn2.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/intconn3.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/intconn3.png =================================================================== --- trunk/doc-rnd/features/intconn3.png (nonexistent) +++ trunk/doc-rnd/features/intconn3.png (revision 2495) Property changes on: trunk/doc-rnd/features/intconn3.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/io.html =================================================================== --- trunk/doc-rnd/features/io.html (nonexistent) +++ trunk/doc-rnd/features/io.html (revision 2495) @@ -0,0 +1,23 @@ + + +

pcb-rnd - the [io_*] patches

+ +Mainline PCB core was coupled with the file format; the [io] patch set is +an effort to decouple any file design I/O from core. The original file format +(plain text .pcb and .fp) lives on as plugin called io_pcb. + +

+TODO + +

save/load and compatibility

+Not affected when io_pcb is used and .pcb or .fp files are loaded or saved. +

+Using other io_* implementations will obviously result in files that are +incompatible with mainline pcb (unless mainline pcb learns how to load those +formats). + +

plans

+The project is still in an early phase. + + + Index: trunk/doc-rnd/features/jumper_1206.fp =================================================================== --- trunk/doc-rnd/features/jumper_1206.fp (nonexistent) +++ trunk/doc-rnd/features/jumper_1206.fp (revision 2495) @@ -0,0 +1,7 @@ +Element["nonetlist" "1206 jumper, 0 ohm" "" "1206" 0 0 -3150 -3150 0 100 ""] +( + Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square,intconn(1)"] + Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square,intconn(1)"] + ElementLine[-2362 -3740 2362 -3740 800] + ElementLine[-2362 3740 2362 3740 800] +) Index: trunk/doc-rnd/features/library_t.html =================================================================== --- trunk/doc-rnd/features/library_t.html (nonexistent) +++ trunk/doc-rnd/features/library_t.html (revision 2495) @@ -0,0 +1,28 @@ + + +

pcb-rnd - the [library_t] patch

+ +The original code has a special setup for representing trees, C structures +called LibraryMenu and LibraryEntry. This system can represent only a subset +of trees: there is a root, a level consist of directories only and a next level, +each directory consist of data nodes only. This has been enough for newlib, +which strictly follows this model in the file system hierarchy. The lesstif +HID also hardwired this model in the GUI. +

+In pcb-rnd this has been replaced with a new struct type called library_t +that can represent an arbitrary tree: directories and files within directories +down to many levels. +

+Both the gtk and the lesstif had has been modified accordingly and can +properly display the tree. This in turn enables alternative footprint backend +implementations such as fp_wget to import +more complex libraries, e.g. the one on gedasymbols.org. + +

save/load and compatibility

+Not affected. + +

plans

+Finished, no plans. + + + Index: trunk/doc-rnd/features/mincut.html =================================================================== --- trunk/doc-rnd/features/mincut.html (nonexistent) +++ trunk/doc-rnd/features/mincut.html (revision 2495) @@ -0,0 +1,47 @@ + + +

pcb-rnd - the [mincut] patch

+ +The original code was highlighting pins/pads only when a short came around +after rats nest optimization. This was not very helpful on a complex board. +There had been a long discussion on the mailing list about the best solutions. +There were a few very good ideas, including: + +

+I choose minimal cut for my patch because it doesn't require tracing the +full history or any manual administration of nets vs. objects (which I +would find inevitable even with manual tagging - directly or indirectly +the user needs to be able to change net tags). +

+The minimal cut is the least amount of object whose removal would resolve +the short. It is best demonstrated on an example: +

+ +

+Removing all the marked lines/polys/vias would surely resolve the short +(sometimes leaving rat lines behind). Minimal cut is better than randomly +removing objects, tho: it guarantees that the minimal amount of objects +are to be removed. On a complex board, this place is likely to be close +to the place where the problem really is - much closer than the pins/pads. +

+Since mincut can be expensive on large boards, the feature can be enabled +per board (a new PCB flag) and can be disbaled globally (--enable-mincut 0 +when starting PCB). + +

save/load and compatibility

+New PCB flag enablemincut. Mainline pcb ignores this flag but does not +preserve it. + +

plans

+Finished, no plans. + + Index: trunk/doc-rnd/features/mincut.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/mincut.png =================================================================== --- trunk/doc-rnd/features/mincut.png (nonexistent) +++ trunk/doc-rnd/features/mincut.png (revision 2495) Property changes on: trunk/doc-rnd/features/mincut.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/negselect.html =================================================================== --- trunk/doc-rnd/features/negselect.html (nonexistent) +++ trunk/doc-rnd/features/negselect.html (revision 2495) @@ -0,0 +1,23 @@ + + +

pcb-rnd - the [cycdrag] patches, negative box select

+ +When a selection is made using drag&drop (box selection), depending +on the direction the rule for object selection differ: + + +

save/load and compatibility

+Not affected. + +

plans

+Work more on some rough corners of the negative direction: e.g. pads are +handled as 0 width lines so the selection has to hit the center. + + + Index: trunk/doc-rnd/features/nonetlist.html =================================================================== --- trunk/doc-rnd/features/nonetlist.html (nonexistent) +++ trunk/doc-rnd/features/nonetlist.html (revision 2495) @@ -0,0 +1,53 @@ + + +

pcb-rnd - the [nonetlist] patch

+ +The [nonetlist] patch adds an element flag that makes PCB ignore the marked +element when dealing with netlists. This means connecting a net to a pin of +a nonetlist element will not cause a short. The refdes of a nonetlist +part is drawn with color element-color-nonetlist (ElementColor_nonetlist +in the source; default value #777777, grey). +

+Uses of the nonetlist feature: +

+

+Preservation: gsch2pcb-rnd leaves nonetlist elements in the PCB. +

save/load and compatibility

+This patch introduces a new element flag. The following example demonstrates +a 1206 jumper footprint: +
+Element["nonetlist" "1206 jumper, 0 ohm" "" "1206" 0 0 -3150 -3150 0 100 ""]
+(
+	Pad[-5905 -1181 -5905 1181 5118 2000 5718 "1" "1" "square,intconn(1)"]
+	Pad[5905 -1181 5905 1181 5118 2000 5718 "2" "2" "square,intconn(1)"]
+	ElementLine[-2362 -3740 2362 -3740 800]
+	ElementLine[-2362 3740 2362 3740 800]
+)
+
+Mainline PCB will load the design ignoring internal connections and nonetlist +flag - this will cause shorts on all connected pins/pads and will break +the connection. +

+Mainline PCB doesn't save nonetlist and elements are embedded in the file - +once the design is loaded and saved with mainline PCB, the flag is lost. +After reloading the file in pcb-rnd, the element causes the same shorts +as in mainline PCB. + +

plans

+No plans, the feature is complete. + + Index: trunk/doc-rnd/features/onpoint.html =================================================================== --- trunk/doc-rnd/features/onpoint.html (nonexistent) +++ trunk/doc-rnd/features/onpoint.html (revision 2495) @@ -0,0 +1,50 @@ + + +

pcb-rnd - the [onpoint] patches

+ +Robert Drehmel writes: +
+When (e.g.) routing 5mm power traces on a small grid, it's not always easy to hit the
+point where the trace ended (which is the center of the semicircle at the end of the
+line) to start the next line.  If you have selected the line tool, finding the end of
+the line can become guesswork as the cursor doesn't change shape like it does with the
+select tool.
+I want my traces to consist of lines and arcs that are perfectly connected and I want
+to work as fast as possible.
+
+Attached is a small patch that
+
+  - makes it possible to deactivate snapping to "some sensible point along a line".
+    (that's what a comment in the code says). This snapping algorithm gets in the way
+    sometimes so you have to slowly go over a line to find out where it really ends,
+    bouncing back and forth between the points of the small grid, the end of the line
+    and these "sensible points", which is wasting time. The command is
+    "Display(ToggleSnapOffGridLine)". It is still activated by default to avoid
+    violating POLA.
+
+  - more importantly, introduces a new command called "Display(ToggleHighlightOnPoint)"
+    that highlights all lines and arcs which have (end)points exactly on the position
+    where the cross hair is currently snapped to. It therefore helps finding the end
+    points of lines and arcs, but sometimes also shows redundant traces, traces that
+    aren't perfectly connected to each other, traces that don't end directly on the
+    center of a via but should, etc. It works with thin draw too and I tested it with
+    gtk and lesstif.
+
+I use the second option mostly in conjunction with deactivating the first. Both commands
+have been added to the menu by means of (g)pcb-menu.res.in and are available as command
+line options as well.
+Caveats:
+  - The HID API expects all HIDs to make a copy of the color string when setting a color.
+  - The function that lightens up a color could be improved.
+  - I used it for a while, but after porting it from my local fork, it probably needs
+    more testing.
+
+ +

save/load and compatibility

+Not affected. + +

plans

+The feature is complete. + + + Index: trunk/doc-rnd/features/pcb-fp.html =================================================================== --- trunk/doc-rnd/features/pcb-fp.html (nonexistent) +++ trunk/doc-rnd/features/pcb-fp.html (revision 2495) @@ -0,0 +1,36 @@ + + +

pcb-rnd - the [pcb-fp] patch

+ +Pcb-fp is an effort to clean up the footprint situation: + + +

Example

+Intaractive parametric footprint selection in pcb-rnd: +

+ +

+An online footprint generator web1.0 version is also available. + +

save/load and compatibility

+Save/load files are not affected. If a schematics is written for the new +library and depends on parametric footprints: + + +

plans

+No plans - this feature is fully implemented. + + + Index: trunk/doc-rnd/features/pcb-fp.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/pcb-fp.png =================================================================== --- trunk/doc-rnd/features/pcb-fp.png (nonexistent) +++ trunk/doc-rnd/features/pcb-fp.png (revision 2495) Property changes on: trunk/doc-rnd/features/pcb-fp.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/pcblib.html =================================================================== --- trunk/doc-rnd/features/pcblib.html (nonexistent) +++ trunk/doc-rnd/features/pcblib.html (revision 2495) @@ -0,0 +1,56 @@ + + +

pcb-rnd - the [pcblib] and [pcblib-param] and [fp_fs] patches

+ +
+The footprint library shipped with mainline pcb is cluttered with +special puprose parts. I believe PCB encourages the user from +an early stage to build his own library. Thus the purpose of +the library shipped with PCB should be +to provide a minimal collection of real essential footprints ... +
    +
  • ... for the very beginning of the learning curve; +
  • ... and to be the core of the user's own library later. +
+

+[pcblib] is a replacement of newlib/ and lib/ and the m4 macros with +such an essential core library of static footprints ("file elements") +and easier-to-use parametric footprints. +

+There is an online map of +the library and +an online interface to the parametric footprint generators. + +

Design decisions

+Parts are sorted only in a few directories: smd, tru-hole, connector and +parametric. I believe there are so many orthogonal properties of footpritns +that there's no obvious hierarchy. Also, pcblib contains much fewer footpritns +than newlib so it should be still easy to navigate. +

+Parametric footprints are in a separate directory for now, even tho they +would fit under smd, tru-hole or connector. The reason is purely historical +and the layout may change in the future. + +

Example

+To the right: Footprint selection dialog on pcblib, with the smd directory +open. Note how few smd parts are there. Still, smd/ is the most crowded +subdirectory! + +

[fp_fs]

+As of vesion 1.0.10, the footprint list/search/load of footprints is a plugin. +The original code that handles local file system footprint libraries (e.g. +pcblib or newlib) is now a plugin. Altnerative plugins can be provided that work +from databases or from the web. In extreme +situations the file system based footprint plugin can even be disabled. + +

save/load and compatibility

+Not affected: elements are embedded in the PCB. + +

plans

+None, the feature is complete. +
            + + +
+ + Index: trunk/doc-rnd/features/pcblib.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/pcblib.png =================================================================== --- trunk/doc-rnd/features/pcblib.png (nonexistent) +++ trunk/doc-rnd/features/pcblib.png (revision 2495) Property changes on: trunk/doc-rnd/features/pcblib.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/polygrid.html =================================================================== --- trunk/doc-rnd/features/polygrid.html (nonexistent) +++ trunk/doc-rnd/features/polygrid.html (revision 2495) @@ -0,0 +1,17 @@ + + +

pcb-rnd - the [polygrid] patch

+ +Polygrid adds an option to the ps exporter to fill polygons with a grid +of horizontal and vertical lines instead of full fill. When toner transfer +is used or test prints are produced, the grid may save some toner. + +

save/load and compatibility

+Not affected. + +

plans

+Fix bugs. +

+No (feature) plans - this feature is fully implemented. + + Index: trunk/doc-rnd/features/res.html =================================================================== --- trunk/doc-rnd/features/res.html (nonexistent) +++ trunk/doc-rnd/features/res.html (revision 2495) @@ -0,0 +1,129 @@ + + +

pcb-rnd - the [res] patch

+ +PCB used to have an own file format for describing resources (menu structure +and hotkey bindings, vendor drill mapping). The resource format was generic +enough to describe these things, but the syntax was somewhat wierd: mixed +positional and named fields. More precisely, composite nodes could contain +named and anonymous subnodes, and the meaning of anonymous subnodes depended +on their position in the anon-subnode-list. +

+The code that dealt with the in-memory representation of the resource tree +was wierd and big chunks duplicated in the HIDs and vendor drill module. It +was also hard to parse a resource file with external tools. +

+Since version 1.0.10, pcb-rnd replaces resource files with +lihata. Lihata is a small, generic +purpose container format that can describe arbitrary trees. Just like resource +file syntax, lihata is optimized for hand-editing: no need to use excess +quoting or long boilerplate blocks. +

+Liblihata also provides a lot of helper functions that made the code +dealing with the menus and vendor drill resources much simpler and less +redundant. Since the parser is small and external, and since there are +external converter tools available, it is also easier to deal with the +files outside of the pcb executable. + +

menu files

+There are pcb-menu-gtk.lht and pcb-menu-lesstif.lht. They are in trunk/src +in the source tree and are instaslled in the SHAREDIR. Currently each GUI +HID (lesstif, gtk) loads the corresponding menu file. + +

menu resource lihata structure

+The root of a menu resource file should be a ha: with the following +children: + +All children are optional, but recommended. Thus the file stucture, zoomed +out, is: +
+ha:{
+	li:mouse { ... }
+	li:main_menu { ... }
+	li:popups { ... }
+}
+
+ +

li:mouse

+The mouse subtree may contain a li: for each mouse button action; +the children of the list are further li: nodes for key modifiers, whose +children are text nodes: actions executed in order. +

+Buttons supported are: left, right, middle, up, down - the last two +are for the scroll wheel. Modifier name should start with "press" or "release" +optionally followed by modifier key suffixes separated with dashes, e.g. +"press-alt-shift" means the given button is pressed while alt and shift +were also pressed. +

+Example structure: +

+	li:mouse {
+		li:left {
+			li:press            = { Mode(Notify) }
+			li:press-ctrl       = { Mode(Save); Mode(None); }
+		}
+	}
+
+ +

li:main_menu

+The main menu is a list of menubar items that may host submenu items +recursively. Each normal item is a hash with the following children: + +Special menu items are text nodes instead of hashes; they are: + +

+A key description is a text in the form of: +

+ +An example menu item with submenus (can be a main menu or a submenu of +another menu item): +
+ha:example menu item {
+	li:submenu {
+		ha:menu item {
+			action=Save(ElementConnections)
+			tip=example menu
+		}
+		-
+		ha:another menu item {
+			a={Shift-Alt<key>r}
+			action={Action1(); Action2();}
+		}
+	}
+}
+
+ +

li:popups

+Each children is a hash that describes a popup menu. A popup menu behaves +exactly like a menu item, it should have a submenu list. Popup windows will +be popped up by executing an action with the name of the popup menu. + +

save/load and compatibility

+Not affected. + +

plans

+The resource file format conversion is done. There are other parts of the code +that will probably get lihata instead of the current custom parsers, e.g. +the preferences/settings file. + + + Index: trunk/doc-rnd/features/scconfig.html =================================================================== --- trunk/doc-rnd/features/scconfig.html (nonexistent) +++ trunk/doc-rnd/features/scconfig.html (revision 2495) @@ -0,0 +1,15 @@ + + +

pcb-rnd - the [scconfig] patch

+ +Pcb-rnd uses scconfig +for ./configure instead of autotools. Scconfig is smaller and easier +to maintain. + +

save/load and compatibility

+Not affected. + +

plans

+No plans - this feature is fully implemented by now. + + Index: trunk/doc-rnd/features/settings.html =================================================================== --- trunk/doc-rnd/features/settings.html (nonexistent) +++ trunk/doc-rnd/features/settings.html (revision 2495) @@ -0,0 +1,31 @@ + + +

pcb-rnd - settings

+ +There are a few minor changes in default settings compared to mainline +pcb. + + + + + +
name + description + where to change + +
layers + the default layer stack is optimized for two sided boards with 3 layers on both sides + edit or replace /usr/share/pcb-rnd/default.pcb + +
styles & DRC + default styles and DRC settings are optimized for toner transfer + edit or replace /usr/share/pcb-rnd/default.pcb + +
grid + on startup "enable visible grid" is on and grid is set to 25 mil + grep "SET.* grid" main.c + +
+ + + Index: trunk/doc-rnd/features/square.html =================================================================== --- trunk/doc-rnd/features/square.html (nonexistent) +++ trunk/doc-rnd/features/square.html (revision 2495) @@ -0,0 +1,71 @@ + + +

pcb-rnd - the [square] patch

+Most of my PCBs end up in toner transfer. There are a lot +of tricks around prototyping at home. One of the problems I often +face is small rings peeling off during rework (and rework tend to +happen on the first prototypes). The solution for this is increasing +ring size - which is not suitable if traces are passing between pins. +Another solution is to increase the area of the pin: + + +

+The patch takes an octagon pin and stretches points in various directions. +There are 4 bits (for left, right, up and down) to indicate in which directions +the stretch applies. Pressing 'q' on a pin cycles thru round pin, square pin, +16 stretched octagons and the original octagon. +

+The code is also patched to handle clearances, shorts and connections (find.c). +

+Thermals are not fully working for funny shaped pins, but it has low priority: +they still work fine for rounded and square pins and if there is a poly around +the pin, I wouldn't use shaped pins anyway. + +

save/load and compatibility

+This patch introduces a new pin flag called shape(n), where n is an integer +selecting the shape of the pin when the square flag is also set: +
+Pin[40000 60000 6000 3000 6600 2800 "8" "8" "square,shape(3)"]
+
+Mainline PCB will load the design ignoring the custom shape and will use a +square pin. As long a traces end in the center point of the pin, this +should not break connections. +

+Mainline PCB doesn't save shape() - once the design is loaded and saved with +mainline PCB pin shape info is lost. + +

plans

+In the original code there are separate code paths for round, octagonal and +square pins. The separation repeats for at least: + +In most cases a set of hardwired constants are written in the C code. A notable +exception was the octagon pin draw function, that had x and y offsets in a const +table for 8 points and a loop to create the poly (or line segments in thin draw). +

+The [square] feature is a good base for cleaning up the code a bit and for +moving toward a generic pin shape patch: +

+ + Index: trunk/doc-rnd/features/square.pcb =================================================================== --- trunk/doc-rnd/features/square.pcb (nonexistent) +++ trunk/doc-rnd/features/square.pcb (revision 2495) @@ -0,0 +1,893 @@ +# release: pcb 20110918 + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20070407] + +PCB["" 130000 105000] + +Grid[2500.0 0 0 1] +Cursor[0 0 0.000000] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[1000 1000 1000 1000 1500 1000] +Flags("nameonpcb,uniquename,clearnew") +Groups("1,c:2,s:3:4:5:6:7:8") +Styles["Signal,1500,6000,3150,2500:Power,3000,6000,3937,2500:Fat,8000,6000,3500,2500:Skinny,1200,2402,1181,2500"] + +Symbol[' ' 1800] +( +) +Symbol['!' 1200] +( + SymbolLine[0 4500 0 5000 800] + SymbolLine[0 1000 0 3500 800] +) +Symbol['"' 1200] +( + SymbolLine[0 1000 0 2000 800] + SymbolLine[1000 1000 1000 2000 800] +) +Symbol['#' 1200] +( + SymbolLine[0 3500 2000 3500 800] + SymbolLine[0 2500 2000 2500 800] + SymbolLine[1500 2000 1500 4000 800] + SymbolLine[500 2000 500 4000 800] +) +Symbol['$' 1200] +( + SymbolLine[1500 1500 2000 2000 800] + SymbolLine[500 1500 1500 1500 800] + SymbolLine[0 2000 500 1500 800] + SymbolLine[0 2000 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4000 800] + SymbolLine[1500 4500 2000 4000 800] + SymbolLine[500 4500 1500 4500 800] + SymbolLine[0 4000 500 4500 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['%' 1200] +( + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[1000 2500 1500 2000 800] + SymbolLine[500 2500 1000 2500 800] + SymbolLine[0 2000 500 2500 800] + SymbolLine[0 5000 4000 1000 800] + SymbolLine[3500 5000 4000 4500 800] + SymbolLine[4000 4000 4000 4500 800] + SymbolLine[3500 3500 4000 4000 800] + SymbolLine[3000 3500 3500 3500 800] + SymbolLine[2500 4000 3000 3500 800] + SymbolLine[2500 4000 2500 4500 800] + SymbolLine[2500 4500 3000 5000 800] + SymbolLine[3000 5000 3500 5000 800] +) +Symbol['&' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 3500 1500 2000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[0 2500 2500 5000 800] + SymbolLine[500 1000 1000 1000 800] + SymbolLine[1000 1000 1500 1500 800] + SymbolLine[1500 1500 1500 2000 800] + SymbolLine[0 3500 0 4500 800] +) +Symbol[''' 1200] +( + SymbolLine[0 2000 1000 1000 800] +) +Symbol['(' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] +) +Symbol[')' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['*' 1200] +( + SymbolLine[0 2000 2000 4000 800] + SymbolLine[0 4000 2000 2000 800] + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol['+' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[1000 2000 1000 4000 800] +) +Symbol[',' 1200] +( + SymbolLine[0 6000 1000 5000 800] +) +Symbol['-' 1200] +( + SymbolLine[0 3000 2000 3000 800] +) +Symbol['.' 1200] +( + SymbolLine[0 5000 500 5000 800] +) +Symbol['/' 1200] +( + SymbolLine[0 4500 3000 1500 800] +) +Symbol['0' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4000 2000 2000 800] +) +Symbol['1' 1200] +( + SymbolLine[0 1800 800 1000 800] + SymbolLine[800 1000 800 5000 800] + SymbolLine[0 5000 1500 5000 800] +) +Symbol['2' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[0 5000 2500 2500 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['3' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 2800 1500 2800 800] + SymbolLine[2000 1500 2000 2300 800] + SymbolLine[2000 3300 2000 4500 800] + SymbolLine[2000 3300 1500 2800 800] + SymbolLine[2000 2300 1500 2800 800] +) +Symbol['4' 1200] +( + SymbolLine[0 3500 2000 1000 800] + SymbolLine[0 3500 2500 3500 800] + SymbolLine[2000 1000 2000 5000 800] +) +Symbol['5' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[500 2500 1500 2500 800] + SymbolLine[1500 2500 2000 3000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['6' 1200] +( + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1500 2800 2000 3300 800] + SymbolLine[0 2800 1500 2800 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3300 2000 4500 800] +) +Symbol['7' 1200] +( + SymbolLine[500 5000 2500 1000 800] + SymbolLine[0 1000 2500 1000 800] +) +Symbol['8' 1200] +( + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3700 0 4500 800] + SymbolLine[0 3700 700 3000 800] + SymbolLine[700 3000 1300 3000 800] + SymbolLine[1300 3000 2000 3700 800] + SymbolLine[2000 3700 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 2300 700 3000 800] + SymbolLine[0 1500 0 2300 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2300 800] + SymbolLine[1300 3000 2000 2300 800] +) +Symbol['9' 1200] +( + SymbolLine[500 5000 2000 3000 800] + SymbolLine[2000 1500 2000 3000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol[':' 1200] +( + SymbolLine[0 2500 500 2500 800] + SymbolLine[0 3500 500 3500 800] +) +Symbol[';' 1200] +( + SymbolLine[0 5000 1000 4000 800] + SymbolLine[1000 2500 1000 3000 800] +) +Symbol['<' 1200] +( + SymbolLine[0 3000 1000 2000 800] + SymbolLine[0 3000 1000 4000 800] +) +Symbol['=' 1200] +( + SymbolLine[0 2500 2000 2500 800] + SymbolLine[0 3500 2000 3500 800] +) +Symbol['>' 1200] +( + SymbolLine[0 2000 1000 3000 800] + SymbolLine[0 4000 1000 3000 800] +) +Symbol['?' 1200] +( + SymbolLine[1000 3000 1000 3500 800] + SymbolLine[1000 4500 1000 5000 800] + SymbolLine[0 1500 0 2000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 2000 800] + SymbolLine[1000 3000 2000 2000 800] +) +Symbol['@' 1200] +( + SymbolLine[0 1000 0 4000 800] + SymbolLine[0 4000 1000 5000 800] + SymbolLine[1000 5000 4000 5000 800] + SymbolLine[5000 3500 5000 1000 800] + SymbolLine[5000 1000 4000 0 800] + SymbolLine[4000 0 1000 0 800] + SymbolLine[1000 0 0 1000 800] + SymbolLine[1500 2000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 3000 3500 800] + SymbolLine[3000 3500 3500 3000 800] + SymbolLine[3500 3000 4000 3500 800] + SymbolLine[3500 3000 3500 1500 800] + SymbolLine[3500 2000 3000 1500 800] + SymbolLine[2000 1500 3000 1500 800] + SymbolLine[2000 1500 1500 2000 800] + SymbolLine[4000 3500 5000 3500 800] +) +Symbol['A' 1200] +( + SymbolLine[0 2000 0 5000 800] + SymbolLine[0 2000 700 1000 800] + SymbolLine[700 1000 1800 1000 800] + SymbolLine[1800 1000 2500 2000 800] + SymbolLine[2500 2000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['B' 1200] +( + SymbolLine[0 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3300 2500 4500 800] + SymbolLine[2000 2800 2500 3300 800] + SymbolLine[500 2800 2000 2800 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2300 800] + SymbolLine[2000 2800 2500 2300 800] +) +Symbol['C' 1200] +( + SymbolLine[700 5000 2000 5000 800] + SymbolLine[0 4300 700 5000 800] + SymbolLine[0 1700 0 4300 800] + SymbolLine[0 1700 700 1000 800] + SymbolLine[700 1000 2000 1000 800] +) +Symbol['D' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[1800 1000 2500 1700 800] + SymbolLine[2500 1700 2500 4300 800] + SymbolLine[1800 5000 2500 4300 800] + SymbolLine[0 5000 1800 5000 800] + SymbolLine[0 1000 1800 1000 800] +) +Symbol['E' 1200] +( + SymbolLine[0 2800 1500 2800 800] + SymbolLine[0 5000 2000 5000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] +) +Symbol['F' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[0 2800 1500 2800 800] +) +Symbol['G' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[1000 3000 2000 3000 800] +) +Symbol['H' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[2500 1000 2500 5000 800] + SymbolLine[0 3000 2500 3000 800] +) +Symbol['I' 1200] +( + SymbolLine[0 1000 1000 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 1000 5000 800] +) +Symbol['J' 1200] +( + SymbolLine[700 1000 1500 1000 800] + SymbolLine[1500 1000 1500 4500 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 4500 0 4000 800] +) +Symbol['K' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3000 2000 1000 800] + SymbolLine[0 3000 2000 5000 800] +) +Symbol['L' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['M' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 1500 3000 800] + SymbolLine[1500 3000 3000 1000 800] + SymbolLine[3000 1000 3000 5000 800] +) +Symbol['N' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 1000 2500 5000 800] + SymbolLine[2500 1000 2500 5000 800] +) +Symbol['O' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['P' 1200] +( + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] +) +Symbol['Q' 1200] +( + SymbolLine[0 1500 0 4500 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1500 1000 800] + SymbolLine[1500 1000 2000 1500 800] + SymbolLine[2000 1500 2000 4000 800] + SymbolLine[1000 5000 2000 4000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[1000 3500 2000 5000 800] +) +Symbol['R' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[2500 1500 2500 2500 800] + SymbolLine[2000 3000 2500 2500 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[1300 3000 2500 5000 800] +) +Symbol['S' 1200] +( + SymbolLine[2000 1000 2500 1500 800] + SymbolLine[500 1000 2000 1000 800] + SymbolLine[0 1500 500 1000 800] + SymbolLine[0 1500 0 2500 800] + SymbolLine[0 2500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['T' 1200] +( + SymbolLine[0 1000 2000 1000 800] + SymbolLine[1000 1000 1000 5000 800] +) +Symbol['U' 1200] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 1000 2000 4500 800] +) +Symbol['V' 1200] +( + SymbolLine[0 1000 1000 5000 800] + SymbolLine[1000 5000 2000 1000 800] +) +Symbol['W' 1200] +( + SymbolLine[0 1000 0 3000 800] + SymbolLine[0 3000 500 5000 800] + SymbolLine[500 5000 1500 3000 800] + SymbolLine[1500 3000 2500 5000 800] + SymbolLine[2500 5000 3000 3000 800] + SymbolLine[3000 3000 3000 1000 800] +) +Symbol['X' 1200] +( + SymbolLine[0 5000 2500 1000 800] + SymbolLine[0 1000 2500 5000 800] +) +Symbol['Y' 1200] +( + SymbolLine[0 1000 1000 3000 800] + SymbolLine[1000 3000 2000 1000 800] + SymbolLine[1000 3000 1000 5000 800] +) +Symbol['Z' 1200] +( + SymbolLine[0 1000 2500 1000 800] + SymbolLine[0 5000 2500 1000 800] + SymbolLine[0 5000 2500 5000 800] +) +Symbol['[' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['\' 1200] +( + SymbolLine[0 1500 3000 4500 800] +) +Symbol[']' 1200] +( + SymbolLine[0 1000 500 1000 800] + SymbolLine[500 1000 500 5000 800] + SymbolLine[0 5000 500 5000 800] +) +Symbol['^' 1200] +( + SymbolLine[0 1500 500 1000 800] + SymbolLine[500 1000 1000 1500 800] +) +Symbol['_' 1200] +( + SymbolLine[0 5000 2000 5000 800] +) +Symbol['a' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 4500 800] + SymbolLine[2000 4500 2500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['b' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] +) +Symbol['c' 1200] +( + SymbolLine[500 3000 2000 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 2000 5000 800] +) +Symbol['d' 1200] +( + SymbolLine[2000 1000 2000 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] +) +Symbol['e' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[0 4000 2000 4000 800] + SymbolLine[2000 4000 2000 3500 800] +) +Symbol['f' 1000] +( + SymbolLine[500 1500 500 5000 800] + SymbolLine[500 1500 1000 1000 800] + SymbolLine[1000 1000 1500 1000 800] + SymbolLine[0 3000 1000 3000 800] +) +Symbol['g' 1200] +( + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[2000 3000 2000 6000 800] +) +Symbol['h' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] +) +Symbol['i' 1000] +( + SymbolLine[0 2000 0 2100 1000] + SymbolLine[0 3500 0 5000 800] +) +Symbol['j' 1000] +( + SymbolLine[500 2000 500 2100 1000] + SymbolLine[500 3500 500 6000 800] + SymbolLine[0 6500 500 6000 800] +) +Symbol['k' 1200] +( + SymbolLine[0 1000 0 5000 800] + SymbolLine[0 3500 1500 5000 800] + SymbolLine[0 3500 1000 2500 800] +) +Symbol['l' 1000] +( + SymbolLine[0 1000 0 4500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['m' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[2000 3500 2500 3000 800] + SymbolLine[2500 3000 3000 3000 800] + SymbolLine[3000 3000 3500 3500 800] + SymbolLine[3500 3500 3500 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['n' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 5000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['o' 1200] +( + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[2000 3500 2000 4500 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['p' 1200] +( + SymbolLine[500 3500 500 6500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[2500 3500 2500 4500 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[1000 5000 2000 5000 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['q' 1200] +( + SymbolLine[2000 3500 2000 6500 800] + SymbolLine[1500 3000 2000 3500 800] + SymbolLine[500 3000 1500 3000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[0 3500 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['r' 1200] +( + SymbolLine[500 3500 500 5000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[1000 3000 2000 3000 800] + SymbolLine[0 3000 500 3500 800] +) +Symbol['s' 1200] +( + SymbolLine[500 5000 2000 5000 800] + SymbolLine[2000 5000 2500 4500 800] + SymbolLine[2000 4000 2500 4500 800] + SymbolLine[500 4000 2000 4000 800] + SymbolLine[0 3500 500 4000 800] + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 2000 3000 800] + SymbolLine[2000 3000 2500 3500 800] + SymbolLine[0 4500 500 5000 800] +) +Symbol['t' 1000] +( + SymbolLine[500 1000 500 4500 800] + SymbolLine[500 4500 1000 5000 800] + SymbolLine[0 2500 1000 2500 800] +) +Symbol['u' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] + SymbolLine[2000 3000 2000 4500 800] +) +Symbol['v' 1200] +( + SymbolLine[0 3000 1000 5000 800] + SymbolLine[2000 3000 1000 5000 800] +) +Symbol['w' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[500 5000 1000 5000 800] + SymbolLine[1000 5000 1500 4500 800] + SymbolLine[1500 3000 1500 4500 800] + SymbolLine[1500 4500 2000 5000 800] + SymbolLine[2000 5000 2500 5000 800] + SymbolLine[2500 5000 3000 4500 800] + SymbolLine[3000 3000 3000 4500 800] +) +Symbol['x' 1200] +( + SymbolLine[0 3000 2000 5000 800] + SymbolLine[0 5000 2000 3000 800] +) +Symbol['y' 1200] +( + SymbolLine[0 3000 0 4500 800] + SymbolLine[0 4500 500 5000 800] + SymbolLine[2000 3000 2000 6000 800] + SymbolLine[1500 6500 2000 6000 800] + SymbolLine[500 6500 1500 6500 800] + SymbolLine[0 6000 500 6500 800] + SymbolLine[500 5000 1500 5000 800] + SymbolLine[1500 5000 2000 4500 800] +) +Symbol['z' 1200] +( + SymbolLine[0 3000 2000 3000 800] + SymbolLine[0 5000 2000 3000 800] + SymbolLine[0 5000 2000 5000 800] +) +Symbol['{' 1200] +( + SymbolLine[500 1500 1000 1000 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[0 3000 500 2500 800] + SymbolLine[0 3000 500 3500 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[500 4500 1000 5000 800] +) +Symbol['|' 1200] +( + SymbolLine[0 1000 0 5000 800] +) +Symbol['}' 1200] +( + SymbolLine[0 1000 500 1500 800] + SymbolLine[500 1500 500 2500 800] + SymbolLine[500 2500 1000 3000 800] + SymbolLine[500 3500 1000 3000 800] + SymbolLine[500 3500 500 4500 800] + SymbolLine[0 5000 500 4500 800] +) +Symbol['~' 1200] +( + SymbolLine[0 3500 500 3000 800] + SymbolLine[500 3000 1000 3000 800] + SymbolLine[1000 3000 1500 3500 800] + SymbolLine[1500 3500 2000 3500 800] + SymbolLine[2000 3500 2500 3000 800] +) +Attribute("PCB::grid::unit" "mil") + +Element["" "Dual in-line package, medium wide (400 mil)" "" "DIP14M" 62500 22500 22000 5000 3 100 ""] +( + Pin[0 0 6000 3000 6600 2800 "1" "1" "square"] + Pin[0 10000 6000 3000 6600 2800 "2" "2" ""] + Pin[0 20000 6000 3000 6600 2800 "3" "3" "thermal(1S)"] + Pin[0 30000 6000 3000 6600 2800 "4" "4" "square,shape(3)"] + Pin[0 40000 6000 3000 6600 2800 "5" "5" "square,shape(2)"] + Pin[0 50000 6000 3000 6600 2800 "6" "6" "square,shape(4)"] + Pin[0 60000 6000 3000 6600 2800 "7" "7" "square,shape(8)"] + Pin[40000 60000 6000 3000 6600 2800 "8" "8" "square,shape(8)"] + Pin[40000 50000 6000 3000 6600 2800 "9" "9" "square,shape(4)"] + Pin[40000 40000 6000 3000 6600 2800 "10" "10" "square,shape(2)"] + Pin[40000 30000 6000 3000 6600 2800 "11" "11" "square,shape(3)"] + Pin[40000 20000 6000 3000 6600 2800 "12" "12" ""] + Pin[40000 10000 6000 3000 6600 2800 "13" "13" ""] + Pin[40000 0 6000 3000 6600 2800 "14" "14" "square,shape(1)"] + ElementLine [-5000 -5000 -5000 65000 1000] + ElementLine [-5000 65000 45000 65000 1000] + ElementLine [45000 65000 45000 -5000 1000] + ElementLine [-5000 -5000 15000 -5000 1000] + ElementLine [25000 -5000 45000 -5000 1000] + ElementArc [20000 -5000 5000 5000 0 180 1000] + + ) +Layer(1 "component") +( +) +Layer(2 "solder") +( + Line[10000 17500 67500 17500 1500 5000 "clearline"] + Line[67500 17500 77500 27500 1500 5000 "clearline"] + Line[77500 27500 85000 27500 1500 5000 "clearline"] + Line[62500 22500 37500 22500 1500 5000 "clearline"] + Line[10000 27500 67500 27500 1500 5000 "clearline"] + Line[67500 27500 77500 37500 1500 5000 "clearline"] + Line[77500 37500 85000 37500 1500 5000 "clearline"] + Line[62500 32500 45000 32500 1500 5000 "clearline"] + Line[10000 37500 67500 37500 1500 5000 "clearline"] + Line[67500 37500 77500 47500 1500 5000 "clearline"] + Line[77500 47500 85000 47500 1500 5000 "clearline"] + Line[62500 42500 27500 42500 1500 5000 ""] + Line[10000 47500 67500 47500 1500 5000 "clearline"] + Line[67500 47500 77500 57500 1500 5000 "clearline"] + Line[77500 57500 85000 57500 1500 5000 "clearline"] + Line[62500 52500 37500 52500 1500 5000 "clearline"] + Line[37500 57500 67500 57500 1500 5000 "clearline"] + Line[67500 57500 77500 67500 1500 5000 "clearline"] + Line[77500 67500 85000 67500 1500 5000 "clearline"] + Line[62500 62500 37500 62500 1500 5000 "clearline"] + Line[37500 67500 67500 67500 1500 5000 "clearline"] + Line[67500 67500 77500 77500 1500 5000 "clearline"] + Line[77500 77500 85000 77500 1500 5000 "clearline"] + Line[62500 72500 37500 72500 1500 5000 "clearline"] + Line[37500 77500 67500 77500 1500 5000 "clearline"] + Line[67500 77500 77500 87500 1500 5000 "clearline"] + Line[77500 87500 85000 87500 1500 5000 "clearline"] + Line[62500 82500 37500 82500 1500 5000 "clearline"] + Line[65000 32500 60000 32500 6000 5000 "clearline"] + Line[105000 32500 100000 32500 6000 5000 "clearline"] + Line[102500 32500 125000 32500 1500 5000 "clearline"] + Line[102500 52500 125000 52500 1500 5000 "clearline"] + Line[102500 62500 125000 62500 1500 5000 "clearline"] + Line[102500 72500 125000 72500 1500 5000 "clearline"] + Line[102500 82500 125000 82500 1500 5000 "clearline"] + Line[102500 22500 125000 22500 1500 5000 "clearline"] + Polygon("clearpoly") + ( + [55000 37500] [70000 37500] [70000 47500] [55000 47500] + ) + Polygon("clearpoly") + ( + [85000 7500] [117500 7500] [117500 92500] [85000 92500] + ) +) +Layer(3 "GND") +( +) +Layer(4 "power") +( +) +Layer(5 "signal1") +( +) +Layer(6 "signal2") +( +) +Layer(7 "signal3") +( +) +Layer(8 "signal4") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( + Text[10000 17500 0 130 "square" "clearline"] + Text[10000 27500 0 130 "fat trace" "clearline"] + Text[10000 37500 0 130 "poly" "clearline"] + Text[25000 95000 1 130 "with [square]" "clearline"] + Text[15000 92500 1 130 "shaped pins" "clearline"] +) Index: trunk/doc-rnd/features/square.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc-rnd/features/square.png =================================================================== --- trunk/doc-rnd/features/square.png (nonexistent) +++ trunk/doc-rnd/features/square.png (revision 2495) Property changes on: trunk/doc-rnd/features/square.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc-rnd/features/tostyle.html =================================================================== --- trunk/doc-rnd/features/tostyle.html (nonexistent) +++ trunk/doc-rnd/features/tostyle.html (revision 2495) @@ -0,0 +1,50 @@ + + +

pcb-rnd - the [tostyle] patch

+ +Footprints bring their own hole sizes, copper ring sizes and clearances. +These parameters often depend on the manufacturing process, and such a value +coming from a footprint may differ much from the values used on the board already. +

+PCB has actions (and menus and hotkeys) to change sizes manually. In my practice, +I try to stick to the sizes defined in my routing styles and try to avoid +manually changing clearances or ring sizes. Still, the random values coming +from various footprints should be changed. +

+After many years of struggling with this, I realized the feature I need is +a way to change object sizes to not a relative or absolute number but +to the current routing style. The [tostyle] patch does exactly this. +It implements the following new features: +

+

+The new route style set works on: +

+ +

Example

+GUI: select a routing style; hover above a line, a via, a pin/pad of an element +or the silk of an element; press Shift+Y; undo if necessary. +

+CLI: select objects, execute action ChangeSizes(selected, style) +

+CLI: to adjust drill sizes only: select objects, execute action ChangeDrillSize(selected, style) + + +

save/load and compatibility

+Not affected, since the patch introduces actions and UI changes, no change +related to the data model. + +

plans

+No plans, the feature is complete. + + + Index: trunk/doc-rnd/features/unglib.html =================================================================== --- trunk/doc-rnd/features/unglib.html (nonexistent) +++ trunk/doc-rnd/features/unglib.html (revision 2495) @@ -0,0 +1,17 @@ + + +

pcb-rnd - the [unglib] patch

+ +Removes glib dependency from core, in favor of +minilibs to help +keeping the code small, modular +and easier to fix. + +

save/load and compatibility

+Not affected. + +

plans

+Remove glib dependency from the puller plugin. + + + Index: trunk/doc-rnd/index.html =================================================================== --- trunk/doc-rnd/index.html (revision 2494) +++ trunk/doc-rnd/index.html (revision 2495) @@ -23,33 +23,33 @@ Change summary, per topic:
commit message tag and docdescription -
[gpmi] scripting PCB (including GUI dialogs, actions, menus, changing the layout) -
[intconn] component internal connections -
[nonetlist] components that are not part of the netlist and should not cause shorts -
[tostyle] actions, menu and hotkey to change ring dia, line width, drill dia and clearance sizes to match the values defined for the current routing style -
[mincut] minimal cut based warnings on shorts -
[square] change square pad to a generic shaped-pin based on the octagon pin code - this is an alternative to teardrops -
[flagcomp] unknown flag compatibility -
[scconfig] use scconfig instead of autotools -
[pcb-fp] generic parametric footprints; on-the-fly footprint generation by external tools written in any language (remove m4 hardwirings) -
[pcblib], [fp_fs], - [pcblib-param] clean up the footprint library shipped -
[library_t] footprint library is an arbitrary tree instead of a special, 2 level tree -
[fp_wget] web based footprint libraries, integration of gedasymbols.org -
[res] replace resource files with lihata and enable multi-key hotkeys in both gtk and lesstif hids -
[debian] Debian packaging the binaries configured to my own taste -
[ba] back annotation -
[onpoint] on-point by Robert Drehmel -
[cycdrag] cycle drag; with additional feature: negative box select +
[gpmi] scripting PCB (including GUI dialogs, actions, menus, changing the layout) +
[intconn] component internal connections +
[nonetlist] components that are not part of the netlist and should not cause shorts +
[tostyle] actions, menu and hotkey to change ring dia, line width, drill dia and clearance sizes to match the values defined for the current routing style +
[mincut] minimal cut based warnings on shorts +
[square] change square pad to a generic shaped-pin based on the octagon pin code - this is an alternative to teardrops +
[flagcomp] unknown flag compatibility +
[scconfig] use scconfig instead of autotools +
[pcb-fp] generic parametric footprints; on-the-fly footprint generation by external tools written in any language (remove m4 hardwirings) +
[pcblib], [fp_fs], + [pcblib-param] clean up the footprint library shipped +
[library_t] footprint library is an arbitrary tree instead of a special, 2 level tree +
[fp_wget] web based footprint libraries, integration of gedasymbols.org +
[res] replace resource files with lihata and enable multi-key hotkeys in both gtk and lesstif hids +
[debian] Debian packaging the binaries configured to my own taste +
[ba] back annotation +
[onpoint] on-point by Robert Drehmel +
[cycdrag] cycle drag; with additional feature: negative box select
[mods] modularize the code to reduce core size - for comparison, previous stats: 1.0.8, 1.0.9 -
[unglib] remove glib dependency from core -
[io_*] .pcb and .fp file format plugins -
[dynstyle] dynamic routuing style: sypport more than 4 of them - with no limit -
[conf] new, unified, config file system -
settings minor changes in default settings +
[unglib] remove glib dependency from core +
[io_*] .pcb and .fp file format plugins +
[dynstyle] dynamic routuing style: sypport more than 4 of them - with no limit +
[conf] new, unified, config file system +
settings minor changes in default settings - +
I have plans on my TODO list - these have lower priority compared to the features above. Index: trunk/doc-rnd/motivation.html =================================================================== --- trunk/doc-rnd/motivation.html (revision 2494) +++ trunk/doc-rnd/motivation.html (revision 2495) @@ -46,8 +46,8 @@
  • Most probably I won't merge anything back from the mainstream to my fork - the past few years showed that it's unlikely there would be new features I'd need
  • My plans for new features were: @@ -62,11 +62,11 @@ As I got more familiar with the code base, I decided to bite the bullet and do some refactoring: