Hi!
My apologies if this has been done and/or discussed before, but a search of grass-dev came up empty.
Since the Cairo graphics library (http://www.cairographics.org, LGPL licensed) provides very high-quality graphics output in several vector and raster formats, I thought it would make sense to create a "pseudo" monitor driver for it (similar to the PNG and PS drivers). So I did. Cairo does all of the hard work, so it's really mostly simple "glue" code.
It seems stable, and is fairly complete in terms of features. I've used for most of my own work recently.
Benefits include:
* High quality antialiased output. See http://lars.ahlzen.com/cairograss/ for a few simple examples and a comparison with the PNG driver.
* Several output format options, both vector and bitmap. The driver currently supports PNG, PDF, PS and SVG. Output to X or Win32 windows might be possible in the future, since Cairo supports such formats as well.
Of course, such niceness comes at a price. It takes longer to draw complex vector data, compared to the PNG driver. However, I imagine that in most cases drawing is not the main bottleneck anyway.
Also, it obviously pulls in Cairo as an additional dependency. Cairo is probably found on most systems nowadays, though, since many other applications (including some mapping and GIS software) already use it.
Additionally, the fact that GRASS monitors (unfortunately) receive integer data (screen coordinates, line widths, etc) somewhat limits the effectiveness of the high-precision output from the CAIRO driver. For example, in the "Massachusetts Counties and roads" example, the antialiasing breaks down for certain lines because they are divided into smaller segments whose coordinates are rounded before they are drawn. Similarly, zooming in on vector output will also reveal this drawback.
My main question is: Does all of this seem useful to anyone else? I do realize that most of these things can be achieved in other ways, but I've personally found this driver to produce high quality output in a very convenient way. Feedback is appreciated!
I can of course post code too, if anyone would be interested in actually trying it.
/ Lars
--
Lars Ahlzen
lars@ahlzen.com