[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: Python-based footprint creation library



On Fri, Sep 30, 2005 at 09:45:32AM -0400, Randall Nortman wrote:
> This may be considered timely or untimely, given the various amusing
> discussions of the merits of certain programming languages, both
> serious and maliciously jestful ones, but I have just created a tiny
> little Python library for creating PCB footprints.  It does
> essentially the exact same thing that the m4 libraries do, except it's
> in Python and so I can actually stand to look at the code for more
> than a few minutes at a time without my head exploding.  (No offense
> to anybody who may feel differently about m4.  This is clearly a
> deficiency in my own cognitive abilities.)
> 
> You can get it, for what it's worth, at:
> http://wonderclown.net/pcbelement/
> 
> The readme file purports to explain what I did and why, and to save me
> needless extra typing, I'll just quote that here in its entirety:
> 
> ----- readme.txt -----
> 
> This is a first quick stab at a Python library for creating
> newlib-style elements for the PCB circuit board layout program
> (http://pcb.sourceforge.net/).
> 
> This stuff isn't even pre-pre-pre-alpha.  It's just an idea put into
> code, hastily written because I needed it, right at that moment, to
> complete a project with an insane deadline.  It doesn't even have a
> revision number, that's how not released it is.
> 
> You may or may not be able to find more information, including new
> versions, at: http://wonderclown.net/pcbelement/
> 
> This "version" is released under the GPL.  I may release future
> versions under a different license, because I can.  You can't.  That's
> because I'm the copyright holder:
> 
> Copyright (C) 2005 Randall C. Nortman
> 
> WHY:
> 
> Because I really dislike the m4 syntax -- trying to follow the nested
> levels of quoting makes my brain hurt.  Embedding mathematical
> formulae is ugly.  Control structures are ugly.  Everything is ugly.
> Python is pretty, and gives you all the expressive power you need to
> do whatever you need to.
> 
> Of course, there is already an alternative to m4 -- you can draw the
> elements by hand to create newlib-style footprints.  I tried this a
> couple of times and found myself always ending up "roughing in" the
> footprint graphically and then opening up the result in a text editor
> in order to get more precise control over the dimensions and placement
> of everything.  In the real world, you need this precise control in
> all cases.  But doing all the math by hand takes way longer than
> writing a program to do it, especially if you can write one program to
> generate a whole class of components.  This is the wisdom of the m4
> model.  But see above -- m4 is ugly.  Therefore, I turned to Python.
> 
> WHAT:
> 
> You won't find this very useful if you don't already know Python.  You
> have to know Python at a basic level at least in order to even
> understand the following, much less use this code.
> 
> The core module is pcbelement.py, a small Python library for creating
> PCB elements.  It defines an Element class, plus Pad, Pin, and
> ElementLine (i.e., silkscreen lines).  It is far from complete; it has
> the features I needed to get my immediate task done and little more.
> 
> The other files - smtdil.py, 2pth.py, sot223.py, and rj45.py are
> programs (or could be used as modules in another program) for
> generating particular types of footprints, using the pcbelement
> module.  They are the best source of documentation (by example,
> mostly) about how to use this thing.  Some of them can handle an
> entire family of similar types of footprints, and some (notably
> rj45.py) are designed to produce exactly one particular footprint.
> 
> These programs all print the footprint to their standard output.  You
> would use them by invoking them with appropriate arguments (those that
> take arguments print help if you invoke them without arguments) and
> redirecting output to a file in your local PCB elements directory.
> The result is a newlib-style footprint which can be accessed by PCB
> and also helper programs like gsch2pcb.
> 
> The output format is reverse-engineered from the current CVS code,
> using what seems to be the most modern of the many formats that the
> code will recognize -- the format it writes out itself when it saves.
> This format is referred to as "hi_format" in the code.
> 
> THE FUTURE:
> 
> There's no reason these couldn't be used in the same way the m4
> libraries are used -- a program like gsch2pcb could dynamically create
> needed footprints by providing the necessary arguments to the Python
> functions.  This could be done by invoking Python as an external
> program, or by dynamically loading the Python modules within another
> Python program (or program embedding a Python interpreter) and
> invoking the functions directly.  Given that gsch2pcb is currently
> written in Perl, I think invoking Python as an external program
> would be more straightforward.
> 
> The core library needs to be made more feature-complete before this is
> generally useful enough to warrant adapting other utilities to make
> use of it.  An interface standard for scripts like gsch2pcb needs to
> be set and followed in all of the functions that generate components.
> 
> Alternatively, I can just keep using it the way I'm using it, and
> anybody else who would like to can do the same.  I would appreciate
> hearing from anybody who finds this useful; I won't put my email
> address here for all the world's spammers to see, but you can discover
> how to contact me by visiting http://wonderclown.net/
> 
> ----- end readme.txt -----
> 
> 
> Make of it what you will,
> 
> Randall

I am posting via ssh from a windows box, so I have not had
a chance to take a look yet. I will give it a try tonight.

Have you seen my python footprint generator? It has a rather bad
interface, but it works. http://dlharmon.com/geda/footgen.html
You are welcome to take whatever you want from it.

I have had the thought of doing a gsch2pcb replacement in python.
Time is the only reason I have not. It would still need to support
newlib footprints because I modify some difficult parts using
either pcb or emacs.


-- 
Darrell Harmon
http://dlharmon.com/dspcard
Credit card size DSP/FPGA board