1010import matplotlib .transforms as transforms
1111
1212
13-
1413class _Base (object ):
1514 """
1615 A base class for PathEffect. Derived must override draw_path method.
@@ -22,6 +21,9 @@ def __init__(self):
2221 """
2322 super (_Base , self ).__init__ ()
2423
24+ def get_proxy_renderer (self , renderer ):
25+ pe_renderer = ProxyRenderer (self , renderer )
26+ return pe_renderer
2527
2628 def _update_gc (self , gc , new_gc_dict ):
2729 new_gc_dict = new_gc_dict .copy ()
@@ -39,7 +41,7 @@ def _update_gc(self, gc, new_gc_dict):
3941 return gc
4042
4143
42- def draw_path (self , renderer , gc , tpath , affine , rgbFace ):
44+ def draw_path (self , renderer , gc , tpath , affine , rgbFace = None ):
4345 """
4446 Derived should override this method. The argument is same
4547 as *draw_path* method of :class:`matplotlib.backend_bases.RendererBase`
@@ -71,6 +73,33 @@ def _draw_text_as_path(self, renderer, gc, x, y, s, prop, angle, ismath):
7173 gc .set_linewidth (0.0 )
7274 self .draw_path (renderer , gc , path , transform , rgbFace = color )
7375
76+ def draw_markers (self , renderer , gc , marker_path , marker_trans , path , trans , rgbFace = None ):
77+ """
78+ Draws a marker at each of the vertices in path. This includes
79+ all vertices, including control points on curves. To avoid
80+ that behavior, those vertices should be removed before calling
81+ this function.
82+
83+ *gc*
84+ the :class:`GraphicsContextBase` instance
85+
86+ *marker_trans*
87+ is an affine transform applied to the marker.
88+
89+ *trans*
90+ is an affine transform applied to the path.
91+
92+ This provides a fallback implementation of draw_markers that
93+ makes multiple calls to :meth:`draw_path`. Some backends may
94+ want to override this method in order to draw the marker only
95+ once and reuse it multiple times.
96+ """
97+ for vertices , codes in path .iter_segments (trans , simplify = False ):
98+ if len (vertices ):
99+ x ,y = vertices [- 2 :]
100+ self .draw_path (renderer , gc , marker_path ,
101+ marker_trans + transforms .Affine2D ().translate (x , y ),
102+ rgbFace )
74103
75104# def draw_path_collection(self, renderer,
76105# gc, master_transform, paths, all_transforms,
@@ -88,6 +117,27 @@ def _draw_text_as_path(self, renderer, gc, x, y, s, prop, angle, ismath):
88117# transform = transforms.Affine2D(transform.get_matrix()).translate(xo, yo)
89118# self.draw_path(renderer, gc0, path, transform, rgbFace)
90119
120+ class ProxyRenderer (object ):
121+ def __init__ (self , path_effect , renderer ):
122+ self ._path_effect = path_effect
123+ self ._renderer = renderer
124+
125+ def draw_path (self , gc , tpath , affine , rgbFace = None ):
126+ self ._path_effect .draw_path (self ._renderer , gc , tpath , affine , rgbFace )
127+
128+ def draw_tex (self , gc , x , y , s , prop , angle , ismath = 'TeX!' ):
129+ self ._path_effect ._draw_text_as_path (self ._renderer ,
130+ gc , x , y , s , prop , angle , ismath = "TeX" )
131+
132+ def draw_text (self , gc , x , y , s , prop , angle , ismath = False ):
133+ self ._path_effect ._draw_text (self .renderer ,
134+ gc , x , y , s , prop , angle , ismath )
135+
136+ def draw_markers (self , gc , marker_path , marker_trans , path , trans , rgbFace = None ):
137+ self ._path_effect .draw_markers (self ._renderer ,
138+ gc , marker_path , marker_trans , path , trans ,
139+ rgbFace = rgbFace )
140+
91141
92142class Normal (_Base ):
93143 """
0 commit comments