changeset 7854:228858e69bd1

added {x,y,z}lim sanity check
author Shai Ayal <shaiay@users.sourceforge.net>
date Sun, 02 Mar 2008 06:38:27 +0200
parents 263cdf57a1dd
children f317f14516cb
files src/ChangeLog src/graphics.h.in
diffstat 2 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Mar 02 14:44:31 2008 +0100
+++ b/src/ChangeLog	Sun Mar 02 06:38:27 2008 +0200
@@ -1,5 +1,9 @@
 2008-06-04  Shai Ayal  <shaiay@users.sourceforge.net>
 
+	* graphics.h.in (axes::properities::fix_limits) : New method.
+	(axes::properties::update_xlim, axes::properties::update_ylim,
+	axes::properties::update_zlim): Use fix_limits.
+
 	* graphics.cc (axes::properties::calc_ticks_and_lims): Make sure
 	that lo <= hi.
 
--- a/src/graphics.h.in	Sun Mar 02 14:44:31 2008 +0100
+++ b/src/graphics.h.in	Sun Mar 02 06:38:27 2008 +0200
@@ -2711,6 +2711,25 @@
 
     double calc_tick_sep (double minval, double maxval);
     void calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto);
+    void fix_limits (array_property& lims)
+    {
+      if (lims.get ().is_empty ()) 
+	return;
+
+      Matrix l = lims.get ().matrix_value ();
+      if (l(0) > l(1))
+	{
+	  l(0) = 0;
+	  l(1) = 1;
+	  lims = l;
+	}
+      else if (l(0) == l(1))
+	{
+	  l(0) -= 0.5;
+	  l(1) += 0.5;
+	  lims = l;
+	}
+    }      
 
   public:
     Matrix get_axis_limits (double xmin, double xmax, double min_pos, bool logscale);
@@ -2718,18 +2737,23 @@
     {
       if (xtickmode.is ("auto"))
 	calc_ticks_and_lims (xlim, xtick, xlimmode.is ("auto"));
+      fix_limits (xlim);
     }
 
     void update_ylim (void)
     {
       if (ytickmode.is ("auto"))
 	calc_ticks_and_lims (ylim, ytick, ylimmode.is ("auto"));
+
+      fix_limits (ylim);
     }
 
     void update_zlim (void)
     {
       if (ztickmode.is ("auto"))
 	calc_ticks_and_lims (zlim, ztick, zlimmode.is ("auto"));
+
+      fix_limits (zlim);
     }
     
   };