[GRASS-dev] python data object graphic output?
Michael Barton
michael.barton at asu.edu
Tue Aug 12 21:08:47 EDT 2008
On Aug 12, 2008, at 3:22 PM, Glynn Clements wrote:
>
> Michael Barton wrote:
>
>> With the revamp of the GRASS graphic driver output system, I'm
>> wondering about the feasibility of having a driver that creates a
>> Python data object rather than a disk file.
>
> Can you elaborate?
>
> Specifically, how is the data supposed to be transferred from the d.*
> command to the GUI?
A couple new modules seem promising in this regard:
BitmapFromBuffer:
"Two new wx.Bitmap factory functions allow you to create a wx.Bitmap
directly from a data buffer. The the buffer can be any Python object
that implements the buffer interface, or is convertable to a buffer,
such as a string or an array. The new functions are:
wx.BitmapFromBuffer(width, height, dataBuffer, alphaBuffer=None):
Creates the bitmap from a buffer of RGB bytes, optionally with a
separate buffer of alpha bytes.
wx.BitmapFromBufferRGBA(width, height, dataBuffer): Creates the bitmap
from a buffer containing RGBA bytes. "
ImageFromStream:
"At long last there is finally a way to load any supported image type
directly from any Python file-like object, such as a memory buffer
using StringIO."
Both seem to allow python data objects, rather than files to be the
source of bitmaps for display
>
>
>> While this might not
>> create noticeable speed improvements in rendering displays in a
>> Python
>> canvas, it could considerably simplify coding for overlaying and
>> rendering multiple geospatial data layers--especially if we can do
>> the
>> compositing and rendering with Python tools rather than g.pnmcomp.
>
> Even with the modules writing image files, the compositing step really
> should be performed within Python, rather than using an external
> process (g.pnmcomp). This would mean that enabling or disabling layers
> or changing the translucency level would happen instantly.
>
> AFAICT, wx itself doesn't have code for this, although there may be
> third-party libraries which do. GDK has compositing code which can use
> SSE; it may be worth taking that (if someone hasn't already).
It seems like the new GraphicContext does this:
"The new advanced 2D drawing API is implemented via the
wx.GraphicsContext and wx.GraphicsPath classes. They wrap GDI+ on
Windows, Cairo on wxGTK and CoreGraphics on OS X. They allow path-
based drawing with alpha-blending and anti-aliasing, and use a
floating point cooridnate system.
When viewing this sample pay attention to how the rounded edges are
smoothed with anti-aliased drawing, and how the shapes on the lower
half of the window are partially transparent, allowing you to see what
was drawn before."
>
>
> Better still, if you use cairo, it should be possible to have the
> graphics hardware perform the compositing.
>
> The cairo driver has support for using an X Pixmap for its output (via
> GRASS_CAIRO_DRAWABLE and GRASS_CAIRO_VISUAL). Not only would this
> eliminate the need to copy data to/from disk (or even between
> processses), but the d.* command can use the graphics hardware.
This also sounds promising if it could be implemented from the Python
GUI.
Michael
>
>
> --
> Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list