My favorite drawing tool has already been mentioned: MetaPost, but I would like to mention the package that ultimately brought me to MetaPost: mfpic. It's a (La)TeX package which can interface both METAFONT and MetaPost. To the (La)TeX user who doesn't want to learn the intricacies of another language, it offers a friendlier way to use their drawing capacities.
A LaTeX file which contains
mfpic coding needs several compilations for creating and including the picture: the first time for the main file with (La)TeX, the resulting METAFONT/MetaPost file must then be compiled with MetaPost, and a last compilation for the main file with (La)TeX. Once the picture is produced, this triple compilation is no more needed. Yet it is the main drawback of
mfpic, which can be drastically reduced if you defer this triple compilation to a script, as I usually do.
Mfpic works equally well with (PDF)TeX or (PDF)LaTeX. It works also with Xe(La)TeX and Lua(La)TeX with some (minor) limitations concerning the labels.
Naturally, those who want to get still more "drawing power" from
mfpic must learn something about METAFONT/MetaPost, since
mfpic doesn't cover all of their possibilities by itself but allows the user to insert raw METAFONT/MetaPost code in their programs. This way I came to learn the MetaPost language little by little, and to use the MetaPost program itself more and more frequently. Currently I use MetaPost directly most of the time, but still revert to
mfpic sometimes because it has some ready-to-use drawing macros (e.g. for tiling and extrapolation) that plain MetaPost (of its current extensions) does not offer.
Here are a very good introduction to
mfpic by its current maintainer (Dan Luecking), and its complete reference manual.