[Kst] extragear/graphics/kst/src/libkstapp

Andrew Walker arwalker at sumusltd.com
Wed Jun 14 00:08:41 CEST 2006


SVN commit 551195 by arwalker:

BUG:121534 Go to base 2 when base 10 does not display enough valuse on the axis.

 M  +35 -8     kst2dplot.cpp  


--- trunk/extragear/graphics/kst/src/libkstapp/kst2dplot.cpp #551194:551195
@@ -756,6 +756,15 @@
 
   if (checkLRange(xmin_in, xmax_in, _xLog, _xLogBase)) {
     if (_xLog) {
+      if (_xLogBase == 10.0 && xmax_in - xmin_in < 1.5) {
+        _xLogBase = 2.0;
+        xmin_in *= 1.0/log10(2.0);
+        xmax_in *= 1.0/log10(2.0);
+      } else if (_xLogBase == 2.0 && xmax_in - xmin_in > 4.0) {
+        _xLogBase = 10.0;
+        xmin_in *= log10(2.0);
+        xmax_in *= log10(2.0);
+      }
       XMax = pow(_xLogBase, xmax_in);
       XMin = pow(_xLogBase, xmin_in);
     } else {
@@ -774,6 +783,11 @@
 
   if (checkLRange(ymin_in, ymax_in, _yLog, _yLogBase)) {
     if (_yLog) {
+      if (_yLogBase == 10.0 && ymax_in - ymin_in < 1.1) {
+        _yLogBase = 2.0;
+      } else if (_yLogBase == 2.0 && ymax_in - ymin_in > 3.5) {
+        _yLogBase = 10.0;
+      }
       YMax = pow(_yLogBase, ymax_in);
       YMin = pow(_yLogBase, ymin_in);
     } else {
@@ -1433,7 +1447,7 @@
   int accuracy = 0;
 
   // check how many decimal places we need based on the scale
-  getLScale(xmin,ymin,xmax,ymax);
+  getLScale(xmin, ymin, xmax, ymax);
   if (isXLog()) {
     xdelta = (pow(_xLogBase, xmax) - pow(_xLogBase, xmin))/double(pr.width());
   } else {
@@ -3024,17 +3038,30 @@
     tick = _tickYLast;
     auto_tick = _autoTickYLast;
   } else if (is_log) {
-    if (max - min <= (double)majorDensity && max - min > 1.5) {
-      // show in logarithmic mode with major ticks nicely labelled and 9 minor ticks 
-      //  between each major label...
-      auto_tick = 9;
+    if (max - min <= (double)majorDensity && ((_xLogBase == 10.0 && max - min > 1.5) ||
+                                              (_xLogBase ==  2.0 && max - min > 1.0))) {
+      // show in logarithmic mode with major ticks nicely labelled and the specified
+      //  number of minor ticks between each major label...
+      if (logBase == 2.0) {
+        auto_tick = 10;
+      } else if (logBase == 10.0) {
+        auto_tick = 9;
+      } else {
+        auto_tick = 5;
+      }
       tick = 1.0;
     } else if (max - min >= (double)majorDensity) {
       // show in logarithmic mode with major ticks nicely labelled and no minor ticks...  
       auto_tick = 0;
       tick = floor((max - min) / (double)majorDensity);
       if (tick == 1.0) {
-        auto_tick = 9;
+        if (logBase == 2.0) {
+          auto_tick = 10;
+        } else if (logBase == 10.0) {
+          auto_tick = 9;
+        } else {
+          auto_tick = 5;
+        }
       }
     } else {
       // show in "linear" mode with major ticks linearly spaced and no minor ticks...
@@ -3047,10 +3074,10 @@
           tick = ticks[i] * Exp;
         }
       }
-    }
+    } 
   } else {
     // determine tick interval...
-    Exp = 0;
+    Exp = 0.0;
     if (base == 60) {
       if ((b60_ticks[0]*0.7 < St) &&
           (b60_ticks[n_b60_ticks-1] > St*0.7)) {


More information about the Kst mailing list