I have ported this arc stuff to the trunk.  It is in r4783.  Please let 
me know how that works, particularly wrt performance, for you.  Some 
things that are in C on the branch were done in Python on the trunk for 
convenience.

Cheers,
Mike

Michael Droettboom wrote:
> Porting this back to the trunk is non-trivial -- but I know John would 
> like to do it, so I think it will happen once one of us has time.
> 
> As an aside, the unit stuff *should* be working on the branch.  Can you 
> send me a minimal example that shows it failing?
> 
> Cheers,
> Mike
> 
> James Evans wrote:
>> I have taken the transforms branch and played with it a bit and my super 
>> simple ellipse test cases appeared to be working great.  I
>> couldn't run our more intensive tests since they use unitized data and I was 
>> getting errors that looked like the transforms branch
>> wasn't completely handling unitized data properly.  It would be great if we 
>> could see this fix in the main branch, then we can make
>> use of it right away without having to wait for the transforms branch to be 
>> completed.
>>
>> --James Evans
>>
>>
>>> Date: Tue, 11 Dec 2007 15:47:45 -0500
>>> From: Michael Droettboom <[EMAIL PROTECTED]>
>>> Subject: Re: [matplotlib-devel] Problem with Agg Ellipses
>>> To: Ted Drain <[EMAIL PROTECTED]>
>>> Cc: matplotlib development list
>>>     <matplotlib-devel@lists.sourceforge.net>
>>> Message-ID: <[EMAIL PROTECTED]>
>>> Content-Type: text/plain; charset="iso-8859-1"
>>>
>>> And an actually interesting part of the plot... ;)
>>>
>>> Michael Droettboom wrote:
>>>> Sorry -- correct attachment this time.
>>>>
>>>> Michael Droettboom wrote:
>>>>> I have a working draft of something that may work for this problem on
>>>>> the transforms branch.  I am happy to backport this to the trunk, but
>>>>> that will require some effort, as the implementation relies on many of
>>>>> the new geometric utilities on the branch that would also have to be
>>>>> brought over.  It may be some time until the branch is ready for
>>>>> production use, but if you are able to use it to experiment with this
>>>>> approach to this specific problem, that would certainly make my life
>>>>> easier, so I don't have to do the backporting work more than once.
>>>>>
>>>>> Attached is a plot comparing the new approach (above) vs. a 750-edge
>>>>> polygonal approximation for the ellipses (based directly on James
>>>>> Evans' example).  Here's a description of what it does:
>>>>>
>>>>>
>>>>>         Ellipses are normally drawn using an approximation that uses
>>>>>         eight cubic bezier splines.  The error of this approximation
>>>>>         is 1.89818e-6, according to this unverified source:
>>>>>
>>>>>           Lancaster, Don.  Approximating a Circle or an Ellipse Using
>>>>>           Four Bezier Cubic Splines.
>>>>>
>>>>>           http://www.tinaja.com/glib/ellipse4.pdf
>>>>>
>>>>>         There is a use case where very large ellipses must be drawn
>>>>>         with very high accuracy, and it is too expensive to render the
>>>>>         entire ellipse with enough segments (either splines or line
>>>>>         segments).  Therefore, in the case where either radius of the
>>>>>         ellipse is large enough that the error of the spline
>>>>>         approximation will be visible (greater than one pixel offset
>>>>>         from the ideal), a different technique is used.
>>>>>
>>>>>         In that case, only the visible parts of the ellipse are drawn,
>>>>>         with each visible arc using a fixed number of spline segments
>>>>>         (8).  The algorithm proceeds as follows:
>>>>>
>>>>>           1. The points where the ellipse intersects the axes bounding
>>>>>           box are located.  (This is done be performing an inverse
>>>>>           transformation on the axes bbox such that it is relative to
>>>>>           the unit circle -- this makes the intersection calculation
>>>>>           much easier than doing rotated ellipse intersection
>>>>>           directly).
>>>>>
>>>>>           This uses the "line intersecting a circle" algorithm from:
>>>>>
>>>>>             Vince, John.  Geometry for Computer Graphics: Formulae,
>>>>>             Examples & Proofs.  London: Springer-Verlag, 2005.
>>>>>
>>>>>           2. The angles of each of the intersection points are
>>>>>           calculated.
>>>>>
>>>>>           3. Proceeding counterclockwise starting in the positive
>>>>>           x-direction, each of the visible arc-segments between the
>>>>>           pairs of vertices are drawn using the bezier arc
>>>>>           approximation technique implemented in Path.arc().
>>>>>
>>>>>
>>>>> Cheers,
>>>>> Mike
>>>>>
>>>>>
>>>>> Ted Drain wrote:
>>>>>> All of these sound like good ideas to me.  Just for some history: the
>>>>>> original reason we worked w/ John to get an Ellipse primitive in (vs
>>>>>> a normal line plot of sampled points) were to:
>>>>>> - improve ellipse plotting speeds (we plot a LOT of them at once)
>>>>>> - improve post script output
>>>>>>
>>>>>> Ted
>>>>>>
>>>>>> At 08:53 AM 12/10/2007, Michael Droettboom wrote:
>>>>>>> John Hunter wrote:
>>>>>>>> On Dec 10, 2007 10:25 AM, Ted Drain <[EMAIL PROTECTED]> wrote:
>>>>>>>>
>>>>>>>>> I don't know if the current MPL architecture can support this but it
>>>>>>>>> would be nice if it worked that way.  We have people making decisions
>>>>>>>>> based on what these plots show that affect spacecraft worth hundreds
>>>>>>>>> of millions of dollars so it's important that we're plotting
>>>>>>> things accurately.
>>>>>>>> We can support this, but I think we would do this with an arc class
>>>>>>>> rather than an ellipse class, and write a special case class that is
>>>>>>>> viewlim aware.
>>>>>>> I agree -- I think there are two uses cases for ellipse that are in
>>>>>>> conflict here.  One is these large ellipses, the other is for things
>>>>>>> like scatter plots, where speed and file size is more important than
>>>>>>> accuracy.  My mind was probably stuck on the latter as I've worked
>>>>>>> along
>>>>>>> the transforms branch.
>>>>>>>
>>>>>>>> A simple example of a line that has analogous
>>>>>>>> behavior is examples/clippedline.py, which clips the points outside
>>>>>>>> the viewport and draws in a different style according to the
>>>>>>>> resolution of the viewlim.   The reason I think it would be preferable
>>>>>>>> to use an arc here is because we won't have to worry about filling the
>>>>>>>> thing when we only approximate a section of it.  You could feed in a
>>>>>>>> 360 degree elliptical arc and then zoom into a portion of it.
>>>>>>>>
>>>>>>>> With the 8 point ellipse as is, and the addition of an arc class that
>>>>>>>> does 4 or 8 point approximation within the zoom limits, should that
>>>>>>>> serve your requirements?
>>>>>>> As a possible starting point, the transforms branch already has
>>>>>>> arc-approximation-by-cubic-bezier-spline code.  It determines the
>>>>>>> number
>>>>>>> of splines to use based on the radians included in the arc, which is
>>>>>>> clearly not what we want here.  But it should be reasonably
>>>>>>> straightforward to make that some fixed number and draw the arc between
>>>>>>> the edges of the axes.  Or, alternatively, (and maybe this is what John
>>>>>>> is suggesting), the arc could be approximated by line segments (with
>>>>>>> the
>>>>>>> number of segments something like the number of pixels across the
>>>>>>> axes).
>>>>>>>   To my naive mind, that seems more verifiable -- or at least it puts
>>>>>>> the responsibility of getting this right all in one place.
>>>>>>>
>>>>>>> IMHO, these spline approximation tricks are all just with the aim of
>>>>>>> pushing curve rendering deeper into the backends for speed and file
>>>>>>> size
>>>>>>> improvements.  But obviously there needs to be a way around it when it
>>>>>>> matters.
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Mike
>>>>>>>
>>>>>>> --
>>>>>>> Michael Droettboom
>>>>>>> Science Software Branch
>>>>>>> Operations and Engineering Division
>>>>>>> Space Telescope Science Institute
>>>>>>> Operated by AURA for NASA
>>>>>>>
>>>>>>> -------------------------------------------------------------------------
>>>>>>>
>>>>>>> SF.Net email is sponsored by:
>>>>>>> Check out the new SourceForge.net Marketplace.
>>>>>>> It's the best place to buy or sell services for
>>>>>>> just about anything Open Source.
>>>>>>> http://sourceforge.net/services/buy/index.php
>>>>>>> _______________________________________________
>>>>>>> Matplotlib-devel mailing list
>>>>>>> Matplotlib-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>>>> Ted Drain     Jet Propulsion Laboratory   [EMAIL PROTECTED]
>>>>>>
>>>>>> -------------------------------------------------------------------------
>>>>>>
>>>>>> SF.Net email is sponsored by: Check out the new SourceForge.net
>>>>>> Marketplace.
>>>>>> It's the best place to buy or sell services for
>>>>>> just about anything Open Source.
>>>>>> http://sourceforge.net/services/buy/index.php
>>>>>> _______________________________________________
>>>>>> Matplotlib-devel mailing list
>>>>>> Matplotlib-devel@lists.sourceforge.net
>>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> -------------------------------------------------------------------------
>>>>> SF.Net email is sponsored by: Check out the new SourceForge.net
>>>>> Marketplace.
>>>>> It's the best place to buy or sell services for
>>>>> just about anything Open Source.
>>>>> http://sourceforge.net/services/buy/index.php
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> Matplotlib-devel mailing list
>>>>> Matplotlib-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> -------------------------------------------------------------------------
>>>> SF.Net email is sponsored by:
>>>> Check out the new SourceForge.net Marketplace.
>>>> It's the best place to buy or sell services for
>>>> just about anything Open Source.
>>>> http://sourceforge.net/services/buy/index.php
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Matplotlib-devel mailing list
>>>> Matplotlib-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>> --
>>> Michael Droettboom
>>> Science Software Branch
>>> Operations and Engineering Division
>>> Space Telescope Science Institute
>>> Operated by AURA for NASA
>>> -------------- next part --------------
>>> A non-text attachment was scrubbed...
>>> Name: ellipse.png
>>> Type: image/png
>>> Size: 49913 bytes
>>> Desc: not available
>>>
>>> ------------------------------
>>>
>>> -------------------------------------------------------------------------
>>> SF.Net email is sponsored by:
>>> Check out the new SourceForge.net Marketplace.
>>> It's the best place to buy or sell services for
>>> just about anything Open Source.
>>> http://sourceforge.net/services/buy/index.php
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> Matplotlib-devel mailing list
>>> Matplotlib-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>
>>>
>>> End of Matplotlib-devel Digest, Vol 19, Issue 16
>>> ************************************************
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by: Microsoft
>> Defy all challenges. Microsoft(R) Visual Studio 2005.
>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> _______________________________________________
>> Matplotlib-devel mailing list
>> Matplotlib-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
> 

-- 
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to