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. |