]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
IPAL20900 TC5.1.1 Impossible "fit all" in logarithmic Plot2D
authordmv <dmv@opencascade.com>
Fri, 27 Feb 2009 08:18:55 +0000 (08:18 +0000)
committerdmv <dmv@opencascade.com>
Fri, 27 Feb 2009 08:18:55 +0000 (08:18 +0000)
src/Plot2d/Plot2d_Curve.cxx
src/Plot2d/Plot2d_Curve.h
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h

index 4232eff2b5a3fb67ae967ffaa50e9ea1da3bb3ed..434d62703bdb571238187a80b59269069e32e868 100755 (executable)
@@ -379,6 +379,20 @@ double Plot2d_Curve::getMinX() const
   return aMinX;
 }
 
+/*!
+  Gets curve's maximal abscissa
+*/
+double Plot2d_Curve::getMaxX() const
+{
+  pointList::const_iterator aIt;
+  double aMaxX = -1e150;
+  for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
+    if ( (*aIt).x > aMaxX )
+      aMaxX = (*aIt).x;
+  }
+  return aMaxX;
+}
+
 /*!
   Gets curve's minimal ordinate
 */
@@ -394,6 +408,20 @@ double Plot2d_Curve::getMinY() const
   return aMinY;
 }
 
+/*!
+  Gets curve's maximal ordinate
+*/
+double Plot2d_Curve::getMaxY() const
+{
+  pointList::const_iterator aIt;
+  double aMaxY = -1e150;
+  for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
+    if ( (*aIt).y > aMaxY )
+      aMaxY = (*aIt).y;
+  }
+  return aMaxY;
+}
+
 /*!
   Changes text assigned to point of curve
   \param ind -- index of point
index 8cf390d8032f20a1119f079d2ba8c640b0c70188..a8e4f98bf0c149f3fe3831e9e089bf1ea2bd7015 100755 (executable)
@@ -99,6 +99,8 @@ public:
   // non-positive X/Y coordinate
   double             getMinX() const;
   double             getMinY() const;
+  double             getMaxX() const;
+  double             getMaxY() const;
 
 protected:
   bool               myAutoAssign;
index d57f3e94deee1ea1c44b95eeb264a43449d96e84..bb629289dbdbfd45eea249bc6fb4619a232fb98f 100755 (executable)
@@ -741,18 +741,17 @@ void Plot2d_ViewFrame::fitAll()
   myPlot->setAxisAutoScale( QwtPlot::xBottom );
   myPlot->replot();
 
-  // for existing grid
-  QwtScaleMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
-  QwtScaleMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
+  double xmin, xmax, y1min, y1max, y2min, y2max;
+  getFitRangeByCurves(xmin, xmax, y1min, y1max, y2min, y2max);
 
-  myPlot->setAxisScale( QwtPlot::xBottom, xMap.s1(), xMap.s2() );
-  myPlot->setAxisScale( QwtPlot::yLeft, yMap.s1(), yMap.s2() );
+  myPlot->setAxisScale( QwtPlot::xBottom, xmin, xmax );
+  myPlot->setAxisScale( QwtPlot::yLeft, y1min, y1max );
 
   if (mySecondY) {
     myPlot->setAxisAutoScale( QwtPlot::yRight );
     myPlot->replot();
     QwtScaleMap yMap2 = myPlot->canvasMap( QwtPlot::yRight );
-    myPlot->setAxisScale( QwtPlot::yRight, yMap2.s1(), yMap2.s2() );
+    myPlot->setAxisScale( QwtPlot::yRight, y2min, y2max );
   }
   myPlot->replot();
 }
@@ -827,6 +826,26 @@ void Plot2d_ViewFrame::getFitRanges(double& xMin,double& xMax,
   }
 }
 
+/*!
+  Gets current fit ranges by Curves
+*/
+void Plot2d_ViewFrame::getFitRangeByCurves(double& xMin,double& xMax,
+                                          double& yMin, double& yMax,
+                                          double& y2Min, double& y2Max)
+{
+  CurveDict::const_iterator it = myPlot->getCurves().begin();
+  xMin = yMin = y2Min = 1e150;
+  xMax = yMax = y2Max = -1e150;
+  for ( ; it != myPlot->getCurves().end(); it++ ) {
+    if ( xMin > it.value()->getMinX() ) xMin = it.value()->getMinX();
+    if ( xMax < it.value()->getMaxX() ) xMax = it.value()->getMaxX();
+    if ( yMin > it.value()->getMinY() ) yMin = it.value()->getMinY();
+    if ( yMax < it.value()->getMaxY() ) yMax = it.value()->getMaxY();
+  }
+  y2Min = yMin;
+  y2Max = yMax;
+}
+
 /*!
   Tests if it is necessary to start operation on mouse action
 */
index e2e99e9e2b6c62b84d7a6470f2a67c57fe3116ce..3308b6682b48bb65d643754af126a5f578cb3dac 100755 (executable)
@@ -90,6 +90,10 @@ public:
                       double& yMin, double& yMax,
                       double& y2Min, double& y2Max);
 
+  void    getFitRangeByCurves(double& xMin, double& xMax,
+                             double& yMin, double& yMax,
+                             double& y2Min, double& y2Max);
+
   /* view parameters */
   void    copyPreferences( Plot2d_ViewFrame* );
   void    setCurveType( int curveType, bool update = true );