diff src/graphics.cc @ 7857:09b1a9c88128

added (far from perfect) support for logscale ticks
author Shai Ayal <shaiay@users.sourceforge.net>
date Sun, 09 Mar 2008 20:51:52 +0200
parents f317f14516cb
children fdd465b00ec0
line wrap: on
line diff
--- a/src/graphics.cc	Thu Mar 06 06:40:06 2008 +0200
+++ b/src/graphics.cc	Sun Mar 09 20:51:52 2008 +0200
@@ -2670,7 +2670,7 @@
 }
 
 void 
-axes::properties::calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto)
+axes::properties::calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto, bool is_logscale)
 {
 
   // FIXME -- add log ticks and lims
@@ -2687,7 +2687,14 @@
       hi = lo;
       lo = tmp;
     }
-  
+
+  if (is_logscale)
+    {
+      // FIXME we should check for negtives here
+      hi = std::log10 (hi);
+      lo = std::log10 (lo);
+    }
+
   double tick_sep = calc_tick_sep (lo , hi);
 
   int i1 = static_cast<int> (std::floor (lo / tick_sep));
@@ -2700,6 +2707,11 @@
       tmp_lims(0) = tick_sep * i1;
       tmp_lims(1) = tick_sep * i2;
 
+      if (is_logscale) 
+	{
+	  tmp_lims(0) = std::pow (10.,tmp_lims(0));
+	  tmp_lims(1) = std::pow (10.,tmp_lims(1));
+	}
       lims = tmp_lims;
     }
   else
@@ -2710,8 +2722,14 @@
     }
       
   Matrix tmp_ticks (1, i2-i1+1);
-  for (int i = 0; i <= i2-i1; i++)
-    tmp_ticks (i) = tick_sep * (i+i1);
+  for (int i = 0; i <= i2-i1; i++) 
+    {
+      tmp_ticks (i) = tick_sep * (i+i1);
+      if (is_logscale)
+	tmp_ticks (i) = std::pow (10., tmp_ticks (i));
+    }
+	
+  
 
   ticks = tmp_ticks;
 }