Revision: 6119
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6119&view=rev
Author:   mmetz_bn
Date:     2008-09-24 08:58:16 +0000 (Wed, 24 Sep 2008)

Log Message:
-----------
Separate drawstyles and linestyles for lines

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/lib/matplotlib/legend.py
    trunk/matplotlib/lib/matplotlib/lines.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2008-09-23 18:59:54 UTC (rev 6118)
+++ trunk/matplotlib/CHANGELOG  2008-09-24 08:58:16 UTC (rev 6119)
@@ -1,3 +1,7 @@
+2008-09-24 Introduce drawstyles for lines. Transparently split linestyles
+           like 'steps--' into drawstyle 'steps' and linestyle '--'.
+           Legends always use drawstyle 'default'. - MM
+
 2008-09-18 Fixed quiver and quiverkey bugs (failure to scale properly
            when resizing) and added additional methods for determining
            the arrow angles - EF

Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py   2008-09-23 18:59:54 UTC (rev 
6118)
+++ trunk/matplotlib/lib/matplotlib/legend.py   2008-09-24 08:58:16 UTC (rev 
6119)
@@ -263,6 +263,7 @@
                 self._set_artist_props(legline) # after update
                 legline.set_clip_box(None)
                 legline.set_clip_path(None)
+                legline.set_drawstyle('default')
                 ret.append(legline)
                 legline.set_marker('None')
 

Modified: trunk/matplotlib/lib/matplotlib/lines.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/lines.py    2008-09-23 18:59:54 UTC (rev 
6118)
+++ trunk/matplotlib/lib/matplotlib/lines.py    2008-09-24 08:58:16 UTC (rev 
6119)
@@ -11,7 +11,8 @@
 from matplotlib import verbose
 import artist
 from artist import Artist
-from cbook import iterable, is_string_like, is_numlike, ls_mapper, dedent
+from cbook import iterable, is_string_like, is_numlike, ls_mapper, dedent,\
+flatten
 from colors import colorConverter
 from path import Path
 from transforms import Affine2D, Bbox, TransformedPath, IdentityTransform
@@ -76,14 +77,24 @@
         '--'         : '_draw_dashed',
         '-.'         : '_draw_dash_dot',
         ':'          : '_draw_dotted',
-        'steps'      : '_draw_steps_pre',
-        'steps-mid'  : '_draw_steps_mid',
-        'steps-pre'  : '_draw_steps_pre',
-        'steps-post' : '_draw_steps_post',
         'None'       : '_draw_nothing',
         ' '          : '_draw_nothing',
         ''           : '_draw_nothing',
     }
+    
+    _drawStyles_l = {
+        'default'    : '_draw_lines',
+        'steps-mid'  : '_draw_steps_mid',
+        'steps-pre'  : '_draw_steps_pre',
+        'steps-post' : '_draw_steps_post',
+    }
+    
+    _drawStyles_s = {
+        'steps'      : '_draw_steps_pre',
+    }
+    drawStyles = {}
+    drawStyles.update(_drawStyles_l)
+    drawStyles.update(_drawStyles_s)
 
     markers = _markers =  {  # hidden names deprecated
         '.'  : '_draw_point',
@@ -155,6 +166,7 @@
                  dash_joinstyle  = None,
                  solid_joinstyle = None,
                  pickradius      = 5,
+                 drawstyle       = None,
                  **kwargs
                  ):
         """
@@ -185,6 +197,8 @@
         if solid_capstyle is None : 
solid_capstyle=rcParams['lines.solid_capstyle']
         if solid_joinstyle is None : 
solid_joinstyle=rcParams['lines.solid_joinstyle']
 
+        if drawstyle is None : drawstyle='default'
+
         self.set_dash_capstyle(dash_capstyle)
         self.set_dash_joinstyle(dash_joinstyle)
         self.set_solid_capstyle(solid_capstyle)
@@ -192,6 +206,7 @@
 
 
         self.set_linestyle(linestyle)
+        self.set_drawstyle(drawstyle)
         self.set_linewidth(linewidth)
         self.set_color(color)
         self.set_marker(marker)
@@ -423,8 +438,10 @@
         funcname = self._lineStyles.get(self._linestyle, '_draw_nothing')
         if funcname != '_draw_nothing':
             tpath, affine = 
self._transformed_path.get_transformed_path_and_affine()
-            lineFunc = getattr(self, funcname)
-            lineFunc(renderer, gc, tpath, affine.frozen())
+            self._lineFunc = getattr(self, funcname)
+            funcname = self.drawStyles.get(self._drawstyle, '_draw_lines')
+            drawFunc = getattr(self, funcname)
+            drawFunc(renderer, gc, tpath, affine.frozen())
 
         if self._marker is not None:
             gc = renderer.new_gc()
@@ -442,6 +459,7 @@
 
     def get_antialiased(self): return self._antialiased
     def get_color(self): return self._color
+    def get_drawstyle(self): return self._drawstyle
     def get_linestyle(self): return self._linestyle
 
     def get_linewidth(self): return self._linewidth
@@ -543,6 +561,18 @@
         """
         self._color = color
 
+    def set_drawstyle(self, drawstyle):
+        """
+        Set the drawstyle of the plot
+
+        'default' connects the points with lines. The steps variants
+        produce step-plots. 'steps' is equivalent to 'steps-pre' and
+        is maintained for backward-compatibility.
+
+        ACCEPTS: [ 'default' | 'steps' | 'steps-pre' | 'steps-mid' | 
'steps-post' ]
+        """
+        self._drawstyle = drawstyle
+
     def set_linewidth(self, w):
         """
         Set the line width in points
@@ -558,8 +588,20 @@
         'steps' is equivalent to 'steps-pre' and is maintained for
         backward-compatibility.
 
-        ACCEPTS: [ '-' | '--' | '-.' | ':' | 'steps' | 'steps-pre' | 
'steps-mid' | 'steps-post' | 'None' | ' ' | '' ]
+        ACCEPTS: [ '-' | '--' | '-.' | ':' | 'None' | ' ' | '' ] and
+        any drawstyle in combination with a linestyle, e.g. 'steps--'.
         """
+
+        # handle long drawstyle names before short ones !
+        for ds in flatten([k.keys() for k in (self._drawStyles_l,
+                self._drawStyles_s)], is_string_like):
+            if linestyle.startswith(ds):
+                self.set_drawstyle(ds)
+                if len(linestyle) > len(ds):
+                    linestyle = linestyle[len(ds):]
+                else:
+                    linestyle = '-'
+
         if linestyle not in self._lineStyles:
             if ls_mapper.has_key(linestyle):
                 linestyle = ls_mapper[linestyle]
@@ -569,7 +611,6 @@
         if linestyle in [' ','']:
             linestyle = 'None'
         self._linestyle = linestyle
-        self._lineFunc = self._lineStyles[linestyle]
 
     def set_marker(self, marker):
         """
@@ -660,15 +701,10 @@
             self.set_linestyle('--')
         self._dashSeq = seq  # TODO: offset ignored for now
 
-    def _draw_nothing(self, *args, **kwargs):
-        pass
 
+    def _draw_lines(self, renderer, gc, path, trans):
+        self._lineFunc(renderer, gc, path, trans)
 
-    def _draw_solid(self, renderer, gc, path, trans):
-        gc.set_linestyle('solid')
-        renderer.draw_path(gc, path, trans)
-
-
     def _draw_steps_pre(self, renderer, gc, path, trans):
         vertices = self._xy
         steps = ma.zeros((2*len(vertices)-1, 2), np.float_)
@@ -678,9 +714,8 @@
 
         path = Path(steps)
         path = path.transformed(self.get_transform())
-        self._draw_solid(renderer, gc, path, IdentityTransform())
+        self._lineFunc(renderer, gc, path, IdentityTransform())
 
-
     def _draw_steps_post(self, renderer, gc, path, trans):
         vertices = self._xy
         steps = ma.zeros((2*len(vertices)-1, 2), np.float_)
@@ -690,9 +725,8 @@
 
         path = Path(steps)
         path = path.transformed(self.get_transform())
-        self._draw_solid(renderer, gc, path, IdentityTransform())
+        self._lineFunc(renderer, gc, path, IdentityTransform())
 
-
     def _draw_steps_mid(self, renderer, gc, path, trans):
         vertices = self._xy
         steps = ma.zeros((2*len(vertices), 2), np.float_)
@@ -705,9 +739,16 @@
 
         path = Path(steps)
         path = path.transformed(self.get_transform())
-        self._draw_solid(renderer, gc, path, IdentityTransform())
+        self._lineFunc(renderer, gc, path, IdentityTransform())
 
 
+    def _draw_nothing(self, *args, **kwargs):
+        pass
+
+    def _draw_solid(self, renderer, gc, path, trans):
+        gc.set_linestyle('solid')
+        renderer.draw_path(gc, path, trans)
+
     def _draw_dashed(self, renderer, gc, path, trans):
         gc.set_linestyle('dashed')
         if self._dashSeq is not None:
@@ -990,6 +1031,7 @@
 
         self._linestyle = other._linestyle
         self._marker = other._marker
+        self._drawstyle = other._drawstyle
 
 
     def _get_rgb_face(self):
@@ -1239,6 +1281,7 @@
 
 lineStyles = Line2D._lineStyles
 lineMarkers = Line2D._markers
+drawStyles = Line2D.drawStyles
 
 artist.kwdocd['Line2D'] = artist.kwdoc(Line2D)
 


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 the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to