[GRASS-dev] Cairo monitor driver
Glynn Clements
glynn at gclements.plus.com
Sun Oct 14 14:36:49 EDT 2007
Lars Ahlzen wrote:
> 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.
One thing to be careful of with anti-aliasing is tesselations. Issues
with Ghostscript's anti-aliasing option are a regular topic on the GMT
list.
> * 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.
For d.vect, drawing usually is the bottleneck.
> 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!
The main thing to bear in mind is that the graphics system is going to
be completely re-written for 7.x.
If Cairo is available for both Windows and MacOSX (natively, i.e. not
requiring X11), and does an adequate job of PostScript generation
(embedding a pre-rendered image in a PostScript file doesn't count),
it could be a viable basis for the new graphics architecture.
> I can of course post code too, if anyone would be interested in actually
> trying it.
The code would certainly be useful.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list