[cairo] Adventures in line widths - ellipse example
stevech1097 at yahoo.com.au
Fri Apr 28 04:32:23 PDT 2006
On Thu, 2006-04-27 at 14:28 -0700, Christopher Barker wrote:
> This is all a little beyond me, but I was about to post a question here
> that's related.
> I'm exploring what I might want to use as the rendering toolkit for a
> mapping engine. I'm evaluating Cairo and Agg at the moment. I see from
> the note you referred to that you've been talking to Maxim, which is
> great; Agg has some very nice features. It's sub-pixel rendering is superb.
> Anyway, I was trying to figure out how to draw an ellipse with Cairo. I
> found an example in the docs somewhere that indicated that you need to
> translate and scale appropriately, then draw a circle.
> I got this to work, but I've found that the pen gets scaled with the
> circle, so I get very fat lines, and they are fatter in the direction
> that the ellipse is longer.
> Here's the Python code I'm using:
> def DrawEllipse(self, x, y, width, height):
> ctx = self.ctx
> ctx.translate(x + width / 2., y + height / 2.);
> ctx.scale(1. * (width / 2.), 1. * (height / 2.));
> ctx.arc(0., 0., 1., 0., 2 * N.pi);
> Where self.SetupStroke is:
> def SetupStroke(self):
> ctx = self.ctx
> when I do this:
> x, y, w, h = 50, 100, 300, 50
> dc.LineWidth = 1
> dc.DrawEllipse(x, y, w, h )
> I get the enclosed PNG.
> Could I change the order I make the calls to get this right? Or is this
> being fixed by what this discussion is about?
Create the ellipse path and do ctx.restore() before you do the stroke.
In general I thinks its best to have path creation functions and
fill/stroke functions which are separate.
> cairo mailing list
> cairo at cairographics.org
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 1305 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20060428/6e873a01/e1.py
More information about the cairo