John,

You are going great guns with mpl1; I am trying to get spun up on traits, and to understand where you are going with mpl1. In general I like what I see--as expected. Regarding the following comments: I recognize that you are engaged in a sketching activity, and I may be thinking prematurely about detail.

You raised the question of 3D. I don't know anything about fancy 3D with hardware acceleration etc., but for the simplest 3D it seems like everything can be done at the model stage of the transformation; everything after that is 2D. Maybe this doesn't get us very far; I don't know how hidden-line removal would be handled for multiple paths.

It seems to me that in the interesting cases such as polar plots, map projections, and simple 3D plotting, the Func class is really a Projection class, so I suggest it be renamed to that, or to Proj if you want something short. ("Func" always seemed a bit ugly.) It will typically need additional attributes, and should supply additional information. For example, for a given set of coordinate limits (say r from 1 to 2 and theta from 0 to pi/2 in the polar case) it should be able to provide a bounding box in the rectilinear coordinates. It will need a method to generate a path that is "straight" in the original coordinates, hence curved in the rectilinear coordinates. (This method will probably be used both to calculate the bounding box and to generate the axis objects, grids, bounding "polygon", and things like the bar paths in a polar bar plot, for example.) I suspect it will also help to have a method that returns a rotation matrix for each of a set of points. This would be a help in generating an axis with tick marks in a curvilinear system, and in orienting vectors drawn on a map projection.

This brings up another question, regarding the drawing model: what do you view as (1) required and (2) not required but used if available? So far, everything is in terms of moveto, lineto, and close_polygon. What about curves? Do you anticipate sticking to line-segment paths, or do you expect to use any curve-generation (bezier, arc, ellipse) facilities? Is this something to be done as a phase-2 optimization, after initially doing everything with line-segment paths?

Returning to a point of terminology: what you are calling Affine is actually a very limited subset of affine transformations, correct? Rotation and shear are not included.

Also, I was puzzled initially by the xlim and ylim attributes; these are the bounds that get mapped to the 0-1 interval by the transform, correct? If so, this is an additional specialization of your Affine relative to the general meaning of the term.

Eric