From: <md...@us...> - 2007-12-20 17:18:18
|
Revision: 4782 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4782&view=rev Author: mdboom Date: 2007-12-20 09:18:12 -0800 (Thu, 20 Dec 2007) Log Message: ----------- Major speed improvement for non-rectilinear projections. Modified Paths: -------------- branches/transforms/lib/matplotlib/axis.py branches/transforms/lib/matplotlib/lines.py branches/transforms/lib/matplotlib/transforms.py Modified: branches/transforms/lib/matplotlib/axis.py =================================================================== --- branches/transforms/lib/matplotlib/axis.py 2007-12-20 17:14:36 UTC (rev 4781) +++ branches/transforms/lib/matplotlib/axis.py 2007-12-20 17:18:12 UTC (rev 4782) @@ -304,6 +304,11 @@ 'Set the location of tick in data coords with scalar loc' x = loc + nonlinear = (hasattr(self.axes, 'yaxis') and + self.axes.yaxis.get_scale() != 'linear' or + hasattr(self.axes, 'xaxis') and + self.axes.xaxis.get_scale() != 'linear') + if self.tick1On: self.tick1line.set_xdata((x,)) if self.tick2On: @@ -314,6 +319,12 @@ self.label1.set_x(x) if self.label2On: self.label2.set_x(x) + + if nonlinear: + self.tick1line._invalid = True + self.tick2line._invalid = True + self.gridline._invalid = True + self._loc = loc def get_view_interval(self): @@ -425,6 +436,12 @@ def update_position(self, loc): 'Set the location of tick in data coords with scalar loc' y = loc + + nonlinear = (hasattr(self.axes, 'yaxis') and + self.axes.yaxis.get_scale() != 'linear' or + hasattr(self.axes, 'xaxis') and + self.axes.xaxis.get_scale() != 'linear') + if self.tick1On: self.tick1line.set_ydata((y,)) if self.tick2On: @@ -435,6 +452,11 @@ self.label1.set_y( y ) if self.label2On: self.label2.set_y( y ) + if nonlinear: + self.tick1line._invalid = True + self.tick2line._invalid = True + self.gridline._invalid = True + self._loc = loc Modified: branches/transforms/lib/matplotlib/lines.py =================================================================== --- branches/transforms/lib/matplotlib/lines.py 2007-12-20 17:14:36 UTC (rev 4781) +++ branches/transforms/lib/matplotlib/lines.py 2007-12-20 17:18:12 UTC (rev 4782) @@ -396,9 +396,6 @@ self._xorig = x self._yorig = y self._invalid = True - else: - if hasattr(self, "_transformed_path"): - self._transformed_path._invalid = self._transformed_path.INVALID_NON_AFFINE def recache(self): #if self.axes is None: print 'recache no axes' Modified: branches/transforms/lib/matplotlib/transforms.py =================================================================== --- branches/transforms/lib/matplotlib/transforms.py 2007-12-20 17:14:36 UTC (rev 4781) +++ branches/transforms/lib/matplotlib/transforms.py 2007-12-20 17:18:12 UTC (rev 4782) @@ -93,22 +93,24 @@ """ # If we are an affine transform being changed, we can set the # flag to INVALID_AFFINE_ONLY - value = ((self.is_affine or self.is_bbox) - and self.INVALID_AFFINE - or self.INVALID) + value = (self.is_affine) and self.INVALID_AFFINE or self.INVALID # Shortcut: If self is already invalid, that means its parents # are as well, so we don't need to do anything. - if self._invalid == value or not len(self._parents): + if self._invalid == value: return + if not len(self._parents): + self._invalid = value + return + # Invalidate all ancestors of self using pseudo-recursion. parent = None stack = [self] while len(stack): root = stack.pop() # Stop at subtrees that have already been invalidated - if root._invalid == 0 or root.pass_through: + if root._invalid != value or root.pass_through: root._invalid = value stack.extend(root._parents.keys()) @@ -198,6 +200,7 @@ read-only access to its data. """ is_bbox = True + is_affine = True #* Redundant: Removed for performance # @@ -208,6 +211,7 @@ def _check(points): if ma.isMaskedArray(points): warnings.warn("Bbox bounds are a masked array.") + points = npy.asarray(points) if (points[1,0] - points[0,0] == 0 or points[1,1] - points[0,1] == 0): warnings.warn("Singular Bbox.") @@ -1011,6 +1015,8 @@ transform may only be replaced with another child transform of the same dimensions. """ + pass_through = True + def __init__(self, child): """ child: A Transform instance. This child may later be replaced @@ -1546,7 +1552,6 @@ This version is an optimization for the case where both child transforms are of type Affine2DBase. """ - is_separable = True def __init__(self, x_transform, y_transform): @@ -1917,8 +1922,8 @@ the transform already applied, along with the affine part of the path necessary to complete the transformation. """ - if (self._invalid & self.INVALID_NON_AFFINE or - self._transformed_path is None): + if ((self._invalid & self.INVALID_NON_AFFINE == self.INVALID_NON_AFFINE) + or self._transformed_path is None): self._transformed_path = \ self._transform.transform_path_non_affine(self._path) self._invalid = 0 @@ -1928,7 +1933,7 @@ """ Return a fully-transformed copy of the child path. """ - if (self._invalid & self.INVALID_NON_AFFINE + if ((self._invalid & self.INVALID_NON_AFFINE == self.INVALID_NON_AFFINE) or self._transformed_path is None): self._transformed_path = \ self._transform.transform_path_non_affine(self._path) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |