plotting directly using the renderer

Hello everyone,
Hello John,

first of all: thanks for you mail, it was full of information!
I exchanged the lines in _backend_agg.cpp and tried to implement your
thoughts. While writing data.py wasn't a problem the trouble started when I
tried to run a little sample program with GTKAgg - I got a segmentation
fault. Unfortunately I'm not able to see where this one comes from. But when
using GTKAgg you're not able to draw markers at all; not even ticks ...
plotting a line is still possible when using
  from pylab import *
  axis('off')
  plot(arange(10))
so the error seems really due to the draw_markers() and not something else.

Below are the changed files.

Can you reproduce the segmentation fault?
Best,

Martin

P.S.: Once this particular example works, I will convert
the other markers (Arnd and I have worked out a scheme
for the size which seems consistent and simple to implement).

#### data.py
"""
    Creates a dictionary containing information on how to draw markers.
    The values used within the paths are chosen so that the longest
    dimension of a sourrounding rectangle is 1, e.g:
    triangle up ... has a height and a width of one
    square ........ has a height and a width of one
    ...
"""
from matplotlib import agg

markerd = {}

# triangle up
path = agg.path_storage()
path.move_to( 0, 0.5)
path.line_to(-0.5, -0.5)
path.line_to( 0.5, -0.5)
path.end_poly()
markerd['^'] = path

# square
path = agg.path_storage()
path.move_to(-0.5, -0.5)
path.line_to(-0.5, 0.5)
path.line_to( 0.5, 0.5)
path.line_to( 0.5, -0.5)
path.end_poly()
markerd['s'] = path

# tri_up (BTW this one change a bit)
offset = 2.0/3.0
offset1 = offset*0.8
offset2 = offset*0.5
path = agg.path_storage()
path.move_to(0, 0)
path.line_to(0, offset)
path.move_to(offset1, -offset2)
path.line_to(0, 0)
path.line_to(-offset1, -offset2)
path.end_poly()
markerd['2'] = path

···

####

#### changed routine for lines.py
def _draw_square(self, renderer, gc, xt, yt):
    side = renderer.points_to_pixels(self._markersize)
    rgbFace = self._get_rgb_face()
    path = d.markerd['s']
    if self._newstyle:
        scale = agg.trans_affine_scaling(side, side)
        transpath = agg.conv_transform_path(path, scale)
        renderer.draw_markers(gc, path, rgbFace, xt, yt,self._transform)
    else:
        offset = side*.5
        vertices = d.path_2_vertices(path)
        for (x,y) in zip(xt, yt):
            for verts in vertices:
                renderer.draw_polygon(gc, rgbFace, verts)
####

### Example call:
plot(arange(10),'bs')
###

--
Highspeed-Freiheit. Bei GMX superg�nstig, z.B. GMX DSL_Cityflat,
DSL-Flatrate f�r nur 4,99 Euro/Monat* http://www.gmx.net/de/go/dsl