Revision: 3839
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3839&view=rev
Author:   mdboom
Date:     2007-09-12 10:25:19 -0700 (Wed, 12 Sep 2007)

Log Message:
-----------
Milestone -- simple_plot.py working with new affine framework (with
the exception of dpi propagation)

Modified Paths:
--------------
    branches/transforms/lib/matplotlib/affine.py
    branches/transforms/lib/matplotlib/axes.py
    branches/transforms/lib/matplotlib/figure.py
    branches/transforms/lib/matplotlib/lines.py

Modified: branches/transforms/lib/matplotlib/affine.py
===================================================================
--- branches/transforms/lib/matplotlib/affine.py        2007-09-12 15:41:22 UTC 
(rev 3838)
+++ branches/transforms/lib/matplotlib/affine.py        2007-09-12 17:25:19 UTC 
(rev 3839)
@@ -33,29 +33,29 @@
        self._points = N.asarray(points, N.float_)
        self.track = False
 
-    # JDH: if you define a del method, the garbage collector won't
-    # destory cyclic references, so make sure you either manage these
-    # yourself or remove the __del__ after testing
-    def __del__(self):
-       if self.track:
-           print "Bbox::__del__"
-       
     [EMAIL PROTECTED]
     def unit():
-       return Bbox([[0,0], [1,1]])
+       return Bbox.from_lbrt(0., 0., 1., 1.)
     unit = staticmethod(unit)
 
     [EMAIL PROTECTED]
     def from_lbwh(left, bottom, width, height):
-       return Bbox([[left, bottom], [left + width, bottom + height]])
+       return Bbox.from_lbrt(left, bottom, left + width, bottom + height)
     from_lbwh = staticmethod(from_lbwh)
 
     [EMAIL PROTECTED]
-    def from_lbrt(left, bottom, right, top):
-       return Bbox([[left, bottom], [right, top]])
+    def from_lbrt(*args):
+       points = N.array(args, dtype=N.float_).reshape(2, 2)
+       return Bbox(points)
     from_lbrt = staticmethod(from_lbrt)
 
-
+    def __cmp__(self, other):
+       # MGDTODO: Totally suboptimal
+       if isinstance(other, Bbox):
+           if (self._points == other._points).all():
+               return 0
+       return -1
+    
     # JDH: the update method will update the box limits from the
     # existing limits and the new data; it appears here you are just
     # using the new data.  We use an "ignore" flag to specify whether
@@ -63,31 +63,18 @@
     def update_from_data(self, x, y):
        self._points = N.array([[x.min(), y.min()], [x.max(), y.max()]], 
N.float_)
        self.invalidate()
-       if self.track:
-           print "Bbox::update_from_data", self._points
     
     def copy(self):
-       if self.track:
-           print "Bbox::copy"
        return Bbox(self._points.copy())
 
     def __repr__(self):
        return 'Bbox(%s)' % repr(self._points)
     __str__ = __repr__
 
-    def __cmp__(self, other):
-       # MGDTODO: Totally suboptimal
-       if isinstance(other, Bbox):
-           return (self._points == other._points).all()
-       return -1
-    
     # MGDTODO: Probably a more efficient ways to do this...
     def _get_xmin(self):
-       if self.track:
-           print "Bbox::_get_xmin"
        return self._points[0, 0]
     def _set_xmin(self, val):
-       print "Bbox::_set_xmin"
        self._points[0, 0] = val
        self.invalidate()
     xmin = property(_get_xmin, _set_xmin)
@@ -150,10 +137,10 @@
     height = property(_get_height)
 
     def transformed(self, transform):
-       return Bbox(self.transform(self._points))
+       return Bbox(transform(self._points))
 
     def inverse_transformed(self, transform):
-       return Bbox(self.transform.inverted()(self._points))
+       return Bbox(transform.inverted()(self._points))
     
     def get_bounds(self):
        return (self.xmin, self.ymin,
@@ -249,6 +236,14 @@
        return "Affine2D(%s)" % repr(self._mtx)
     __str__ = __repr__
 
+    def __cmp__(self, other):
+       # MGDTODO: We need to decide if we want deferred transforms
+       # to be equal to this one
+       if isinstance(other, Affine2D):
+           if (self.get_matrix() == other.get_matrix()).all():
+               return 0
+       return -1
+    
     def _do_invalidation(self):
        result = self._inverted is None
        self._inverted = None
@@ -380,10 +375,9 @@
        if self._mtx is None:
            x_mtx = self._x.get_matrix()
            y_mtx = self._y.get_matrix()
+           # This works because we already know the transforms are
+           # separable
            self._mtx = N.vstack([x_mtx[0], y_mtx[1], [0.0, 0.0, 1.0]])
-#          self._mtx = self.matrix_from_values(
-#              x_mtx[0,0], 0.0, 0.0, y_mtx[1,1], x_mtx[0,2], y_mtx[1,2])
-           print "Blended", x_mtx, y_mtx, self._mtx
        
     def is_separable(self):
        return True
@@ -429,8 +423,8 @@
     def _make__mtx(self):
        if self._mtx is None:
            self._mtx = self._concat(
-               self._b.get_matrix(),
-               self._a.get_matrix())
+               self._a.get_matrix(),
+               self._b.get_matrix())
 
     def get_matrix(self):
        self._make__mtx()
@@ -547,12 +541,70 @@
     return interval[0] < val and interval[1] > val
     
 if __name__ == '__main__':
+    bbox = Bbox.from_lbrt(10., 15., 20., 25.)
+    assert bbox.xmin == 10
+    assert bbox.ymin == 15
+    assert bbox.xmax == 20
+    assert bbox.ymax == 25
+
+    assert N.all(bbox.min == [10, 15])
+    assert N.all(bbox.max == [20, 25])
+    assert N.all(bbox.intervalx == (10, 20))
+    assert N.all(bbox.intervaly == (15, 25))
+
+    assert bbox.width == 10
+    assert bbox.height == 10
+
+    assert bbox.get_bounds() == (10, 15, 10, 10)
+
+    bbox.intervalx = (11, 21)
+    bbox.intervaly = (16, 26)
+    
+    assert bbox.get_bounds() == (11, 16, 10, 10)
+
+    bbox.xmin = 12
+    bbox.ymin = 17
+    bbox.xmax = 22
+    bbox.ymax = 27
+
+    assert bbox.get_bounds() == (12, 17, 10, 10)
+
+    bbox = Bbox.from_lbwh(10, 11, 12, 13)
+    assert bbox.get_bounds() == (10, 11, 12, 13)
+
+    bbox_copy = bbox.copy()
+    assert bbox == bbox_copy
+    bbox_copy.max = (14, 15)
+    assert bbox.get_bounds() == (10, 11, 12, 13)
+    assert bbox_copy.get_bounds() == (10, 11, 4, 4)
+    
     bbox1 = Bbox([[10., 15.], [20., 25.]])
     bbox2 = Bbox([[30., 35.], [40., 45.]])
     trans = BboxTransform(bbox1, bbox2)
-    print trans(bbox1._points)
+    bbox3 = bbox1.transformed(trans)
+    assert bbox3 == bbox2
 
-    bbox2.intervalx = 50, 55
-    print trans(bbox1._points)
+    translation = Affine2D().translate(10, 20)
+    assert translation.to_values() == (1, 0, 0, 1, 10, 20)
+    scale = Affine2D().scale(10, 20)
+    assert scale.to_values() == (10, 0, 0, 20, 0, 0)
+    rotation = Affine2D().rotate_deg(30)
+    print rotation.to_values() == (0.86602540378443871, 0.49999999999999994, 
-0.49999999999999994, 0.86602540378443871, 0.0, 0.0)
     
+    points = N.array([[1,2],[3,4],[5,6],[7,8]], N.float_)
+    translated_points = translation(points)
+    assert (translated_points == [[11., 22.], [13., 24.], [15., 26.], [17., 
28.]]).all()
+    scaled_points = scale(points)
+    print scaled_points
+    rotated_points = rotation(points)
+    print rotated_points
+
+    tpoints1 = rotation(translation(scale(points)))
+    trans_sum = rotation + translation + scale
+    tpoints2 = trans_sum(points)
+    print tpoints1, tpoints2
+    print tpoints1 == tpoints2
+    # Need to do some sort of fuzzy comparison here?
+    # assert (tpoints1 == tpoints2).all()
+    
 __all__ = ['Transform', 'Affine2D']

Modified: branches/transforms/lib/matplotlib/axes.py
===================================================================
--- branches/transforms/lib/matplotlib/axes.py  2007-09-12 15:41:22 UTC (rev 
3838)
+++ branches/transforms/lib/matplotlib/axes.py  2007-09-12 17:25:19 UTC (rev 
3839)
@@ -653,15 +653,12 @@
 
         self.viewLim = Bbox.from_lbrt(left, bottom, right, top)
        self.dataLim = Bbox.unit()
-       self.dataLim.track = True
        
         self.transData = maffine.BboxTransform(
             self.viewLim, self.bbox)
         self.transAxes = maffine.BboxTransform(
             Bbox.unit(), self.bbox)
 
-       print "_set_lim_and_transforms", self.viewLim, self.transData, 
self.dataLim, self.transAxes, self.bbox
-
        # MGDTODO
 #         if self._sharex:
 #             self.transData.set_funcx(self._sharex.transData.get_funcx())
@@ -697,7 +694,6 @@
 #             # Change values within self._position--don't replace it.
 #             for num,val in zip(pos, self._position):
 #                 val.set(num)
-           print "set_position", self._position, pos
            self._position = pos
            # MGDTODO: side-effects
         if which in ('both', 'original'):
@@ -1182,9 +1178,7 @@
         #print type(x), type(y)
        # MGDTODO
         ## self.dataLim.update_numerix(x, y, -1)
-       print "update_datalim_numerix", self.dataLim,
        self.dataLim.update_from_data(x, y)
-       print self.dataLim
 
     def _get_verts_in_data_coords(self, trans, xys):
         if trans == self.transData:
@@ -1245,8 +1239,6 @@
         axis direction reversal that has already been done.
         """
         # if image data only just use the datalim
-       print "autoscale_view", self._autoscaleon, scalex, scaley
-       
         if not self._autoscaleon: return
         if (tight or (len(self.images)>0 and
                       len(self.lines)==0 and
@@ -1274,7 +1266,7 @@
 
     def draw(self, renderer=None, inframe=False):
         "Draw everything (plot lines, axes, labels)"
-        if renderer is None:
+       if renderer is None:
             renderer = self._cachedRenderer
 
         if renderer is None:
@@ -1550,7 +1542,6 @@
         xmin, xmax = maffine.nonsingular(xmin, xmax, increasing=False)
 
        self.viewLim.intervalx = (xmin, xmax)
-       print 'set_xlim', self.viewLim, xmin, xmax
        
         return xmin, xmax
 
@@ -1654,7 +1645,6 @@
         ACCEPTS: len(2) sequence of floats
         """
 
-       print "set_ylim", ymin, ymax, emit
         if ymax is None and iterable(ymin):
             ymin,ymax = ymin
 
@@ -1676,7 +1666,6 @@
         ymin, ymax = maffine.nonsingular(ymin, ymax, increasing=False)
        self.viewLim.intervaly = (ymin, ymax)
         if emit: self.callbacks.process('ylim_changed', self)
-       print "set_ylim", self.viewLim
        
         return ymin, ymax
 

Modified: branches/transforms/lib/matplotlib/figure.py
===================================================================
--- branches/transforms/lib/matplotlib/figure.py        2007-09-12 15:41:22 UTC 
(rev 3838)
+++ branches/transforms/lib/matplotlib/figure.py        2007-09-12 17:25:19 UTC 
(rev 3839)
@@ -326,7 +326,6 @@
 
        dpival = self.dpi
        self.bbox.max = w * dpival, h * dpival
-       print self.bbox
         # self.figwidth.set(w) MGDTODO
         # self.figheight.set(h)
        

Modified: branches/transforms/lib/matplotlib/lines.py
===================================================================
--- branches/transforms/lib/matplotlib/lines.py 2007-09-12 15:41:22 UTC (rev 
3838)
+++ branches/transforms/lib/matplotlib/lines.py 2007-09-12 17:25:19 UTC (rev 
3839)
@@ -389,7 +389,6 @@
 
 
     def set_axes(self, ax):
-       print "set_axes"
         Artist.set_axes(self, ax)
         if ax.xaxis is not None:
             self._xcid = ax.xaxis.callbacks.connect('units', self.recache)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
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-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to