|
From: <md...@us...> - 2008-12-11 20:45:16
|
Revision: 6571
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6571&view=rev
Author: mdboom
Date: 2008-12-11 20:45:12 +0000 (Thu, 11 Dec 2008)
Log Message:
-----------
More progress on programmatic snapping. Applied to markers (to prevent them from disappearing), and legend boxes.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/artist.py
trunk/matplotlib/lib/matplotlib/legend.py
trunk/matplotlib/lib/matplotlib/lines.py
trunk/matplotlib/lib/matplotlib/patches.py
trunk/matplotlib/src/_backend_agg.cpp
Modified: trunk/matplotlib/lib/matplotlib/artist.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/artist.py 2008-12-11 20:44:51 UTC (rev 6570)
+++ trunk/matplotlib/lib/matplotlib/artist.py 2008-12-11 20:45:12 UTC (rev 6571)
@@ -54,6 +54,7 @@
self._url = None
self.x_isdata = True # False to avoid updating Axes.dataLim with x
self.y_isdata = True # with y
+ self._snap = None
def remove(self):
"""
@@ -329,6 +330,32 @@
"""
self._url = url
+ def get_snap(self):
+ """
+ Returns the snap setting which may be:
+
+ * True: snap vertices to the nearest pixel center
+
+ * False: leave vertices as-is
+
+ * None: (auto) If the path contains only rectilinear line
+ segments, round to the nearest pixel center
+ """
+ return self._snap
+
+ def set_snap(self, snap):
+ """
+ Sets the snap setting which may be:
+
+ * True: snap vertices to the nearest pixel center
+
+ * False: leave vertices as-is
+
+ * None: (auto) If the path contains only rectilinear line
+ segments, round to the nearest pixel center
+ """
+ self._snap = snap
+
def get_figure(self):
"""
Return the :class:`~matplotlib.figure.Figure` instance the
Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py 2008-12-11 20:44:51 UTC (rev 6570)
+++ trunk/matplotlib/lib/matplotlib/legend.py 2008-12-11 20:45:12 UTC (rev 6571)
@@ -254,6 +254,7 @@
xy=(0.0, 0.0), width=1., height=1.,
facecolor='w', edgecolor='k',
mutation_scale=self.fontsize,
+ snap=True
)
# The width and height of the legendPatch will be set (in the
Modified: trunk/matplotlib/lib/matplotlib/lines.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/lines.py 2008-12-11 20:44:51 UTC (rev 6570)
+++ trunk/matplotlib/lib/matplotlib/lines.py 2008-12-11 20:45:12 UTC (rev 6571)
@@ -453,6 +453,7 @@
join = self._solidjoinstyle
gc.set_joinstyle(join)
gc.set_capstyle(cap)
+ gc.set_snap(self.get_snap())
funcname = self._lineStyles.get(self._linestyle, '_draw_nothing')
if funcname != '_draw_nothing':
@@ -845,6 +846,7 @@
def _draw_point(self, renderer, gc, path, path_trans):
w = renderer.points_to_pixels(self._markersize) * \
self._point_size_reduction * 0.5
+ gc.set_snap(renderer.points_to_pixels(self._markersize) > 3.0)
rgbFace = self._get_rgb_face()
transform = Affine2D().scale(w)
renderer.draw_markers(
@@ -854,6 +856,7 @@
_draw_pixel_transform = Affine2D().translate(-0.5, -0.5)
def _draw_pixel(self, renderer, gc, path, path_trans):
rgbFace = self._get_rgb_face()
+ gc.set_snap(False)
renderer.draw_markers(gc, Path.unit_rectangle(),
self._draw_pixel_transform,
path, path_trans, rgbFace)
@@ -861,6 +864,7 @@
def _draw_circle(self, renderer, gc, path, path_trans):
w = renderer.points_to_pixels(self._markersize) * 0.5
+ gc.set_snap(renderer.points_to_pixels(self._markersize) > 3.0)
rgbFace = self._get_rgb_face()
transform = Affine2D().scale(w, w)
renderer.draw_markers(
@@ -870,6 +874,7 @@
_triangle_path = Path([[0.0, 1.0], [-1.0, -1.0], [1.0, -1.0], [0.0, 1.0]])
def _draw_triangle_up(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset, offset)
rgbFace = self._get_rgb_face()
@@ -878,6 +883,7 @@
def _draw_triangle_down(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset, -offset)
rgbFace = self._get_rgb_face()
@@ -886,6 +892,7 @@
def _draw_triangle_left(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset, offset).rotate_deg(90)
rgbFace = self._get_rgb_face()
@@ -894,6 +901,7 @@
def _draw_triangle_right(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset, offset).rotate_deg(-90)
rgbFace = self._get_rgb_face()
@@ -902,6 +910,7 @@
def _draw_square(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 2.0)
side = renderer.points_to_pixels(self._markersize)
transform = Affine2D().translate(-0.5, -0.5).scale(side)
rgbFace = self._get_rgb_face()
@@ -910,6 +919,7 @@
def _draw_diamond(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
side = renderer.points_to_pixels(self._markersize)
transform = Affine2D().translate(-0.5, -0.5).rotate_deg(45).scale(side)
rgbFace = self._get_rgb_face()
@@ -918,6 +928,7 @@
def _draw_thin_diamond(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = renderer.points_to_pixels(self._markersize)
transform = Affine2D().translate(-0.5, -0.5) \
.rotate_deg(45).scale(offset * 0.6, offset)
@@ -927,6 +938,7 @@
def _draw_pentagon(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5 * renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
rgbFace = self._get_rgb_face()
@@ -934,6 +946,7 @@
path, path_trans, rgbFace)
def _draw_star(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5 * renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
rgbFace = self._get_rgb_face()
@@ -943,6 +956,7 @@
def _draw_hexagon1(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5 * renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
rgbFace = self._get_rgb_face()
@@ -951,6 +965,7 @@
def _draw_hexagon2(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5 * renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(30)
rgbFace = self._get_rgb_face()
@@ -960,6 +975,7 @@
_line_marker_path = Path([[0.0, -1.0], [0.0, 1.0]])
def _draw_vline(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
renderer.draw_markers(gc, self._line_marker_path, transform,
@@ -967,6 +983,7 @@
def _draw_hline(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(90)
renderer.draw_markers(gc, self._line_marker_path, transform,
@@ -975,6 +992,7 @@
_tickhoriz_path = Path([[0.0, 0.0], [1.0, 0.0]])
def _draw_tickleft(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = renderer.points_to_pixels(self._markersize)
marker_transform = Affine2D().scale(-offset, 1.0)
renderer.draw_markers(gc, self._tickhoriz_path, marker_transform,
@@ -982,6 +1000,7 @@
def _draw_tickright(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = renderer.points_to_pixels(self._markersize)
marker_transform = Affine2D().scale(offset, 1.0)
renderer.draw_markers(gc, self._tickhoriz_path, marker_transform,
@@ -990,6 +1009,7 @@
_tickvert_path = Path([[-0.0, 0.0], [-0.0, 1.0]])
def _draw_tickup(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = renderer.points_to_pixels(self._markersize)
marker_transform = Affine2D().scale(1.0, offset)
renderer.draw_markers(gc, self._tickvert_path, marker_transform,
@@ -997,6 +1017,7 @@
def _draw_tickdown(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 1.0)
offset = renderer.points_to_pixels(self._markersize)
marker_transform = Affine2D().scale(1.0, -offset)
renderer.draw_markers(gc, self._tickvert_path, marker_transform,
@@ -1008,6 +1029,7 @@
[Path.MOVETO, Path.LINETO,
Path.MOVETO, Path.LINETO])
def _draw_plus(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
renderer.draw_markers(gc, self._plus_path, transform,
@@ -1021,6 +1043,7 @@
Path.MOVETO, Path.LINETO,
Path.MOVETO, Path.LINETO])
def _draw_tri_down(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
renderer.draw_markers(gc, self._tri_path, transform,
@@ -1028,6 +1051,7 @@
def _draw_tri_up(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(180)
renderer.draw_markers(gc, self._tri_path, transform,
@@ -1035,6 +1059,7 @@
def _draw_tri_left(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(90)
renderer.draw_markers(gc, self._tri_path, transform,
@@ -1042,6 +1067,7 @@
def _draw_tri_right(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(270)
renderer.draw_markers(gc, self._tri_path, transform,
@@ -1050,6 +1076,7 @@
_caret_path = Path([[-1.0, 1.5], [0.0, 0.0], [1.0, 1.5]])
def _draw_caretdown(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
renderer.draw_markers(gc, self._caret_path, transform,
@@ -1057,6 +1084,7 @@
def _draw_caretup(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(180)
renderer.draw_markers(gc, self._caret_path, transform,
@@ -1064,6 +1092,7 @@
def _draw_caretleft(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(270)
renderer.draw_markers(gc, self._caret_path, transform,
@@ -1071,6 +1100,7 @@
def _draw_caretright(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset).rotate_deg(90)
renderer.draw_markers(gc, self._caret_path, transform,
@@ -1082,6 +1112,7 @@
[Path.MOVETO, Path.LINETO,
Path.MOVETO, Path.LINETO])
def _draw_x(self, renderer, gc, path, path_trans):
+ gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0)
offset = 0.5*renderer.points_to_pixels(self._markersize)
transform = Affine2D().scale(offset)
renderer.draw_markers(gc, self._x_path, transform,
Modified: trunk/matplotlib/lib/matplotlib/patches.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/patches.py 2008-12-11 20:44:51 UTC (rev 6570)
+++ trunk/matplotlib/lib/matplotlib/patches.py 2008-12-11 20:45:12 UTC (rev 6571)
@@ -278,6 +278,7 @@
self._set_gc_clip(gc)
gc.set_capstyle('projecting')
gc.set_url(self._url)
+ gc.set_snap(self._snap)
if (not self.fill or self._facecolor is None or
(cbook.is_string_like(self._facecolor) and self._facecolor.lower()=='none')):
@@ -1435,7 +1436,6 @@
#adding quotes for now to work around tex bug treating '-' as itemize
_table.append([cls.__name__, "'%s'"%name, argstr])
-
return _pprint_table(_table)
@@ -1505,7 +1505,7 @@
BoxStyle("Round, pad=0.2")
- The following boxstyle classes are defined.
+ Following boxstyle classes are defined.
%(AvailableBoxstyles)s
@@ -2549,6 +2549,7 @@
A arrowstyle object can be either created as::
ArrowStyle.Fancy(head_length=.4, head_width=.4, tail_width=.4)
+
or::
ArrowStyle("Fancy", head_length=.4, head_width=.4, tail_width=.4)
Modified: trunk/matplotlib/src/_backend_agg.cpp
===================================================================
--- trunk/matplotlib/src/_backend_agg.cpp 2008-12-11 20:44:51 UTC (rev 6570)
+++ trunk/matplotlib/src/_backend_agg.cpp 2008-12-11 20:45:12 UTC (rev 6571)
@@ -968,8 +968,6 @@
transformed_path_t tpath(path, trans);
simplify_t simplified(tpath, snap, simplify, width, height);
curve_t curve(simplified);
- if (snap)
- gc.isaa = false;
try {
_draw_path(curve, has_clippath, face, gc);
@@ -1127,10 +1125,7 @@
if (check_snap) {
snap = should_snap(gc, path, trans);
- if (snap)
- gc.isaa = false;
- else
- gc.isaa = bool(Py::Int(antialiaseds[i % Naa]));
+ gc.isaa = bool(Py::Int(antialiaseds[i % Naa]));
transformed_path_t tpath(path, trans);
simplify_t simplified(tpath, snap, false, width, height);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|