[Kst] extragear/graphics/kst/kst

Andrew Walker arwalker at sumusltd.com
Wed May 25 20:09:45 CEST 2005


SVN commit 418134 by arwalker:

Check for valid min/max values and adjust if necessary

 M  +72 -19    kst2dplot.cpp  


--- trunk/extragear/graphics/kst/kst/kst2dplot.cpp #418133:418134
@@ -1076,28 +1076,38 @@
       
     case EXPRESSION:
       // reparse if necessary
-      if (!xMinParsedValid)
-      {
+      if (!xMinParsedValid) {
         reparse(xMinExp, &xMinParsed, xMinParsedValid);
       }
-      if (!xMaxParsedValid)
-      {
+      if (!xMaxParsedValid) {
         reparse(xMaxExp, &xMaxParsed, xMaxParsedValid);
       }
       // get values from expressions
       {
         Equation::Context ctx;
-        if (xMinParsedValid)
-        {
+        
+        if (xMinParsedValid) {
           xMinParsed->update(-1, &ctx);
           XMin = xMinParsed->value(&ctx);
         }
-        if (xMaxParsedValid)
-        {
+        if (xMaxParsedValid) {
           xMaxParsed->update(-1, &ctx);
           XMax = xMaxParsed->value(&ctx);
         }
       }
+      if (XMin > XMax) {
+        double tmp = XMax;
+        XMax = XMin;
+        XMin = tmp;
+      } else if (XMin == XMax) {
+        if (XMin == 0.0) {
+          XMin = -0.5;
+          XMax =  0.5;
+        } else {
+          XMax += fabs(XMax) * 0.01;
+          XMin -= fabs(XMin) * 0.01;
+        }
+      }
       break;
 
     default:
@@ -1105,7 +1115,6 @@
       break;
   }
 
-
   switch (_yScaleMode) {
     case AUTOBORDER:  // set scale so all of all curves fits
     case AUTO:  // set scale so all of all curves fits
@@ -1312,28 +1321,38 @@
       
     case EXPRESSION:
       // reparse if necessary
-      if (!yMinParsedValid)
-      {
+      if (!yMinParsedValid) {
         reparse(yMinExp, &yMinParsed, yMinParsedValid);
       }
-      if (!yMaxParsedValid)
-      {
+      if (!yMaxParsedValid) {
         reparse(yMaxExp, &yMaxParsed, yMaxParsedValid);
       }
       // get values from expressions
       {
         Equation::Context ctx;
-        if (yMinParsedValid)
-        {
+        
+        if (yMinParsedValid) {
           yMinParsed->update(-1, &ctx);
           YMin = yMinParsed->value(&ctx);
         }
-        if (yMaxParsedValid)
-        {
+        if (yMaxParsedValid) {
           yMaxParsed->update(-1, &ctx);
           YMax = yMaxParsed->value(&ctx);
         }
       }
+      if (YMin > YMax) {
+        double tmp = YMax;
+        YMax = YMin;
+        YMin = tmp;
+      } else if (YMin == YMax) {
+        if (YMin == 0.0) {
+          YMin = -0.5;
+          YMax =  0.5;
+        } else {
+          YMax += fabs(YMax) * 0.01;
+          YMin -= fabs(YMin) * 0.01;
+        }
+      }
       break;
 
     default:
@@ -6937,8 +6956,25 @@
 void Kst2DPlot::optimizeXExps() {
   if (xMinParsedValid && xMaxParsedValid && xMinParsed->isConst() && xMaxParsed->isConst()) {
     Equation::Context ctx;
+    double min, max;
+    
     setXScaleMode(FIXED);
-    setXScale(xMinParsed->value(&ctx), xMaxParsed->value(&ctx));
+    min = xMinParsed->value(&ctx);
+    max = xMaxParsed->value(&ctx);
+    if (min > max) {
+      double tmp = max;
+      max = min;
+      min = tmp;
+    } else if (XMin == XMax) {
+      if (min == 0.0) {
+        min = -0.5;
+        max =  0.5;
+      } else {
+        max += fabs(max) * 0.01;
+        min -= fabs(min) * 0.01;
+      }
+    }
+    setXScale(min, max);
   }
 }
 
@@ -6946,8 +6982,25 @@
 void Kst2DPlot::optimizeYExps() {
   if (yMinParsedValid && yMaxParsedValid && yMinParsed->isConst() && yMaxParsed->isConst()) {
     Equation::Context ctx;
+    double min, max;
+    
     setYScaleMode(FIXED);
-    setYScale(yMinParsed->value(&ctx), yMaxParsed->value(&ctx));
+    min = yMinParsed->value(&ctx);
+    max = yMaxParsed->value(&ctx);
+    if (min > max) {
+      double tmp = max;
+      max = min;
+      min = tmp;
+    } else if (XMin == XMax) {
+      if (min == 0.0) {
+        min = -0.5;
+        max =  0.5;
+      } else {
+        max += fabs(max) * 0.01;
+        min -= fabs(min) * 0.01;
+      }
+    }
+    setYScale(min, max);
   }
 }
 


More information about the Kst mailing list