XCircuit To-Do List
- 1. (Fixed) Avoid zero scale
- 2. SVG output
- 3. Make the symbols symmetrical.
- 4. Add library namespaces.
- 5. (Done) Remove "break at point"
- 6. Add reselect function
1. (Fixed) Avoid zero scale
It should not be possible to set the scale of something to zero. Zero scale labels cause bad output that can't be printed.
2. SVG output
Comment by Tim: SVG is a vector graphics format, for those not "in the know". Anybody feel like tackling this one?
3. Make the symbols symmetrical.
The minus sign on the opamp is crammed into the corner, while the plus sign is at a nice place. Move the minus sign down so that, if you flip it vertically, the minus and plus are in the same place. Likewise for samp, wramp, etc. Voltage source signs should also be made "symmetrical", voltage sources have the opposite problem. Real minus signs are the same width and height above the baseline as plus signs: + − + − + − + − (not + - + - + - + -)
Answer from Tim: I just deleted my first lame excuse, and fixed the problem. Are there any other components besides "samp", "wramp", "opamp", and "vsource" that need fixing? The fixed libraries are on CVS and will show up in versions 3.6.23 and 3.4.22. I really have no excuse for leaving it that way for so long. Attention to fine detail is what is supposed to make xcircuit stand out from the crowd.
Just anything similar. You could make the + and − part of the symbol itself instead of using text for them. They're just a few straight lines, and belong inside the (opamp, ...) symbol at all times anyway. I haven't actually used xcircuit as Linux gives me a headache (whether running inside Windows cygwin or not; a standalone Windows program like [GIMP]
, or [gnu octave]
have would be much nicer), but I'd seen the output on Wikipedia and the asymmetry bothered me.
There is a standalone version of XCircuit on Windows, now, thanks to Michael Goffioul, who added all of the necessary compatibility routines to convert X11 and UNIX system calls into Windows subroutines. By the way, the final answer to the original question is that the Symbol font glyphs for 'plus' and 'minus' are not, in fact, centered on their bounding box, and so the text has to be offset by just the right amount so that it is symmetric around x- and y-axis flips. I confirmed for myself that the xcircuit text vectors match the PostScript characters in this respect.
Why can't the plus and minus sign just be graphics instead of text, especially Symbol font text? It's not like they need to be translated into other languages or be changed to a different font size along with the other text on the page, or whatever. It's just part of the symbol.
I suppose I've read too much Donald Knuth over the years. It's the idea that fonts are designed all to the correct proportions and such. Anyway, probably the more relevant thing is that for a long time I only had round endcaps on lines in XCircuit, which looks bad in "+" and "-" signs. Now that XCircuit allows square endcaps, I'm sure they'd make a decent replacement for the font symbols.
4. Add library namespaces.
Currently, a library object "npn" in one library will conflict with an object "npn" in another library, causing one of them to undergo a name change, which can cause havoc with portability if the object is written to a netlist and imported into another program which is expecting the original name. The solution to this is so obvious that I feel stupid for not having thought of it before: Use a namespace method like TCL uses for commands. Each object has the name "library
" instead of just "object
". And like TCL commands, for most purposes the root name "object
" will suffice. This will also get around the problem of confusing library pages
with library files
. Currently, XCircuit has the schizophrenic setup that only library files
can be loaded, and only library pages
can be saved. With then namespace method, XCircuit will only load and save library files. How library objects are arranged on pages should be only for the convenience of the end-user. This will, however, require another method for moving objects between libraries, which should be as easy as changing the namespace and marking the libraries as being modified.
Implemented, August 2006, but there are a few loose ends to tie up, including netlist output. The default escape "%n" should ignore the technology prefix, with a "%N" escape added to print the fully qualified object name to the output. This was finished sometime in August or September.
5. (Done) Remove "break at point"
I removed the "break at point" function for polygon edits. This method was incompatible with the edit and undo mechanisms, and was buggy. I need to expand the "unjoin" function to act on all elements, not just paths, so that it can be used to break polygons at specific points, and break labels into parts.
6. Add reselect function
Add the "reselect" function that will select the most recently selected group of elements. This used to be bound to the right mouse button, but changes to the selection and undo mechanisms forced me to remove the code. This would have to be re-implemented in a different way by searching the "undo" stack for the last selection event, then selecting those elements.