Revision: 8788
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8788&view=rev
Author:   leejjoon
Date:     2010-11-10 09:32:58 +0000 (Wed, 10 Nov 2010)

Log Message:
-----------
fix incorrect end position of FancyArrowPatch

Modified Paths:
--------------
    branches/v1_0_maint/lib/matplotlib/patches.py

Modified: branches/v1_0_maint/lib/matplotlib/patches.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/patches.py       2010-11-10 02:42:00 UTC 
(rev 8787)
+++ branches/v1_0_maint/lib/matplotlib/patches.py       2010-11-10 09:32:58 UTC 
(rev 8788)
@@ -2899,29 +2899,12 @@
             super(ArrowStyle._Curve, self).__init__()
 
 
-        def _get_pad_projected(self, x0, y0, x1, y1, linewidth):
-            # when no arrow head is drawn
-
-            dx, dy = x0 - x1, y0 - y1
-            cp_distance = math.sqrt(dx**2 + dy**2)
-
-            # padx_projected, pady_projected : amount of pad to account
-            # projection of the wedge
-            padx_projected = (.5*linewidth)
-            pady_projected = (.5*linewidth)
-
-            # apply pad for projected edge
-            ddx = padx_projected * dx / cp_distance
-            ddy = pady_projected * dy / cp_distance
-
-            return ddx, ddy
-
         def _get_arrow_wedge(self, x0, y0, x1, y1,
                              head_dist, cos_t, sin_t, linewidth
                              ):
             """
             Return the paths for arrow heads. Since arrow lines are
-            drawn with capstyle=projected, The arrow is goes beyond the
+            drawn with capstyle=projected, The arrow goes beyond the
             desired point. This method also returns the amount of the path
             to be shrinked so that it does not overshoot.
             """
@@ -2932,14 +2915,13 @@
             dx, dy = x0 - x1, y0 - y1
             cp_distance = math.sqrt(dx**2 + dy**2)
 
-            # padx_projected, pady_projected : amount of pad for account
-            # the overshooting of the projection of the wedge
-            padx_projected = (.5*linewidth / cos_t)
-            pady_projected = (.5*linewidth / sin_t)
+            # pad_projected : amount of pad to account the
+            # overshooting of the projection of the wedge
+            pad_projected = (.5*linewidth / sin_t)
 
             # apply pad for projected edge
-            ddx = padx_projected * dx / cp_distance
-            ddy = pady_projected * dy / cp_distance
+            ddx = pad_projected * dx / cp_distance
+            ddy = pad_projected * dy / cp_distance
 
             # offset for arrow wedge
             dx, dy = dx / cp_distance * head_dist, dy / cp_distance * head_dist
@@ -2948,7 +2930,7 @@
             dx2, dy2 = cos_t * dx - sin_t * dy, sin_t * dx + cos_t * dy
 
             vertices_arrow = [(x1+ddx+dx1, y1+ddy+dy1),
-                              (x1+ddx, y1++ddy),
+                              (x1+ddx, y1+ddy),
                               (x1+ddx+dx2, y1+ddy+dy2)]
             codes_arrow = [Path.MOVETO,
                            Path.LINETO,
@@ -3625,6 +3607,7 @@
                  shrinkB=2.,
                  mutation_scale=1.,
                  mutation_aspect=None,
+                 dpi_cor=1.,
                  **kwargs):
         """
         If *posA* and *posB* is given, a path connecting two point are
@@ -3692,8 +3675,26 @@
         self._mutation_scale=mutation_scale
         self._mutation_aspect=mutation_aspect
 
+        self.set_dpi_cor(dpi_cor)
         #self._draw_in_display_coordinate = True
 
+    def set_dpi_cor(self, dpi_cor):
+        """
+        dpi_cor is currently used for linewidth-related things and
+        shink factor. Mutation scale is not affected by this.
+        """
+        
+        self._dpi_cor = dpi_cor
+
+    def get_dpi_cor(self):
+        """
+        dpi_cor is currently used for linewidth-related things and
+        shink factor. Mutation scale is not affected by this.
+        """
+        
+        return self._dpi_cor
+
+        
     def set_positions(self, posA, posB):
         """ set the begin end end positions of the connecting
         path. Use current vlaue if None.
@@ -3814,8 +3815,8 @@
     def get_path(self):
         """
         return the path of the arrow in the data coordinate. Use
-        get_path_in_displaycoord() medthod to retrieve the arrow path
-        in the disaply coord.
+        get_path_in_displaycoord() method to retrieve the arrow path
+        in the disaply coord.  
         """
         _path, fillable = self.get_path_in_displaycoord()
 
@@ -3830,14 +3831,16 @@
         Return the mutated path of the arrow in the display coord
         """
 
+        dpi_cor = self.get_dpi_cor()
+
         if self._posA_posB is not None:
             posA = self.get_transform().transform_point(self._posA_posB[0])
             posB = self.get_transform().transform_point(self._posA_posB[1])
             _path = self.get_connectionstyle()(posA, posB,
                                                patchA=self.patchA,
                                                patchB=self.patchB,
-                                               shrinkA=self.shrinkA,
-                                               shrinkB=self.shrinkB
+                                               shrinkA=self.shrinkA*dpi_cor,
+                                               shrinkB=self.shrinkB*dpi_cor
                                                )
         else:
             _path = self.get_transform().transform_path(self._path_original)
@@ -3846,7 +3849,7 @@
 
         _path, fillable = self.get_arrowstyle()(_path,
                                                 self.get_mutation_scale(),
-                                                self.get_linewidth(),
+                                                self.get_linewidth()*dpi_cor,
                                                 self.get_mutation_aspect()
                                                 )
 
@@ -3887,7 +3890,11 @@
         if self._hatch:
             gc.set_hatch(self._hatch )
 
-
+        # FIXME : dpi_cor is for the dpi-dependecy of the
+        # linewidth. There could be room for improvement.
+        # 
+        #dpi_cor = renderer.points_to_pixels(1.)
+        self.set_dpi_cor(renderer.points_to_pixels(1.))
         path, fillable = self.get_path_in_displaycoord()
 
         if not cbook.iterable(fillable):
@@ -3940,6 +3947,7 @@
                  mutation_scale=10.,
                  mutation_aspect=None,
                  clip_on=False,
+                 dpi_cor=1.,
                  **kwargs):
         """
         Connect point *xyA* in *coordsA* with point *xyB* in *coordsB*
@@ -4013,6 +4021,7 @@
                                  mutation_scale=mutation_scale,
                                  mutation_aspect=mutation_aspect,
                                  clip_on=clip_on,
+                                 dpi_cor=dpi_cor,
                                  **kwargs)
 
         # if True, draw annotation only if self.xy is inside the axes
@@ -4144,6 +4153,8 @@
         Return the mutated path of the arrow in the display coord
         """
 
+        dpi_cor = self.get_dpi_cor()
+        
         x, y = self.xy1
         posA = self._get_xy(x, y, self.coords1, self.axesA)
 
@@ -4153,15 +4164,15 @@
         _path = self.get_connectionstyle()(posA, posB,
                                            patchA=self.patchA,
                                            patchB=self.patchB,
-                                           shrinkA=self.shrinkA,
-                                           shrinkB=self.shrinkB
+                                           shrinkA=self.shrinkA*dpi_cor,
+                                           shrinkB=self.shrinkB*dpi_cor
                                            )
 
 
 
         _path, fillable = self.get_arrowstyle()(_path,
                                                 self.get_mutation_scale(),
-                                                self.get_linewidth(),
+                                                self.get_linewidth()*dpi_cor,
                                                 self.get_mutation_aspect()
                                                 )
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to