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

index 3f06bf423e34872531bf887c31771521a80ae576..2e4148ba362b51a9805b4a98a001babecdf7b43f 100755 (executable)
@@ -371,7 +371,6 @@ double Plot2d_Curve::getMinX() const
 {
   QValueList<Plot2d_Point>::const_iterator aIt;
   double aMinX = 1e150;
-  //int aCurrent = 0;
   for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
     if ( (*aIt).x < aMinX )
       aMinX = (*aIt).x;
@@ -379,6 +378,20 @@ double Plot2d_Curve::getMinX() const
   return aMinX;
 }
 
+/*!
+  Gets curve's maximal abscissa
+*/
+double Plot2d_Curve::getMaxX() const
+{
+  QValueList<Plot2d_Point>::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
 */
@@ -386,7 +399,6 @@ double Plot2d_Curve::getMinY() const
 {
   QValueList<Plot2d_Point>::const_iterator aIt;
   double aMinY = 1e150;
-  //int aCurrent = 0;
   for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
     if ( (*aIt).y < aMinY )
       aMinY = (*aIt).y;
@@ -394,6 +406,20 @@ double Plot2d_Curve::getMinY() const
   return aMinY;
 }
 
+/*!
+  Gets curve's maximal ordinate
+*/
+double Plot2d_Curve::getMaxY() const
+{
+  QValueList<Plot2d_Point>::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 ec140dce3779b5e130ae1ded727d7a8475dc3560..08058dd2cea647cd8114daacbaf93238c3e3a30d 100755 (executable)
@@ -94,6 +94,8 @@ public:
   // non-positive X/Y coordinate
   double      getMinX() const;
   double      getMinY() const;
+  double      getMaxX() const;
+  double      getMaxY() const;
 
 protected:
   bool        myAutoAssign;
index 1f3c9f0ff63d6fd20ca17921b6cbcb274923ac7d..93e541c7a509ce66f98382ef316534cb4dc38f56 100755 (executable)
@@ -800,7 +800,6 @@ void Plot2d_ViewFrame::fitAll()
     return;
   }
 
-
   if ( myCurves.isEmpty() ) { // Nothing to fit all
     myPlot->replot();
     return;
@@ -810,24 +809,17 @@ void Plot2d_ViewFrame::fitAll()
   myPlot->setAxisAutoScale( QwtPlot::xBottom );
   myPlot->replot();
 
-  // for existing grid
-  QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
-  QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
+  double xmin, xmax, y1min, y1max, y2min, y2max;
+  getFitRangeByCurves(xmin, xmax, y1min, y1max, y2min, y2max);
 
-  myPlot->setAxisScale( QwtPlot::xBottom, 
-      myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), 
-      myPlot->invTransform( QwtPlot::xBottom, xMap.i2() ) );
-  myPlot->setAxisScale( QwtPlot::yLeft, 
-      myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ), 
-      myPlot->invTransform( QwtPlot::yLeft, yMap.i2() ) );
+  myPlot->setAxisScale( QwtPlot::xBottom, xmin, xmax );
+  myPlot->setAxisScale( QwtPlot::yLeft, y1min, y1max );
 
   if (mySecondY) {
     myPlot->setAxisAutoScale( QwtPlot::yRight );
     myPlot->replot();
     QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight );
-    myPlot->setAxisScale( QwtPlot::yRight, 
-        myPlot->invTransform( QwtPlot::yRight, yMap2.i1() ), 
-        myPlot->invTransform( QwtPlot::yRight, yMap2.i2() ) );
+    myPlot->setAxisScale( QwtPlot::yRight, y2min, y2max);
   }
   myPlot->replot();
 }
@@ -902,6 +894,29 @@ 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)
+{
+  QList<Plot2d_Curve> clist;
+  getCurves( clist );
+  xMin = clist.at(0)->getMinX();
+  xMax = clist.at(0)->getMaxX();
+  yMin = clist.at(0)->getMinY();
+  yMax = clist.at(0)->getMaxY();
+  for ( int i = 1; i < (int)clist.count(); i++ ) {
+    if ( xMin > clist.at(i)->getMinX() ) xMin = clist.at(i)->getMinX();
+    if ( xMax < clist.at(i)->getMaxX() ) xMax = clist.at(i)->getMaxX();
+    if ( yMin > clist.at(i)->getMinY() ) yMin = clist.at(i)->getMinY();
+    if ( yMax < clist.at(i)->getMaxY() ) yMax = clist.at(i)->getMaxY();
+  }
+  y2Min = yMin;
+  y2Max = yMax;
+}
+
 /*!
   Tests if it is necessary to start operation on mouse action
 */
index ea3f7627f90a281fa3a30434007c1f18a4e796dd..ed8e6707a303c9a1e460ab9c671609f29cdb37f0 100755 (executable)
@@ -83,6 +83,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 );