(no subject)

May 21, 2007 23:46

I've been looking for a while for a decent drawing program, and I think I've determined that my definition of "decent" is a bit... overpowering.

1: It must have an interface that is fairly intuitive (to me).
2: It must be able to deal with changing requirements in a reasonable way. If I want that circle to be just a *little* bit bigger, I shouldn't have to manually move everything else.
3: It has to be free, at least as in beer, and preferably as in freedom.
4: It should have reusable objects, so I don't have to re-draw them every time I want to use them.
5: It should deal with 2d and 3d just fine. 4d is optional. ;)

I *think* the best way to deal with all this is to just write the damn thing myself. There's an interesting class of constraint-based drawing programs, such as Asymptote, MetaPost, and Linograph. But all of them have something *wrong* with them. They all only allow solving systems of linear equations for the constraints, they all have funkyness in their syntaxes of one sort or another. Linograph is seriously underdocumented. Metapost and Asymptote both have very deep stacks and are written in C. Metapost and Asymptote don't have any real archetechture for reusablility, whereas Linograph has no support for rotation and scaling as coordinate-set transformations.

Rolling my own will allow me to do things the Right Way from the beginning, and design in the functionality I want. I *think* I can make it reasonably extensible and easy to use fairly easily by good leverage of Perl and existing components on CPAN and elsewhere. For example, I can borrow bits of Linotype for postscript output, and use Math::Symbolic for the algebra (and calc, where it's necessary). I can possibly use solvers not based on linear algebra where I need to, hopefully with some help from Sara, and possibly MJD if I can manage to feel comfortable asking for help from strangers (something I'm really bad at). I can also do some of the funkier stuff I've been considering, like making it into a full electronics system, in reasonable manners. (Think about it -- the same constraint-based system can be used for all sorts of things, esp if I can make the algebra smart about units -- that is, know what (5mm+3ft)/2hours is, and what 4miles+6ohm isn't. If I can make the system know that R1 terminal 2 is connected to U1 pin 4, and draw semantic and physical layout diagrams automagically, that'd be a Big Win. But even if it can't do it all that automatically, just a start is, well, a start.)

There's a lot of work to do on it, absolutely, but it should be interesting work...

cad

Previous post Next post
Up