10
10
import matplotlib .transforms as transforms
11
11
12
12
13
-
14
13
class _Base (object ):
15
14
"""
16
15
A base class for PathEffect. Derived must override draw_path method.
@@ -22,6 +21,9 @@ def __init__(self):
22
21
"""
23
22
super (_Base , self ).__init__ ()
24
23
24
+ def get_proxy_renderer (self , renderer ):
25
+ pe_renderer = ProxyRenderer (self , renderer )
26
+ return pe_renderer
25
27
26
28
def _update_gc (self , gc , new_gc_dict ):
27
29
new_gc_dict = new_gc_dict .copy ()
@@ -39,7 +41,7 @@ def _update_gc(self, gc, new_gc_dict):
39
41
return gc
40
42
41
43
42
- def draw_path (self , renderer , gc , tpath , affine , rgbFace ):
44
+ def draw_path (self , renderer , gc , tpath , affine , rgbFace = None ):
43
45
"""
44
46
Derived should override this method. The argument is same
45
47
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):
71
73
gc .set_linewidth (0.0 )
72
74
self .draw_path (renderer , gc , path , transform , rgbFace = color )
73
75
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 )
74
103
75
104
# def draw_path_collection(self, renderer,
76
105
# gc, master_transform, paths, all_transforms,
@@ -88,6 +117,27 @@ def _draw_text_as_path(self, renderer, gc, x, y, s, prop, angle, ismath):
88
117
# transform = transforms.Affine2D(transform.get_matrix()).translate(xo, yo)
89
118
# self.draw_path(renderer, gc0, path, transform, rgbFace)
90
119
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
+
91
141
92
142
class Normal (_Base ):
93
143
"""
0 commit comments