]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
This is a fix for bug 0030235: Fit area doesn't work for particle number density...
authornds <nds@opencascade.com>
Fri, 18 Sep 2009 08:36:12 +0000 (08:36 +0000)
committernds <nds@opencascade.com>
Fri, 18 Sep 2009 08:36:12 +0000 (08:36 +0000)
src/Plot2d/Plot2d_ViewFrame.cxx
src/Plot2d/Plot2d_ViewFrame.h

index b9ee9a259b35cc022eee4b9a6dbdbc64c5fd36de..a0fe2ff9e9fcfb9ced5992bc5c15363a2260792a 100755 (executable)
@@ -334,6 +334,26 @@ bool Plot2d_ViewFrame::eventFilter( QObject* watched, QEvent* e )
       }
     }
   }
+  if ( myOperation != FitAreaId ) {
+    // this is a fix for zoomer's work. It has the base value, which by default
+    // is equal to original range of viewer: QRectF(0, 0, 1000, 100). When user
+    // wish to make fitRange for any region which lays outside this rect,
+    // the result is empty area, because zoomer make operation '&' between
+    // base and current rect. So we need to update base of zommer rect by content
+    // of QwtPlot in order to have valid intersection. It's right to change it by
+    // listening signal of changing scale of QwtPlot. But unfortunately it has no
+    // such a signal and we have to perform such a correction in this place.
+    QwtPlotZoomer* aZoomer = myPlot->getZoomer();
+    if ( aZoomer ) {
+      QwtDoubleRect aBase = aZoomer->zoomBase();
+      double xMin,xMax,yMin,yMax,y2Min,y2Max;
+      getFitRanges( xMin,xMax,yMin,yMax,y2Min,y2Max );
+      QwtDoubleRect aFitRect = QwtDoubleRect( xMin, yMin,
+                                 fabs( xMax-xMin ), fabs( yMax-yMin ) );
+      if ( aBase != aFitRect )
+        aZoomer->setZoomBase( aFitRect );
+    }
+  }
   return QWidget::eventFilter( watched, e );
 }
 
index ced090ea868eec15e1699a767c0cedf4663588ab..c76e7a570babb305e2364902136349d500ade00d 100755 (executable)
@@ -246,6 +246,8 @@ public:
   bool                polished() const { return myIsPolished; }
   QwtPlotGrid*        grid() { return myGrid; };
 
+  QwtPlotZoomer*      getZoomer() { return myPlotZoomer; }
+
 public slots:
   virtual void polish();